当前位置:首页 > PHP

php 实现表单验证

2026-01-15 13:35:35PHP

表单验证基础方法

使用内置函数和条件判断进行基础验证,例如检查空值、长度限制等:

$name = $_POST['name'] ?? '';
$email = $_POST['email'] ?? '';

$errors = [];

if (empty($name)) {
    $errors['name'] = '姓名不能为空';
} elseif (strlen($name) > 50) {
    $errors['name'] = '姓名长度不能超过50个字符';
}

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errors['email'] = '请输入有效的邮箱地址';
}

正则表达式验证

使用preg_match进行复杂格式验证,如密码强度、手机号等:

$password = $_POST['password'] ?? '';
if (!preg_match('/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/', $password)) {
    $errors['password'] = '密码必须包含字母和数字,且长度至少8位';
}

文件上传验证

验证上传文件的类型、大小等属性:

$allowedTypes = ['image/jpeg', 'image/png'];
$maxSize = 2 * 1024 * 1024; // 2MB

if ($_FILES['avatar']['error'] === UPLOAD_ERR_OK) {
    if (!in_array($_FILES['avatar']['type'], $allowedTypes)) {
        $errors['avatar'] = '只允许上传JPEG或PNG图片';
    }
    if ($_FILES['avatar']['size'] > $maxSize) {
        $errors['avatar'] = '文件大小不能超过2MB';
    }
}

CSRF防护

生成并验证CSRF令牌防止跨站请求伪造:

session_start();

// 生成令牌
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

// 验证令牌
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'] ?? '')) {
        die('CSRF验证失败');
    }
}

使用过滤器扩展

利用filter_var函数进行多种标准验证:

$age = $_POST['age'] ?? '';
$url = $_POST['website'] ?? '';

if (!filter_var($age, FILTER_VALIDATE_INT, ['options' => ['min_range' => 18, 'max_range' => 100]])) {
    $errors['age'] = '年龄必须在18-100之间';
}

if (!filter_var($url, FILTER_VALIDATE_URL)) {
    $errors['website'] = '请输入有效的网址';
}

错误处理与显示

收集所有错误并返回给用户:

if (!empty($errors)) {
    foreach ($errors as $field => $message) {
        echo "<p>错误:$field - $message</p>";
    }
} else {
    // 处理表单数据
    echo "表单验证通过,正在处理...";
}

使用验证库

推荐使用专业的验证库如Respect/Validation:

require 'vendor/autoload.php';
use Respect\Validation\Validator as v;

$validator = v::key('email', v::email())
    ->key('password', v::length(8, null));

try {
    $validator->assert($_POST);
} catch (Exception $e) {
    $errors = $e->getMessages();
}

前端与后端协同验证

虽然前端验证可以提高用户体验,但必须配合后端验证:

php 实现表单验证

// 前端示例验证
document.querySelector('form').addEventListener('submit', function(e) {
    let password = document.getElementById('password').value;
    if (password.length < 8) {
        alert('密码长度至少8位');
        e.preventDefault();
    }
});

标签: 表单php
分享给朋友:

相关文章

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'localh…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTMP协…

php实现聊天

php实现聊天

实现 PHP 聊天功能的方法 使用 WebSocket 和 PHP 实现实时聊天 WebSocket 是一种全双工通信协议,适合实现实时聊天功能。PHP 可以通过 Ratchet 库实现 WebSo…

php 实现面包屑导航

php 实现面包屑导航

实现面包屑导航的方法 面包屑导航(Breadcrumb Navigation)是一种常见的网站导航方式,用于显示用户当前页面的路径。以下是几种在 PHP 中实现面包屑导航的方法。 基于 URL 路径…

php 实现评论

php 实现评论

实现 PHP 评论功能 数据库设计 创建数据库表存储评论数据,通常包含以下字段: id:评论唯一标识 user_id:用户ID content:评论内容 created_at:评论时间 parent…

php 链表实现

php 链表实现

在 PHP 中实现链表可以通过类来模拟链表节点(Node)和链表(LinkedList)结构。以下是链表的完整实现示例,包含基础操作如插入、删除、遍历等。 链表节点类(Node) 链表的基本单元是节…