批改状态:合格
老师批语:如果记我面试一个程序员, 一个用户登录验证的全流程就够了
进行表单验证之前,先了解一下超全局变量。
1.是指没一个php程序(就是一个动态的php页面)都已经存在的变量,不需要用户去主动创建。
2.它的值,是由系统根据每个php程序自动设置初始值,大部分是反映程序状态。
3.它的值,大多是允许用户更新,但是不能删除它这个变量本身,否则会引起致命错误。
4.它没有作用域限制,无论是全局,还是函数中,都能直接使用,不需要声明。
5.因为每一个页面的超全局变量都是直接使用,很容易让初学者产生错觉:它是跨页面的,可以在多个页面使用。其实不行,它只是每个页面都已存在,但是其数值都是每个页面独立的数值,并不能交叉使用。
它是收据服务器信息的超全局变量,输出它会显示出服务状态信息
例
<?phpecho '<pre>'.print_r($_SERVER,true).'<pre>';
图
它是请求数据的超全局变量,里面保存的是用户发出的所有的请求数据
包括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变量
例
<?phpecho '<pre>'.print_r($_REQUEST,true).'<pre>';
输出结果
$_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()可以检查接收到的数据是否为空(未填写)
例
<?PHPif(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=表单验证上一个写掉了,补上补上。这个感觉挺有用的,一定要补上- -###
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号