базовый курс

ГРУППА КУРСА

Работа с формами в 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 устанавливается разный. Добавим радиокнопки в форму:

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

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

23
24
25
26
27
28
29
<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>";
  }

Если переменная $self содержит значение, то на странице выводится текст из переменной. Если переменная пустая, то блок создаваться не будет.

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

19
20
21
22
23
24
25
26
27
28
29
30
31
$interes=$_POST['interes'];
echo "<p>Интересы: ";

if($interes == 'sport')
echo "Занятия спортом, поддержание спортивной формы.";
if($interes == 'nature')
echo "Походы, пикники, прогулки с друзьями на природе.";
if($interes == 'cinema')
echo "Посещение кинотеатров, просмотр фильмов";
if($interes == 'literature')
echo "Чтение книг, написание отзывов, рецензий";

echo "</p>";

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

32
33
34
35
36
37
38
39
40
41
42
$pol=$_POST['pol'];
echo "<p>Пол: ";

if ($pol == 'male')
echo "Мужской";
if ($pol == 'female')
echo "Женский";
if (empty($pol))
echo "Не указан";

echo "</p>"

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

44
45
46
47
48
49
50
51
52
53
54
55
echo "<p>Использую: ";

if (!empty($_POST['chat']))
echo "Чаты ";
if (!empty($_POST['forum']))
echo "Форумы ";
if (!empty($_POST['find']))
echo "Поиск ";
if (!empty($_POST['media']))
echo "Медиа";

echo "</p>";

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