PHP 联系表 - 如何检查服务器端验证

PHP Contact Form - How to check server side validation

我正在学习 PHP 中的联系表单,并且正在尝试检查我的服务器端验证是否已移至另一个 php 文件。

在与表单相同的文件中使用验证工作正常,但我想将 PHP 验证逻辑分离到它自己的文件中并从表单中调用它。

例如,

<form action="validate.php">

当我将服务器端验证逻辑移动到它自己的文件中时,我提交了一个空表单,我得到了重定向到 validate2.php,没有错误和一个空白页面。

我是否遗漏了什么才能使它正常工作?我尝试在表单中使用 novalidate 关闭 HTML5 验证以检查服务器验证。

我该如何解决这个问题?

表格

<h1>Contact Form</h1>
    <?php echo $result; ?>

    <form action="validate.php" method="POST" novalidate>
        <div class="form-group">
            <label for="name">Name:</label>
            <input type="text" class="form-control" name="name" required>
        </div>

        <div class="form-group">
            <label for="email">Email:</label>
            <input type="email" class="form-control" name="email" required>
        </div>

        <div class="form-group">
            <label for="comment">Comment:</label>
            <textarea class="form-control" name="comment" required></textarea>
         </div>

         <input type="submit" name="submit" class="btn btn-success btn-lg" value="Submit">
     </form>

验证

<?php

$error = null;

if ($_POST["submit"]) {
$result = 'Form submitted';
if (!$_POST['name']) {
    $error = "<br />Please enter your name";
}

if (!$_POST['email']) {
    $error .= "<br />Please enter your email address";
}

if (!$_POST['comment']) {
    $error .= "<br />Please enter a comment";
}

if ($_POST['email']!="" AND !filter_var($_POST['email'],
        FILTER_VALIDATE_EMAIL)) {
    $error .= "<br />Please enter a valid email address";
}

if ($error) {
    $result = '<div class="alert alert-danger"><strong>There were error(s) in your form:</strong>'.$error.'</div>';
} else {
    if (mail("example@gmail.com", "Comment from website!", "Name: ". $_POST['name']." Email: ".$_POST['email']." Comment: ".$_POST['comment'])) {
        $result = '<div class="alert alert-success"><strong>Thank you!</strong> I\'ll be in touch.</div>';
    } else {
        $result = '<div class="alert alert-danger">Sorry, there was an error sending your message. Please try again later.</div>';
    }
}
header('Location: contact_form.php');
}
    if (isset($_POST["submit"]))
     {
    if (isset($_POST['name']) && $_POST['name']=="") {
         $error = "<br />Please enter your name";
    }

    if (isset($_POST['email'])&& $_POST['email']=="") {
         $error .= "<br />Please enter your email address";
    }

    if (isset($_POST['comment'])&& $_POST['comment']=="") {
         $error .= "<br />Please enter a comment";
    }

    if (!empty($_POST['email']) AND !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)) {
        $error .= "<br />Please enter a valid email address";
    }
if ($error) {
    $result = '<div class="alert alert-danger"><strong>There were error(s) in your form:</strong>'.$error.'</div>';
?>
<script>
window.location.href='';
</script>
<?php }else{}?>

这样使用

在如下会话中重定向分配消息之前

<?php
    session_start();


    $error = null;

    if ($_POST["submit"]) {
    $result = 'Form submitted';
    if (!$_POST['name']) {
        $error = "<br />Please enter your name";
    }

    if (!$_POST['email']) {
        $error .= "<br />Please enter your email address";
    }

    if (!$_POST['comment']) {
        $error .= "<br />Please enter a comment";
    }

    if ($_POST['email']!="" AND !filter_var($_POST['email'],
            FILTER_VALIDATE_EMAIL)) {
        $error .= "<br />Please enter a valid email address";
    }

    if ($error) {
        $result = '<div class="alert alert-danger"><strong>There were error(s) in your form:</strong>'.$error.'</div>';
    } else {
        if (mail("example@gmail.com", "Comment from website!", "Name: ". $_POST['name']." Email: ".$_POST['email']." Comment: ".$_POST['comment'])) {
            $result = '<div class="alert alert-success"><strong>Thank you!</strong> I\'ll be in touch.</div>';
        } else {
            $result = '<div class="alert alert-danger">Sorry, there was an error sending your message. Please try again later.</div>';
        }
    }

    if(isset($result) && !empty($result)) {
          $_SESSION['error'] = $result;
    }

   header('Location:contact_form.php');
   exit;
   } 
    ?>

在contact_form.php

<?php
    session_start();

    if(isset($_SESSION['error']) && !empty($_SESSION['error'])) {
        print_r($_SESSION['error'])
    }
?>

在contact_form页的底部

<?php
    if(isset($_SESSION['error']) && !empty($_SESSION['error'])) {
        unset($_SESSION['error']);
    }

?>