php if语句即使执行也没有执行

时间:2012-09-19 23:24:59

标签: php if-statement

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

<?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');
?>

3 个答案:

答案 0 :(得分:1)

header重定向命令之后,你需要exit;,否则代码会继续运行,给出重复的标题命令 - 你发送的最后一个是行动的。

答案 1 :(得分: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');
}

答案 2 :(得分: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...
}

这将使下一个章节更容易阅读您的代码(或者如果您在六个月后再回来) - 并且还会使多个操作无法发生。