Проверка php при проблемах с формой

Я работал над проверкой этой формы весь день, и я почти на месте, но это еще не так. Мне сказали использовать этот пример в w3schools, и я сделал это, но это не сработало. Я возился с ним какое-то время, и теперь он действительно подтверждается, но некоторые вещи все еще испорчены. Если имеется более одной ошибки, она не отображается. Появляется только последний произошедший. Во-вторых, я хочу, чтобы он отображал ошибки по входам на странице. в настоящее время он переходит на пустую страницу и просто повторяет ошибку. Я попытался включить их в HTML-форму, но это не сработало. Я использовал следующий пример:

https://www.w3schools.com/php/showphp.asp?filename=demo_form_validation_complete

мой код выглядит следующим образом

html:

   <form class = "form inline d-flex justify-content-center" action = "contact.php" method = "POST" role = "form">
             <br style = "clear:both">
            <div class = "col-sm-6">
              <div class = "form-group">
                <input type = "text" class = "control" id = "first_name" name = "first_name" placeholder = "First Name" required>
                <span class = "error">* <?php echo $nameErr;?></span>
              </div>
              <div class = "form-group">
                <input type = "text" class = "control" id = "email" name = "email" placeholder = "Email" required>
                <span class = "error">* <?php echo $emailErr;?></span>
              </div>
            </div>
            <div class = "col-sm-6">
              <div class = "form-group">
                <input type = "text" class = "control" id = "last_name" name = "last_name" placeholder = "Last Name" required>
                <span class = "error">* <?php echo $nameErr;?></span>
              </div>
              <div class = "form-group">
                <input type = "text" class = "control" id = "phone" name = "phone" placeholder = "Phone" required>
                <span class = "error">* <?php echo $phoneErr;?></span>
              </div>
            </div>
            <div class = "col-sm-12">
              <div class = "form-group">
                <textarea name = "message" class = "control" id = "message" placeholder = "What's on your mind?" rows = "3"></textarea>
              </div>
              <button type = "submit" id = "submit" name = "submit" class = "btn btn-primary">SEND</button>
          </form>

php:

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST") {

    $first_name = $_POST['first_name'];
    $last_name  = $_POST['last_name'];
    $email      = $_POST['email'];
    $phone      = $_POST['phone'];
    $message    = $_POST['message'];

    if (empty($first_name)) {
        $nameErr = "First name is required";
    } else {
        $first_name = check_input($first_name);
        // check if name only contains letters and whitespace
        if (!preg_match("/^[a-zA-Z ]*$/",$first_name)) {
            $error = "Only letters and white space allowed";
        } else {
            $pass += 1;
        }
    }

    if (empty($last_name)) {
        $nameErr = "Last name is required";
    } else {
        $last_name = check_input($last_name);
        // check if name only contains letters and whitespace
        if (!preg_match("/^[a-zA-Z ]*$/",$last_name)) {
            $error = "Only letters and white space allowed";
        }else {
            $pass += 1;
        }
    }

    if (empty($email)) {
        $emailErr = "Email is required";
    } else {
        $email = check_input($email);
        // check if e-mail address is well-formed
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $error = "Invalid email format";
        }else {
            $pass += 1;
        }
    }

    if (empty($phone)) {
        $phoneErr = "Phone number is required";
    } else {
        $phone = check_input($phone);

        if (!preg_match("'^(([\+]([\d]{2,}))([0-9\.\-/\s]{5,})|([0-9\.\-/\s]{5,}))*$'",$phone)) {
            $error = "Invalid Phone Number";
        }else {
            $pass += 1;
        }
    }

    if (empty($message)) {
        $error = "Message  cannot be blank";
    } else {
        $message = check_input($message);
        $pass += 1;
    }
}

$email_from =' Client, llc';
$email_subject = 'New Message From A Guest';
$email_body = "Name: $first_name $last_name\n".
              "Email: $email\n".
              "Phone: $phone\n".
              "Message: $message.\n";
$to  = "[email protected]";
$headers = "From: $email_from \r\n";
$headers .= "Reply-To: $email \r\n";

if (!isset($error) && $pass == '5'){
    mail($to,$email_subject,$email_body,$headers);
    header("location: thanks.html");
} else {
    echo $error;
}

// purge the session after it is displayed
unset($error);

function check_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
?>

Я не думаю, что проверка телефона работает должным образом, но я могу попробовать другой preg_match. Мне просто нужно, чтобы это работало правильно.

ПРИМЕЧАНИЕ: $pass += 1; работает только в том случае, если вы сначала инициализируете $pass значением ... обычно нулевым.

RiggsFolly 03.07.2018 01:54

Я уверен, что видел этот код в другом вопросе несколько минут назад ????

