PHP表单提交

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 [ &quot; P H P S E L F &quot; ] 变 量 有 可 能 会 被 黑 客 使 用 ! 当 黑 客 使 用 跨 网 站 脚 本 的 H T T P 链 接 来 攻 击 时 , _SERVER[&quot;PHP_SELF&quot;] 变量有可能会被黑客使用! 当黑客使用跨网站脚本的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 // 定义变量并默认设为空值 $nameErr = $emailErr = $genderErr = $websiteErr = ""; $name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["name"])) { $nameErr = "名字是必需的。"; } else { $name = test_input($_POST["name"]); } if (empty($_POST["email"])) { $emailErr = "邮箱是必需的。"; } else { $email = test_input($_POST["email"]); } if (empty($_POST["website"])) { $website = ""; } else { $website = test_input($_POST["website"]); } if (empty($_POST["comment"])) { $comment = ""; } else { $comment = test_input($_POST["comment"]); } if (empty($_POST["gender"])) { $genderErr = "性别是必需的。"; } else { $gender = test_input($_POST["gender"]); } } ?>

PHP - 显示错误信息
在以下的HTML实例表单中,我们为每个字段中添加了一些脚本, 各个脚本会在信息输入错误时显示错误信息。(如果用户未填写信息就提交表单则会输出错误信息):

名字: * <?php echo $nameErr;?>

E-mail: * <?php echo $emailErr;?>

网址: <?php echo $websiteErr;?>

备注:

性别: 女 男 * <?php echo $genderErr;?>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值