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 :: select-option-multiple vs $_POST

 PHP.SU

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


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

> Описание: как получиьт доступ к параметрам запорса из одного select'а...
kv4
Отправлено: 12 Октября, 2010 - 12:58:20
Post Id


Новичок


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


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




Есть такая разметка
CODE (html):
скопировать код в буфер обмена
  1. <html>
  2.     <head>
  3.     </head>
  4.     <body>
  5.     <form method='post' action='test.php'>
  6.         <select size='10' multiple='' name='param'>
  7.         <option value='1'>1</option>
  8.         <option value='2'>2</option>
  9.         <option value='3'>3</option>
  10.         </select>
  11.         <input type='submit' value='send post'>
  12.     </form>
  13.     </body>
  14. </html>


Выбираю несколько значенийв селекте
Нажимаю send post - отправляется вот такой post запрос: param=1&param=2&param=3

как получить доступ ко всем элементам запроса?

В $_POST есть только param=last_value, т.е. в данном случае param=3

а где все остальные? как их получить?
 
 Top
garvey
Отправлено: 12 Октября, 2010 - 13:06:42
Post Id



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


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


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




HTML:
CODE (html):
скопировать код в буфер обмена
  1. <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
  2. <select name="test[]" multiple="multiple">
  3.         <option value="one">one</option>
  4.         <option value="two">two</option>
  5.         <option value="three">three</option>
  6.         <option value="four">four</option>
  7.         <option value="five">five</option>
  8. </select>
  9. <input type="submit" value="Send" />
  10. </form>

PHP:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         $test=$_POST['test'];
  3.         if ($test){
  4.          foreach ($test as $t){echo 'You selected ',$t,'<br />';}
  5.         }
  6. ?>
 
 Top
kv4
Отправлено: 12 Октября, 2010 - 13:15:19
Post Id


Новичок


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


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




Но этот код
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $test = $_POST['param'];
  3. foreach ($test as $t){
  4.     echo 'You selected '.$t.'<br />';
  5. }
  6. ?>


даёт вот такоую ошибку
Warning: Invalid argument supplied for foreach() in "foreach ($test as $t){"
(Добавление)
Ответ нашёл - нужно воттак именовать таг select:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <select size='10' multiple='' name='param[]'>
  3.  


[] - квадратные скобки рулят Радость
 
 Top
garvey
Отправлено: 12 Октября, 2010 - 13:25:59
Post Id



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


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


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




Смотри внимательно мой код. Там тоже скобки стоят.
 
 Top
kv4
Отправлено: 12 Октября, 2010 - 13:27:55
Post Id


Новичок


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


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




garvey пишет:
Смотри внимательно мой код. Там тоже скобки стоят.


О действительно! Не внимательно просмотрелУлыбка
Спасибо!
(Добавление)
А можно ли получить доступ к строке запроса, до того как она будет помещена в $_POST ?
 
 Top
garvey
Отправлено: 12 Октября, 2010 - 15:13:42
Post Id



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


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


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




На стороне клиента можно получить выбранные опции select при помощи javascript.
 
 Top
kv4
Отправлено: 12 Октября, 2010 - 18:39:41
Post Id


Новичок


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


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




garvey пишет:
На стороне клиента можно получить выбранные опции select при помощи javascript.


На стороне клиента не интересует (хотя и такой вариант можно рассмотреть, но он крив ИМХО). А вот на стороне сервера было бы замечательно получить что-то вроде param=1&param=2 и т.д.

Где в php можно получить строку запроса в сыром виде, до того как она будет помещена в массив $_POST?
 
 Top
Uchkuma
Отправлено: 12 Октября, 2010 - 18:45:56
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




$_SERVER['QUERY_STRING']
 
 Top
kv4
Отправлено: 12 Октября, 2010 - 19:33:44
Post Id


Новичок


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


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




Uchkuma пишет:
$_SERVER['QUERY_STRING']

Эта строка содержит параметры GET запроса

Меня интересует POST
 
 Top
Инклуд
Отправлено: 12 Октября, 2010 - 19:41:32
Post Id



Новичок


Покинул форум
Сообщений всего: 37
Дата рег-ции: Окт. 2010  
Откуда: Россия


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




Не уверен, что такая возможность существует Радость
 
 Top
kv4
Отправлено: 12 Октября, 2010 - 19:50:48
Post Id


Новичок


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


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




Инклуд пишет:
Не уверен, что такая возможность существует Радость


О нет Не понял Неужели это действительно так, и не существует способа получить доступ к тому, что приходит на сервер...
(Добавление)
Нашёл вот что:
-------------------------------- ----------
Чтобы получить полное содержимое POST-запроса, нужно прочитать содержимое входного потока PHP:

$post_raw_data = @file_get_contents( "php://input" );


Этот способ не подходит для чтения данных, отправленных формой с установленным атрибутом <form enctype="multipart/form-data" ...

Цитата из мануала (http://us.php.net/manual/en/wrappers.php.php):

php://input allows you to read raw POST data. It is a less memory intensive alternative to $HTTP_RAW_POST_DATA and does not need any special php.ini directives. php://input is not available with enctype="multipart/form-data".
-------------------------------- ----------

Всем спасибо за участие Хорошо
 
 Top
Инклуд
Отправлено: 12 Октября, 2010 - 20:03:47
Post Id



Новичок


Покинул форум
Сообщений всего: 37
Дата рег-ции: Окт. 2010  
Откуда: Россия


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




kv4, Вам спасибо за новые знания ;)
 
 Top
movEAX
Отправлено: 12 Октября, 2010 - 20:40:51
Post Id



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


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


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




kv4 пишет:
$post_raw_data = @file_get_contents( "php://input" );

Зачем так извращенствовать?)
PHP:
скопировать код в буфер обмена
  1. <form action="/test.php" method="post">
  2.     <select multiple="multiple" name="multi[]" size="4">
  3.         <option value="1"> 1 </option>
  4.         <option value="2"> 2 </option>
  5.         <option value="3"> 3 </option>
  6.         <option value="4"> 4 </option>
  7.     </select>
  8.     <input type="submit"/>
  9. </form>
  10. <?PHP
  11. print_r($_POST["multi"]);

(Отредактировано автором: 12 Октября, 2010 - 20:41:26)



-----
армия.. самое убогое место
 
 Top
Инклуд
Отправлено: 12 Октября, 2010 - 21:15:33
Post Id



Новичок


Покинул форум
Сообщений всего: 37
Дата рег-ции: Окт. 2010  
Откуда: Россия


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




kv4 пишет:
Где в php можно получить строку запроса в сыром виде, до того как она будет помещена в массив $_POST?

Вот это имелось ввиду.
 
 Top
kv4
Отправлено: 13 Октября, 2010 - 06:11:36
Post Id


Новичок


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


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




movEAX пишет:
Цитата:
Зачем так извращенствовать?)
Затем, что изменение имени в данном случае (с которым я столкнулся), ведёт к большому числу изменений в существующем коде. Тогда, как
Цитата:
$post_raw_data = @file_get_contents( "php://input" );
позволяет сделать всё необходимое исправив всего 4 строки кода.

Я вовсе не призываю использовать такой способ повсеместно, и если бы писал код с чистого листа, или изменения не зарагивали бы большей части существующего кода, видимо предпочёл бы name=param[] - хотя и это мне кажется извращением ИМХО.

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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB