本节将会演示一个PHP表单验证的整个过程。
整个过程放在test.php里,总共分成两个部分,一个是HTML页面提交表单信息,一个是php脚本进行表单验证,并在提交合法数据后做出“注册成功!”的提示。
<?php
/* PHP脚本处理表单信息 */
error_reporting(E_ALL);//开启所有报错
ini_set('display_errors', 1);//允许页面展示报错
/* 验证函数准备 */
// 电话号码验证函数-f1()
function f1($phone) {
// 去除空格和特殊字符
$phone = preg_replace('/\s+/', '', $phone);
// 验证中国手机号格式:1开头,第二位3-9,共11位数字
if (preg_match('/^1[3-9]\d{9}$/', $phone)) {
return ['valid' => true, 'message' => '电话号码格式正确'];
} else {
return ['valid' => false, 'message' => '电话号码格式不正确,请输入11位有效手机号'];
}
}
// 邮箱验证函数-f2
function f2($email) {
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
return ['valid' => true, 'message' => '邮箱格式正确'];
} else {
return ['valid' => false, 'message' => '邮箱格式不正确'];
}
}
// 只处理POST请求
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
echo "<h2>收到的POST数据:</h2>";
// 获取并清理数据
$name = trim($_POST['name'] ?? '');
$tel = trim($_POST['tel'] ?? '');
$email = trim($_POST['email'] ?? '');
// 验证数据
$ret_tel = f1($tel);
$ret_email = f2($email);
// 显示原始数据
echo "姓名:$name<br>";
echo "电话号码:$tel - " . $ret_tel['message'] . "<br>";
echo "邮箱:$email - " . $ret_email['message'] . "<br>";
// 检查所有验证是否通过
if ($ret_tel['valid'] && $ret_email['valid'] && !empty($name)) {
echo "<h3 style='color: green;'>注册成功!</h3>";
} else {
echo "<h3 style='color: red;'>数据验证失败,请检查输入</h3>";
}
echo '<hr><a href="test.php">返回</a>';
exit;
}
?>
<!DOCTYPE html>
<html>
<head>
<title>POST测试 - 表单验证</title>
<style>
body {
font-family: Arial, sans-serif;
max-width: 600px;
margin: 0 auto;
margin-left: 50px;
padding: 20px;
}
.form-group {
margin-bottom: 15px;
}
label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
input[type="text"] {
width: 100%;
padding: 8px;
border: 1px solid #ddd;
border-radius: 4px;
box-sizing: border-box;
}
input[type="text"]:focus {
border-color: #4CAF50;
outline: none;
}
.error {
color: red;
font-size: 12px;
margin-top: 5px;
}
.hint {
color: #666;
font-size: 12px;
margin-top: 5px;
}
button {
background-color: #4CAF50;
color: white;
padding: 10px 20px;
border: none;
border-radius: 4px;
cursor: pointer;
}
button:hover {
background-color: #45a049;
}
</style>
</head>
<body>
<h1>Dotcpp编程 —— 表单验证实例</h1>
<form method="POST" action="test.php" >
<div class="form-group">
<label for="name">姓名:</label>
<input type="text" id="name" name="name" value="Dotcpp用户" required>
<div class="hint">请输入您的姓名</div>
</div>
<div class="form-group">
<label for="tel">电话号码:</label>
<input type="text" id="tel" name="tel" value="13345678910"
pattern="1[3-9]\d{9}"
title="请输入11位有效手机号码(以13-19开头)"
required>
<div class="hint">格式:1开头,第二位3-9,共11位数字</div>
<div class="error" ></div>
</div>
<div class="form-group">
<label for="email">邮箱:</label>
<input type="text" id="email" name="email" value="123456@dotcpp.com" required>
<div class="hint">请输入有效的邮箱地址</div>
<div class="error" ></div>
</div>
<button type="submit">提交</button>
</form>
</body>
</html>效果展示:
1. 填写页面信息(页面有默认值的,也可以不用填写):

2. 点击提交,可以看到“注册成功”。(默认信息是符合条件的,读者可以试试其他不合格的数据检查报错)

总结:通过完成整个表单验证实例,我们应该掌握基本的表单验证技巧和具体验证方法。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程