表单的数据验证(初级)
超全局变量
进行表单验证之前,先了解一下超全局变量。
1.是指没一个php程序(就是一个动态的php页面)都已经存在的变量,不需要用户去主动创建。
2.它的值,是由系统根据每个php程序自动设置初始值,大部分是反映程序状态。
3.它的值,大多是允许用户更新,但是不能删除它这个变量本身,否则会引起致命错误。
4.它没有作用域限制,无论是全局,还是函数中,都能直接使用,不需要声明。
5.因为每一个页面的超全局变量都是直接使用,很容易让初学者产生错觉:它是跨页面的,可以在多个页面使用。其实不行,它只是每个页面都已存在,但是其数值都是每个页面独立的数值,并不能交叉使用。
超全局变量$_SERVER
它是收据服务器信息的超全局变量,输出它会显示出服务状态信息
例
<?php
echo '<pre>'.print_r($_SERVER,true).'<pre>';
图
超全局变量$_REQUEST
它是请求数据的超全局变量,里面保存的是用户发出的所有的请求数据
包括get,post,cookie。
例:我们用HTML建一个表单,然后在表单的FORM属性里面action="demo2.php"
等号后面的demo2.php为数据接收文件。method="POST"
属性为数据发送格式,默认是GET。
附上HTML代码,CSS代码相信大家都会,就不附上了
<body>
<!-- 主要注意action属性它主要表示接收数据的文件,如果文件名错误接收不了数据,method主要表示数据发送的格式。 -->
<form action="demo2.php" method="POST">
<h2>用户注册</h2>
<span>
<label for="username">用户名:</label>
<input type="text" name="username" id="username">
</span>
<span>
<label for="password1">密码:</label>
<input type="password" name="password1" id="password1" required>
</span>
<span>
<label for="password2">确认密码:</label>
<input type="password" name="password2" id="password2" required>
</span>
<span>
<label for="gender">性别:</label>
<!-- 必须要后value属性不然PHP文件接收不了具体的值 -->
<input type="radio" name="gender" id="male" value="male">男
<input type="radio" name="gender" id="female"value="female">女
<input type="radio" name="gender" id="secret" value="secret" checked>保密
</span>
<span>
<label for="">爱好:</label>
<!-- name标签里面必须是空数组格式,不然PHP文件接收到的只有一个值 -->
<input type="checkbox" name="hobby[]" id="sport" value="sport" checked>运动
<input type="checkbox" name="hobby[]" id="book" value="book" checked>看书
<input type="checkbox" name="hobby[]" id="game" value="game" >游戏
<input type="checkbox" name="hobby[]" id="sleeep" value="sleeep" >睡觉
</span>
<span>
<label for="email">电子邮箱:</label>
<input type="email" name="email" id="email" placeholder="admin@qq.com" required>
</span>
<button>提交</button>
</form>
</body>
图
表单填写后,提交给PHP文件,PHP文件上输出$_REQUEST
变量
例
<?php
echo '<pre>'.print_r($_REQUEST,true).'<pre>';
输出结果
如果表单数据发送格式为POST,可以使用$_POST
超全局变量来输出请求数据
例
<?php
// $_REQUEST获取数据并输出
echo '<pre>'.print_r($_REQUEST,true).'<pre>';
// 使用$_POST获取数据并输出
echo '<pre>'.print_r($_POST,true).'<pre>','<hr>';
echo '因为表单发送的数据只有POST,两个超全局变量输出的数据是一样的,如果有cooike或者get,$_REQUEST会把它们一起输出。同理如果需要单独获取get格式,就用$_GET,想要获取cookie 就用$_COOKIE';
图
判断表单发送的数据是否为空
通过empty()
可以检查接收到的数据是否为空(未填写)
例
<?PHP
if(empty($POST['username'])){
echo '用户名未填写';
}
图
表单数据的验证
通过上述变量与函数,可以获取到数据,就能对表单进行验证,一个注册表单的基础验证就是发送数据的方式、密码的验证。
例
<?php
// 首先用$_SERVER变量取其中的REQUEST_MTHOD健名获取到表单的数据发送格式,如果为POST(加密发送)就继续执行,如果不为POST,就终止。
if($_SERVER['REQUEST_METHOD'] === 'POST'){
// 使用empty函数判断发送的数据时候未空,如果不为空就赋值给下面的变量 注:!empty表示取反,就是不为空的意思。
//这行IF代码是完整写法
if(!empty($_POST['username'])){
$username = $_POST['username'];
}
//以下IF代码是简写
if(!empty($_POST['password1']))$password1 = $_POST['password1'];
if(!empty($_POST['password2']))$password2 = $_POST['password2'];
//获取到两次密码,判断两次密码是否一致,如果一致就赋值给变量$password方便保存,如果不一致就提示用户重新填写。
if($password1 === $password2){
$password = $password1;
}else{
exit('两次密码不正确,重新填写');
}
//获取到其他数据,并赋值给变量方便保存
if(!empty($_POST['email']))$email = $_POST['email'];
if(!empty($_POST['gender']))$gender = $_POST['gender'];
if(!empty($_POST['hobby']))$hobby = $_POST['hobby'];
}else{
//如果数据发送类型错误就终止
exit('<h3>数据请求错误</h3>');
}
//把获取到的数据压缩保存在一个数组里面,方便后续提取使用
//compact函数,把变量转换为一个关联数组(里面的键名与需要转换的变量相对应,如果填写错误不能转换)
$date = compact('username','password','email','gender','hobby');
//打印压缩后的数组,查看是否成功
echo '<pre>'.print_r($date,true).'</pre>';
echo '如果表单发送一切正确就会输出以上内容';
图
=0=表单验证上一个写掉了,补上补上。这个感觉挺有用的,一定要补上- -###