如何在提交到另一个页面时使表单验证工作


how to make form validation working when submitting to another page

验证在我的表单上不起作用我希望验证在我的表单中运行并显示错误

这是我的联系表格代码.php

<p><span class="error"> * required field(s)</span></p>
<form action="user_input.php" method="post">
<table>
    <tr>
    <td><label>Name: <span class="error"> *<?php echo $nameErr;?> </span></label></td></tr>
        <td><input name="name" type="text" placeholder="Type your name" value="<?php echo $name;?>"></td>
    <tr><td><label>Email: <span class="error"> *<?php echo $emailErr;?> </span></label></td></tr>
        <td><input name="email" type="email" placeholder="Type your email" value="<?php echo $email;?>"></td>
    <tr><td><label>Address: <span class="optional"> Optional</span></label></td></tr>
        <td><input name="address" type="text" placeholder="Type your location" value="<?php echo $address;?>"></td>
    <tr><td><label>Phone: <span class="error"> * <?php echo $phoneErr;?></span></label></td></tr>
        <td><input name="phone" type="tel" placeholder="Type your phone number" value="<?php echo $phone;?>"></td>
    <tr><td><label>Message: <span class="error"> * <?php echo $messageErr;?> </span></label></td></tr>
        <td><textarea name="message" row="5" cols="40" placeholder="Type your message here" value="<?php echo $message;?>"></textarea></td>
        </table>
    <input type="submit" value="Submit">

以及我的user_input.php 代码

<?php
$nameErr = $emailErr = $addressErr = $phoneErr = $messageErr = "";
$name = $email = $address = $phone = $message = "";
    if($_SERVER["REQUEST_METHOD"] == "POST") {
    if(empty($_POST["name"])) {
        $nameErr = "Name required";
        header("location: contact_form.php");
    } else {
        $name = input($_POST["name"]);
    }
    if(empty($_POST["email"])) {
        $emailErr = "Email required";
        header("location: contact_form.php");
    } else {
        $email = input($_POST["email"]);
        // check if email is valid
        if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $emailErr = "Invalid email";
            header("location: contact_form.php");
        }
    }
    if(empty($_POST["address"])) {
        $addressErr = "Invalid Address";
        header("location: contact_form.php");
    } else {
        $address = input($_POST["address"]);
    }
    if(empty($_POST["phone"])) {
        $phoneErr = "Phone number required";
        header("location: contact_form.php");
    } else {
        $phone = input($_POST["phone"]);
        if(!preg_match("/^[0-9]+$/", $phone) || strlen($phone) > 20) {
            $phoneErr = "Invalid phone number";
            header("location: contact_form.php");
        }
    }
    if (empty($_POST["message"])) {
        $messageErr = "Message required";
        header("location: contact_form.php");
    } else {
        $message = input($_POST["message"]);
    }
}

我不知道哪里有错误,它应该能够输出错误并进行验证。

我只想要php而不是jquery或javascript

您应该将错误消息存储在会话中。

您现在要做的是设置一个仅限于运行时的变量。一旦用户更改页面(他对位置标头所做的操作),它们就会被刷新。会话不刷新,可以按用户使用,默认情况下可以使用30分钟(配置可以更改持续时间)

只需添加之类的错误

session_start();
$_SESSION['errors'][] = 'Name required';

在页面上,您现在可以像访问foreach($_SESSION['errors'] as $error){...一样访问它们,然后删除它们unset($_SESSION['errors']);

从错误条件中删除header()函数,并使用array存储错误。而不是多个变量。