Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Интернет технологии -> PHP -> Введение в PHP


By Adam Trachtenberg and David Sklar (8/3/99)
Перевод на русский язык Н.В.Костроминой (30.11.2000 г.).

Многостраничные формы

Таких конструкций в HTML, вообще говоря, не существует. Но, в конце концов, если мы можем создать форму на одной странице, то почему бы не создать форму размером в несколько страниц?

К сожалению, протокол HTTP не имеет встроенных механизмов переноса данных с одной страницы на другую, поскольку в нем не определено понятие серии страниц. К счастью, с помощью нескольких хитрых трюков и ряда удобных встроенных функций языка PHP мы можем обойти это ограничение без больших затруднений. Основная идея очень проста - мы сохраняем в скрытых переменных все значения, введенные посетителем в поля формы на предыдущей странице(ах) и используем их затем на последующих страницах. Таким образом, нужная информация сохраняется при переходе со страницы на страницу. Реализация этой идеи - самое первое (хотя, возможно, и не самое лучшее) решение поставленной задачи, но это самый простой способ, и он не требует использования баз данных или cookies.

Не стоит удивляться тому, что мы расширяем сферу использования переменной $state, чтобы реализовать новые возможности. По правде говоря, именно ради этого мы и затеяли всю возню с многостраничными формами, хотя гораздо проще обрабатывать формы в пределах одной страницы.

Для удобства вернемся к примеру формы, который мы рассматривали выше. Но на этот раз, нашу страницу с животрепещущими вопросами о любимых сортах сыра разобьем на две страницы.

В результате мы будем иметь три функции вместо двух. В дополнение немного изменим их названия, чтобы они соответствовали изменившемуся содержанию. Функция display_form() теперь будет называться display_name().

<?php
function display_name() {
 global $PHP_SELF;
?>

<FORM TARGET="<?php echo $PHP_SELF; ?>" METHOD=GET>
Name: <INPUT TYPE=TEXT NAME="name"><BR>
<INPUT TYPE=HIDDEN NAME="stage" VALUE="cheese">
<INPUT TYPE=SUBMIT VALUE="Thanks!">
</FORM>
<?php
}
?>

Она идентична ранее введенной функции за тем исключением, что мы удалили все вопросы, кроме первого, и изменили название следующего этапа на "cheese", чтобы дать более точное указание на то, что будет делаться на следующем этапе.

Далее идет функция display_cheese().
<?php
function display_cheese() {
  global $PHP_SELF;
  global $name;

?>
<FORM TARGET="<?php echo $PHP_SELF; ?>" METHOD=GET>
Ваш любимый сорт сыра: 
                 <INPUT TYPE=RADIO NAME="cheese" VALUE="brie">Very soft French Brie 
                 <INPUT TYPE=RADIO NAME="cheese" VALUE="cheddar">Farmhouse English Cheddar
                 <INPUT TYPE=RADIO NAME="cheese" VALUE="mozzarella">Italian Buffalo Mozzarella


Когда Вы предпочитаете есть сыр: 
                 <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="m">на завтрак
                 <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="n">на обед
                 <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="d">на ужин
                 <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="l">поздно ночью


<INPUT TYPE=HIDDEN NAME="name" VALUE="<?php echo htmlspecialchars($name); ?>">
<INPUT TYPE=HIDDEN NAME="stage" VALUE="results">
<INPUT TYPE=SUBMIT VALUE="Thanks!">
</FORM>
<?php
}
?>

Этот код вам тоже уже знаком. Тут не никаких неожиданных изменений по сравнению с предыдущим вариантом. Просто, перед тем как изменить значение скрытой переменной, используемой для определения этапа перемещения по нашим страницам, мы еще запоминаем имя и значение переменной $name, то есть ту часть информации, которая была получена на предыдущем этапе. При этом мы не просто напрямую передаем это значение, а пропускаем его через функцию PHP, которая называется htmlspecialchars(). Стандарт HTML определяет четыре символа, которые не могут использоваться в других целях, кроме как в тегах для разметки документов : <, >, ", и &. По этой причине, для того чтобы убедиться, что мы не поставим браузер пользователя в затруднительное положение, мы пропускаем $name через функцию htmlspecialchars(), чтобы некто, имеющий имя "Bret & Jeff", так и остался "Brett & Jeff."

Теперь, когда передается информация, введенная в эту форму, мы не потеряем ни одной части этой информации.

В результате этого трюка у нас нет необходимости что-либо менять в функции process_form(). Мы даже не меняем название функции. И в операторе, определяющем логику отображения страниц, мы добавляем только одну строку:

<?php
if (empty($stage)) { display_name(); } 
elseif ($stage == 'cheese') { display_cheese(); }
else { process_form(); }
?>

Что мы видим? Все, что мы сделали, - добавили elseif в серединку между двумя предыдущими операторами. В этом прелесть использования переменной $stage. Если мы хотим добавить дополнительные страницы, нам нужно только написать новые функции для отображения того, что мы хотим, и еще по одной строке в оператор управления в соответствии с тем, когда эти страницы должны быть отображены.




[   Содержание   ]    [   Вперёд   ]


 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.