Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

checkbox и PHP

382
06 апреля 2003 года
dodger
164 / / 07.02.2003
Здравствуйте еще раз.
Я уже тут кричал ранее о помощи с чекбоксами, 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>

По идее он должен проверять тыкнут чекбокс или нет и соответственно обновлять данные в базе данных, но нифига он не обонавляет. Я уже и имена разные дал для каждого чекбокса......и нифига. Может кто найдет тут ошибку. Неужели ниуто не занимался таким делом??? Помогите, пожалуйста...я в полной безнадеге.
250
06 апреля 2003 года
Joker
1.4K / / 20.02.2000
if (mysql_error())
echo "Ошибка базы данных. MySQL пишет: " .mysql_error();

А почему ты не проверяешь на наличие ошибок ? ПОСЛЕ КАЖДОГО ОБРАЩЕНИЕ К БД.
(так хоть понятно будет, почему UPDATE , не срабатывает)
382
06 апреля 2003 года
dodger
164 / / 07.02.2003
Цитата:
Originally posted by Joker
А почему ты не проверяешь на наличие ошибок ? ПОСЛЕ КАЖДОГО ОБРАЩЕНИЕ К БД.
(


Я проверяю, просто не включил в текст здесь (зачем захломлять форум). Там почему-то переменная не ловит то, что должна ловить!!! А UPDATE работает!

250
07 апреля 2003 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by dodger

Я проверяю, просто не включил в текст здесь (зачем захломлять форум). Там почему-то переменная не ловит то, что должна ловить!!! А 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[]

382
07 апреля 2003 года
dodger
164 / / 07.02.2003
Цитата:
Originally posted by Joker

Теперь что касается вопроса:
передаешь:
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[] лучше?

250
07 апреля 2003 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by dodger

Хорошо, я делал и так:
$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[] или опять же в разные переменные..

382
07 апреля 2003 года
dodger
164 / / 07.02.2003
Цитата:
Originally posted by Joker


Теперь опять про сам вопрос:(мне почему то кажется что ты издеваешся)
$c=$HTTP_GET_VARS["chk$i"]; - это надо прогонять в цикле, чтобы выципить все значение чек бокса и следовательно надо загонять не $id[] или опять же в разные переменные..



Я не издеваюсь, я искренне пытаюсь понять, в чем я ошибаюсь....к тому же я ведь прогоняю все это дело в цикле for, в котором также реализуется вывод из таблицы данных. И если туда загонять не я id, то что? Я понимаю, что надо туда загонять варианты On или OFF, но опять же, я абсолютно искренне не могу понять откуда их брать как не из $c??? Очень туго у меня идут циклы, всегда с этим проблема была....потому и прошу помощи у людей, которые понимаю больше, чем я в этом...

250
08 апреля 2003 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by dodger


Я не издеваюсь, я искренне пытаюсь понять, в чем я ошибаюсь....к тому же я ведь прогоняю все это дело в цикле 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]);

382
08 апреля 2003 года
dodger
164 / / 07.02.2003
Цитата:
Originally posted by Joker

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 ничего не передается. Никак не могу это дело отловить.
:-(

250
08 апреля 2003 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by dodger


ОК, понятно, мы вгоняем значения в массив, а потом оттуда загоняем в базу таким вот образом:
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[$i]= intval($_GET['chk'.$i]);
echo "".$id[$i]; // что вообще происходит ?
$result1=mysql_query("UPDATE orders SET cust_id='$id[$i]'");}
537
08 апреля 2003 года
Cover
87 / / 14.11.2002
Цитата:
Originally posted by Joker


 
Код:
for($i=0;$i<$y;$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>

- написал без проверки, поэтому работоспособность не гарантирую, но идею вы надеюсь поняли...
382
08 апреля 2003 года
dodger
164 / / 07.02.2003
Цитата:
Originally posted by Cover
Я посмотрел тут все...



Большое спасибо, Cover, действительно из бошки совсем вылетело, что нужно идентифицировать по какому-нибудь id из базы...а я совсем про это забыл, поэтому они у меня все и менялись!!!
Только вот теперь следующая тема происходит, значения меняются только после повторного сабмита. Я прогнал через отладчик и в нем следующее: Undefined index chk0 и.т.к для chk1, cgh2 и т.п. Наверное это из-зи этого. Я пытался его определить заранее через !defined...define, но че-то никакой реакции!!! Думал может это специфика функции cmpstr, сделал все через if, но это не помогло. Значит дело в неопределении индекса!!! Как бы его определить?

537
09 апреля 2003 года
Cover
87 / / 14.11.2002
Цитата:
Originally posted by dodger


Большое спасибо, 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;..наверное :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог