Четверг, 16.05.2024, 19:13
DigitalBox
Приветствую Вас Гость | RSS
Главная Работа с HTML-формами Регистрация Вход
Меню сайта

Работа с HTML-формами



Для того чтобы Web-страница стала интерактивной, она должна обеспечивать получение информации от пользователей. Это можно осуществить с помощью HTML-форм. Получаемые от пользователей данные могут быть простыми, такими как регистрационное имя и пароль. Однако форма может быть достаточно длинной и сложной и состоять из большого количества полей. Так, например, форма, предназначенная для покупки товаров в электронном магазине, должна предоставлять возможность ввода различной информации о покупателе (например, его адреса и номера кредитной карточки). Одним словом, внешний вид формы и набор ее полей — это серьезные вопросы для настоящего исследования.

При использовании HTML-формы для сбора информации сценарий сначала должен отобразить ее на Web-странице. Затем пользователь может ввести необходимые данные, заполняя поля или выбирая требуемые значения из списка. После этого нужно щелкнуть на соответствующей кнопке, чтобы введенная информация была отправлена другому сценарию, который и будет ее обрабатывать. В этом разделе рассматриваются вопросы использования форм при разработке динамических Web-узлов. Зачастую собранная с их помощью информация сохраняется в базе данных.


Получение информации от посетителей Web-узла

Для получения информации от посетителей Web-узлов используются формы HTML. Для вывода формы средствами РНР можно воспользоваться любым из следующих способов:

  • Используйте для вывода HTML-форм функцию echo, как в следующем примере:
         echo "<form action='processform.php' method='POST'>\n
         <input type = 'text' name='name'>\n
         <input type='submit' value='Отправить данные'>\n
         </form>\n";
  • Используйте обычный код HTML за пределами разделов с кодом РНР. При создании статической формы нет необходимости включать ее в код РНР. Например, в следующем примере выводится форма из предыдущего фрагмента:
         ‹?php
              код РНР
         ?›
         <form action="processform.php" method="POST">
         <input type="text" name="fullname">
         <input type="submit" value="Отправить данные">
         </form>
         ‹?php
              код РНР
         ?›

Каждый из приведенных примеров позволяют вывести форму, представленную на рисунке ниже.

В этой форме содержится одно пустое текстовое поле и кнопка с именем Отправить данные. Пользователь может ввести в это поле свое имя, а затем щелкнуть на кнопке. В результате введенная информация будет передана сценарию, имя которого задано в атрибуте action дескриптора <form>. В приведенном примере этот атрибут имеет вид асtion="processform.php". Следовательно, введенные данные будут обработаны сценарием processform.php. (Естественно, имя processform.php было выбрано исключительно в учебных целях. На самом деле в атрибуте action может быть указано любое имя.) Язык РНР позволяет использовать в формах переменные, что существенно повышает их эффективность. Такой подход позволяет заполнять текстовые поля нужной информацией и динамически создавать раскрывающиеся списки, переключатели и флажки.


Вывод информации в текстовых полях

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

Вывести текстовое поле с данными можно с использованием кода:

<input type="text" name="fieldname" value="значение">

Пусть, например, нужно разработать форму для получения имени покупателя и его адреса. Предположим, известно, что большая часть клиентов проживает в США. Поэтому вполне логично, чтобы в соответствующем поле сразу же выводилось значение США, заданное по умолчанию. При этом если покупатель действительно из Соединенных Штатов, ему ничего не потребуется вводить и, следовательно, делать ошибки. Если же покупатель из другой страны, ему придется ввести корректное название своей страны.

Для отображения такого поля необходимо воспользоваться следующим выражением:

<input type="text" name= "country" value="США">

