Из формы-таблицы со строками из б.д. опеделить выбранные поля и опр. обработчик...

Narek

Новичок
Из формы-таблицы со строками из б.д. опеделить выбранные поля и опр. обработчик...

Здравствуйте, спасибо заранее за внимание.
У меня такая проблема:

У меня есть две формы:
одна с двумя полями <select> для выбора двух дат и дополнительного параметра.
После нажатия <submit> генерируется вторая, в которую встроена <table> со строками из Б.Д.(SELECT *...).
Естественно, поля таблицы из Б.Д. содержат индексы, а в строках <table> должны быть птички при выборе которых и нажатии <submit> должен определиться и соответствующий обработчик формы и id той строки из Б.Д., рядом с которой ставится птичка, потому что обработчик может оказаться один и тот же, а его поведение в зависимости от id меняется. $_POST[] и $_SESSION[] уже довели меня до отчаяния, если есть какой-то другой способ или кто-то может помочь, пожалуйста, очень прошу. Дело ещё и в том, что обработчик как вы поняли должен определяться динамически, по ходу, а параметр action нужно задавать в теге <form>.

Если нужно могу привести код, он может быть избыточным, содержать множество лишних переменных, но это из-за постоянных правок и спешки, главное, чтоб кто-то помог продвинуться в логике.
 

Narek

Новичок
и всё? можно как-нибудь, что-нибудь поподробнее?
я знаком с javascript, но углубляться в подробности сейчас некогда, помогите, please!

какое поле, зачем?
 

DiMA

php.spb.ru
Команда форума
> какое поле, зачем?

Для этого нужно быть программистом. Домохозяйка тоже не понимает и не должна понимать, что такое, например, "цикл".

Какая-то твоя бадяга в браузере что-то шлет скрипту. Причем от разных действий юзера. Заводить переменную, идентифицирующую текущее действие, по нему скрипт определит текущее состояние.
 

Narek

Новичок
извините, а можете сказать, что не в порядке с этим куском кода:

<?php
...
?>
<script>
<!--
function check() {
var j;
// document.write( "Hello, I'm executed!" ); //когда эта строка раскоментирована, она выводится, но location.replace() не работает

for( j = 0; j < <?php echo $row; ?>; ++j ) {
// document.write( "../reservation/", db_trip_data[ j ][ 4 ], "_place_bus_reservation.php?trip_id=", db_trip_data[ j ][ 0 ] );
if( document.forms[ "reserve_form" ]. elements[ j ].checked ) {
// document.write( "Нажата кнопка!" );
var location1 = "../reservation/" + db_trip_data[ j ][ 4 ] + "_place_bus_reservation.php?trip_id=" + db_trip_data[ j ][ 0 ] ;
// document.write( location1 );
location.replace( location1 );
}
}
}

//-->
</script>



<?php

echo "<tr>
<td></td><td></td><td></td><td></td><td></td><td align=\"center\"><input type=\"button\" name=\"reserve_button\" value=\"buy_reserve_button\" onClick=\"javascript: check();\"></td>
</tr>
</table>
</form>";
}
...
?>
 

Армян

Новичок
Если с жс плохо, то не заморачивайся и отправляй просто первую форму гетом. В скрипте проверяй, если есть геты то выводи вторую форму.
 

Narek

Новичок
а, если я использую post? есть какая существенная разница, кроме отображения в адрессной строке?

и можно что-нибудь вместо location.replace использовать? (и не window.open ), но мне кажется, что в этом случае он просто не входит в цикл, потому что вот такой код, в принципе, без отличия в логике работает:

for( j = 0; j <= <?php echo $row; ?>; ++j ) {
if( document.forms[ "reserve_form" ]. elements[ j ].checked) ) {
document.write( document.forms[ "reserve_form" ]. elements[ j ].name );

}
}
 

Армян

Новичок
а, если я использую post? есть какая существенная разница, кроме отображения в адрессной строке?
нету.

зачем тебе location.replace() в цикле?

Обязательно ли использовать JS, без него задача на уровне первых задач новичка - как постраничный вывод :)
 

Narek

Новичок
ну, я и использую вместо get этот самый post, но action - ы обеих форм в том же самом php скрипте, ну скажите, please, что вместо этого самого location.replace можно использовать? а javascript я использую, чтобы локально сохранить тот самый нужный параметр, который собственно и нужен и который тормозит всё дело.
А так вначале, я тоже, конечно думал, что задачка расплюнуть, но есть трудности. параметр может принимать 1 или 2 значащих значения. $_SESSION - ы тут подводят сильно,
а в post-ах и условия немудрено запутаться...

спасибо всем вам за внимание...
 

Армян

Новичок
а в post-ах и условия немудрено запутаться...
да ничего подобного :)

PHP:
если отправлена 2 форма: обработать данные, вевести результат
иначе если отправлена 1 форма: вывести 2 форму
иначе если нет пост данных: вывести 1 форму
+ просто при выводе второй формы выводи эти самые "локальные параметры"(поля 1ой формы) в виде хидден полей
 

Narek

Новичок
извините, пожалуйста, уважаемые санитары и помощники санитаров PHPCluba за антисанитарию, но может ли кто мне втолковать что не так с этим кодом, почему if - ы не выполняются или почему неправильно садятся $_SESSION[ '*' ]?

<html>
<head>
<title></title>
<script>
<!--
var db_trip_data = Array();
var str11 = 0;
//-->
</script>
</head>

<body>
<div align="right"><a href="../create_trip/create_trip.php">admin</a>
</div>
<div align="center">
<form action ="" method="post">
<table>
<tr>
<td>Year:</td> <td><select size="1" name="year">
<script>
<!--Begin
var string = '';

for( var y = 0; y <= 7; ++y ) {
c_year = 2009 + y;

string += '<option value="' + c_year + '">' + c_year + '</option>';
}

document.write( string );
//-->
</script>
</select>
</td>
<td>Year:</td><td><select size="1" name="back_year">
<script>
<!--Begin
var string = '';

for( var y = 0; y <= 7; ++y ) {
c_year = 2009 + y;

string += '<option value="' + c_year + '">' + c_year + '</option>';
}

document.write( string );
//-->
</script>
</select></td>
<td>Select trip type:</td><td><select size="1" name="trip_type">
<option value="There">There</option>
<option value="There/Back">There/Back</option>
</select>
</td>
<td><input type="submit" name="find_trip_button" value="Find Trip" /></td>
</tr>
<tr>
<td>Month:</td> <td><select size="1" name="month">
<option value="01">January</option>
<option value="02">February</option>
<option value="03">March</option>
<option value="04">April</option>
<option value="05">May</option>
<option value="06">June</option>
<option value="07">July</option>
<option value="08">August</option>
<option value="09">September</option>
<option value="10">October</option>
<option value="11">November</option>
<option value="12">December</option>
</select>
</td>

<td>Month:</td> <td><select size="1" name="back_month">
<option value="01">January</option>
<option value="02">February</option>
<option value="03">March</option>
<option value="04">April</option>
<option value="05">May</option>
<option value="06">June</option>
<option value="07">July</option>
<option value="08">August</option>
<option value="09">September</option>
<option value="10">October</option>
<option value="11">November</option>
<option value="12">December</option>
</select>
</td>
</tr>
<tr>
<td>Day:</td> <td><select size="1" name="day">
<script>
<!--Begin
var str = '';

for( var i = 1; i <= 31; ++i ) {
str += '<option value="' + i + '">' + i + '</option>';
}

document.write( str );
//-->
</script>
</select>
</td>

<td>Day:</td> <td><select size="1" name="back_day">
<script>
<!--Begin
var str = '';

for( var i = 1; i <= 31; ++i ) {
str += '<option value="' + i + '">' + i + '</option>';
}

document.write( str );
//-->
</script>
</select>
</td>
</tr>
</table>
</form>


<?php
session_start();
var_dump( $_POST );
var_dump( $_GET );
var_dump( $_SESSION );
require_once( "../config.php" );
$results_array = array();
$_SESSION[ 'already_checked' ] = FALSE;

