早教吧 育儿知识 作业答案 考试题库 百科 知识分享

关于phplogin问题if($POST['btnLogin']){$cont=newSql('shop');unformcode();$obj=newtool();$username=$obj->StrToDBC(trim($POST['username']));$password=$obj->StrToDBC(md5($POST['password']));$loginhis=trim($POST['loginhis']);$referer=

题目详情
关于php login问题
if($_POST['btnLogin']){
$cont=new Sql('shop');
unformcode();
$obj=new tool();
$username = $obj->StrToDBC(trim($_POST['username']));
$password = $obj->StrToDBC(md5($_POST['password']));
$login_his = trim($_POST['login_his']);
$referer = strip_tags($_POST['referer']);
if(strpos($referer,"login.php")>0 || strpos($referer,"register.php")>0 || empty($referer) || isset($referer)){
$referer="/member.php";
}
在上面代码中,看不懂下面这一段,都不知道指代的是什么.麻烦知道的帮我解析一下,
$login_his = trim($_POST['login_his']);
$referer = strip_tags($_POST['referer']);
if(strpos($referer,"login.php")>0 || strpos($referer,"register.php")>0 || empty($referer) || isset($referer)){
$referer="/member.php";
}
▼优质解答
答案和解析
$login_his的值来自$_POST['login_his'],$_POST是系统默认变量,其中的数据是post方式提交的数据组成的数组.trim方法去除字符串两端的空白字符,如空格,tab等
strip_tags是去掉字符串中的html标记
strpos是字符串查找,意思是检查login.php这个字符串在$referer变量的值中出现的位置.整个语句的意思应该是如果$referer不包含login.php且不包含register.php,或者为空的话,则执行里面的语句


第三行的代码写的有毛病.
一般在逻辑判断表达式中,最常用的应该放在前面,或者简单的条件写在前面,这样处理起来更快.
因为前面已经写了$referer = str.,所以! isset($referer)没有任何意义.isset()是用来判断某个变量是否已经定义的.在这段代码中明显$referer已经定义了,所以没必要做这个测试.
empty测试已经涵盖了isset测试,不需要重复的调用.empty是指一个变量的值是未定义,空字符串,长度为0的数组,false或者0等
strpos查找失败我忘记了是返回 -1还是false,但是肯定strpos($referer, 'login.php') > 0是不对的,应该是>=0,而且这个判断不够严格,如果$referer的值是'ulogin.php',那么会得到非预期的结果.