Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

мусор (berserker)
Author Message
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Wed May 26, 2010 8:04 am ()
   Post subject:
Reply with quote


М

Выделено из темы «Опечатки и неточности в книге PHP5 — пишите сюда.»,
расположенной в форуме Книги «PHP 5» и «Самоучитель PHP4» :: PHP (26 Мая 2010, 11:48).
Back to top
View user's profile Send private message
berserker
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed May 26, 2010 8:04 am (спустя 1 секунду; написано за 6 минут 59 секунд)
   Post subject: Неточность. PHP5 2-e издание. страница 68
Reply with quote

Quote:
..Кстати, совершенно не уникальный случай — то, что с одним именем связано сразу
несколько значений. Действительно, нам никто не мешает создавать и другие теги
с идентичными именами. Это часто делается, например, для флажков:

<input type=checkbox name=имя value="один">Один<br>
<input type=checkbox name=имя value="Два ">Два<br>
<input type=checkbox name=имя value="Три">Три<br>

Если теперь пользователь установит сразу все флажки, то сценарию поступит строка
(конечно, в URL-кодированном виде):
имя=Один&имя=Два&имя=Три
Из всего сказанного следует не очень утешительный вывод: при разборе строки
параметров в сценарии мы не можем полагаться на то, что каждой переменной
соответствует только одно значение. Нам придется учитывать, что их может быть не
"одно", а "много". А это очень неприятно с точки зрения программирования, особенно
на С.
Попутно мы обнаружили, что любой multiple-список может быть представлен
набором флажков (независимых переключателей), а любой не-muitipie — в виде
нескольких радиокнопок. Так что, вообще говоря, тег <seiect> — некоторое
функциональное излишество, и с точки зрения сценария вполне может заменяться флажками
и радиокнопками...
Отмеченное жирным шрифтом невозможно - форма передаст только последний из отмеченных боксов.
Решение проблемы.
Ниже приведен неправильный и правильный способ.
Передача нескольких input`ов под одним атрибутом name
Code (php): скопировать код в буфер обмена
<body>
Способ из учебника Котерова-Костарева "PHP5" второе!!! издание
<br />
(передаст только последний из отмеченных боксов)
<br />

<form>

  <input type=checkbox name="Имя" value="One">один<br />
  <input type=checkbox name="Имя" value="Two"> два<br />
  <input type=checkbox name="Имя" value="Three">три<br />
  <input type=submit name="button" value="GO">

</form>
<br />
<br />
Правильный способ
<br />
(создаст массив имя[])
<br />
<form>

  <input type=checkbox name="имя[]" value="one">один<br />
  <input type=checkbox name="имя[]" value="two"> два<br />
  <input type=checkbox name="имя[]" value="three">три<br />
  <input type=submit name="button" value="go">

</form>
<br />
<pre>
<br />

<?php
if(isset (www.php.net/isset)($_GET['button']))
{
print_r (www.php.net/print_r)($_GET);
}
?>

</body>
</html>
Вопрос решен, тему можно закрыть.
Back to top
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Wed May 26, 2010 10:56 am (спустя 2 часа 51 минуту; написано за 2 минуты 35 секунд)
   Post subject:
Reply with quote

berserker wrote:
Отмеченное жирным шрифтом невозможно - форма передаст только последний из отмеченных боксов.
— вынесите обработчик в отдельный файл и посмотрите, что будет в адресной строке после отметки всех флажков и отправки формы.
Code (html): скопировать код в буфер обмена
<form (december.com/html/4/element/form.html) action="act.php"> (december.com/html/4/element/.html)

  <input (december.com/html/4/element/input.html) type=checkbox name="imya" value="One"> (december.com/html/4/element/.html)<br (december.com/html/4/element/br.html) /> (december.com/html/4/element/.html)
  <input (december.com/html/4/element/input.html) type=checkbox name="imya" value="Two"> (december.com/html/4/element/.html)<br (december.com/html/4/element/br.html) /> (december.com/html/4/element/.html)
  <input (december.com/html/4/element/input.html) type=checkbox name="imya" value="Three"> (december.com/html/4/element/.html)<br (december.com/html/4/element/br.html) /> (december.com/html/4/element/.html)
  <input (december.com/html/4/element/input.html) type=submit name="button" value="GO"> (december.com/html/4/element/.html)

</form>



act.php:
Code (php): скопировать код в буфер обмена
<?php
if(isset (www.php.net/isset)($_GET['button']))
{
print_r (www.php.net/print_r)($_GET);
}

?>



Форма передаёт все варианты. «Фильтрация» происходит уже на уровне языка программирования.
Back to top
View user's profile Send private message
berserker
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed May 26, 2010 12:29 pm (спустя 1 час 33 минуты; написано за 7 минут 10 секунд)
   Post subject:
Reply with quote

Вы верно подметили, я неправильно выразился.
Это не отменяет тот факт, что эта часть абзаца
Quote:
Из всего сказанного следует не очень утешительный вывод: при разборе строки
параметров в сценарии мы не можем полагаться на то, что каждой переменной
соответствует только одно значение. Нам придется учитывать, что их может быть не
"одно", а "много".
не имеет практического применения
А из всех переданных значений в массиве $_GET будет доступно именно одно, последнее.
Back to top
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Wed May 26, 2010 1:03 pm (спустя 34 минуты; написано за 3 минуты 57 секунд)
   Post subject:
Reply with quote

berserker wrote:
не имеет практического применения
А из всех переданных значений в массиве $_GET будет доступно именно одно, последнее.
— дело в том, что книгу я не читал.
Но читал и план предстоящей книги и некоторые выдержки из неё. И практически уверен, что на странице 68 не идёт речь о php.

P.S. Более того, в приведённой Вами цитате явно упоминается язык C.
Back to top
View user's profile Send private message
berserker
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed May 26, 2010 1:31 pm (спустя 28 минут; написано за 6 минут 58 секунд)
   Post subject:
Reply with quote

Т.е. в посткриптуме вы хотите сказать, что доступ к глобальным переменным в C осуществляется с помощью разбора строки запроса?!
Это конечно выполнимо, как впрочем и в PHP, но не представляется разумным.
Именно поэтому я и привел пример решения, для PHP.
Тем не менее пожелаю авторам, в следующей редакции учебника, высказываться более однозначно.
Back to top
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Wed May 26, 2010 7:27 pm (спустя 5 часов 55 минут; написано за 3 минуты 15 секунд)
   Post subject:
Reply with quote

berserker wrote:
в посткриптуме вы хотите сказать, что доступ к глобальным переменным в C осуществляется с помощью разбора строки запроса?!
— нет, конечно.
Не надо мне приписывать свои фантазии.

Напишите программу на C, обрабатывающую http-запрос. А потом покажите мне, где там «доступ к глобальным переменным».
Back to top
View user's profile Send private message
berserker
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed May 26, 2010 9:15 pm (спустя 1 час 48 минут; написано за 4 минуты 21 секунду)
   Post subject:
Reply with quote

Вижу задел вас за живое.
Должен заметить, что своим сообщением я не ставил перед собой такой задачи,
как и критики столь уважаемого, а самое главное подробного учебника.
Если обратите внимание на заголовок темы, то увидете, что речь идет привлечении внимания к
некоторой неточности, читай неоднозначности в нем.
Но, не надо, так не надо.
Back to top
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Wed May 26, 2010 9:28 pm (спустя 13 минут; написано за 4 минуты 40 секунд)
   Post subject:
Reply with quote

berserker wrote:
Вижу задел вас за живое.
bæv wrote:
Не надо мне приписывать свои фантазии.


berserker, то, что Вы процитировали, не является ни «неточностью» ни «опечаткой».
Тот факт, что Вы этого так и не поняли, свидетельствует лишь об ограниченности Ваших знаний.

Жду программы на C.
Back to top
View user's profile Send private message
berserker
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed May 26, 2010 10:48 pm (спустя 1 час 19 минут; написано за 2 минуты 26 секунд)
   Post subject:
Reply with quote

И не говорите, знаний всегда ограниченно дают.
Ладно, я смотрю вы троллингом увлекаетесь.
Весьма странно.
Не ожидал.
За сим откланиваюсь.
Back to top
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML