Правильная логика при обработке полей формы

В данной статье расскажу как обрабатывать данные из форм (о логике и последовательности).
Заодно ДЗ №17 переделаете в более правильный вид.


Не важно как передаются данные из формы POST или GET, но при обработке данных из формы нужно проверять данные.

В полном идеале проверка должна идти сначала с помощью JavaScript, а потом еще раз проверка php

Опишем правильную логику обработки данных из форм:

  1. Проверим была ли отправлена форма, это просто:
    if(isset($_POST['submit']))

    кстати кнопку отправки обычно называют submit, но бывают и исключения.
    И никто не запрещал проверять отправку и таким образом:

    if(isset($_POST['login']))

    даже если логин не ввели,  данный элемент массива все равно будет существовать, но пустой.
  2. Создадим массив для ошибок

    $errors = array();

  3. СНАЧАЛА Проверим длину элемента
    например логин не может быть короче 3 символов и длиннее 100:

    if(mb_strlen($_POST['login']) < 3 or mb_strlen($_POST['login']) >100) {
        $errors[] = 'Логин должен быть длиной от 3 до 100 символов'
    }
    с паролем примерно тоже самое

    if(mb_strlen($_POST['pass']) < 6 or mb_strlen($_POST['pass']) >100) {
        $errors[] = 'Пароль должен быть длиной от 6 до 100 символов';
    }

  4. Если нет ошибок - проверяем на соответствие шаблону

    if(count($errors)) == 0) {
    ...

    Обычно с помощью регулярных выражений, поэтому эту проверку и делаем после проверки на длину, поскольку регулярки работают долго.
    Кто учится на начальном (1-м курсе) эту проверку можно опустить.

    if (preg_match('/^[a-z_0-9-]$/u', $_POST['login'])) {
         $errors[] = 'Логин не соответствует шаблону. Допустимые символы буквы от a до z, цифры от 0 до 9 и знаки: - и _';
    }

  5. Если массив так и остался пустой то выводим сообщение об успехе, если не пустой то выводим ошибки
    ОБратите внимание на классы для дивов! это стандартные наименования классов, но бывают исключения.

    if(count($errors)) == 0) {
        // авторизуем пользователя или отправляем письмо или что угодно если введены верные данные
        // выводим сообщение
        echo '< div class="success"> Вы успешно ....  < /div>';
    }
    else {
        // выводим ошибки
          echo '< div class="errors">'
         
          foreach ($errors AS $value) {
                  echo $value . '<br>';
          }
          echo '< /div>';

    }


    Напишу-ка сюда классы, чтобы вы не мучались каждый раз, а то вечно у вас сообщения еле видимые, незаметные:

    < style>
    .success {background:#A0F7BA; color:black; border: 1px solid green; font-size:130%;}
    .errors {background:#FCA4A4; color:black; border: 1px solid red; font-size:130%;}

    < /style>


  6. Сохраняем введенные данные, на случай если будут ошибки и их нужно будет показать в форме

    $login = (isset($_POST['login'])) ? $_POST['login'] : '';

  7. Выводим форму
    Стоит отметить что сообщения нужно выводить ДО формы, но никак не наоборот!

    Удобнее всего вывести форму просто закрыв тег php
    И не забываем выводить ранее введенные данные, если они были (см. п 6)

    ?>

    < form action=... >

    <input name="login" value="<?=$login">

    < /form>

    <?php

    В данном случае будет подсвечиваться синтаксис html, если же форму выводить через echo, то все что в кавычках обычно не подсвечивается и читабельность => скорость работы программиста ухудшается



  8. Нажмем Ctrl+U в браузере и убедимся что html код валидный!


Как с нами связаться


Наш адрес
Гагарина 16г, офис 11А
+7 (4012) 33-55-81
center@unibix.ru
График работы
Пн - Пт: 1000 - 1900
Сб - по запросу
Вс: выходной
Мы в соцсетях
vk.com/unibix