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

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

1. Xenox - 05 Марта, 2015 - 02:11:22 - перейти к сообщению
Здравствуйте!! Такой вопрос возник, можно ли передать массив через форму? Т.е. к примеру
переменную я передаю так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <form action="" method="POST">
  2. <input type="hidden" value"<?php $var ?>">
  3. <input type="sumbit" value="OK">
  4. </form>
  5.  

А как на счет массива?? К примеру из 5ти элементов? Или прийдется создавать 5 инпутов типа hidden?? Заранее спасибо!
2. exlant - 05 Марта, 2015 - 02:24:16 - перейти к сообщению
http://lmgtfy[dot]com/?q=%D0%9A%D0%B[dot][dot][dot]D0%B7+%3Cform%3E

а вообще можно еще склеить массив в строчку и передать!

и к слову, так вы передаете не переменную, а значение которое находится в этой переменной!
3. Xenox - 05 Марта, 2015 - 02:33:43 - перейти к сообщению
В общем понял все такие придется создать несколько инпутов, все равно спасибо! и сорри что засоряю форум тривиальными вопросами( тему можно закрыть или удалить
4. imediasun - 05 Марта, 2015 - 08:47:20 - перейти к сообщению
вообще для того чтобы передать массив необходимо это осуществлять в самом контроллере, а если вам надо через форму то делайте так
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <form>
  3. <?
  4. foreach($data as $key=>$val){
  5. ?>
  6. <input value="<?=$val?>">
  7. и т.д и т.п
  8. <?
  9. }
  10. ?>
  11. </form>
  12.  
5. Sail - 05 Марта, 2015 - 10:37:34 - перейти к сообщению
Xenox пишет:
можно ли передать массив через форму?

Можно воспользоваться функциями serialize() и unserialize()
Для преобразования массива в строку (перед выводом в форму) и обратного преобразования строки, полученной через $_POST в массив.
6. Мелкий - 05 Марта, 2015 - 10:55:54 - перейти к сообщению
Sail пишет:
Можно воспользоваться функциями serialize() и unserialize()

Через клиента передавать - лучше не надо. Очень уж часто в реализации unserialize правят уязвимости. Уже в этом году пара ошибок закрыто, включая уязвимости.
7. exlant - 05 Марта, 2015 - 14:18:35 - перейти к сообщению
А не лучше именно для передачи массива сессии использовать?
Мне даже идеи не приходят, где нужно использовать именно форму для передачи массива!
8. Xenox - 05 Марта, 2015 - 14:56:07 - перейти к сообщению
Всем спасибо за советы!! Воспользуюсь советом imediasun. А по поводу того зачем мне это нужно, цель: есть три страницы html, в 1 вводятся одни данные и передаються во вторую форму, во второй во второй вводятся еще данные, а первые записываются в массив, и передаються в 3 форму и записываются в бд... Я сначала хотел сделать все это на 1 странице, использовав ajax просто подменять дивы, но препод сказал мол "Ты в ajax ладу не дашь, а тебе еще нужно что бы все это работало в IE 8x+ так что делай 3 страницы и не парь мне мозги."
Может не оч понятно обьяснил, но как то так.

P.S. А по поводу сессий я их тоже не использую по совету препода, потому что денвер выдает ошибку что то типа headers alredy sent, ну я там читал что можно что то изменить в php.ini но пока не лез туда, решил сначала с этим разобраться.
9. exlant - 05 Марта, 2015 - 15:03:24 - перейти к сообщению
Ну так, на 1ой странице ввели данные, перешли на вторую, там первые данные записали в сессию, на 2ой ввели еще данные, перешли на следующую страничку, там новые данные добавили в сессию, ввели еще данные, перешли на следующую там опять все в сессию, и т.д.
в конце берем все нужные данные из сессии, и записываем в базу! имхо так логичней!
(Добавление)
а ваш препод не может объяснить что означат ошибка headers alredy sent?
сессию нужно стартовать в самом начале файла, там не должно быть ни единого символа, включая пробелы!
10. Xenox - 05 Марта, 2015 - 15:23:42 - перейти к сообщению
Т.е. я к примеру на второй странице использую такой код:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. session start()
  4.  
  5. $_SESSION['a'] = $_POST['a'];
  6. $_SESSION['b'] = $_POST['b'];
  7. $_SESSION['c'] = $_POST['c'];
  8.  
  9. ?>
  10. <form>
  11. какие то инпуты
  12. </form>
  13.  
  14.  
  15.  


а в третьей странице тогда точно так же вывожу?
к примеру
PHP:
скопировать код в буфер обмена
  1.  
  2. session start()
  3. $query = mysqli_query("INSERT INTO data (a, b, c) VALUES ('{$_SESSION['a'] }',"{$_SESSION['b']}','{$_SESSION['c']')");
  4. session_destroy();
  5.  
11. exlant - 05 Марта, 2015 - 15:33:38 - перейти к сообщению
да, только строчка "<?php" должна начинаться обязательно с первой строчки файла! Без всяких пробелов
PHP:
скопировать код в буфер обмена
  1.  
  2.  <?PHP // то есть вот так уже будет ошибка
  3.  

если хоть один любой символ будет выведет в браузер перед стартом сессии, то будет ошибка headers alredy sent!

Разве что можно еще включить буферизацию.
12. Xenox - 05 Марта, 2015 - 15:48:10 - перейти к сообщению
[quote=exlant]
если хоть один любой символ будет выведет в браузер перед стартом сессии, то будет ошибка headers alredy sent!
/quote]

Т.е. к примеру если бы у меня был какой то html код перед открывающим тегом php сессии бы не работали?
(Хм глупый вопрос)

Нее это не мой код, это я так на работе быстро написал для примера,
вечером попробую убрать все лишнее перед <?php

Спасибо за подсказку!

P.S. препод сказал что на нормальном сервере все будет ок, типа это косяки денвера
13. exlant - 05 Марта, 2015 - 15:55:49 - перейти к сообщению
Xenox пишет:

Т.е. к примеру если бы у меня был какой то html код перед открывающим тегом php сессии бы не работали?

именно

Цитата:
P.S. препод сказал что на нормальном сервере все будет ок, типа это косяки денвера

не повезло вам с преподом... денвер тут не причем

еще может быть эта ошибка из за bom символа в UTF-8
14. Xenox - 05 Марта, 2015 - 16:07:40 - перейти к сообщению
Т.е. как вариант можно попробовать в notepad преобразовать в "UTF8 без bom". Спасибо! Буду пробовать

 

Powered by ExBB FM 1.0 RC1