RiggsFolly 03.07.2018 01:55
$error - скаляр. Если вы хотите добавить сообщения об ошибках в $error, чтобы отображались все найденные ошибки, вам придется использовать $error = '';, затем $error .= 'first error';, затем $error .= 'second error';.
RiggsFolly 03.07.2018 01:58

@RiggsFolly, он очень похож на Вот этот, не так ли.

Greg Schmidt 03.07.2018 02:01

Пример wwwfools, кажется, работает довольно хорошо, поэтому мы должны предположить, что вы не очень хорошо его скопировали, но я не собираюсь работать над поиском ошибок.

RiggsFolly 03.07.2018 02:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
5
36
1

Ответы 1

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

Обновите идентификатор ошибки фамилии в вашем html:

 <form class = "form inline d-flex justify-content-center" action = "contact.php" method = "POST" role = "form">
             <br style = "clear:both">
            <div class = "col-sm-6">
              <div class = "form-group">
                <input type = "text" class = "control" id = "first_name" name = "first_name" placeholder = "First Name" required>
                <span class = "error">* <?php echo $nameErr;?></span>
              </div>
              <div class = "form-group">
                <input type = "text" class = "control" id = "email" name = "email" placeholder = "Email" required>
                <span class = "error">* <?php echo $emailErr;?></span>
              </div>
            </div>
            <div class = "col-sm-6">
              <div class = "form-group">
                <input type = "text" class = "control" id = "last_name" name = "last_name" placeholder = "Last Name" required>
                <span class = "error">* <?php echo $nameErr2;?></span>
              </div>
              <div class = "form-group">
                <input type = "text" class = "control" id = "phone" name = "phone" placeholder = "Phone" required>
                <span class = "error">* <?php echo $phoneErr;?></span>
              </div>
            </div>
            <div class = "col-sm-12">
              <div class = "form-group">
                <textarea name = "message" class = "control" id = "message" placeholder = "What's on your mind?" rows = "3"></textarea>
              </div>
              <button type = "submit" id = "submit" name = "submit" class = "btn btn-primary">SEND</button>
          </form>

Попробуйте это для своего PHP:

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST") {

    $first_name = $_POST['first_name'];
    $last_name  = $_POST['last_name'];
    $email      = $_POST['email'];
    $phone      = $_POST['phone'];
    $message    = $_POST['message'];
    $error = ''; //init error to empty string
    $pass = 0; // init pass to 0;

    if (empty($first_name)) {
        $nameErr = "First name is required";
    } else {
        $first_name = check_input($first_name);
        // check if name only contains letters and whitespace
        if (!preg_match("/^[a-zA-Z ]*$/",$first_name)) {
            $nameErr = "Only letters and white space allowed";
            $error.='<p>'.$nameErr.'</p>';

        } else {
            $pass += 1;
        }
    }

    if (empty($last_name)) {
        $nameErr2 = "Last name is required";
    } else {
        $last_name = check_input($last_name);
        // check if name only contains letters and whitespace
        if (!preg_match("/^[a-zA-Z ]*$/",$last_name)) {
            $nameErr2 = "Only letters and white space allowed";
            $error.='<p>'.$nameErr2.'</p>';
        }else {
            $pass += 1;
        }
    }

    if (empty($email)) {
        $emailErr = "Email is required";
    } else {
        $email = check_input($email);
        // check if e-mail address is well-formed
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $emailErr = "Invalid email format";
            $error.='<p>'.$emailErr.'</p>';
        }else {
            $pass += 1;
        }
    }

    if (empty($phone)) {
        $phoneErr = "Phone number is required";
    } else {
        $phone = check_input($phone);

        if (!preg_match("'^(([\+]([\d]{2,}))([0-9\.\-/\s]{5,})|([0-9\.\-/\s]{5,}))*$'",$phone)) {
            $phoneErr = "Invalid Phone Number";
            $error.='<p>'.$phoneErr.'</p>';
        }else {
            $pass += 1;
        }
    }

    if (empty($message)) {
        $msgErr = "Message  cannot be blank";
        $error.='<p>'.$msgErr.'</p>';
    } else {
        $message = check_input($message);
        $pass += 1;
    }
}

$email_from =' Client, llc';
$email_subject = 'New Message From A Guest';
$email_body = "Name: $first_name $last_name\n".
              "Email: $email\n".
              "Phone: $phone\n".
              "Message: $message.\n";
$to  = "[email protected]";
$headers = "From: $email_from \r\n";
$headers .= "Reply-To: $email \r\n";

if ($error == '' && $pass == '5'){
    mail($to,$email_subject,$email_body,$headers);
    header("location: thanks.html");
} else {
    echo $error;
}

// purge the session after it is displayed
unset($error);

function check_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
?>

Другие вопросы по теме