Люди, которые когда-либо писали формы на HTML, задумывались над тем, что делать с этими формами потом. Куда и зачем они отправляют данные? Что потом происходит с этими данными? Как их обработать? Мы расскажем как написать обработчик формы на PHP?

Куда попадают данные и что с ними происходит? То, куда и в каком виде попадут данные определено ещё до того, как форма отправлена. Эта информация прописана в атрибутах «action» и «method» формы. Допустим, существует страница «index.php», на которой находится форма. Допустим, это форма регистрации. Выглядеть она будет вот так:

«<form method='post'> Ваш логин: <input type='text' value='login' name='login'><br> Ваш пароль: <input type='password' value='password' name='password'><br> Ваш адрес электронной почты: <input type='text' value='e-mail' name='email'><br> <input type='submit' value='Зарегистрироваться'> </form>».

Как можно заметить, атрибут «action» не был прописан, это значит, что форма отправит данные на эту же страницу. Если нажать на кнопку «зарегистрироваться» форма отправит все введённые в неё данные. Теперь дело обстоит за обработчиком. Так как данные были отправлены методом «post», то они будут находиться в суперглобальном массиве «$_POST[]». И, чтобы обработать данные, нужно их получить. Для этого нужно проверить, существует ли необходимая ячейка в этом массиве. Для этого используется функция «isset()», которая проверяет, существует ли переменная. Если переменная существует, функция возвращает положительный результат. Например: «if(isset($_POST[‘login’])) {$login = $_POST[‘login’];}». Данные из этого массива переносятся в обычную переменную для удобства.

Получив, таким образом, все переменные, можно приступать к их проверкам. Так как это форма регистрации, нужно чтобы все данные, введённые пользователем, были корректными и никаким образом не могли навредить сайту. Переменные не должны быть пустыми, не должны содержать кавычки или html-теги, адрес электронной почты должен быть адресом электронной почты, а логин и пароль не должны содержать пробелы. Также они должны быть введены латинскими буквами.

Можно добавить до или после формы вот такой код:

«<? if(isset($login)) {echo "Ваш логин: ".$login."<br>";} if(isset($password)) {echo "Ваш пароль: ".$password."<br>";} if(isset($email)) {echo "Ваш адрес электронной почты: ".$email."<br>";}?>».

Это поможет увидеть, что переменные действительно получены, и что они не отличаются от тех, что были отправлены. Можно ещё проверить, пуста ли переменная. Это делается с помощью функции «empty()», которая возвращает результатом «true» или «false», в зависимости от того, пуста ли переменная. Если, допустим, пользователю нельзя загружать статьи с использованием html-тегов, то нужно использовать функцию «htmlspecialchars()», которая заменяет некоторые специальные символы на их коды. Допустим, «>» будет заменено на «>», что будет отображаться в браузере как «>», но не даст работать html-тегам.

Проверив все переменные, следует проверить, с какой страницы и какая форма отправила эти данные. Узнать, с какой страницы были отправлены данные, можно из суперглобального массива «$_SERVER». В ключе «HTTP_REFERER» содержится адрес страницы, с которой перешёл пользователь. Можно написать условие, при котором, если пользователь пришёл с какой-то другой страницы, а не с той, с какой должен прийти, не выполнять никаких действий. Выглядеть это будет так «if($_SERVER[‘HTTP_REFERER’] != “http://site.ru/index.phph”) {exit(“Вы перешли с неправильно страницы!”);}»

Теперь следует проверить, с какой формы были отправлены данные. Допустим, но одной странице есть две формы с одинаковыми полями, и отправляют данные они на одну и ту же страницу. В этом случае нужно добавить в каждую форму по скрытому полу, в котором будет содержаться название формы – «<input type=’hidden’ name=’form_name’ value=’form1’>». Получив эту переменную, можно составить условие, где будут прописаны разные действия для разных форм.

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

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