checkbox и PHP
Я уже тут кричал ранее о помощи с чекбоксами, PHP и MySQL, но что-то эта тема заглохла. Но все-таки хочу понять, может кто поможет. Вот код:
<?
@mysql_connect($HOST, $LOGIN, $PASS) or die ("Couldn't connect to server ".mysql_error());
@mysql_select_db($DB) or die("Couldn't connect to database ".mysql_error());
?>
<?
?>
<?
$result=mysql_query("SELECT * FROM orders");
$y=mysql_num_rows($result);
$row = mysql_fetch_array($result);
?>
<table>
<tr>
<td>order_id</td>
<td>cust_id</td>
<td>cust_id_checked</td>
<td>$i_value</td>
</tr>
<?
for($i=0;$i<$y;$i++)
{
$c = "chk$i";
?>
<tr>
<td><?print ("${row['order_id']}");?></td>
<td>
<form action="check2.php" method="get">
<input type=checkbox <?($c==1)?" checked ":"";if($c==1) echo " checked ";?> name=<?echo "chk$i";?>></td>
<td><?print ("${row['cust_id']}");?></td>
<td><?echo $i;?></td>
</tr>
<?
$c=$HTTP_GET_VARS["c"];
$c=($c=="on")?1:0;
$result1=mysql_query("UPDATE orders SET cust_id='$c'");
}?>
</table>
<input type=submit>
</form>
По идее он должен проверять тыкнут чекбокс или нет и соответственно обновлять данные в базе данных, но нифига он не обонавляет. Я уже и имена разные дал для каждого чекбокса......и нифига. Может кто найдет тут ошибку. Неужели ниуто не занимался таким делом??? Помогите, пожалуйста...я в полной безнадеге.
echo "Ошибка базы данных. MySQL пишет: " .mysql_error();
А почему ты не проверяешь на наличие ошибок ? ПОСЛЕ КАЖДОГО ОБРАЩЕНИЕ К БД.
(так хоть понятно будет, почему UPDATE , не срабатывает)
А почему ты не проверяешь на наличие ошибок ? ПОСЛЕ КАЖДОГО ОБРАЩЕНИЕ К БД.
(
Я проверяю, просто не включил в текст здесь (зачем захломлять форум). Там почему-то переменная не ловит то, что должна ловить!!! А UPDATE работает!
Я проверяю, просто не включил в текст здесь (зачем захломлять форум). Там почему-то переменная не ловит то, что должна ловить!!! А UPDATE работает!
мдя..
@mysql_connect($HOST, $LOGIN, $PASS) or die ("Couldn't connect to server ".mysql_error());
@mysql_select_db($DB) or die("Couldn't connect to database ".mysql_error());
?>
<?
?>
<?
А нафига это ? и т.д..
Теперь что касается вопроса:
передаешь:
name=<?echo "chk$i";?>></td>
а ловишь:
$c=$HTTP_GET_VARS["c"];
> Видишь несоответствие ?
И еще к слову: $HTTP_GET_VARS лучше $_GET[]
Теперь что касается вопроса:
передаешь:
name=<?echo "chk$i";?>></td>
а ловишь:
$c=$HTTP_GET_VARS["c"];
> Видишь несоответствие ?
И еще к слову: $HTTP_GET_VARS лучше $_GET[]
Хорошо, я делал и так:
$c=$HTTP_GET_VARS["chk$i"];
$c=($c=="on")?1:0;
$result1=mysql_query("UPDATE orders SET cust_id='$c'");
Вроде бы все как надо, но получается вот как. Допустим у меня выводится 5 записей, сосотояние чекбоксов меняется только тогда когда затыканы/оттыканы все или 4 сверху. При других раскладах нифига не работает. Получается, что либо этот блок не в том месте стоит, либо я опять не могу врубиться....
PS: И почему $_GET[] лучше?
Хорошо, я делал и так:
$c=$HTTP_GET_VARS["chk$i"];
$c=($c=="on")?1:0;
$result1=mysql_query("UPDATE orders SET cust_id='$c'");
Вроде бы все как надо, но получается вот как. Допустим у меня выводится 5 записей, сосотояние чекбоксов меняется только тогда когда затыканы/оттыканы все или 4 сверху. При других раскладах нифига не работает. Получается, что либо этот блок не в том месте стоит, либо я опять не могу врубиться....
PS: И почему $_GET[] лучше?
Так начну с простого: $_GET[] это более новое и рекомендуется, вместо $HTTP_GET_VARS
Теперь опять про сам вопрос:(мне почему то кажется что ты издеваешся)
$c=$HTTP_GET_VARS["chk$i"]; - это надо прогонять в цикле, чтобы выципить все значение чек бокса и следовательно надо загонять не $id[] или опять же в разные переменные..
Теперь опять про сам вопрос:(мне почему то кажется что ты издеваешся)
$c=$HTTP_GET_VARS["chk$i"]; - это надо прогонять в цикле, чтобы выципить все значение чек бокса и следовательно надо загонять не $id[] или опять же в разные переменные..
Я не издеваюсь, я искренне пытаюсь понять, в чем я ошибаюсь....к тому же я ведь прогоняю все это дело в цикле for, в котором также реализуется вывод из таблицы данных. И если туда загонять не я id, то что? Я понимаю, что надо туда загонять варианты On или OFF, но опять же, я абсолютно искренне не могу понять откуда их брать как не из $c??? Очень туго у меня идут циклы, всегда с этим проблема была....потому и прошу помощи у людей, которые понимаю больше, чем я в этом...
Я не издеваюсь, я искренне пытаюсь понять, в чем я ошибаюсь....к тому же я ведь прогоняю все это дело в цикле for, в котором также реализуется вывод из таблицы данных. И если туда загонять не я id, то что? Я понимаю, что надо туда загонять варианты On или OFF, но опять же, я абсолютно искренне не могу понять откуда их брать как не из $c??? Очень туго у меня идут циклы, всегда с этим проблема была....потому и прошу помощи у людей, которые понимаю больше, чем я в этом...
1)
$c=$HTTP_GET_VARS["c"];
$c=($c=="on")?1:0;
замени на это(total кол-личество чек боксов )
For($i=0; $i<$total; $i++)
$id[] = intval($_GET['chk'.$i]);
For($i=0; $i<$total; $i++)
$id[] = intval($_GET['chk'.$i]);
ОК, понятно, мы вгоняем значения в массив, а потом оттуда загоняем в базу таким вот образом:
for($i=0;$i<$y;$i++)
{
$id[] = intval($_GET['chk'.$i]);
$result1=mysql_query("UPDATE orders SET cust_id='$id[$i]'");}
где $y = mysql_num_rows("SELECT cust_id FROM orders");
Но все-равно не работает. Такое ощущение, что в $id[] ничего не передается или в chk$i ничего не передается. Никак не могу это дело отловить.
:-(
ОК, понятно, мы вгоняем значения в массив, а потом оттуда загоняем в базу таким вот образом:
for($i=0;$i<$y;$i++)
{
$id[] = intval($_GET['chk'.$i]);
$result1=mysql_query("UPDATE orders SET cust_id='$id[$i]'");}
где $y = mysql_num_rows("SELECT cust_id FROM orders");
Но все-равно не работает. Такое ощущение, что в $id[] ничего не передается или в chk$i ничего не передается. Никак не могу это дело отловить.
:-(
{
$id[$i]= intval($_GET['chk'.$i]);
echo "".$id[$i]; // что вообще происходит ?
$result1=mysql_query("UPDATE orders SET cust_id='$id[$i]'");}
{
$id[$i]= intval($_GET['chk'.$i]);
echo "".$id[$i]; // что вообще происходит ?
$result1=mysql_query("UPDATE orders SET cust_id='$id[$i]'");}
Я посмотрел тут все, что написано и не понял практически ничего из кода, например, зачем в цикле открывается форма, а закрывается один раз и после TABLE - интересно как вобще данные отправляются. Сам PHP-код не менее замутный: если сразу в теле цикла написано $c = "chk$i";, то как потом можно делать сравнение ($c==1)?, и зачем это делать два раза :)
Строка mysql_query("UPDATE orders SET cust_id='$c'") делает апдейт всех записей в таблице, так зачем её ставить в цикл??
Вобщем, если я правильно понял, что хочет dodger, то скорее всего это должно быть примерно так:
$result=mysql_query("SELECT * FROM orders");
?>
<table>
<tr>
<td>order_id</td>
<td>cust_id</td>
<td>cust_id_checked</td>
<td>$i_value</td>
</tr>
<form action="check2.php" method="get">
<?
$i=0;
while($row = mysql_fetch_array($result)){
?>
<tr>
<td><?print ("${row['order_id']}");?></td>
<td>
<input type=checkbox <?echo ((strcmp($_GET['chk'.$i],"on")?"":" checked ");?> name=<?echo "chk$i";?>></td>
<td><?print ("${row['cust_id']}");?></td>
<td><?echo $i;?></td>
</tr>
<?
$c=(!strcmp($_GET['c'],"on"))?1:0;
$result1=mysql_query("UPDATE orders SET cust_id='$c' WHERE order_id='${row['order_id']}'");
$i+=1;
}?>
<TR><TD colspan=4><input type=submit></TD></TR>
</form>
</table>
- написал без проверки, поэтому работоспособность не гарантирую, но идею вы надеюсь поняли...
Я посмотрел тут все...
Большое спасибо, Cover, действительно из бошки совсем вылетело, что нужно идентифицировать по какому-нибудь id из базы...а я совсем про это забыл, поэтому они у меня все и менялись!!!
Только вот теперь следующая тема происходит, значения меняются только после повторного сабмита. Я прогнал через отладчик и в нем следующее: Undefined index chk0 и.т.к для chk1, cgh2 и т.п. Наверное это из-зи этого. Я пытался его определить заранее через !defined...define, но че-то никакой реакции!!! Думал может это специфика функции cmpstr, сделал все через if, но это не помогло. Значит дело в неопределении индекса!!! Как бы его определить?
Большое спасибо, Cover, действительно из бошки совсем вылетело, что нужно идентифицировать по какому-нибудь id из базы...а я совсем про это забыл, поэтому они у меня все и менялись!!!
Только вот теперь следующая тема происходит, значения меняются только после повторного сабмита. Я прогнал через отладчик и в нем следующее: Undefined index chk0 и.т.к для chk1, cgh2 и т.п. Наверное это из-зи этого. Я пытался его определить заранее через !defined...define, но че-то никакой реакции!!! Думал может это специфика функции cmpstr, сделал все через if, но это не помогло. Значит дело в неопределении индекса!!! Как бы его определить?
Попробуй так:
$i=0;
while($row = mysql_fetch_array($result)){
?>
<tr>
<td><?print ("${row['order_id']}");?></td>
<td>
<input type=checkbox <?
if(sizeof($_GET)) echo (!strcmp($_GET['chk'.$i],"on")?" checked ":"");
else echo (($row['cost_id'])?" checkd ":"");
?> name=<?echo "chk$i";?>></td>
<td><?print ("${row['cust_id']}");?></td>
<td><?echo $i;?></td>
</tr>
<?
if(sizeof($_GET)){
$c=(!strcmp($_GET['$chk'+$i],"on"))?1:0;
$result1=mysql_query("UPDATE orders SET cust_id='$c' WHERE order_id='${row['order_id']}'");
}
$i+=1;
}?>
Идея в том, что нужно проверить, есть переданные параметры от чекбоксов или нет, если есть, чекбоксы устанавливаем в соответствии с новыми значениями иначе - бирем значения из базы.
У меня под рукой никакой справки нету, такчто проверял я через sizeof($_GET).
И внизу строчка
$c=(!strcmp($_GET['c'],"on"))?1:0;
должна быть заменена на
$c=(!strcmp($_GET['$chk'+$i],"on"))?1:0;..наверное :)