Эта глава учебника будет посвящена использованию PHP вместе с HTML. Мы будем учиться писать код, который будет проверять элементы форм, получать данные от полей формы и т. д.
Список уроков:
Получаем данные от элементов формы с помощью PHP
В этом уроки мы с помощью функций PHP получим данные, которые будет вводить пользователь в форму.
Первое, что нам нужно – это создать форму:
<form action="app/check.php" method="post">
<p>Имя: <input name="name" type="text"></p>
<p>Фамилия: <input name="surname" type="text"></p>
<p>E-mail: <input name="email" type="text"></p>
<p>Сообщение: <br /><textarea name="message" cols="30" rows="5"></textarea></p>
<p><input type='submit' value='Отправить'></p>
</form>

Обратите внимание на строку action=”app/check.php” — это адрес обработчика формы, сюда будут отправляться данные формы, после нажатия кнопки Отправить. Также, на параметр name у полей формы, мы будем использовать эти имена при написании кода. Передавать данные будем методом – POST.
1. Давайте начнем. Создайте и откройте (через редактор) обработчик app/code.php – сначала, это просто пустая страница. Далее откройте тег PHP – <?php.
2. Нам нужно проверить, была ли отправлена форма, для этого мы будем использовать глобальную переменную $_SERVER и проверять REQUEST_METHOD
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
// наш код
}
?>
3. Дальше, если форма отправлена, мы можем получить данные от поля “Имя”, для этого, какой-нибуть переменной присваиваем полученное значение от этого поля, например:
<?php
$name = $_POST['name'];
?>
$_POST – переменная, в которой сохраняются данные, если форма была отправлена методом POST.
$_POST['name'] – получаем данные от поля name.
4. Тоже самое делаем и для остальных наших полей:
<?php
$name = $_POST['name'];
$surname = $_POST['surname'];
$email = $_POST['email'];
$message = $_POST['message'];
?>
5. Данные мы получили, теперь мы можем их вывести, для этого в страницу обработчика дописываем код:
<?php
$name = $_POST['name'];
$surname = $_POST['surname'];
$email = $_POST['email'];
$message = $_POST['message'];
echo $name."<br />".$surname."<br />".$email."<br />".$message."<br />";
?>
Не рекомендуется просто так, без проверки, выводить введенные пользователем данные.
Пропускайте переменные хотя бы через функцию htmlspecialchars.
Проверка данных формы с помощью PHP
В предыдущем уроке, мы получали данные от формы, а теперь мы будем проверять на корректность вводимых данных, так как если создать форму без такой проверки, то “плохие” пользователи могут навредить вашему сайту.
1. Давайте используем ту часть кода, где мы получили данные из формы:
<?php
$name = $_POST['name'];
$surname = $_POST['surname'];
$email = $_POST['email'];
$message = $_POST['message'];
?>
2. Теперь нам нужно проверить переданные нам данные. Чтобы не писать один и тот же код, давайте создадим нескольно функций для проверки.
Сначала создадим функцию для очистки данных от HTML и PHP тегов:
<?php
function clean($value = "") {
$value = trim($value);
$value = stripslashes($value);
$value = strip_tags($value);
$value = htmlspecialchars($value);
return $value;
}
?>
Здесь, мы использовали функцию trim для удаления пробелов из начала и конца строки.
Функция stripslashes нужна для удаления экранированных символов (“Ваc зовут O\’reilly?” => “Вас зовут O’reilly?”).
Функция strip_tags нужна для удаления HTML и PHP тегов. Последня функция – htmlspecialchars преобразует специальные символы в HTML-сущности (‘&’ преобразуется в ‘&’ и т.д.)
Дальше, создадим функцию для проверки длинны строки:
<?php
function check_length($value = "", $min, $max) {
$result = (mb_strlen($value) < $min || mb_strlen($value) > $max);
return !$result;
}
?>
Здесь, мы использовали функцию mb_strlen для проверки длинны строки. Первый параметр, $value это строка, которую нужно проверить, второй параметр $min минимально допустимая длинна строки, третий параметр $max – максимально допустимая длинна. Если длинна строки будет удовлетворительна, то функция вернет TRUE иначе FALSE.
3. Нам нужно “прогнать” переменные через эти функции:
<?php
$name = clean($name);
$surname = clean($surname);
$email = clean($email);
$message = clean($message);
if(!empty($name) && !empty($surname) && !empty($email) && !empty($message)) {
// ...
}
?>
Если значения не пустые (проверили с помощью функции empty), то можно продолжать проверку дальше:
<?php
if(!empty($name) && !empty($surname) && !empty($email) && !empty($message)) {
$email_validate = filter_var($email, FILTER_VALIDATE_EMAIL);
if(check_length($name, 2, 25) && check_length($surname, 2, 50) && check_length($message, 2, 1000) && $email_validate) {
// ...
}
}
?>
Если длинна значений переменных нас устраивает, то можем продолжать. Также, мы использовали функцию filter_var с параметром FILTER_VALIDATE_EMAIL для валидации электронного адреса.
4. Давайте добавим сообщение об успешности операции, если данные прошли все проверки.
<?php
if(!empty($name) && !empty($surname) && !empty($email) && !empty($message)) {
$email_validate = filter_var($email, FILTER_VALIDATE_EMAIL);
if(check_length($name, 2, 25) && check_length($surname, 2, 50) && check_length($message, 2, 1000) && $email_validate) {
echo "Спасибо за сообщение";
}
}
?>
5. В конце, нам нужно добавить сообщения для уведомления о том, что данные не прошли проверку.
<?php
if(!empty($name) && !empty($surname) && !empty($email) && !empty($message)) {
$email_validate = filter_var($email, FILTER_VALIDATE_EMAIL);
if(check_length($name, 2, 25) && check_length($surname, 2, 50) && check_length($message, 2, 1000) && $email_validate) {
echo "Спасибо за сообщение";
} else { // добавили сообщение
echo "Введенные данные некорректны";
}
} else { // добавили сообщение
echo "Заполните пустые поля";
}
?>
Если все произошло успешно, то мы увидим сообщение “Спасибо за сообщение”
Эта проверка не идеальна, так как не указывает на поля, которые заполнены не правильно, также сообщения об ошибках очень общие