базовый курс

ГРУППА КУРСА

Работа с формами в PHP

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

Отправка формы

Поле для ввода. Самыми распространёнными элементами формы являются различные поля для ввода. Они создаются при помощи тэга <input> многих типов и тэга <textarea>. С отправкой данных из этих элементов всё просто. Тэги имеют атрибут name, которые определяют имя параметра. А значение параметра - это текст, который напишет пользователь в поле для ввода. Кроме того, у тэгов может быть атрибут value, который задаёт значение по умолчанию. Это значение будет отправлено на сервер, если пользователь ничего не введёт. Для примера создадим форму и добавим в неё поля для ввода:

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
<head>
<title>Страница</title>
<meta charset="utf-8">
</head>
<body>
<form action="takeform.php" method="post">
<input name="login" value="user">
<textarea name="self"></textarea>
</form>
</body>
</html>

select. Из тэга <select> данные отправляются так: Атрибут name есть у самого этого тэга. А атрибут value есть не у тэга <select>, а у пунктов списка, то есть у тэгов <option>. Обычно у каждого пункта своё значение атрибута value. Какой пункт выберет пользователь, из такого пункта берётся значение параметра. При этом, текст в тэге <option> не имеет значения, используется только атрибут. Добавим в форму тэг <select>:

12
13
14
15
16
17
18
<p>Интересы</p>
<select name="interes">
  <option value="sport">Занятия спортом</option>
  <option value="nature">Природа</option>
  <option value="cinema">Кино</option>
  <option value="literature">Литература</option>
</select>

Радиокнопка. У всех радиокнопок из одной группы атрибут name должен иметь одинаковое значение. Это значение не только устанавливает имя параметра, но и объединяет радиокнопки в группу, из которой можно выбрать только одну радиокнопку. Атрибут value устанавливается разный. Добавим радиокнопки в форму:

19
20
21
<p>Пол</p>
<label><input type="radio" name="pol" value="male">Мужской</label>
<label><input type="radio" name="pol" value="female">Женский</label>

Чекбокс. В отличие от радиокнопок, каждый чекбокс - это отдельный элемент формы. Все чекбоксы независимы друг от друга и каждый отправляет свои данные на сервер. Атрибут name у всех чекбоксов должен быть разный, а атрибут value может быть либо одинаковый, либо разный. Однако у чекбокса нет каких-то конкретных данных. Он может быть либо выбран либо нет. Поэтому устанавливать ему длинное значение нет смысла. Ему можно задать значение в один символ, например, 1. На сервере смысл этого значения будет такой: если значение есть, то чекбокс был выбран, а если никакого значения нет, значит он не выбран. Добавим чекбоксы в форму и создадим кнопку оправки формы:

22
23
24
25
26
27
<p>Использую в интернете</p>
<label><input type="checkbox" name="chat" value="1">Чаты</label>
<label><input type="checkbox" name="forum" value="1">Форумы</label>
<label><input type="checkbox" name="find" value="1">Поиск</label>
<label><input type="checkbox" name="media" value="1">Медиа</label>
<input type="submit" value="Отправить">

Обработка данных из форм

В предложенном примере создана форма отправляющая данные скрипту с названием takeform.php. Поэтому нужно создать этот скрипт. Это будет не просто программа, а страница, которая будет формироваться в зависимости от данных, получаемых из формы. Форму отправляем методом POST. Скрипт берёт эти данные из суперглобального массива $_POST. Элементы массива можно просто использовать в скрипте, но если с ними нужно много работать, то писать каждый раз название элемента неудобно. Проще записать значение в переменную и обращаться к ней. Создадим файл takeform.php и запишем в переменные значения из первых двух элементов формы:

takeform.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php header('Content-type: text/html; charset=utf-8'); ?>
<!DOCTYPE html>
<html>
<head>
<title>Страница</title>
<meta charset="utf-8">
</head>
<body>
<?php
$login = $_POST['login'];
$self = $_POST['self'];
?>
</body>
</html>

Тег <input> с именем login содержит атрибут value со значением user. Если пользователь ничего не введёт в это поле, то на сервер будет отправлено именно это значение. Выведем на страницу логин, полученный из формы:

12
echo "<p>Пользователь: $login</p>";

В тег <textarea> мы не добавили атрибут value. Если ничего не ввести в него то значение будет пустое. Часто бывает нужно проверить, написал ли пользователь что-нибудь в поле для ввода. Для этого есть функция empty(), которая возвращает true, если переменная содержит пустое значение, а иначе возвращает false. На странице, принимающей данные из формы, сделаем проверку, было ли введено что-то в <textarea>. Значение из него мы записали в переменную $self, её и проверим. Если она содержит значение, то добавим на страницу блок и разместим в нём текст из переменной. Если переменная пустая, то блок создаваться не будет.

13
14
15
16
17
if (!empty($self))
  {
  echo "<p>О себе:</p>";
  echo "<div style='width: 400px; font-size: 20px'>".$self."</div>";
  }

select. Текст из полей для ввода обычно используется сам по себе. Он записывается в базу данных или выводится на страницу. Но данные из других элементов формы используются несколько по-другому. Получив данные из формы, скрипт не выводит их, а определяет на их основе, какие действия нужно выполнять. Сформируем часть страницы в зависимости от выбора пользователем пункта списка:

18
19
20
21
22
23
24
25
26
27
28
$interes=$_POST['interes'];
echo "<p>Интересы: ";
if($interes=='sport')
echo "Занятия спортом, поддержание спортивной формы.";
if($interes=='nature')
echo "Походы, пикники, прогулки с друзьями на природе.";
if($interes=='cinema')
echo "Посещение кинотеатров, просмотр фильмов";
if($interes=='literature')
echo "Чтение книг, написание отзывов, рецензий";
echo "</p>";

Обратите внимание, открывающий тэг <p> идёт до обработки данных, в строке 19, а закрывающий - в конце, в строке 28. Таким образом, на части разделён не только HTML код, но и конкретный тэг. Это обычная практика.

Радиокнопка. У всех радиокнопок одной группы одинаковый атрибут value. Соотвотсвоенно, для всей группы создаётся один элемент массива $_POST. В него будет записано значение из той радиокнопки, которую выберет пользователь. Добавим на страницу результат выбора радиокнопки:

29
30
31
32
33
34
35
36
37
$pol=$_POST['pol'];
echo "<p>Пол: ";
if ($pol=='male')
echo "Мужской";
if ($pol=='female')
echo "Женский";
if (empty($pol))
echo "Не указан";
echo "</p>"

Чекбокс. Каждый чекбокс обрабатывается отдельно. Обычно чекбокс не содержит конкретных данных, поэтому просто проверяется содержит он значение или нет. Если значение есть, значит пользователь его выбрал и это учитывается при обработке данных формы. Добавим на страницу информацию о том, что выбрал пользователь:

38
39
40
41
42
43
44
45
46
47
48
49
50
echo "<p>Использую: ";
if (!empty($_POST['chat']))
echo "Чаты";
echo " ";
if (!empty($_POST['forum']))
echo "Форумы";
echo " ";
if (!empty($_POST['find']))
echo "Поиск";
echo " ";
if (!empty($_POST['media']))
echo "Медиа";
echo "</p>";

Так данные из форм отправляются на сервер и обрабатывабтся в PHP скриптах. В зависимости от разных задач, работа с формами осуществляться иначе, но на основе приведённых примеров Вы сможете легко использовать данные из форм так, как Вам нужно.