我正在尝试验证表单,但错误消息和header()将无法正常工作

时间:2018-06-03 00:04:37

标签: php forms

我看过其他类似的帖子,对他们的答案对我不起作用。我之前也因为过于含糊而被删除了一个问题,我希望这次不会发生,因为我试图具体化。如果我的问题出现问题,请告诉我,而不是简单地进行投票。

我正在尝试使用后端php验证建立联系表单。当我最终需要后端验证时,我将升级HTML表单以包括前端验证。

联系表单本身与mail()函数一起使用,但验证由于某种原因不起作用。我想要它,以便如果一个字段留空,它将发布“所有字段都是必需的”通知,如果电子邮件字段没有at符号(@),它将显示“电子邮件必须有一个at符号( @)”。

要做到这一点,我有指定名称的HTML表单输入,然后在PHP中我有验证,其中包括'header(“Location:email-form2.php”);'如果表单字段不正确,则重定向回同一页面。但是无论我尝试什么,都不会发生错误重定向,它只是指向'email-action.php'的操作页面,发送电子邮件然后完成。

验证不起作用,我做错了什么?

这是'email-form2.php'代码:

<?php 
session_start();

    if ( isset($_POST['name']) && isset($_POST['email']) && isset($_POST['subject']) && isset($_POST['message']) ) {
        if ( strlen($_POST['name']) < 1 || strlen($_POST['email']) < 1 || strlen($_POST['subject']) < 1 || strlen($_POST['message']) < 1) {
            $_SESSION['error'] = "All fields are required";
            header("Location: email-form2.php");
            return;
        }   

        elseif (strpos($_POST['email'], '@' ) == false) {
            $_SESSION['error'] = "Email must have an at-sign (@)";
            header("Location: email-form2.php");
            return;
        } 
        else {
            return false;
        }
    }

?>

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf8">
        <title>Email Tester</title>
    </head>
    <body>
       <?php

        if ( isset($_SESSION['error']) ) {
            echo('<p style="color: red;">'.$_SESSION['error']."</p>\n");
            unset($_SESSION['error']);
            }
        ?>
        <form action="email-action.php" method="POST">
            <label for="name">Enter your name: </label><br>
            <input type="text" id="name" name="name"><br>
            <label for="email">Enter your email: </label><br>
            <input type="text" id="email" name="email"><br>
            <label for="subject">Subject:</label><br>
            <input type="text" id="subject" name="subject"><br>
            <label for="message">Enter your message:</label><br>
            <input type="text" id="message" name="message"><br>
            <input type="submit" value="Submit">

        </form>
    </body>
</html>

'email-action.php'文件位于同一文件夹中,以下是代码:

 <?php

        $to = "example@example.com";
        $name = $_POST['name'];
        $email = $_POST['email'];
        $subject = $_POST['subject'];
        $message = $_POST['message'];
        $headers = "From: $name <$email>";

        mail($to, $subject, $message, $headers);


        ?>


<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf8">
        <title>Email Tester</title>
    </head>
    <body>
        <h1>Email Sent!</h1>
        <?php 
        if ( isset($_SESSION['error']) ) {
            echo('<p style="color: red;">'.$_SESSION['error']."</p>\n");
            unset($_SESSION['error']);
            }
        ?>
    </body>
</html>

1 个答案:

答案 0 :(得分:-1)

正如我在评论中所说的那样

"A" "B" "C" "D" "E" "F" "G" "H" "I" "L" "K"
"1" 2.59 23.08 4.61 10.32 5.61 0.05 0.34 24.04 19.34 5.76 4.27
"2" 23.31 1.84 15.34 1.23 0 0 6.13 12.88 6.13 17.18 15.95
"3" 9.47 0 13.68 9.47 0 0 0 2.11 5.26 6.32 53.68
"4" 2.16 29.99 4.58 7.92 0.92 0 0 8.97 16.57 12.05 16.83
"5" 5.4 76.35 2.06 8.87 0 0 0.26 0.39 0.9 2.7 3.08
"6" 8.24 30 7.65 0 1.18 0 0 4.71 22.94 23.53 1.76

以html形式{{1}}将解决您的问题。