当前位置:首页 > 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购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。用…

jquery表单

jquery表单

jQuery 表单操作 jQuery 提供了丰富的 API 用于表单操作,包括表单元素的选择、值获取与设置、事件处理等。 表单元素选择 使用 jQuery 选择器可以方便地选取表单元素: // 选…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数: $q…

php实现mvc

php实现mvc

PHP 实现 MVC 架构 MVC(Model-View-Controller)是一种常用的软件设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller…

php session 实现购物车

php session 实现购物车

PHP Session 实现购物车的方法 初始化 Session 在 PHP 脚本的最开始调用 session_start() 函数,确保会话已启用。这通常在页面的顶部完成。 session_sta…

php 实现路由

php 实现路由

PHP 实现路由的方法 在 PHP 中实现路由功能可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 PHP 实现简单路由 通过解析 URL 并匹配对应的处理逻辑,可以实现基本的路由功能。以…