Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Двумерный $_POST и WHILE
Форумы портала PHP.SU » » HTTP и PHP » Двумерный $_POST и WHILE

Страниц (2): [1] 2 »
 

1. Yamenko - 16 Июля, 2015 - 16:07:43 - перейти к сообщению
Доброго времени суток.

Пишу не большой скриптик для собственных нужд и столкнулся с проблемой.

То что я передаю из формы. (ставлю галочку для дальнейшей работы с данной строкой)
CODE (html):
скопировать код в буфер обмена
  1. <td align="center"><input type="checkbox" name="CHEK[]" value="<?php echo $res[0];?>"></td>




Выбрано 5 строк, и есть номера строк....
Спойлер (Отобразить)




когда пытаюсь обработать данные ничего не выходит, не могу понять где я ошибся...

вот код на котором зависает выполнение скрипта (Зависает только WHILE!!!) IF выполняется как надо!!!
PHP:
скопировать код в буфер обмена
  1. if (isset ($_POST[EDIT])){
  2.         var_dump ($_POST[CHEK]);
  3.         $i = 0;
  4.         while (isset ($_POST[CHEK][$i])){
  5.                         $id_dell = $_POST[CHEK][$i];
  6.                         $sql_2 = "DELETE FROM `PLAN` WHERE `ID` = '$id_dell'";
  7.                         mysql_query($sql_2);
  8.                         $i = $i + 1;
  9.                 }
  10. }
2. Viper - 16 Июля, 2015 - 16:48:53 - перейти к сообщению
$_POST[EDIT] правильно $_POST['EDIT']

Зачем while? for или foreach вполне подойдут.

$i = $i + 1; вообще проще $i++; написать.

Вам нужно строгое соответствие чекбокс -> значение?
3. Строитель - 16 Июля, 2015 - 16:50:11 - перейти к сообщению
Yamenko по-моему ошибка как раз в условии цикла
while (isset ($_POST[CHEK][$i])). Он выполняется потому что $_POST[CHEK][$i] всё время истинна.
4. Yamenko - 17 Июля, 2015 - 08:45:44 - перейти к сообщению
Viper пишет:
$_POST[EDIT] правильно $_POST['EDIT']

Зачем while? for или foreach вполне подойдут.

$i = $i + 1; вообще проще $i++; написать.

Вам нужно строгое соответствие чекбокс -> значение?


По поводу $_POST[EDIT] и $_POST['EDIT'] и так и так работает... (он же в IF сидит...), но исправил!

Использовал while по образу и подобию делал как перебор в запросе mysql....

исправил на foreach все отлично заработало!

PHP:
скопировать код в буфер обмена
  1. if (isset ($_POST['EDIT'])){
  2.         foreach ($_POST['CHEK'] as $id_dell){
  3.                         $sql_2 = "DELETE FROM `PLAN` WHERE `ID` = '$id_dell'";
  4.                         mysql_query($sql_2);
  5.                 }
  6. }


спасибо.

Строитель пишет:
Yamenko по-моему ошибка как раз в условии цикла
while (isset ($_POST[CHEK][$i])). Он выполняется потому что $_POST[CHEK][$i] всё время истинна.


мне всегда казалось, что если в массиве всего 3 значения, а из него попытаться вытащить четвертое то оно как раз будет не определено! Поправьте меня если я не прав...
5. Tyoma5891 - 17 Июля, 2015 - 08:47:14 - перейти к сообщению
Yamenko пишет:
Поправьте меня если я не прав...

Yamenkoне прав!
6. Yamenko - 17 Июля, 2015 - 08:54:16 - перейти к сообщению
Tyoma5891 пишет:
Yamenko пишет:
Поправьте меня если я не прав...

Yamenkoне прав!


Гениальность ответа зашкаливает!!! Хорошо

Тогда следующий вопрос: "В чем?".
7. Tyoma5891 - 17 Июля, 2015 - 09:06:57 - перейти к сообщению
вообще сам вопрос глуповатый, оно просто будет NULL
зы Это примерно из области вопроса ЕСть ли у слона крылья? знаете ответ? Улыбка
8. Sail - 17 Июля, 2015 - 09:09:24 - перейти к сообщению
Yamenko пишет:
когда пытаюсь обработать данные ничего не выходит

Что не выходит-то?
Данные не удаляются, или сообщение об успешном удалении не отображается?
И почему уверены, что скрипт именно зависает и именно в приведённом цикле?
9. Yamenko - 17 Июля, 2015 - 09:45:07 - перейти к сообщению
Tyoma5891 пишет:
вообще сам вопрос глуповатый, оно просто будет NULL
зы Это примерно из области вопроса ЕСть ли у слона крылья? знаете ответ? Улыбка


взято с сайта пхп.нет
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $foo = NULL;
  3. var_dump(isset($foo));   // FALSE
  4. ?>
  5.  


Тогда и While не будет работать если получит FALSE (а false как раз когда мой массив будет, как ты говоришь, NULL)!!!
я так понял просто посты набиваешь.....


