2012-10-04 96 views
0

我创建了一个非常简单的登录页面,我在提交表单后验证PHP上的用户名和密码。PHP - 如果条件语句被跳过,除非指定了else

我在验证第一步是检查用户名和密码不为空,如果空我送用户返回到登录页面:

$e = $_POST['email']; 
$p = $_POST['password']; 


if($e == '' || $p == '' || is_null($e) || is_null($p)){ 
    header('Location: login.php?e=missing'); 
} 

事实证明,在if语句检查如果用户名和密码是空的只有工作,如果我添加一个else声明:

$e = $_POST['email']; 
$p = $_POST['password']; 


if($e == '' || $p == '' || is_null($e) || is_null($p)){ 
    header('Location: login.php?e=missing'); 
}else{ 

    //more validation 
} 

说实话,我的代码工作,我加入了else和问题解决了,但为什么??? 谢谢。

+0

我会考虑加入少许验证 – Chris

+1

值得指出的,还有,你的第二个例子多了两个检查:对'$ e'和'$ p'的'is_null'功能瓦尔。 –

回答

4
$e = $_POST['email']; 
$p = $_POST['password']; 


if(trim($e) == '' || trim($p) == ''){ 
    header('Location: login.php?e=missing'); 
    exit(); // add this else it wont leave the page! 
}else{ 

    //more validation 
} 
+1

您也可以使用'empty()'函数来测试一个变量是否为“空”。 –

+0

这是真的 - 没有想到 - 会比=='' – Chris

+0

不是头()应该退出一切以及? – multimediaxp

1
if($e == '' || $p == ''){ 
    header('Location: login.php?e=missing'); 
} 

您需要在标题行之后添加exit();否则,处理将继续正常进行,并且所有其余代码都将运行。

0
$e = $_POST['email']; 
$p = $_POST['password']; 

if(!empty($e) && !empty($p)) 
{ 
    header('Location: login.php?e=missing'); 
    exit(); 
} 
else 
{ 
    //more validation 
} 
0
if($e == '' || $p == ''){ 
     header('Location: login.php?e=missing'); 
    } 

Rathen市的则是使用:

if(!isset($e) || !isset($p)){ 
    header('Location: login.php?e=missing'); 
    exit(); 
} 

它是因为白色的空间,也可以使用TRIM()函数删除空格和使用的exit() ;标题后必须使用*

1

您需要使用empty来检查变量是否已设置,以及是否为空。

$e = $_POST['email']; 
$p = $_POST['password']; 

if(empty($e) || empty($p))  { 
    header('Location: login.php?e=missing'); 
    exit; 
} 
else { 
//more validation 
}