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 :: Версия для печати :: Как передать массив через HTML форму в PHP?
Форумы портала PHP.SU » PHP » Программирование на PHP » Как передать массив через HTML форму в PHP?

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

1. anoth3r - 15 Августа, 2009 - 12:20:19 - перейти к сообщению
Есть форма, которая передает количество текстовых полей в функцию.
Функция генерирует форму с этим количеством текстовых полей:
PHP:
скопировать код в буфер обмена
  1.  
  2. function stepTwo($col)
  3. {
  4. echo "Введите имена колонок:<br>";
  5. echo "<form method='post' action=''>";
  6. for($i=1;$i<=$col;$i++)
  7. {
  8. echo $i." <input type='text' name='col_name[".$i."]' value=''>".($i==$col ? '' : ',')."<br>";
  9. }
  10. echo 'Введите данные:<br>';
  11. for($i=1;$i<=$col;$i++)
  12. {
  13. echo $i." <input type='text' name='col_val[".$i."]' value=''>".($i==$col ? '' : ',')."<br>";
  14. }
  15. echo "<input type='submit' value='отправить'>";
  16. echo '</form>';
  17. }//end function stepTwo()
  18.  

форма должна передавать 2 массива методом post. Но скрипт не определяет массивы.
Попытался передать методом GET, адресная строка выдала: "?col_name%5B1%5D=asd&col_name%5B2%5D=zxc&col_name %5C%5B3%5C%5D=qwe&col_val%5B1%5D=rty&col_val%5B2%5 D=fgh&col_val%5B3%5D=cvb".
Что делаю не правильно? Как решить проблему?
Смотря на передачу данных через метод GET, квадратные скобки в которых должен быть индекс массива передаются абройкадаброй. Поэтому скрипт не определяет массив.
2. EuGen - 15 Августа, 2009 - 14:02:40 - перейти к сообщению
3. mrAnderson - 15 Августа, 2009 - 16:43:53 - перейти к сообщению
Как это решил я)

// создание полей, мне нужно было передать кол-во ($quantity) которое введет пользователь определенного товара, который имеет код ($cod), товара могло быть и 10 и 100, и вот что вышло: $cart->num_items($table,$session)) функция подсчета требуемых полей для передачи, и $contents = $cart->display_contents($table,$session); функция которая содержит коды и кол-во начальное.


$contents = $cart->display_contents($table,$session);
$x = 0;
while($x != $cart->num_items($table,$session))
{
$cod = $contents['cod'][$x];
echo "<TD><INPUT TYPE=text size=3 maxlength=30 name=\"".urlencode($cod)."\" ";
echo "value=\"".$contents['quantity'][$x]."\"></TD>";
++$x;
}

///////////////рас-рас, прием, прием.
$contents = $cart->display_contents($table,$session); // количество передаваемых полей.
$x = 0;
while($x != $cart->num_items($table,$session))
{ $cod = $contents['cod'][$x];
$quantity = $_POST[urlencode($cod)];

}
4. anoth3r - 16 Августа, 2009 - 13:19:40 - перейти к сообщению


Эта функция работает с методом GET, мне желательно решить эту задачу методом POST
5. EuGen - 16 Августа, 2009 - 15:20:00 - перейти к сообщению
anoth3r пишет:
Попытался передать методом GET, адресная строка выдала: "?col_name%5B1%5D=asd&col_name%5B2%5D=zxc&col_name %5C%5B3%5C%5D=qwe&col_val%5B1%5D=rty&col_val%5B2%5 D=fgh&col_val%5B3%5D=cvb".

Определяйтесь.
6. anoth3r - 16 Августа, 2009 - 20:06:25 - перейти к сообщению
EuGen пишет:
anoth3r пишет:
Попытался передать методом GET, адресная строка выдала: "?col_name%5B1%5D=asd&col_name%5B2%5D=zxc&col_name %5C%5B3%5C%5D=qwe&col_val%5B1%5D=rty&col_val%5B2%5 D=fgh&col_val%5B3%5D=cvb".

Определяйтесь.


Я проверял методом GET чтобы увидеть, почему не определяет массивы, а саму задачу нужно решить ,очень желательно, методом POST
7. EuGen - 16 Августа, 2009 - 20:20:50 - перейти к сообщению
Пишите как есть
8. anoth3r - 17 Августа, 2009 - 00:36:41 - перейти к сообщению
EuGen пишет:
Пишите как есть


Спасибо за совет! Но я не буду я писать как есть, я хочу понять в чем проблема и как с ней справиться, именно по этому я сюда попал.
9. Nestor - 17 Августа, 2009 - 01:49:27 - перейти к сообщению
CODE (text):
скопировать код в буфер обмена
  1. echo "<form method='post' action=''>";

почему action пустое?
заполнив action я увидел то что надо


полный код, 2.php замени на твой файл

PHP:
скопировать код в буфер обмена
  1. print "<pre>";
  2. print_r($_POST);
  3. print "</pre>";
  4.  
  5.  
  6. function stepTwo($col){
  7.         echo "Введите имена колонок:<br>";
  8.         echo "<form method='post' action='/2.php'>";
  9.         for($i=1;$i<=$col;$i++){
  10.                 echo $i." <input type='text' name='col_name[".$i."]' value=''>".($i==$col ? '' : ',')."<br>";
  11.         }
  12.         echo 'Введите данные:<br>';
  13.         for($i=1;$i<=$col;$i++){
  14.                 echo $i." <input type='text' name='col_val[".$i."]' value=''>".($i==$col ? '' : ',')."<br>";
  15.         }
  16.         echo "<input type='submit' value='отправить'>";
  17.         echo '</form>';
  18. }
  19. stepTwo(2);
10. EuGen - 17 Августа, 2009 - 10:08:43 - перейти к сообщению
Если Вы будете использовать POST, то пишите как есть - никакие квадратные скобки не пропадут.
Если Вы будете использовать GET - используйте декодирование для спец. символов. По-моему, все просто.
11. anoth3r - 17 Августа, 2009 - 10:19:26 - перейти к сообщению
Спасибо! action не обьязательно заполнять если форма обращаеться к тому же файлу.
Всё дело в том, что я как последний "новичок" Радость неправильно обращался к массиву $_POST.
12. Мелкий - 17 Августа, 2009 - 10:50:31 - перейти к сообщению
anoth3r пишет:
Спасибо! action не обьязательно заполнять если форма обращаеться к тому же файлу.

Но чтобы не было неожиданностей - echo $_SERVER['PHP_SELF'] надо ставить.
13. EuGen - 17 Августа, 2009 - 13:17:28 - перейти к сообщению
Посмотрите W3C, станет ясно

 

Powered by ExBB FM 1.0 RC1