php if语句即使为true也不执行

php if语句即使为true也不执行,php,if-statement,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)

我想比较两个密码,以确保它们匹配,如果不使用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');
?>

在脚本末尾再次更改
位置
标题:

if(strlen($username)>30)
    header('Location: register_form.php?error=1&usrlen=1');
/* ... */
header('Location: index.php');
我的猜测是
如果
块正确执行,但是第二次调用
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');
}

在执行
标题
重定向命令后,您需要退出
否则代码将继续运行,并给出重复的头命令-您最后发送的是执行的命令。

代码确实会执行,但
头()
不会停止其自身执行的其余代码:

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...
}

这将使您的代码更容易被下一个chap阅读(或者如果您在六个月后回来阅读的话),并且也不可能发生多个操作。

您是如何确认它没有执行该行的?啊,太好了,这就解决了问题!我一直认为header命令退出了代码本身。。。啊!谢谢是的,我看这是一种更优雅的方式,干杯。