什么是PHP表单验证?
PHP表单验证指的是在服务器端对HTML提交的表单信息进行检查,确保数据安全、有效和完整,防止SQL注入或XSS攻击,既是一种有效的防御思想又满足数据处理的合理需求。
怎么验证呢?通常是配合PHP内置函数进行判断:
1. 必填信息不能为空:
<?php
if(empty($_POST["name"])) {echo "姓名不能为空!"; }//empty()
if(isset($_GET["name"])) {echo "姓名不能为空!"; }//isset()
?>2. 正则表达式判断电话、邮箱和密码数据合理:
<?php
// 手机号验证
function validatePhone($phone) {
$phoneRegex = '/^1[3-9]\d{9}$/';
return preg_match($phoneRegex, $phone) === 1;
}
// 邮箱验证
function validateEmail($email) {
$emailRegex = '/^[^\s@]+@[^\s@]+\.[^\s@]+$/';
return preg_match($emailRegex, $email) === 1;
}
// 密码强度验证
function validatePassword($password) {
// 至少6位,包含字母和数字
$passwordRegex = '/^(?=.*[A-Za-z])(?=.*\d).{6,}$/';
return preg_match($passwordRegex, $password) === 1;
}
?>3. 清理输出数据,防止XSS攻击:
<?php /*一般该函数遵循“输入不用输出用”*/ $name = htmlspecialchars($name, ENT_QUOTES | ENT_HTML5, 'UTF-8');//防止XSS攻击 ?>
4. 实际演示一遍PHP表单验证流程:
4. 1 先准备一个test.php,包括html页面,表单填写的三个字段,姓名、电话号码和qq邮箱。
4.2 准备一个error数组用于判断用户的输入状态,及时向用户进行信息填写反馈。
4.3 姓名需要验证不为空。
4.4 电话号码不为空且通过正则表达式进行验证,/^1[3-9]\d{9}$/-中国大陆手机号码格式。
4.5 qq邮箱不为空且通过正则表达式验证:/^\d+@qq\.com$/
4.6 所有输出都要通过htmlspecialchars()函数转html实体,防止XSS攻击。
test.php代码如下:
<?php
// 开启错误显示
error_reporting(E_ALL);
ini_set('display_errors', 1);
// 定义变量和错误信息
$name = $phone = $email = '';
$errors = [];
//处理表单提交(通过HTTP POST获取表单数据)
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 1. 获取并清理输入数据
$name = trim($_POST['name'] ?? '');
$phone = trim($_POST['phone'] ?? '');
$email = trim($_POST['email'] ?? '');
// 2. 验证必填字段 - 姓名
if (empty($name)) {
$errors['name'] = "姓名不能为空!";
}
// 3. 验证手机号
if (empty($phone)) {
$errors['phone'] = "手机号不能为空!";
} elseif (!preg_match('/^1[3-9]\d{9}$/', $phone)) {
$errors['phone'] = "手机号格式不正确!";
}
// 4. 验证QQ邮箱
if (empty($email)) {
$errors['email'] = "邮箱不能为空!";
} elseif (!preg_match('/^\d+@qq\.com$/', $email)) {
$errors['email'] = "请输入正确的QQ邮箱格式!";
}
// 5. 如果没有错误,处理成功
if (empty($errors)) {
$success = "表单提交成功!验证通过!";
// 这里可以继续处理,如保存到数据库
// 清空表单
$name = $phone = $email = '';
$errors = [];
}
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>PHP表单验证演示</title>
</head>
<body>
<h2>Dotcpp编程-用户注册表单</h2>
<?php if (isset($success)): ?>
<div style="color: green;"><?php echo $success; ?></div>
<?php endif; ?>
<form method="POST" action="">
<!-- 姓名字段 -->
<div>
<label for="name">姓名 *</label><br>
<input type="text" id="name" name="name"
value="<?php echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8'); ?>">
<?php if (isset($errors['name'])): ?>
<div style="color: red;"><?php echo $errors['name']; ?></div>
<?php endif; ?>
</div>
<br>
<!-- 手机号字段 -->
<div>
<label for="phone">手机号 *</label><br>
<input type="text" id="phone" name="phone"
value="<?php echo htmlspecialchars($phone, ENT_QUOTES, 'UTF-8'); ?>">
<?php if (isset($errors['phone'])): ?>
<div style="color: red;"><?php echo $errors['phone']; ?></div>
<?php endif; ?>
</div>
<br>
<!-- 邮箱字段 -->
<div>
<label for="email">QQ邮箱 *</label><br>
<input type="email" id="email" name="email"
value="<?php echo htmlspecialchars($email, ENT_QUOTES, 'UTF-8'); ?>">
<?php if (isset($errors['email'])): ?>
<div style="color: red;"><?php echo $errors['email']; ?></div>
<?php endif; ?>
</div>
<br>
<button type="submit">提交</button>
</form>
<hr>
<h3>验证规则说明:</h3>
<ul>
<li>姓名:不能为空</li>
<li>手机号:1开头,第二位3-9,共11位数字</li>
<li>QQ邮箱:数字@qq.com格式</li>
</ul>
</body>
</html>在test.php填写表单并提交,PHP脚本会进行表单判断。
总结:一般来说后端必须存在表单验证(确保信息合法有效),前端可以存在表单验证(目的是为了优化用户体验),所以学习PHP表单验证是PHP开发人员的必备技能。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程