Sail пишет:
Что не выходит-то?
Данные не удаляются, или сообщение об успешном удалении не отображается?
И почему уверены, что скрипт именно зависает и именно в приведённом цикле?


да не удалялись сообщения.
уверен что только while так как если его убрать из цикла то все отрабатывало нормально.

Уже разобрался использовал foreach! (несколько постов выше уже описал структуру..)

можно тему закрывать...
10. Tyoma5891 - 17 Июля, 2015 - 10:13:10 - перейти к сообщению
Yamenko пишет:

Тогда и While не будет работать если получит FALSE (а false как раз когда мой массив будет, как ты говоришь, NULL)!!!

http://php.net/manual/ru/control...ctures.while.php
перечитай не сколько раз, while не перебирает элементы массива!!!
11. Yamenko - 17 Июля, 2015 - 10:54:21 - перейти к сообщению
Tyoma5891 пишет:
Yamenko пишет:

Тогда и While не будет работать если получит FALSE (а false как раз когда мой массив будет, как ты говоришь, NULL)!!!

http://php.net/manual/ru/control...ctures.while.php
перечитай несколько раз, while не перебирает элементы массива!!!


Я знаю....

А так??? (читай первый пост) Улыбка
PHP:
скопировать код в буфер обмена
  1. while (isset ($_POST[CHEK][$i])){
  2.                         $id_dell = $_POST[CHEK][$i];
  3.                         $sql_2 = "DELETE FROM `PLAN` WHERE `ID` = '$id_dell'";
  4.                         mysql_query($sql_2);
  5.                         $i++;
  6.                 }


Просто по делу ни сказал ни слова....

а Viper сразу дал направление для решения моей задачи...
12. Tyoma5891 - 17 Июля, 2015 - 11:15:22 - перейти к сообщению
Yamenko пишет:

А так??? (читай первый пост) Улыбка
PHP:
скопировать код в буфер обмена
  1. while (isset ($_POST[CHEK][$i])){
  2.                         $id_dell = $_POST[CHEK][$i];
  3.                         $sql_2 = "DELETE FROM `PLAN` WHERE `ID` = '$id_dell'";
  4.                         mysql_query($sql_2);
  5.                         $i++;
  6.                 }



так должно работать тоже
13. lastdays - 17 Июля, 2015 - 11:59:52 - перейти к сообщению
Хотя бы так напишите.
Только форму тестовую сами удалите, вставив свою. Для теста делал.
PHP:
скопировать код в буфер обмена
  1.  
  2.  $array_delete = array();
  3.  
  4.  if ( isset($_POST["EDIT"],$_POST["CHEK"]) )
  5.  {
  6.  
  7.   foreach ($_POST["CHEK"] as $value)
  8.   {
  9.  
  10.    if ( is_numeric($value) )
  11.    {
  12.  
  13.          $array_delete[] = $value;
  14.  
  15.    }
  16.  
  17.   }
  18.  
  19.   if ( !empty($array_delete))
  20.      mysql_query("DELETE FROM `PLAN` WHERE `ID` IN ( " . implode( ', ', $array_delete ) . " )") or die(mysql_error);
  21.  
  22.  }
  23.  
  24.  
  25. $html = '<form action="" method="post">';
  26.  
  27.  for ($i = 20; $i<=23; $i++)
  28.  {
  29.  
  30.         $html .= '<input type="checkbox" name="CHEK[]" value="'.$i.'">';
  31.  
  32.  }
  33.  
  34.  $html .= '<input type="submit" name="EDIT">
  35. </form>';
  36.  
  37.  print $html;
  38.  unset($html,$array_delete);
  39.  
14. Viper - 17 Июля, 2015 - 13:44:30 - перейти к сообщению
Yamenko пишет:
По поводу $_POST[EDIT] и $_POST['EDIT'] и так и так работает
разница в том, что первое у вас вызывает E_NOTICE ошибку, и трактуется как константа, а второе трактуется как строка.
http://php.net/manual/ru/languag...es.array.foo-bar
15. Yamenko - 17 Июля, 2015 - 22:24:40 - перейти к сообщению
lastdays пишет:
Хотя бы так напишите.
Только форму тестовую сами удалите, вставив свою. Для теста делал.
Спойлер (Отобразить)


Я так понимаю, что это сократит время выполнения запроса (так как будет выполнен 1 раз и все...)

Спойлер (Отобразить)


Тогда вопрос а можно ли использовать такую структуру для обработки запроса по двум параметрам...

PHP:
скопировать код в буфер обмена
  1.         if ($_POST['QT']){
  2.                 $i = 0;
  3.                 while (isset ($_POST['QT'][$i])){
  4.                                 $qt_edit[] = $_POST['QT'][$i];
  5.                                 $id_qt []= $_POST['ID_QT'][$i];
  6.                                 $sql_3 = "UPDATE `PLAN` SET `QUANTITY` = '$qt_edit' WHERE `ID` = '$id_qt' and `QUANTITY` != '$qt_edit'";
  7.                                 mysql_query($sql_3);
  8.                                 $i++;
  9.                 }
  10.         }


надо точное соответствие индексов массивов.

 

Powered by ExBB FM 1.0 RC1