if( isset( $_POST[ 'find_trip_button' ] ) ) {
$there_date = $_POST[ 'year' ]."-".$_POST[ 'month' ]."-".$_POST[ 'day' ];

if( $_POST[ 'trip_type' ] == "There" ) {
$query = "SELECT * FROM trips WHERE trip_date = '".$there_date."' AND trip_type = 'Yerevan-Qobuleti' ORDER BY trip_type ASC;";
}

elseif( $_POST[ 'trip_type' ] == "There/Back" ) {
$back_date = $_POST[ 'back_year' ]."-".$_POST[ 'back_month' ]."-".$_POST[ 'back_day' ];
$query = "SELECT * FROM trips WHERE ( trip_date = '".$there_date."' AND trip_type = 'Yerevan-Qobuleti' ) OR ( trip_date = '".$back_date."' AND trip_type = 'Qobuleti-Yerevan' ) ORDER BY trip_type ASC;";
}

if( ( $result = mysql_query( $query ) ) ) {
while( list( $trip_id, $trip_type, $trip_date, $trip_time, $bus_id ) = mysql_fetch_array( $result ) ) {


$free_places_query = "SELECT * FROM orders WHERE ( ( reserved = 'reserved' AND buyed = 'not_buyed' ) OR buyed = 'buyed' ) AND trip_id = ".$trip_id.";";
$free_places_result = mysql_query( $free_places_query );
$total_places_busy = mysql_num_rows( $free_places_result );

switch( $bus_id ) {
case '1':
$total_bus_places = 53;
$bus_type = "53 place bus";
$href = "../reservation/1_place_bus_reservation.php";
break;

case '2':
$total_bus_places = 51;
$bus_type = "51 place bus";
$href = "../reservation/2_place_bus_reservation.php";
break;

case '3':
$total_bus_places = 47;
$bus_type = "47 place bus";
$href = "../reservation/3_place_bus_reservation.php";
break;

case '4':
$total_bus_places = 33;
$bus_type = "33 place bus";
$href = "../reservation/4_place_bus_reservation.php";
break;

default:
echo "Wrong bus_id";
break;
}

if( $total_places_busy < $total_bus_places ) {
$is_free = 'yes';
$disabled = "";
}


else {
$is_free = 'no';
$disabled = "disabled";
}


$results_array[] = array( $trip_id, $trip_type, $trip_date, $trip_time, $bus_id, $total_bus_places, $bus_type, $href, $is_free, $disabled );
}

echo "<form action=\"\" method=\"post\" name=\"trips_table_form\">
<table width=\"90%\">
<tr>
<th>From:</th><th>Date:</th><th>Time:</th><th>Bus type:</th><th></th><th>Free places:</th>
</tr>";


for( $a = 0; $a < count( $results_array, 0 ); ++$a ) {
echo "<tr>
<td align=\"center\"><a href=\"".$results_array[ $a ][ 7 ]."\">".$results_array[ $a ][ 1 ]."</a></td><td align=\"center\">".$results_array[ $a ][ 2 ]."</td><td align=\"center\">".$results_array[ $a ][ 3 ]."</td><td align=\"center\">".$results_array[ $a ][ 6 ]."</td><td align=\"center\"><input type=\"checkbox\" name=\"checkbox_".$a."\"></td><td align=\"center\">".$results_array[ $a ][ 8 ]."</td>
</tr>";
}

echo "<tr>
<td></td><td></td><td></td><td></td><td></td><td align = \"center\"><input type=\"submit\" name=\"submit\" value=\"Reserve/Buy places\"</td>
</tr>
</table>
</form>";



if( isset( $_POST[ 'submit' ] ) ) {
for( $b = 0; $b < count( $results_array, 0 ); ++$b ) {
if( isset( $_POST[ 'checkbox_'.$b ] ) ) {
if( !$_SESSION[ 'already_checked' ] ) {
$_SESSION[ 'already_checked_1' ] = TRUE;
$location = $results_array[ $b ][ 7 ]."?trip_id=".$results_array[ $b ][ 0 ];
echo $location;
}

if( $_SESSION[ 'already_checked_1' ] ) {
$_SESSION[ 'already_checked' ] = FALSE;
$location .= "&back_id=".$results_array[ $b ][ 0 ]."&back_bus_id=".$results_array[ $b ][ 4 ];
}
}
}

echo "<script>
<!--
// document.write( \"".$location."\" );
location.replace( \"".$location."\" );
//-->
</script>";
}
}

}
?>

</div>
</body>
</html>

-~{}~ 25.07.09 12:29:

$_SESSION[ 'user_id' ] заранее установлен, усли что

-~{}~ 25.07.09 16:51:

is anybody? hello...! help please, sos
 

cDLEON

Онанист РНРСlub
Особое внимание удели разделу с error_reporting

-~{}~ 25.07.09 22:19:

И....Для развеивания иллюзий http://phpclub.ru/faq/WhyForum
 

Narek

Новичок
Спасибо вам всем за внимание, за участие.

Извините, пожалуйста, я забыл выразить вам, свою благодарность,
dimagolov, за совет с ff, хотя напрямую он мне и не указал где проблема, но без него я бы не задумался над тем, почему у меня в массиве индексы начинаются с 33, а не с 0, хотя, первые 2 раза мне это просто показалось каким-то глюком ff, но в 3-ий раз я всё-таки решил обратить на этот факт внимание. Спаибо вам, cDELEON.

И особое спасибо помощнику санитара PHPClub - за понимание, терпение и внимание, а display_errors и error_reporting = E_ALL у меня всегда поставлены и php меня матюкает за всякую мелочь и по любому поводу, даже если я не виноват. например, забыл free_result и. т.п., прямо касперский какой-то. любой кряк у него вирус понимаете ли.
 
Сверху