2012-09-19 28 views
2

我想比较两个密码,以确保它们匹配并重定向,如果不使用PHP。我编写了这些代码,但即使密码不匹配,if语句中的代码也不会执行。PHP如果语句不执行,即使真正

<?php 
include 'includes/dbcnx.php'; 
$username = $_POST['username']; 
$password = $_POST['password']; 
$pass2 = $_POST['pass2']; 
$email = $_POST['email']; 

if($password != $pass2) 
    header('Location: register_form.php'); 
if(strlen($username)>30) 
    header('Location: register_form.php?error=1&usrlen=1'); 

$username = mysql_real_escape_string($username); 
$email = mysql_real_escape_string($email); 
$salt = createSalt(); 
$hash = hash('sha256',$salt.$hash); 
mysql_select_db("sealion"); 
$query = "INSERT INTO users (username, password, salt, email) 
     VALUES ('$username','$hash','$salt','$email');"; 
mysql_query($query); 
header('Location: index.php'); 
?> 
+1

你是如何确认它没有执行该行的? – martincho

回答

0

代码执行,但header()不会停止它自己正在执行的代码的其余部分:

if($password != $pass2) 
{ 
    header('Location: register_form.php'); 
    exit; 
} 

关于这一点,你的代码可能会更容易,如果你把阅读条件语句中的整套操作。

if($password != $pass2) 
{ 
    header('Location: register_form.php'); 
} 
else if(strlen($username)>30) 
{ 
    header('Location: register_form.php?error=1&usrlen=1'); 
} 
else 
{ 
    // Do your updates here... 
} 

这将使您的代码更易于在下一章阅读(或者,如果你回来,在半年的时间) - 也将使它不可能多个动作发生。

+0

是的,我可以看到,这将是一个更优雅的做法,欢呼。 – dinners

0

您在脚本结束时再次改变Location头:

if(strlen($username)>30) 
    header('Location: register_form.php?error=1&usrlen=1'); 
/* ... */ 
header('Location: index.php'); 

我的猜测是if块被正确执行,但在调用header()功能的第二时间更改标题。尝试使用if-else代替:

if(strlen($username)>30) { 
    header('Location: register_form.php?error=1&usrlen=1'); 
} 
else { 
    $username = mysql_real_escape_string($username); 
    $email = mysql_real_escape_string($email); 
    $salt = createSalt(); 
    $hash = hash('sha256',$salt.$hash); 
    mysql_select_db("sealion"); 
    $query = "INSERT INTO users (username, password, salt, email) 
      VALUES ('$username','$hash','$salt','$email');"; 
    mysql_query($query); 
    header('Location: index.php'); 
} 
1

header重定向命令后,您需要exit;否则代码只是继续运行,从而重复头命令 - 您发送的最后一个是作用的一个。

+0

啊,太棒了,那整理它!我一直认为header命令退出了代码本身...... doh!谢谢! – dinners