PHP Валидация данных из формы

php валидация формы email

Валидация данных - один из самых важных этапов при разработке любого приложения, от которого зависит безопасность и корректная обработка передаваемых данных. Существует несколько способов фильтрации приходящих данных:

-Проверка на null для избежании записи пустых значений и различных ошибок.
-Экранирование символов для предотвращения SQL Injection.
-Использование PDO расширения для проведения безопасных запросов.
-Использование паттернов/регулярных выражений.

В данной статье я расскажу как обработать данные из формы на стороне PHP.

Почему не jQuery или JS?

Дело в том, что javascript не является серверным языком программирования (за исключением node.js) и его очень легко отключить непосредственно в самом браузере. В результате чего динамическая обработка полей формы станет не активной и пользователь без проблем сможет причинить вред сайту.

На примере ниже, я покажу вам как отфильтровать приходящие данные из формы используя регулярные выражения php.

Создаем в корне проекта точку входа index.php (Не забываем про локальный сервер! Проект должен находиться в рабочей папке локального сервера, иначе файл с расширением php запустить не получится!)

<?php session_start(); ?>
    <!doctype html>
    <head>
        <meta charset="UTF-8">
        <title>Название страницы</title>
        <link rel="stylesheet" href="css/style.css">
    </head>
    <body>

    <div class="wrapper">
        <div class="form-block">
            <form action="/form.php" method="post">
                <p>
                    <?php if (isset($_SESSION['error_email'])): ?>
                        <?= $_SESSION['error_email']; ?>
                    <?php endif; ?>
                </p>
                <input type="text" placeholder="E-mail" name="email">
                <input type="submit" value="Подписаться">
            </form>
        </div>
    </div>

    </body>
    </html>
<?php session_destroy() ?>

Создаем папку css в корне проекта с таблицей стилей style.css. Копируем следующий код:

body {
    margin: 0;
    padding: 0;
}

.wrapper {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100vh;
}

.form-block {
    width: 400px;
    min-height: 200px;
    background: #99d39f;
    display: flex;
    justify-content: center;
    align-items: center;
    padding: 0 20px 0 15px;
}

.form-block form {
    width: 100%;
}

.form-block input {
    width: 100%;
    height: 35px;
}

.form-block input[type=submit] {
    height: auto;
    margin-top: 15px;
    margin-bottom: 15px;
    font-size: 18px;
    text-transform: uppercase;
    color: white;
    background: orangered;
    border: none;
    padding: 10px 0 10px 0;
    cursor: pointer;
    border-radius: 5px;
}

input[type=text] {
    border: 1px white solid;
    border-radius: 5px;
}

p {
    color: orangered;
}

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

Осталось создать основной обработчик формы. Создаем файл form.php и вставляем следующий код:

<?php
session_start();

$email = str_replace(" ", "", $_POST['email']);

$pattern_email = '/[a-zA-Z0-9\-\_]{1,50}[@]{1}[a-zA-Z0-9]{2,20}[\.]{1}[a-zA-Z0-9]{2,15}/';

if (!preg_match($pattern_email, $email, $result_email)) {
    if ($_POST['email'] == null) {
        $_SESSION['error_email'] = 'Введите email адрес';
    } else {
        $_SESSION['error_email'] = 'Не корректный e-mail адрес';
    }
}


header('Location: /');

Если вы все сделали правильно, то при отправке не корректных данных на сервер у вас появиться соответствующее сообщение об ошибке.

Давайте разберем подробнее, что мы написали.

Файл index.php содержит типичную html разметку за исключением некоторых php конструкций, а именно:

метод session_start(); - с помощью данного метода, мы включаем механизм для работы сессий в текущем файле!

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

Таким образом в файле form.php мы задаем сесcии идентификатор error_email по которому , в дальнейшем мы сможем обращаться за получением хранимых в ней данных, а именно за получением информации об ошибке.

$email = str_replace(" ", "", $_POST['email']); - Здесь мы принимаем приходящие данные из input поля в глобальном массиве POST с идентификатором email и передаем эти данные в php функцию str_replace(), которая удаляет абсолютно все пробелы после любого символа. Первым параметром " " мы говорим, что именно искать в массиве $_POST['email'], а вторым параметром "" мы говорим на что заменить пробел. Таким образом мы избавляемся от всех пробелов.

$pattern_email = '/[a-zA-Z0-9\-\_]{1,50}[@]{1}[a-zA-Z0-9]{2,20}[\.]{1}[a-zA-Z0-9]{2,15}/'; - Регулярное выражение. Может показаться сложным, но уверяю вас здесь все очень просто. [a-zA-Z0-9\-\_]{1,50} - в данной части регулярного выражения мы говорим, что email т.е его часть перед символом @ может состоять только из маленьких или больших латинских символов, цифр от 0 до 9, тире или подчеркиванием. В фигурных скобках мы указываем длину символов от и до. [@]{1} - далее мы говорим, что обязательно должен идти знак @ и только 1! [a-zA-Z0-9]{2,20} - Здесь тоже самое , что и в начале. [\.]{1} - здесь мы указываем знак точку и только 1 раз. итд...

Обратите внимание, что в php регулярное выражение должно начинаться с / и заканчиваться на /.

Для того. чтобы регулярное выражение успешно применить к приходящим данным следует вызвать метод preg_match(наше выражение, приходящие данные, $arr);

$arr - Означает, что вы должны прописать любое имя для переменной например $result_email т.е в данную переменную(массив) автоматически поместиться приходящие значение, но уже прошедшее валидность. После чего данные можно достать следующим образом: $result_email[0];

Обратите внимание что в самом конце скрипта прописана конструкция header('Location: /'); - это означает, что как только мы попадем на страницу form.php мы будем переадресованы на основную точку доступа index.php.

В файле index.php в самом низу мы убиваем все сессии которые у нас существуют. session_destroy(); - метод по уничтожению всех сессий. Это нужно нам для того, чтобы после удачно введенных данных наши сессии с информацией об ошибке были полностью уничтожены, а также если вы обновите страничку вы увидите предупреждение об ошибке только 1 раз.

Читайте также:

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

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