php if语句即使为true也不执行
我想比较两个密码,以确保它们匹配,如果不使用php,则重定向。我已经编写了这段代码,但是即使密码不匹配,if语句中的代码也不会执行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
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命令退出了代码本身。。。啊!谢谢是的,我看这是一种更优雅的方式,干杯。