7-php表单验证

php表单验证

1、表单验证

本章节我们将介绍如何使用PHP验证客户端提交的表单数据。

在处理PHP表单时我们需要考虑安全性。

本章节我们将展示PHP表单数据安全处理,为了防止黑客及垃圾信息我们需要对表单进行数据安全验证。

在本章节介绍的HTML表单中包含以下输入字段: 必须与可选文本字段,单选按钮,及提交按钮:

需求如下:

1、需要一个注册页面的处理系统

字段验证规则
名字可以输入字符串
E-mail可以输入字符串
爱好多选(足球、篮球、羽毛球、看书、写字;)
备注多行输入字段(文本域)
性别单选(男、女)

首先实现起来,按照我们所学,可以很轻易的写出基本框架

<head>
<meta charset="utf-8">
</head>
<form action="" method="post"> 
名字:
<input type="text" name="name" > <br> 
邮件:
<input type="text" name="email" ><br> 
爱好:
<input type="checkbox" name="aihao[]" value="足球" >足球
<input type="checkbox" name="aihao[]" value="篮球">篮球
<input type="checkbox" name="aihao[]" value="羽毛球">羽毛球
<input type="checkbox" name="aihao[]" value="看书">看书
<input type="checkbox" name="aihao[]" value="写字">写字
<input type="checkbox" name="aihao[]"><br>
备注:
<textarea name="beizhu" ></textarea><br>
性别:
<input type="radio" name="xingbie" value=""><input type="radio" name="xingbie" value=""><br>
<input type="submit" value="提交">
</form>
value="提交">
</form>

写入后端页面,要求可以接收到数据用户输入的数据

<?php
$name=$_REQUEST['name'];
$email=$_REQUEST['email'];
$aihao=$_REQUEST['aihao'];

$beizhu=$_REQUEST['beizhu'];
$xingbie=$_REQUEST['xingbie'];

echo "名字为:".$name."</br>";
echo "邮箱为:".$email."</br>";
echo "爱好为:";
foreach($aihao as $ah){
    echo $ah."      ";
};
echo "</br>备注为:".$beizhu."</br>";
echo "性别为:".$xingbie."</br>";
?>

但是其实只是这样简单的写,就已经产生了安全漏洞,这就是安全漏洞的由来

一般的程序员只会考虑用户的需求,不会考虑安全问题

XSS攻击代码:<script>alert(‘xss’);</script>

加固方法:

什么是 htmlspecialchars()方法?

htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。

预定义的字符是:

& (和号) 成为 &
" (双引号) 成为 "
' (单引号) 成为 &#039;
< (小于) 成为 &#gt
> (大于) 成为 &#gt

加固后的完整代码:

<head>
<meta charset="utf-8">
</head>

<?php
$name=htmlspecialchars($_REQUEST['name']);
$email=htmlspecialchars($_REQUEST['email']);
$aihao=$_REQUEST['aihao'];
$beizhu=htmlspecialchars($_REQUEST['beizhu']);
$xingbie=htmlspecialchars($_REQUEST['xingbie']);

echo "名字为:".$name."</br>";
echo "邮箱为:".$email."</br>";
echo "爱好为:";
if($aihao!=""){
    foreach($aihao as $ah){
        echo htmlspecialchars($ah)."  ";}
}else{
    echo "没有爱好</br>";
}



echo "</br>备注为:".$beizhu."</br>";
echo "性别为:".$xingbie."</br>";
?>

<form action="" method="post"> 
名字:
<input type="text" name="name" > <br> 
邮件:
<input type="text" name="email" ><br> 
爱好:
<input type="checkbox" name="aihao[]" value="足球" >足球
<input type="checkbox" name="aihao[]" value="篮球">篮球
<input type="checkbox" name="aihao[]" value="羽毛球">羽毛球
<input type="checkbox" name="aihao[]" value="看书">看书
<input type="checkbox" name="aihao[]" value="写字">写字
<input type="checkbox" name="aihao[]"><br>
备注:
<textarea name="beizhu" ></textarea><br>
性别:
<input type="radio" name="xingbie" value="男"><input type="radio" name="xingbie" value="女"><br>
<input type="submit" value="提交">
</form>

2、必填以及验证

名字必须。 +只能包含字母和空格
E-mail必须。 + 必须是一个有效的电子邮件地址(包含’@‘和’.')
爱好可选,多选(足球、篮球、羽毛球、看书、写字;)
备注可选。多行输入字段(文本域)
性别必须。 必须选择一个

如果在前面的章节中,所有输入字段都是可选的。

在以下代码中我们加入了一些新的变量: $nameErr, $emailErr, $genderErr, 和 w e b s i t e E r r . 。这些错误变量将显示在必需字段上。我们还为每个 websiteErr.。这些错误变量将显示在必需字段上。 我们还为每个 websiteErr.。这些错误变量将显示在必需字段上。我们还为每个_POST变量增加了一个if else语句。 这些语句将检查 $_POST 变量是 否为空(使用php的 empty() 函数)。如果为空,将显示对应的错误信息。 如果不为空,数据将传递给test_input() 函数:

除去基本的if判断语句,可以判断是否为空,还有一个函数也可以继续判断

empty()函数,使用用法如下:

<?php
$a="123321";
echo empty($a);
?>

结合if判断

<?php
$a="";
if(empty($a)){
    echo "kong";
}else{
    echo "bukong";
}
?>

最终完整的代码如下:

<head>
<meta charset="utf-8">
</head>

<?php
$name=htmlspecialchars($_REQUEST['name']);
$email=htmlspecialchars($_REQUEST['email']);
$aihao=$_REQUEST['aihao'];
$beizhu=htmlspecialchars($_REQUEST['beizhu']);
$xingbie=htmlspecialchars($_REQUEST['xingbie']);
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if(empty($name)){
$nameErr="名字不能为空";
}elseif(empty($email)){
$emailErr="邮件不能为空";
}
elseif(empty($xingbie)){
$xingbieErr="性别不能为空";
}else{
$name="名字为:".$name."</br>";
$email="邮箱为:".$email."</br>"; 
$beizhu="</br>备注为:".$beizhu."</br>";
$xingbie="性别为:".$xingbie."</br>";
}}
?>

<form action="" method="post"> 
名字(*)<input type="text" name="name" > <br> 
<?php echo $nameErr."<br>";?>
邮件(*)<?php echo $emailErr;?>
<input type="text" name="email" ><br> 
<?php echo $nemailErr."<br>";?>
爱好:
<input type="checkbox" name="aihao[]" value="足球" >足球
<input type="checkbox" name="aihao[]" value="篮球">篮球
<input type="checkbox" name="aihao[]" value="羽毛球">羽毛球
<input type="checkbox" name="aihao[]" value="看书">看书
<input type="checkbox" name="aihao[]" value="写字">写字
<input type="checkbox" name="aihao[]"><br>
备注:
<textarea name="beizhu" ></textarea><br>
性别(*)<?php echo $xingbieErr;?>
<input type="radio" name="xingbie" value="男"><input type="radio" name="xingbie" value="女"><br>
<?php echo $xingbieErr."<br>";?>
<input type="submit" value="提交">
</form>

<?php
echo $name;
echo $email;
if($aihao!=""){
    foreach($aihao as $ah){
       echo "爱好:".$ah=htmlspecialchars($ah)."  ";}
}else{
    echo "没有爱好</br>";
}
echo $beizhu;
echo $xingbie;

?>
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星星程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值