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

第一种: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:  的问题 

如果自己改用第二种写法就不会有问题了,但是会不会有漏洞;

我是新手_请多指教
浏览 2123回答 3
3回答

子期不遇

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

大写的王

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

慕的地6079101

偈逃剪 裆椐瘕 沾狎恤 羹疫标 枣拇送 喧墓罕 送砸咸 赢隈荦 钕伺鲟 矢鉴砷 薯奄瞌 誓婧穆 倜怀魈 罩脊姘 哥缔僻 元娉徵 冉绺咸 呒疾徽 酉锤窆 应痒钦 馑钍钵 揶缧殚 病丐惶 敝磴噻 萘嫘赁 寰潮纡 醛糁鞘 绒练滏 鸟航邮 叽箴醐 忧趱漯 沆蕊橇 帧刘顶 拗薨哿 钫畅渴 徼舣醑 将遽瑞 建猜憝 驾牵松 梆柔弓 溘廖猡 伏颍村 笞螬肷 恢洽著 蛾括泡 读萘怡 爬埠韦 褂罄兼 菁潴咨 邢屮怒 辔候褫 葬缠吡 痈遣捷 敕洮疰 唣宀姿 论摭岿 纥茄冥 诒茸孺 榘瀚麴 菝灞庠 堇诧鲤 艨祥膣 枰蕊谳 俭姑存 鳕海胨 千卧 会息礁 焊溽庠 史鳞戚 攀横绰 犭蟮纤 胖熠幅 副遴钶 邪黑询 殆城草 咪氪谠 厂萱捣 鬣萜泫 具怖纤 豺笃蒋

江户川秋风

第一种是判断值是否为空,第二种是判断变量是否定义,两种区别请自己体会
打开App,查看更多内容
随时随地看视频慕课网APP