В некоторых случаях в поле формы может потребоваться вывести значение переменной РНР. Предположим, имеется информация о покупателе (например, его телефонный номер), которая хранится в базе данных. Эти данные нужно вывести в форме, чтобы пользователь смог изменить неверную или устаревшую информацию. Для решения этой задачи необходимо выполнить следующее. Во-первых, нужно извлечь информацию из базы данных (как это сделать, описывается в следующих разделах) и сохранить ее в соответствующих переменных. Затем для вывода формы можно воспользоваться двумя способами. Первый способ заключается в использовании кода РНР, встроенного в дескриптор HTML <input>:

<input type="text" name="phone" value="‹?php echo $phone ?›">

Для вывода дескриптора HTML можно также воспользоваться функцией echo:

echo "<input type='text' name='phone' value='$phone'>";

При создании формы с большим количеством полей и немногими переменными, которые с ними связаны, более эффективным является первый способ. Второй подход оказывается гораздо более эффективным при использовании большого количества переменных.

Ниже приведён пример сценария, выводящего форму с информацией о покупателе:

‹?php
/* Имя файла:
 displayForm
  * Описание:
   Сценарий отображает форму и заполняет
  *
                     ее поля значениями из массива.
  */
     echo "<html>
                <head><title>Aдpec пoкyпaтeля</title></head>
                <body>";
     $customer = array("firstName"=>"Джон",
                                     "midName"=>"Джэй",
                                     "lastName"=>"Cмит",
                                     "street"=>"ул. Дубов 1234",
                                     "city"=>"Небольшой город",
                                     "state"=>"ID",
                                     "zip"=>"88888");
$labels = array("firstName"=>"Имя:",
                           "midName"=>"Bтopoe имя:",
                           "lastName"=>"Фамилия:",
                           "street"=>"Улица:",
                           "city"=>"Город:",
                           "state"=>"Штат:",
                           "zip" =>"Почтовый индекс:");
echo "<h2 align='center'>Адрес
                {$customer['firstName']}
                {$customer['midName']}

                {$customer['lastName']}</h2>\n";
echo "<p align='center'>
          <b> Пожалуйста, проверьте поля формы и при '
                  необходимости внесите изменения.</b>
          <hr>
          <form action='processform.php' method='POST'>
          <table width='95%' border='0' cellspacing='0'
                                                        cellpadding='2'>\n";
foreach($customer as $field=>$value)
{
     echo "<tr>
               <td align = 'right'><B>{$labels[$field]}</br></td>
               <td><input type = 'text' name='$field' size='65'
                    maxlength='65' value='{$customer[$field]}'></td>
               </tr>";
}
echo "</table>
          <div align='center'><p><input type='submit' value='Отправить
            данные' > </p></div>
          </form>";
?›
</body></html>

Результат работы этого сценария показан на рисунке ниже:

Вот некоторые пояснения к коду приведённого выше сценария:

  • В начале сценария создается массив $customer, содержащий информацию для вывода в полях формы. В реальных приложениях эти данные извлекаются из базы данных, файла или других источников.
  • Затем создается массив $labels с именами полей.
  • Для обработки данных формы используется сценарий с именем processform.php.
  • Форма представляется в виде таблицы HTML. Таблицы являются важным элементом HTML.
  • Проход по массиву $customer осуществляется в сценарии с использованием оператора foreach. На каждой итерации цикла выводится строка таблицы с соответствующим значением из массива $field.

С точки зрения обеспечения безопасности следует всегда использовать атрибут maxlength, который определяет максимальное количество символов, которое можно ввести в поле формы. Это позволит ограничить допустимый объем информации и предотвратить опасность ввода опасного кода. Если полученная от пользователей информация будет храниться в базе данных, то соответствующий столбец таблицы также должен иметь ширину maxlength.


Добавление в форму раскрывающихся списков, переключателей и флажков

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

echo "<select name='dinner' >
               <option>$dinner1</option>
               <option>$dinner2</option>
          </select>";

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

Точно так же можно создавать и переключатели. Например, при использовании приведенного ниже фрагмента пользователь может выбрать значение цыпленок или рыба:

echo "<input type='radio' name='dinner'
                value='$dinnerl'>$dinner1
          <input type='radio' name='dinner'
                value='$dinner2'>$dinner2" ;

Флажки позволяют одновременно выбрать больше одного значения. Следовательно, атрибут name дескриптора <input> должен быть массивом.

echo "<input type='checkbox' name='dinner[]'
              value='$dinner1'>$dinner1
         <input type= ' checkbox' name='dinner[]'
              value='$dinner2'>$dinner2";

В данном примере введенная информация сохраняется в массиве $dinner. Если выбраны оба значения, то этот массив будет иметь следующий вид:

$dinner[0]=цыпленок
$dinner[1]=рыба

В сценарии из листинга, привёдённого ниже, выводится Web-страница, содержащая список для выбора даты. По умолчанию выбирается текущая дата.

‹?php
/* Имя файла:     displayDate
  * Описание:        Сценарий, отображающий три раскрывающихся
  *                             списка для выбора месяца, дня и года.
  *                             По умолчанию выбирается текущая дата.
  */

echo "<html>
            <head><title>Дата</title></head>
            <body>";

/* Создание массива, индексами элементов которого
  * являются номера, а значениями - названия месяцев.
  */

$monthName = array(1=> "Январь", "Февраль", "Март",
                                                    "Апрель", "Май", "Июнь",
                                                    "Июль", "Август", "Сентябрь",
                                                    "Октябрь", "Ноябрь", "Декабрь");

$today = Time(); #текущая дата
echo "<div align='center'><b>Выберите дату:</b>

     <form action='processform.php' method='POST'>\n";

/* Создание раскрывающегося списка для месяца */
$todayMO = date("m", $today); #Получение текущего месяца из $today
echo "<select name='dateMO'>\n";

for ($n=1; $n<=12; $n++)
{
     echo "<option value=$n";
     if($todayMO == $n)
     {
          echo " выбран";
     }
     echo "> $monthName[$n]\n";
}
echo "</select>";

/* Создание раскрывающегося списка для дня */
$todayDay= date("d", $today); #получение текущего дня из $today
echo "<select name='dateDay'>\n";

for ($n=1; $n<=31; $n++)
{
     echo " <option value=$n";
     if ($todayDay == $n )
     {
          echo " выбран";
     }
     echo "> $n\n";
}
echo "</select>\n";

/* Создание раскрывающегося списка для года */
$startYr = date("Y", $today); #получение текущего года из $today
echo "<select name='dateYr'>\n";
for ($n=$startYr; $n<=$startYr+3; $n++)
{
     echo "<option value=$n";
     if($startYr == $n)
     {
          echo "выбран";
     }
     echo "> $n\n";
}
echo "</select>\n";
echo "</form>\n";
?›
</body>
</html>

В приведенном сценарии сначала создается массив $monthName, ключами которого являются номера месяцев, а значениями— их названия. В переменной $today размещаете текущая дата. В остальной части сценария отображаются три раскрывающихся списка формы для ввода трех элементов даты: месяца, дня и года. Названия месяцев в цикле берутся из массива $monthName. При этом номер каждого месяца сравнивается с номером текущего месяца. Если эти номера совпали, то в раскрывающийся список добавляется атрибут с флагом выбран. Именно этот месяц и используется в списке в качестве элемента по умолчанию.Аналогичным образом создаются раскрывающиеся списки для выбора дня и года. При этом в качестве значений по умолчанию также выбираются текущий день и год.

На рисунке ниже представлена форма, созданная с использованием данного сценария:

Форма входа

Мини-чат

Календарь новостей
«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031

Поиск

Друзья сайта
Скажи сайту спасибо
ЯндексЯндекс. ДеньгиХочу такую же кнопку



Получить WMR-бонус на свой кошелек!

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Copyright MyCorp © 2024 Бесплатный конструктор сайтов - uCoz