📅  最后修改于: 2023-12-03 15:18:28.349000             🧑  作者: Mango
当用户提交表单时,如果表单验证失败,通常需要将用户已填写的数据返回到表单中方便用户进行修正。在 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
过滤器来检查邮箱是否合法,这是一个更加安全的方式。