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

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

1. ADIOS - 21 Октября, 2010 - 15:52:23 - перейти к сообщению
Все привет.

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

Т.е. у меня есть форма которую генерируется циклом из базы,
сколько строк в базе, столько и радио кнопок:
<input name='otvet_%s' type='radio' value='%s' />
переменных $otvet_%s может быть 2 а может и 10 или 100,
Как файлу обработчику сказать скока и какие переменные к нему пришли?

Думаю верно разъяснил, очень жду Вашей помощи, застрял на одном месте...
Заранее благодарен...
2. Саныч - 21 Октября, 2010 - 15:58:36 - перейти к сообщению
как пример
CODE (html):
скопировать код в буфер обмена
  1. <input name='otvet[]' type='radio' value='blabla' />

в обработчике применяете foreach для $_POST['otvet'] (или $_GET['otvet'], смотря что у вас)
3. ADIOS - 21 Октября, 2010 - 16:02:33 - перейти к сообщению
Саныч пишет:
в обработчике применяете foreach для $_POST['otvet'] (или $_GET['otvet'], смотря что у вас)


А можно по подробней, ни как не могу въехать... (((
4. Саныч - 21 Октября, 2010 - 16:06:53 - перейти к сообщению
вот у вас стоит name='otvet_%s'. Вместо %s я так понимаю подставляется число... Вы вишите вместо otvet_%s просто otvet[], т.е. все ваши 2 - 10 - 100 переменных складываются в массив $_POST['otvet']. В опработчике будет примерно такой код...
PHP:
скопировать код в буфер обмена
  1. foreach($_POST['otvet'] as $val)
  2. {
  3.    //тут действия с каждой строкой
  4. }

подробнее - http://php.su/learnphp/cs/?cycles#foreach
5. ADIOS - 21 Октября, 2010 - 16:22:06 - перейти к сообщению
Саныч пишет:
Вместо %s я так понимаю подставляется число... Вы вишите вместо otvet_%s просто otvet[],

Дело в том что сюда %s подставляется id вопроса, а сюда value="id_ ответа".
На странице идет спиок с N колличеством вопросов, и если сделать так otvet[] то можно будит выбрать только один ответ со всех вопросов, а так не должно быть...
6. Саныч - 21 Октября, 2010 - 16:51:41 - перейти к сообщению
почему это только один?!

вот подправил для конкретно вашей задачи
CODE (html):
скопировать код в буфер обмена
  1. <input name='otvet[%s]' type='radio' value='%s' />

и обработчик
PHP:
скопировать код в буфер обмена
  1. foreach($_POST['otvet'] as $question => $answer)
  2. {
  3.    $question - id вопроса
  4.    $answer - ответ на него
  5. }
7. ADIOS - 22 Октября, 2010 - 09:28:41 - перейти к сообщению
Саныч пишет:
<input name='otvet[%s]' type='radio' value='%s' />


Спасибо Вам огромное.. Вот с этого и надо было ничинать...

И чтоб добить эту тему, хотелось бы еще узнать как все эти переменные сложит в одну сумму. Например передается 3, 5,10 итого 18, или 5,6,2,2 итого 15...

Заранее спасибо
8. JustUserR - 22 Октября, 2010 - 13:26:08 - перейти к сообщению
ADIOS пишет:
Подскажите как файлу обработчику принять N количество переменных...
Для проведения передачи PHP-скрипту набор перемнных их формы запрос число которых не является фиксированным - можно использовать также специальную схему отличную от применния поля автогенерации массива на серверонй стороне - для этой цели возможно создания клиентского JS-скрипта который производит подсчет элементов в форме и осуществляет передачу их идентификаторов в кодированном сериализованном виде к PHP-скрипту - который в свою очередь производит получения конкретных имен и их выборку их строки запроса
9. OrmaJever - 22 Октября, 2010 - 14:20:14 - перейти к сообщению
ADIOS пишет:
<input name='otvet_%s' type='radio' value='%s' />
переменных $otvet_%s может быть 2 а может и 10 или 100


Можно использовать так как ты написал.

PHP:
скопировать код в буфер обмена
  1.  
  2. $count = count($_POST);   //количество откравленых даных через пост
  3.  
  4. foreach($_POST as $key => $val)
  5. {
  6.       echo $key.' => '.$val;  
  7. }
  8.  


Если есть ненудные кнопки который выводить не надо то

PHP:
скопировать код в буфер обмена
  1.  
  2. foreach($_POST as $key => $val)
  3. {
  4.      if($key != 'submit' && $key != 'button')     // submit и button это не type а name
  5.      echo $key.' => '.$val;  
  6. }
  7.  
10. ADIOS - 23 Октября, 2010 - 10:22:37 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.    foreach($_POST['otvet'] as $question => $answer)
  2.    
  3.       {
  4.    $otvet[] = $answer;
  5.        }
  6.          
  7.         for ($i=0; $i<=$question; $i++) {
  8.     // запускаем цикл для перебора всех элементов массива
  9.  
  10.     $otvet['summa']+=$otvet[$i];
  11.        
  12.  
  13. }
  14. echo $otvet['summa'];
  15.  


Сам ответил напоставленный вопрос..
Всем спасибо за помощь!!!! Улыбка
11. JustUserR - 23 Октября, 2010 - 12:59:15 - перейти к сообщению
ADIOS Использование пользовательской формы элементы которой представлены в виде массива однородных элементов впоследствии обрабатываемом на стороне PHP-скрипта может представлять некоторые проблемы с безопсностью - дело в том что при подаче соответствующего запроса PHP-скрипту потенциаильго возможгно создать собственную форму с чрезмерным количетсвом полей запроса - и в случае если полный массив впоследствии применяется к примеру для генерации SQL-запроса то это может привести к перегрузке сервера

 

Powered by ExBB FM 1.0 RC1