PHP 表单验证
本章节我们将介绍如何使用PHP验证客户端提交的表单数据。
PHP 表单验证
Note 在处理PHP表单时我们需要考虑安全性。
本章节我们将展示PHP表单数据安全处理,为了防止黑客及垃圾信息我们需要对表单进行数据安全验证。
在本章节介绍的HTML表单中包含以下输入字段: 必须与可选文本字段,单选按钮,及提交按钮:
查看代码 »
上述表单验证规则如下:
字段 验证规则
名字 必须。 +只能包含字母和空格
E-mail 必须。 + 必须是一个有效的电子邮件地址(包含’@‘和’.’)
网址 可选。如果存在,它必须包含一个有效的URL
备注 可选。多行输入字段(文本域)
性别 必须。 必须选择一个
首先让我们先看看纯HTML的表单代码:
文本字段
“名字”, “E-mail”, 及"网址"字段为文本输入元素,"备注"字段是 textarea。HTML代码如下所示:
“名字”:
E-mail:
网址:
备注:
单选按钮
"性别"字段是单选按钮,HTML代码如下所示:
性别:
女
男
表单元素
HTML 表单代码如下所示:
$_SERVER[“PHP_SELF”]是超级全局变量,返回当前正在执行脚本的文件名,与 document root相关。
所以, $_SERVER[“PHP_SELF”] 会发送表单数据到当前页面,而不是跳转到不同的页面。
Note 什么是 htmlspecialchars()方法?
htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。
预定义的字符是:
& (和号) 成为 &
" (双引号) 成为 "
’ (单引号) 成为 ’
< (小于) 成为 <
(大于) 成为 >
PHP表单中需引起注重的地方?
S
E
R
V
E
R
[
"
P
H
P
S
E
L
F
"
]
变
量
有
可
能
会
被
黑
客
使
用
!
当
黑
客
使
用
跨
网
站
脚
本
的
H
T
T
P
链
接
来
攻
击
时
,
_SERVER["PHP_SELF"] 变量有可能会被黑客使用! 当黑客使用跨网站脚本的HTTP链接来攻击时,
SERVER["PHPSELF"]变量有可能会被黑客使用!当黑客使用跨网站脚本的HTTP链接来攻击时,_SERVER[“PHP_SELF”]服务器周易起名变量也会被植入脚本。原因就是跨网站脚本是附在执行文件的路径后面的,因此$_SERVER[“PHP_SELF”]的字符串就会包含HTTP链接后面的JavaScript程序代码。
Note XSS又叫 CSS (Cross-Site Script) ,跨站脚本攻击。恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
指定以下表单文件名为 “test_form.php”:
if ($_SERVER[“REQUEST_METHOD”] == “POST”)
{
n
a
m
e
=
t
e
s
t
i
n
p
u
t
(
name = test_input(
name=testinput(_POST[“name”]);
e
m
a
i
l
=
t
e
s
t
i
n
p
u
t
(
email = test_input(
email=testinput(_POST[“email”]);
w
e
b
s
i
t
e
=
t
e
s
t
i
n
p
u
t
(
website = test_input(
website=testinput(_POST[“website”]);
c
o
m
m
e
n
t
=
t
e
s
t
i
n
p
u
t
(
comment = test_input(
comment=testinput(_POST[“comment”]);
g
e
n
d
e
r
=
t
e
s
t
i
n
p
u
t
(
gender = test_input(
gender=testinput(_POST[“gender”]);
}
function test_input($data)
{
d
a
t
a
=
t
r
i
m
(
data = trim(
data=trim(data);
d
a
t
a
=
s
t
r
i
p
s
l
a
s
h
e
s
(
data = stripslashes(
data=stripslashes(data);
d
a
t
a
=
h
t
m
l
s
p
e
c
i
a
l
c
h
a
r
s
(
data = htmlspecialchars(
data=htmlspecialchars(data);
return $data;
}
?>
运行实例 »
注意我们在执行以上脚本时,会通过$_SERVER[“REQUEST_METHOD”]来检测表单是否被提交 。如果 REQUEST_METHOD 是 POST, 表单将被提交 - 数据将被验证。如果表单未提交将跳过验证并显示空白。
在以上实例中使用输入项都是可选的,即使用户不输入任何数据也可以正常显示。
在接下来的章节中我们将介绍如何对用户输入的数据进行验证。
PHP 表单 - 必需字段
本章节我们将介绍如何设置表单必需字段及错误信息。
PHP - 必需字段
在上一章节我们已经介绍了表的验证规则,我们可以看到"名字", “E-mail”, 和 “性别” 字段是必需的,各字段不能为空。
字段 验证规则
名字 必需。 + 只能包含字母和空格
E-mail 必需。 + 必需包含一个有效的电子邮件地址(包含"@“和”.")
网址 可选。 如果存在,它必需包含一个有效的URL
备注 可选。多行字段(文本域)。
性别 必需。必需选择一个。
如果在前面的章节中,所有输入字段都是可选的。
在以下代码中我们加入了一些新的变量: $nameErr, $emailErr, $genderErr, 和
w
e
b
s
i
t
e
E
r
r
.
。
这
些
错
误
变
量
将
显
示
在
必
需
字
段
上
。
我
们
还
为
每
个
websiteErr.。这些错误变量将显示在必需字段上。 我们还为每个
websiteErr.。这些错误变量将显示在必需字段上。我们还为每个_POST变量增加了一个if else语句。 这些语句将检查 $_POST 变量是 否为空(使用php的 empty() 函数)。如果为空,将显示对应的错误信息。 如果不为空,数据将传递给test_input() 函数:
PHP - 显示错误信息
在以下的HTML实例表单中,我们为每个字段中添加了一些脚本, 各个脚本会在信息输入错误时显示错误信息。(如果用户未填写信息就提交表单则会输出错误信息):
E-mail: * <?php echo $emailErr;?>
网址: <?php echo $websiteErr;?>
备注:
性别: 女 男 * <?php echo $genderErr;?>