我想比较两个密码,以确保它们匹配并重定向,如果不使用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');
?>
答案 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...
}
这将使下一个章节更容易阅读您的代码(或者如果您在六个月后再回来) - 并且还会使多个操作无法发生。