1

PHP でコーディングを始めたばかりで、リダイレクトに悩まされています。送信されたフォームから $_POST 情報を受け取り、それらを変数に割り当てました。$password と $c_password の 2 つのパスワード変数を受け取ります。私の目的は、これらのパスワードが両方とも一致するかどうかを確認することです。一致する場合は、それらをハッシュしたいと思います。そうでない場合は、ユーザーを register.php ページに送り返します (リダイレクト)。問題は、javascript リダイレクトの下のすべてをブロックすると機能することです。しかし、js リダイレクト後にスクリプトをブロックしないと、ユーザーは DB に登録され、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');
}

?>

誰かが私の質問に答えている場合は、できるだけ早く返信してください:)

4

2 に答える 2

1

使用するだけです:

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

次に、スクリプトを停止します。

die();

これにより、スクリプトが確実に停止します。

于 2013-05-11T14:03:19.267 に答える