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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Двумерный $_POST и WHILE

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Проблема с получение данных из двумерного $_POST в цикле WHILE
Yamenko
Отправлено: 16 Июля, 2015 - 16:07:43
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Нояб. 2008  


Помог: 0 раз(а)




Доброго времени суток.

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

То что я передаю из формы. (ставлю галочку для дальнейшей работы с данной строкой)
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. }

(Отредактировано автором: 16 Июля, 2015 - 16:58:32)

 
 Top
Viper
Отправлено: 16 Июля, 2015 - 16:48:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




$_POST[EDIT] правильно $_POST['EDIT']

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

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

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


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Строитель
Отправлено: 16 Июля, 2015 - 16:50:11
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Yamenko по-моему ошибка как раз в условии цикла
while (isset ($_POST[CHEK][$i])). Он выполняется потому что $_POST[CHEK][$i] всё время истинна.
 
 Top
Yamenko
Отправлено: 17 Июля, 2015 - 08:45:44
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Нояб. 2008  


Помог: 0 раз(а)




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 значения, а из него попытаться вытащить четвертое то оно как раз будет не определено! Поправьте меня если я не прав...
 
 Top
Tyoma5891
Отправлено: 17 Июля, 2015 - 08:47:14
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




Yamenko пишет:
Поправьте меня если я не прав...

Yamenkoне прав!
 
 Top
Yamenko
Отправлено: 17 Июля, 2015 - 08:54:16
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Нояб. 2008  


Помог: 0 раз(а)




Tyoma5891 пишет:
Yamenko пишет:
Поправьте меня если я не прав...

Yamenkoне прав!


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

Тогда следующий вопрос: "В чем?".
 
 Top
Tyoma5891
Отправлено: 17 Июля, 2015 - 09:06:57
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




вообще сам вопрос глуповатый, оно просто будет NULL
зы Это примерно из области вопроса ЕСть ли у слона крылья? знаете ответ? Улыбка

(Отредактировано автором: 17 Июля, 2015 - 09:07:49)

 
 Top
Sail
Отправлено: 17 Июля, 2015 - 09:09:24
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Yamenko пишет:
когда пытаюсь обработать данные ничего не выходит

Что не выходит-то?
Данные не удаляются, или сообщение об успешном удалении не отображается?
И почему уверены, что скрипт именно зависает и именно в приведённом цикле?
 
 Top
Yamenko
Отправлено: 17 Июля, 2015 - 09:45:07
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Нояб. 2008  


Помог: 0 раз(а)




Tyoma5891 пишет:
вообще сам вопрос глуповатый, оно просто будет NULL
зы Это примерно из области вопроса ЕСть ли у слона крылья? знаете ответ? Улыбка


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


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


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


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

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

можно тему закрывать...
 
 Top
Tyoma5891
Отправлено: 17 Июля, 2015 - 10:13:10
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




Yamenko пишет:

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

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


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Нояб. 2008  


Помог: 0 раз(а)




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 сразу дал направление для решения моей задачи...
 
 Top
Tyoma5891
Отправлено: 17 Июля, 2015 - 11:15:22
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




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.                 }



так должно работать тоже
 
 Top
lastdays
Отправлено: 17 Июля, 2015 - 11:59:52
Post Id



Частый гость


Покинул форум
Сообщений всего: 220
Дата рег-ции: Март 2013  


Помог: 7 раз(а)




Хотя бы так напишите.
Только форму тестовую сами удалите, вставив свою. Для теста делал.
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.  

(Отредактировано автором: 17 Июля, 2015 - 12:04:01)

 
 Top
Viper
Отправлено: 17 Июля, 2015 - 13:44:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Yamenko пишет:
По поводу $_POST[EDIT] и $_POST['EDIT'] и так и так работает
разница в том, что первое у вас вызывает E_NOTICE ошибку, и трактуется как константа, а второе трактуется как строка.
http://php.net/manual/ru/languag...es.array.foo-bar


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Yamenko
Отправлено: 17 Июля, 2015 - 22:24:40
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Нояб. 2008  


Помог: 0 раз(а)




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.         }


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

(Отредактировано автором: 17 Июля, 2015 - 22:38:28)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTTP и PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB