重定向脚本,PHP后的形式哈希


Redirecting script, with PHP after form hashing

我刚开始用PHP编码,我被重定向困住了。我已经接受了提交表单中的$_POST信息,并将它们赋值给变量。我收到2个密码变量:$password和$c_password。我的目的是检查这两个密码是否匹配,如果匹配,我要对它们进行散列。如果不是,我想将用户发送回(重定向)到register.php页面。问题是,如果我阻止javascript重定向下面的一切,它的工作。但是,如果我不阻止脚本后的js重定向,用户在数据库上注册,并被重定向到login.php页面。以下是我目前编写的代码:

<?php
// Open database connection
include 'db_connect.php';
// check existence and accept form data
if(isset($_POST['username']) && isset($_POST['email']) && isset($_POST['password']) && isset($_POST['c_password'])) {
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
$c_password = $_POST['c_password'];
}
// Hash the password if password and c_password match
if(strcmp($password, $c_password) == 0) {
$password = hash('sha512',$_POST['password']);
} 
else { ?>
    <script type="text/javascript">
        document.location = './register.php?pass_nomatch=1';
    </script>
<?php
}
// Create a random salt
$random_salt = hash('sha512', uniqid(mt_rand(1, mt_getrandmax()), true));
// Create salted password (Careful not to over season)
$password = hash('sha512', $password.$random_salt);
// Add your insert to database script here. 
// Make sure you use prepared statements!
if ($insert_stmt = $mysqli->prepare("INSERT INTO members (username, email, password, salt) VALUES (?, ?, ?, ?)")) {    
$insert_stmt->bind_param('ssss', $username, $email, $password, $random_salt); 
// Execute the prepared query.
$insert_stmt->execute();
// Close MYSQL database connection
mysqli_close($mysqli);
// Redirect user to login page
header('Location: ./login.php');
}
?>

如果有人对我的问题有答案,请尽快回复:)

直接使用:

header('Location: http://www.yoursite.com/page.php');

,然后停止脚本:

die();

要在PHP中重定向页面,可以使用内置函数 header() ;

ex: header('Location: http://www.yoursite.com/page.php')

记住,将绝对路径作为头文件的参数是很重要的。这是为什么从维基百科:HTTP_location

因特网标准要求一个绝对的URI跟在位置后面头,这意味着它必须包含一个方案[4](例如,http:, https:,Telnet:, mailto:)[5],并且符合特定于方案的语法和语义。例如,HTTP模式特定的语法和语义对于HTTP url需要"host"(web服务器地址)和"absolute"Path",可选组件port和query。在这种情况下如果没有绝对路径,则必须以"/"形式给出作为资源的请求URI。[6]

现在,匹配密码应该很容易,如:

if($passwordA === $passwordB) {
    // === is called, identity comparison operator. 
   // http://www.php.net/manual/en/language.operators.comparison.php
else{ 
    header('Location: http://site.com/register.php?pass_nomatch=1');
    die("If you are not redirected in 5 seconds, click <a href='#'>here<a/> ");
  }