Link in progress
Обо мне
Ответ. Уроки PHP

time-for-answersПервый урок в этом году будет посвящён ответу на вопрос читателей блога.
Сам вопрос звучит так: «Как правильно вывести ошибки заполнение конкретного поля в файле добавление подписчиков?».

Ответ. Действительно, у многих могла возникнуть такая проблема, а причина ей — наличие 3 переменных. Давайте разберемся в логике, используя empty() и оператор отрицания:
1. Мы проверяем на заполненное поле;
2. Мы выводим ошибку, если какое-то поле пустое;
3. Если все поля заполнены – отправляем данные в базу данных.
Где тут подводный камень? Кто пытался делать это задание самостоятельно понял, что если написать по примеру файла sender_mail.php в прошлом уроке, ошибка будет выводится только тогда, если заполнено два поля а одно нет. Многие написали подобный код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (empty($firstname) || empty($lastname) || empty($email)) {
    echo "Нужно заполнить все поля!";
    } else {
        //Подключаемся к БД
$connect = mysqli_connect('hostname', 'login', 'pass', 'BDname', ) or die ('Нет подключения к базе данных');
//Записываем запрос к БД в переменную
        $query = "INSERT INTO store_list VALUES ('$firstname', '$lastname', '$email')";

        // Выполняем отправку запроса в БД
        mysqli_query($connect, $query) or die ('Не удалось записать данные в БД');

        // Закрываем соединение с БД
        mysqli_close($connect);
        echo "Подписка успешно совершена. Ждите рассылку.";
};

И оно работает. Такое задание было в этом уроке. И кода мало и ошибка выводится. Вернемся к вопросу, а точнее к его ответу. Мне прислали вот такой код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
//Записываем данные пришедшие из формы в переменные
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$email = $_POST['email'];

//Если все поля не заполненные
if (empty($firstname) && empty($lastname) && empty($email)) {
    echo "Вы забыли указать имя, фамилию и E-mail!";
    }; 

// Если не заполненное $firstname и заполненное lastname и заполненное $email
if (empty($firstname) && (!empty($lastname)) && (!empty($email))) {
    echo "Вы забыли указать имя!";
    };

// Если заполненное $firstname и не заполненное $lastname и заполненное $email
if (!empty($firstname) && empty($lastname) && (!empty($email)))  {
    echo "Вы забыли указать фамилию!";
    };

// Если заполненное $firstname и заполненное $lastname и не заполненное $email
if ((!empty($firstname)) && (!empty($lastname)) && empty($email)) {
    echo "Вы забыли указать E-mail!";
    };

// Если заполненное $firstname и заполненное $lastname и заполненное $email
if ((!empty($firstname)) && (!empty($lastname)) && (!empty($email))) {
записываем в БД!      
};
?>

Как вы думаете, он работает? Конечно да, но не так, как ожидалось. Логику этого кода я написал в комментариях к условиям выше. Было учтено, что пустое, не заполненное поле будет всегда или одно или все, но может такое быть, что заполнено только одно поле, например ИМЯ ($firstname) а остальные пустые. Для того, что бы вывести ошибку о том, что не заполнено два каких-то поля, нужно просто написать еще три условия:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Если не заполненное $firstname и не заполненное $lastname и заполненное $email
if (empty($firstname) && empty($lastname) && (!empty($email))) {
    echo "Вы забыли указать имя и фамилию!";
    };

// Если не заполненное $firstname и заполненное $lastname и не заполненное $email
if (empty($firstname) && (!empty($lastname)) && empty($email)) {
    echo "Вы забыли указать имя и E-mail!";
    };

// Если заполненное $firstname и не заполненное $lastname и не заполненное $email
if ((!empty($firstname)) && empty($lastname) && empty($email)) {
    echo "Вы забыли указать фамилию и E-mail!";
    };

Все, теперь какое бы поле не осталось пустым – мы об этом конкретно узнаем.

Есть и более простые способы сделать такую проверку и если вы его знаете – напишите в комментарии ваш вариант упрощения данной проверки.

В следующем уроке мы поговорим о том, как объединить HTML файл и обработчик PHP, зачем это делать и какие плюсы от этого.

С Вами был ProIN, до скорой встречи!

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

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

Max quality, min price, min time expenditure
Send me a message to: work@glogla.net
Portfolio