Обработка форм на PHP

Одно из предназначений PHP, идущих с его первых версий, представлено обработкой HTML-форм. С этим скрипты, написанные на данном языке программирования, отлично справляются: иначе он не обладал бы популярностью и не использовался на сайтах по типу GitHub, ВКонтакте, Яндекса и прочих.

Описание

Формы используются практически на всех сайтах, предполагающих взаимодействие с пользователями. Примеры – самые разные, но вот знакомые практически каждому применения:

  • обратная связь;
  • комментарии;
  • написание постов;
  • вход в аккаунт;
  • регистрация профиля;
  • восстановление пароля;
  • ввод email для подписки на рассылку.

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

Предостережения

Проверка должна идти на сервере

Всегда дополнительно проверяйте информацию, посылаемую пользователем, на сервере. Конечно, вы можете поставить требование обязательно заполнить форму, написав соответствующий код на JavaScript либо используя атрибут required в HTML, но ничто не помешает злоумышленнику обойти это ограничение через визуальный редактор кода. В таком случае скрипт выполнится и, вероятно, вызовет ошибки при дальнейшем взаимодействии.

Проверить переменную на пустоту можно посредством функции empty(), которая возвращает true или false. Вы также можете использовать isset(), однако она проверяет объявление переменной как таковой. Чтобы проверить, подходит ли переданная информация по своему написанию, используйте регулярные выражения и проверку по preg_match().

Учтите, что regex – медленные, поэтому используйте функции работы со строками, когда это возможно. Вы можете быстро проверить emailна соответствие современным стандартам через filter_var() с флагом FILTER_VALIDATE_EMAIL. Учтите, что он не проверяет существование адреса, а лишь проверяет его правильность.

Используйте капчу, если это нужно

Вы защитите свой сайт от роботов, установив соответствующую проверку – капчу. Советуется выбрать современное и бесплатное решение в виде hCaptcha, подходящей для веб-сайтов на распространённых языках, а также обладающей простой настройкой.

Установите защиту от массовой отправки запросов

Вы можете установить тайм-лимит, чтобы избежать отправки слишком большого количества запросов на сервер и, как следствие, его замедленной работы. В этом плане поможет не только CAPTCHA, упомянутая выше, но и, как вариант, запись информации о времени первого обращения в отдельную папку на сервере, с которой в дальнейшем будет происходить сверка. Это – отличный вариант, если не хочется использовать SQL-запросы.

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

Ajax

Благодаря технологии Ajax отправка форм происходит без перезагрузки страницы. Для её работы требуется добавить код, исполняемый браузером пользователя. Он может быть написан как и на «чистом» (Vanilla) JavaScript, так и на его библиотеках по типу jQuery, облегчающих написание кода.

Ajax – всё то же выполнение GET, POST и других HTTP-запросов, однако оно способно производиться незаметно от пользователя: если в программе чётко не указано действие после отправки запроса или его проверки на успешность, отследить факт выполнения скрипта можно будет только через раздел «Сеть» панели разработчика, открываемой нажатием клавиши F12 в браузере.

Примеры

Форма обратной связи

Советуется создать обработчик и форму для обратной связи: тогда посетители сайта смогут связаться с администраторами без необходимости использования электронной почты. Кроме того, это сохранит адрес в тайне: спамеры и прочие недоброжелатели не увидят настоящего email, если не выносить его за пределы PHP-обработчика.

<!DOCTYPE HTML>
<html>
<head>
<meta charset=»utf-8″ />
<title>Обратная связь</title>
<style>
.field {
width: 100%;
margin-top: 1%;
margin-bottom: 1%;
}
.fieldinput {
width: 100%;
height: 5vh;
}
.fieldtextarea {
width: 100%;
height: 10vh;
}
</style>
</head>
<body>
<div class=»padding: 2%»>
<form method=»POST»>
<div class=»field»>
<input type=»text»name=»name»placeholder=»Ваше имя»required />
</div>
<div class=»field»>
<input type=»email»name=»email»placeholder=»Ваш email»required />
</div>
<div class=»field»>
<textareaname=»content»placeholder=»Ваше обращение»required></textarea>
</div>
<div class=»field»>
<button type=»submit»name=»submit»>Отправить</button>
</div>
</form>
</div>
</body>
</html>
<?php
if(!empty($_POST[‘submit’])) {
if(empty($_POST[‘name’] or empty($_POST[’email’] or empty($_POST[‘content’])) {
$error = true;
} else {
$name = strip_tags($_POST[‘name’])
$email = strip_tags($_POST[’email’])
$content = strip_tags($_POST[‘content’])
if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
if(strlen($content) < 10000) {
goto after;
} else {
$error = true;
}
} else {
$error = true;
}
}
}
after:
$admin = «admin_email@example.net»; # Введите email администратора
$subject = «Новое обращение»;
$body = «Пользователь {$name} с email{$email} оставил следующее сообщение: \r\n {$content}»;
$headers = «From: Feedback <postmaster@example.com>\r\n»; # Замените example.com на свой домен.
$headers .= «Reply-To: support@example.com\r\n»; # Замените example.com на свой домен.
$headers .= «Organization: My Organization\r\n»; # Замените My Organization наназваниесвоейкомпаниииливырежьтеэтустроку.
$headers .= «MIME-Version: 1.0\r\n»;
$headers .= «Content-Type: text/plain; charset=UTF-8\r\n»;
mail($admin, $subject, $body, $headers);
?>

Учтите, что это – лишь пример формы, поэтому советуется подкорректировать дизайн страницы. Также обратите внимание на необходимость заменить некоторые данные (отмечены комментариями в коде). Капча здесь не используется, поскольку порядок действий отличается в зависимости от сервиса.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *