PHP - 表单验证

你好,有抱负的PHP开发者们!今天,我们将深入表单验证的精彩世界。作为你友好的邻居计算机老师,我将在网页开发这个关键方面引导你。相信我,掌握表单验证就像学习骑自行车一样 - 一旦你学会了,你就永远不会忘记!

PHP - Form Validation

为什么表单验证很重要

在我们跳入代码之前,让我们先谈谈为什么表单验证如此重要。想象一下,你正在经营一个在线披萨快递服务。如果有人订购了'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()函数做了三件重要的事情:

  1. trim()移除字符串两端的空白字符
  2. stripslashes()移除反斜杠
  3. 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;
?>

这个脚本:

  1. 定义了变量和函数
  2. 在提交表单时进行验证
  3. 显示表单并在有错误时显示错误消息
  4. 显示验证后的输入

验证方法表

以下是一个常见的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