📜  php 如果表单失败保留数据 - PHP (1)

📅  最后修改于: 2023-12-03 15:18:28.349000             🧑  作者: Mango

PHP 如果表单失败保留数据

当用户提交表单时,如果表单验证失败,通常需要将用户已填写的数据返回到表单中方便用户进行修正。在 PHP 中,可以使用 $_POST$_GET 超级全局变量来获取表单数据,然后将其赋值到输入框中。下面是一个简单的示例:

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // 验证表单字段
    if (empty($_POST["name"])) {
        $nameErr = "姓名不能为空";
    } else {
        $name = test_input($_POST["name"]);
    }
    if (empty($_POST["email"])) {
        $emailErr = "邮箱不能为空";
    } else {
        $email = test_input($_POST["email"]);
        // 检查邮箱是否合法
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $emailErr = "无效的邮箱格式";
        }
    }
    // 如果所有的字段都验证通过
    if (empty($nameErr) && empty($emailErr)) {
        // 处理表单数据
        // ...
        // 重定向到成功页面或者显示成功信息
    }
}
// 如果表单验证失败,将错误信息和已填写的数据返回到表单中
?>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    姓名:<input type="text" name="name" value="<?php echo isset($name) ? $name : ''; ?>">
    <span class="error"><?php echo isset($nameErr) ? $nameErr : ''; ?></span>
    <br>
    邮箱:<input type="text" name="email" value="<?php echo isset($email) ? $email : ''; ?>">
    <span class="error"><?php echo isset($emailErr) ? $emailErr : ''; ?></span>
    <br>
    <input type="submit" name="submit" value="提交">
</form>

<?php
// 定义一个函数用来过滤输入数据
function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
?>

在上面的示例中,如果用户提交的表单有错误,例如姓名和邮箱都为空,那么 $nameErr$emailErr 变量将包含错误信息。在将错误信息返回到表单时,我们使用了 PHP 的三元运算符 ?: 来检查变量是否存在,如果存在则将其值赋值给输入框的 value 属性,否则将其赋值为空字符串。

除了在表单中保留数据,我们还需要注意安全性问题。在示例代码中,我们使用了 htmlspecialchars 函数来转义表单数据,以防止 XSS 攻击。同时,我们还使用了 FILTER_VALIDATE_EMAIL 过滤器来检查邮箱是否合法,这是一个更加安全的方式。