PHP - 表单验证
你好,有抱负的PHP开发者们!今天,我们将深入表单验证的精彩世界。作为你友好的邻居计算机老师,我将在网页开发这个关键方面引导你。相信我,掌握表单验证就像学习骑自行车一样 - 一旦你学会了,你就永远不会忘记!
为什么表单验证很重要
在我们跳入代码之前,让我们先谈谈为什么表单验证如此重要。想象一下,你正在经营一个在线披萨快递服务。如果有人订购了'ABC'披萨或者输入'-5'作为他们的电话号码,你将会非常头疼!这就是表单验证发挥作用的地方,确保你接收到的数据是正确且可用的。
客户端验证与服务器端验证
在表单验证的世界中,我们有两个主要的角色:客户端验证和服务器端验证。今天,我们将专注于使用PHP的服务器端验证,但让我们先简要地了解一下两者:
客户端验证
客户端验证发生在用户浏览器中,在数据发送到服务器之前。它快速并提供即时反馈,但它可以被熟练的用户绕过。
服务器端验证
服务器端验证在表单提交后发生在服务器上。它更安全、更可靠,因为用户无法篡改它。这就是我们今天将要深入探讨的内容。
开始使用PHP表单验证
让我们从一个简单的表单开始,并逐步构建我们的验证。这是我们基本的HTML表单:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
姓名: <input type="text" name="name"><br>
年龄: <input type="text" name="age"><br>
<input type="submit" name="submit" value="提交">
</form>
现在,让我们添加一些PHP魔法来验证这个表单!
验证函数
在我们深入研究具体的验证之前,让我们创建一些辅助函数:
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
这个test_input()
函数做了三件重要的事情:
-
trim()
移除字符串两端的空白字符 -
stripslashes()
移除反斜杠 -
htmlspecialchars()
将特殊字符转换为HTML实体
这些步骤有助于防止恶意代码注入,并确保我们的数据是干净的。
表单为空
让我们从一个基本的检查开始:表单是否为空?以下是如何操作的:
<?php
$name = $age = "";
$nameErr = $ageErr = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "姓名是必填项";
} else {
$name = test_input($_POST["name"]);
}
if (empty($_POST["age"])) {
$ageErr = "年龄是必填项";
} else {
$age = test_input($_POST["age"]);
}
}
?>
在这段代码中:
- 我们初始化变量来存储我们的表单数据和错误消息。
- 我们检查表单是否使用了POST方法提交。
- 对于每个字段,我们检查它是否为空。如果是,我们设置一个错误消息。如果不是,我们使用我们的
test_input()
函数清理输入。
年龄字段不是数字
现在,让我们为年龄字段添加一个特定的检查,以确保它是一个数字:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// ... 前面的检查 ...
if (empty($_POST["age"])) {
$ageErr = "年龄是必填项";
} else {
$age = test_input($_POST["age"]);
if (!is_numeric($age)) {
$ageErr = "年龄必须是数字";
}
}
}
在这里,我们使用is_numeric()
函数添加了一个额外的检查,以确保年龄实际上是一个数字。如果不是,我们设置一个适当的错误消息。
一切就绪
现在,让我们看看我们的完整表单验证脚本是什么样的:
<?php
$name = $age = "";
$nameErr = $ageErr = "";
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "姓名是必填项";
} else {
$name = test_input($_POST["name"]);
}
if (empty($_POST["age"])) {
$ageErr = "年龄是必填项";
} else {
$age = test_input($_POST["age"]);
if (!is_numeric($age)) {
$ageErr = "年龄必须是数字";
}
}
}
?>
<h2>PHP 表单验证示例</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
姓名: <input type="text" name="name">
<span class="error"><?php echo $nameErr;?></span>
<br><br>
年龄: <input type="text" name="age">
<span class="error"><?php echo $ageErr;?></span>
<br><br>
<input type="submit" name="submit" value="提交">
</form>
<?php
echo "<h2>你的输入:</h2>";
echo $name;
echo "<br>";
echo $age;
?>
这个脚本:
- 定义了变量和函数
- 在提交表单时进行验证
- 显示表单并在有错误时显示错误消息
- 显示验证后的输入
验证方法表
以下是一个常见的PHP验证方法的便捷表格:
方法 | 描述 | 示例 |
---|---|---|
empty() | 检查变量是否为空 | if (empty($var)) |
isset() | 检查变量是否已设置且不为NULL | if (isset($var)) |
is_numeric() | 检查变量是否为数字或数字字符串 | if (is_numeric($var)) |
strlen() | 获取字符串的长度 | if (strlen($var) > 5) |
preg_match() | 执行正则表达式匹配 | if (preg_match("/模式/", $var)) |
filter_var() | 使用指定的过滤器过滤变量 | if (filter_var($var, FILTER_VALIDATE_EMAIL)) |
记住,表单验证是确保数据完整性和提高用户体验的全部。它就像夜总会的保安 - 你希望让好的数据进来,把坏的数据挡在外面!
在我们结束之前,我希望这个教程为你提供了PHP表单验证的坚实基础。记住,熟能生巧,所以不要害怕尝试不同的表单和验证技术。在你意识到之前,你就会成为一个表单验证的高手!
快乐编码,愿你的表单总是有效!
Credits: Image by storyset