如何在同一页面上显示错误(PHP 表单)


how to display errors on the same page (php form)

尝试在同一页面上显示错误。我该怎么做?就目前而言,每次出现错误时,它都会生成一个空白页,其中包含列出的所有错误。

我不想这样。

这是我从某处的教程中扯出的基本形式test.php

 <?php session_start(); ?>
<html>
<head>
    <title></title>
</head>
<body>
        <form name="form1" method="post" action="test2.php">
        Name: <br/>
        <input type="text" name="name" value="<?php echo $_POST['name']; ?>" size="50" /><br/><br/>
        Email Address: <br/>
        <input type="text" name="email" value="<?php echo $_POST['email']; ?>" size="50"/> <br/><br/>
        Home Page: <br/>
        <input type="text" name="homepage" value="<?php echo $_POST['homepage']; ?>" size="50" /> <br/><br/>
        Message: <br/>
        <textarea name="message" rows="5" cols="50"><?php echo $_POST['message']; ?></textarea>
        <br/>
        <input type="submit" name="Submit" />
        </form>
</body>
</html>

这是它的 php 代码,它也是从教程中撕下来的,即 test2.php

<?php
    session_start();
    if (isset($_POST['Submit'])) {
        if ($_POST['name'] != "") {
            $_POST['name'] = filter_var($_POST['name'], FILTER_SANITIZE_STRING);
            if ($_POST['name'] == "") {
                $errors .= 'Please enter a valid name.<br/><br/>';
            }
        } else {
            $errors .= 'Please enter your name.<br/>';
        }
        if ($_POST['email'] != "") {
            $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
            if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
                $errors .= "$email is <strong>NOT</strong> a valid email address.<br/><br/>";
            }
        } else {
            $errors .= 'Please enter your email address.<br/>';
        }
        if ($_POST['homepage'] != "") {
            $homepage = filter_var($_POST['homepage'], FILTER_SANITIZE_URL);
            if (!filter_var($homepage, FILTER_VALIDATE_URL)) {
                $errors .= "$homepage is <strong>NOT</strong> a valid URL.<br/><br/>";
            }
        } else {
            $errors .= 'Please enter your home page.<br/>';
        }
        if ($_POST['message'] != "") {
            $_POST['message'] = filter_var($_POST['message'], FILTER_SANITIZE_STRING);
            if ($_POST['message'] == "") {
                $errors .= 'Please enter a message to send.<br/>';
            }
        } else {
            $errors .= 'Please enter a message to send.<br/>';
        }
        if (!$errors) {
            $mail_to = 'me@somewhere.com';
            $subject = 'New Mail from Form Submission';
            $message  = 'From: ' . $_POST['name'] . "'n";
            $message .= 'Email: ' . $_POST['email'] . "'n";
            $message .= 'Homepage: ' . $_POST['homepage'] . "'n";
            $message .= "Message:'n" . $_POST['message'] . "'n'n";
            mail($to, $subject, $message);
            echo "Thank you for your email!<br/><br/>";
        } else {
            echo '<div style="color: red">' . $errors . '<br/></div>';
        }
    }
?>

请注意,我将session_start添加到两个页面,因为我希望通过它而不是GET完成错误。

如何让错误显示在表单test.php

我会使用会话来表示同一页面上的错误。

在 Test2 上启动会话.php

session_start();

然后在所需的 if 语句中创建会话错误

$_SESSION['error'] = 'error message here';
header('location:test1.php');
        exit;

然后在test1.php上,像这样

    <?php
        session_start();
    
        if (!empty($_SESSION['error'])){
    ?>
    <div class="alert"> //you could then style this div to present error message better
    <?php
        echo $_SESSION['error'];
        unset($_SESSION['error']);
        }
    ?>
   </div>

或者在一个 PHP 语句中没有div 来简单地回显错误。