PHP验证失败返回视图怎么写

wen PHP项目 2

本文目录导读:

PHP验证失败返回视图怎么写

  1. 使用原生 PHP + Session 闪存数据
  2. 使用 Laravel 框架
  3. 使用 ThinkPHP 框架
  4. AJAX 请求的错误处理
  5. 建议

在 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];
        });
    }
});

建议

  1. 使用框架:框架通常提供完善的验证和错误处理机制
  2. 保持用户输入:验证失败时保留用户已填写的内容
  3. 显示友好错误:错误信息要清晰易懂
  4. 考虑安全性:对错误信息进行适当的转义处理

选择哪种方法取决于你的项目使用的技术栈,如果你能提供更多关于你的项目环境的信息,我可以给出更具体的建议。

抱歉,评论功能暂时关闭!