当前位置:首页 > 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 登录功能实现 使用 PHP 实现登录功能通常需要结合数据库验证和会话管理。以下是一个基本的登录实现流程: 数据库准备 创建用户表存储用户名和密码(建议使用哈希加密): CREATE TAB…

php 实现下载

php 实现下载

PHP 实现文件下载的方法 使用 PHP 实现文件下载可以通过设置 HTTP 头信息,强制浏览器将文件作为附件下载而非直接打开。 基本下载实现 $file_path = 'path/to/your/…

php实现登陆

php实现登陆

PHP 实现登录功能 创建登录表单 在 HTML 文件中创建一个登录表单,包含用户名和密码输入框,表单的 action 属性指向处理登录的 PHP 文件。 <form action="logi…

php实现推送消息推送消息

php实现推送消息推送消息

PHP 实现消息推送的方法 使用 WebSocket 实现实时推送 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,适合实现实时消息推送。 安装 Ratchet 库(WebSo…

php登陆功能实现

php登陆功能实现

实现PHP登录功能 数据库准备 创建一个用户表存储登录信息,基本字段包括用户名、密码(需加密)等: CREATE TABLE users ( id INT AUTO_INCREMENT PR…