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 :: вывод значений из input type="checkbox"

 PHP.SU

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


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

> Без описания
vmilyoshin
Отправлено: 21 Января, 2011 - 18:34:02
Post Id


Новичок


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


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




Есть файл index.html
CODE (html):
скопировать код в буфер обмена
  1. <body>
  2. <p><strong>Представтесь...</strong></p>
  3. <form action="info.php" method="post">
  4. <p>Ваше имя</p>
  5. <input name="name" type="text" size="15" />
  6. <p>Ваш возраст</p>
  7. <input name="age" type="text" size="15" />
  8. <p>Ваш E-Mail</p>
  9. <input name="mail" type="text" size="15" />
  10. <p>Ваш пол</p>
  11. <input name="pol" type="radio" value="мужской" />М
  12. <input name="pol" type="radio" value="женский" />Ж
  13. <p>Какими языками владеете</p>
  14. <input name="lang[]" type="checkbox" value="Английский" />Английский
  15. <input name="lang[]" type="checkbox" value="Немецкий" />Немецкий
  16. <input name="lang[]" type="checkbox" value="Французский" />Французский
  17. <input type="submit" value="Отправить" />
  18. </form>
  19. </body>
  20. </html>
  21.  

и файл info.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $name='Привет '.trim(strip_tags($_POST['name']));
  3. $age='Вам '.abs((int)$_POST['age']).' лет';
  4. $mail='Ваш E-Mail: '.trim(strip_tags($_POST['mail']));
  5. $pol='Ваш пол: '.$_POST['pol'];
  6. $lang=$_POST['lang'];
  7. echo $name.'<br />'.$age.'<br />'.$mail.'<br />'.$pol.'<br />';
  8. echo'Вы знаете ';
  9. foreach($lang as $v) echo "$v ";
  10. ?>

Когда checkbox отмечен, то всё нормально работает:
Привет Валентин
Вам 37 лет
Ваш E-Mail: xxx@mail.ru
Ваш пол: мужской
Вы знаете Английский Французский
А если не одного не отмечено, то выскакивает ошибка такого плана:
Warning: Invalid argument supplied for foreach() in Z:\home\mysite.ru\www\info.php on line 9
Как можно решить данную проблему?
 
 Top
OrmaJever Модератор
Отправлено: 21 Января, 2011 - 18:38:24
Post Id



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


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


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




перед цыклом foreach поставить проврку


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Invert
Отправлено: 21 Января, 2011 - 18:49:46
Post Id



Частый гость


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


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




OrmaJever, вы бы лучше ткнули ТСа в суть ошибки, а то получается копипаст без понимания сути.

vmilyoshin, проверять нужно данные перед тем, как обрабатывать их.
 
 Top
Мелкий Супермодератор
Отправлено: 21 Января, 2011 - 19:01:11
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




vmilyoshin, ну, в чём ошибка, уже написано. А я хочу обратить внимание на неочевидную дыру безопасности:
Вы фильтруете поля ввода, но и остальные поля представляют не меньшую опасность, ведь данные в ваш скрипт могут придти откуда угодно, а не только с формы. И если данные из формы вашим скриптом будут сохраняться и потом выводиться другим пользователям - то для, как минимум, XSS дорога совершенно открыта.


-----
PostgreSQL DBA
 
 Top
vmilyoshin
Отправлено: 21 Января, 2011 - 22:27:19
Post Id


Новичок


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


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




OrmaJever пишет:
перед цыклом foreach поставить проврку


Я думаю вот так будет лучше:
PHP:
скопировать код в буфер обмена
  1. if (count($lang) < 1){
  2.         echo 'Вы не знаете иностранных языков';}
  3.         else{
  4. echo'Вы знаете ';
  5. foreach($lang as $v)
  6. echo "$v ";
  7. echo ' язык';}
  8.  

Но за подсказку спасибо!!!
 
 Top
OrmaJever Модератор
Отправлено: 21 Января, 2011 - 23:00:11
Post Id



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


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


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




нет count() не пойдёт. Лутше использовать
PHP:
скопировать код в буфер обмена
  1. if(!isset($lang)) /* нету масива */
  2. else /* есть :) */

(Отредактировано автором: 21 Января, 2011 - 23:40:32)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
JustUserR
Отправлено: 23 Января, 2011 - 11:36:17
Post Id



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


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




Invert пишет:
Лучше бы ткнули ТСа в суть ошибки
Оригинальной причиной возникновеня предполагаемой ошибки в PHP-приложении явяется наличие принципиальной разницы в PHP-интерпретаторе между неиницализируемыми и пустыми переменными объектами - в частности использование определения некоторого скалярного информационного поля в строке запроса в виде myvar=myval обеспечивает установку соответствующей прграммной переменной - в то время как использование констуркции инициализации массива не осуществляет его безусловного создания при отсутсвии определенных элементов
Кроме того основной причиной возникновения указанной ошибки являтся специфическое поведение различных элементов HTML-форм - в частности для неотмеченных объектов checkbox-переключателей не осуществялется передача ассоциированного компонента строки запроса


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB