为了账号安全,请及时绑定邮箱和手机立即绑定

这两句判断写法意义一样吗?

这两句判断写法意义一样吗?

PHP
我是新手_请多指教 2017-04-26 17:05:42
第一种:if($_POST['username']!=NULL && $_POST['password']!=NULL){...} 第二种:if(isset($_POST['username']) && isset($_POST['password'])){...} <?php      if(isset($_POST['username']) && $_POST['username']!=null && $_POST['password']!=null){       $username=$_POST['username'];       $password=$_POST['password'];        $conn=mysqli_connect('localhost','root','root','test');      if(mysqli_connect_errno()){       die('数据库连接失败'.mysqli_connect_error());      }else{         mysqli_set_charset($conn,'utf8');      }      $sql="select * from user where username='$username'";      $res=mysqli_query($conn,$sql);      $row=mysqli_fetch_assoc($res);      if($row['password']==$password){       setcookie('username',$username,time()+60*60*24*30);       setcookie('password',$password,time()+60*60*24*30);       header('Location:welcome.php'."?username=$username");      }else{       echo '用户与密码不匹配';       exit;      }   }      if(isset($_COOKIE['username']) && $_COOKIE['username']!=null && $_COOKIE['password']!=null){       $username=$_COOKIE['username'];       $password=$_COOKIE['password'];       $conn=mysqli_connect('localhost','root','root','test');       if(mysqli_connect_errno()){       die('数据库连接失败'.mysqli_connect_error());       }else{       mysqli_set_charset($conn,'utf8');       }         $sql="select * from user where username=$username";         $result=mysqli_query($conn,$sql);         $row=mysqli_fetch_assoc($result);         if($row['password']==$password){          header('Location:welcome.php'."?username=$username");         }      }       ?> <!doctype html> <html> <head> <meta charset="UTF-8" /> <title>登陆界面</title> </head> <body> <form action="" method='post'> 用户名:<input type="text" name='username'  /><br/> 密码:<input type="password" name='password' /><br/> <input type="submit" value='登录' /> </form> </body> </html>教程上经常是第一种,由于没有使用isset判断经常会出现Notice: Undefined index:  的问题 如果自己改用第二种写法就不会有问题了,但是会不会有漏洞;
查看完整描述

3 回答

已采纳
?
子期不遇

TA贡献150条经验 获得超35个赞

正常来说,你应该先判断,数据是不是post过来的,也就是isset();然后你再用$_POST[]去判断里面的值。

查看完整回答
反对 回复 2017-04-26
  • 我是新手_请多指教
    我是新手_请多指教
    怎么先判断,直接写成这样? if(isset($_POST['username']) && $_POST['username'] && $_POST['password']){ $username=$_POST['username']; $password=$_POST['password']; } 还是这样 if(isset($_POST['username'])){ if($_POST['username'] && $_POST['password']){ $username=$_POST['username']; $password=$_POST['password']; } }
  • 子期不遇
    子期不遇
    既然是post或者get,那么肯定有提交按钮submit,先判断是不是通过提交获得数据,可以先if(isset($_POST['submit'])),如果为true,那么再执行后续的。
  • 我是新手_请多指教
    我是新手_请多指教
    这样也可以吗?这样写的话确实不会再报Notice: Undefined index的问题,但是第一层循环都进不去,即便用户名和密码都正确的情况下。
点击展开后面3
?
大写的王

TA贡献122条经验 获得超162个赞

if($_POST['username'] && $_POST['password']){...}
//你改成这样判断 这样就是2个变量都为真的情况下操作。变量为假的情况不一定是你的!=null这一种情况。


查看完整回答
1 反对 回复 2017-04-26
  • 我是新手_请多指教
    我是新手_请多指教
    不用isset的话还是会Notice: Undefined index: username,除非再加一句if(isset($_POST['username']) && $_POST['username'] && $_POST['password'])才不会notice
  • 大写的王
    大写的王
    不会是那个判断 而是你post的有没有这个参数名
  • 我是新手_请多指教
    我是新手_请多指教
    但是html两个input表单除了表单类型外都有写name='username'和name='password',搜索引擎上解释说要么error_reporting = E_ALL &~Notice,要么要isset
?
江户川秋风

TA贡献78条经验 获得超21个赞

第一种是判断值是否为空,第二种是判断变量是否定义,两种区别请自己体会

查看完整回答
反对 回复 2017-04-26
  • 3 回答
  • 2 关注
  • 2122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信