本文目录导读:

在 PHP 中验证失败后返回视图并显示错误信息,通常有以下几种常见方法:
使用原生 PHP + Session 闪存数据
<?php
session_start();
// 验证逻辑
$errors = [];
if (empty($_POST['username'])) {
$errors['username'] = '用户名不能为空';
}
if (empty($_POST['email'])) {
$errors['email'] = '邮箱不能为空';
}
if (!empty($errors)) {
// 存储错误信息和旧数据到 Session
$_SESSION['errors'] = $errors;
$_SESSION['old'] = $_POST;
// 重定向回表单页面
header('Location: form.php');
exit;
}
视图文件 (form.php):
<?php session_start(); ?>
<!DOCTYPE html>
<html>
<body>
<form method="POST" action="submit.php">
<input type="text" name="username"
value="<?= $_SESSION['old']['username'] ?? '' ?>">
<?php if (isset($_SESSION['errors']['username'])): ?>
<span class="error"><?= $_SESSION['errors']['username'] ?></span>
<?php endif; ?>
<input type="email" name="email"
value="<?= $_SESSION['old']['email'] ?? '' ?>">
<?php if (isset($_SESSION['errors']['email'])): ?>
<span class="error"><?= $_SESSION['errors']['email'] ?></span>
<?php endif; ?>
<button type="submit">提交</button>
</form>
<?php
// 清除 Session 数据
unset($_SESSION['errors']);
unset($_SESSION['old']);
?>
</body>
</html>
使用 Laravel 框架
// 控制器
public function store(Request $request)
{
$validated = $request->validate([
'username' => 'required',
'email' => 'required|email',
]);
// 验证通过后的逻辑
}
// 或者自定义验证
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'username' => 'required',
'email' => 'required|email',
]);
if ($validator->fails()) {
return redirect('form')
->withErrors($validator)
->withInput();
}
}
Laravel 视图 (Blade):
<form method="POST" action="/submit">
@csrf
<input type="text" name="username" value="{{ old('username') }}">
@error('username')
<span class="error">{{ $message }}</span>
@enderror
<input type="email" name="email" value="{{ old('email') }}">
@error('email')
<span class="error">{{ $message }}</span>
@enderror
<button type="submit">提交</button>
</form>
使用 ThinkPHP 框架
// 控制器
public function save(Request $request)
{
$validate = Validate::make([
'username' => 'require',
'email' => 'require|email'
]);
if (!$validate->check($request->post())) {
return redirect('form')->with([
'errors' => $validate->getError(),
'old' => $request->post()
]);
}
}
ThinkPHP 视图:
<form method="POST" action="/save">
<input type="text" name="username" value="{$Think.session.old.username ?? ''}">
{if isset($Think.session.errors.username)}
<span class="error">{$Think.session.errors.username}</span>
{/if}
<input type="email" name="email" value="{$Think.session.old.email ?? ''}">
{if isset($Think.session.errors.email)}
<span class="error">{$Think.session.errors.email}</span>
{/if}
<button type="submit">提交</button>
</form>
AJAX 请求的错误处理
// PHP 端
if (!empty($errors)) {
if ($request->isAjax()) {
return json_encode([
'success' => false,
'errors' => $errors,
'message' => '验证失败'
]);
}
// 非 AJAX 请求的处理...
}
JavaScript 端:
fetch('/submit', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
if (!data.success) {
// 显示错误信息
Object.keys(data.errors).forEach(field => {
document.querySelector(`[name="${field}"]`).nextElementSibling
.textContent = data.errors[field];
});
}
});
建议
- 使用框架:框架通常提供完善的验证和错误处理机制
- 保持用户输入:验证失败时保留用户已填写的内容
- 显示友好错误:错误信息要清晰易懂
- 考虑安全性:对错误信息进行适当的转义处理
选择哪种方法取决于你的项目使用的技术栈,如果你能提供更多关于你的项目环境的信息,我可以给出更具体的建议。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播