2

2つのパスワードを比較して、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');
?>
4

3 に答える 3

1

headerリダイレクトコマンドの後、exit;それ以外の場合はコードを実行し続け、重複するヘッダーコマンドを指定する必要があります。最後に送信するコマンドが機能します。

于 2012-09-19T23:27:28.537 に答える
0

Locationスクリプトの最後でヘッダーを再度変更します。

if(strlen($username)>30)
    header('Location: register_form.php?error=1&usrlen=1');
/* ... */
header('Location: index.php');

私の推測では、ifブロックは正しく実行されていますが、header()関数を2回呼び出すと、ヘッダーが変更されます。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');
}
于 2012-09-19T23:27:21.780 に答える
0

コード実行されますが、aheader()はそれ自体で実行されている残りのコードを停止しません。

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

これにより、次の章でコードが読みやすくなります(または、6か月以内に戻ってきた場合)。また、複数のアクションが発生することも不可能になります。

于 2012-09-19T23:28:13.387 に答える