簡単なログインページの作成。ユーザーが一致しないパスワードとパスワードの確認を入力すると、登録フォームをリセットしてメッセージを印刷します。現在、メッセージは印刷されませんが、スクリプトを実行します。これは、エラーが発生したときにSESSION変数を設定し、リロード時に、この変数を示すの仕方によって、私が試したものです:PHPで更新メッセージを表示するには?
registration.php:
<?php
session_start();
if (isset($_SESSION['errmsg'])) {
print($_SESSION['errmsg']);
unset($_SESSION['errmsg']);
}
?>
<form name="register" action="register.php" method="post">
<label>Username</label><input type="text" name="username" maxlength="20" />
<label>Password</label><input type="password" name="pass" />
<label>Password Again</label><input type="password" name="pass_confirm" />
<input type="submit" value="Register" />
</form>
register.php:
<?php
function create_salt() {
$string = md5(uniqid(rand(), true));
return substr($string, 0, 3);
}
session_start();
$username = $_POST['username'];
$pass = $_POST['pass'];
$pass_confirm = $_POST['pass_confirm'];
if ($pass != $pass_confirm) {
$_SESSION['errmsg'] = "Passwords do not match.";
header('Location: registration.php');
}
if (strlen($username) > 20) {
header('Location: registration.php');
}
$hash = hash('sha256', $pass);
$salt = create_salt();
$hash = hash('sha256', $salt . $hash);
$conn = mysql_connect('localhost', 'test4', 'test4');
mysql_select_db('test4', $conn);
$username = mysql_real_escape_string($username);
$query = "INSERT INTO users (username, password, salt) VALUES ('$username', '$hash', '$salt');";
mysql_query($query);
mysql_close();
header('Location: index.php');
?>
重要な部分は、if ($pass != $pass_confirm) { ...
です。現在のところ、パスワードが一致しない場合、この条件は満たされますが、header(Location: registration.php)
でリロードするのではなく、スクリプトを実行します。私は、データが送信された後にheader()
を呼び出すことができないことを認識しています。これはおそらく問題を引き起こしています。
もしそうなら、これをPHPで行うより良い方法がありますか、私は代替案を検討していますか?
あなたは 'register.php'に' 'タグがあり、それらのタグの外側には他のデータがない場合、あなたのコードはうまくいくはずです。 PHPでエラー出力が有効になっていますか?このスクリプトはエラーを生成しますか? – talereader
申し訳ありませんが、私は上記のものを拒否しました。今編集されました。 'register.php'にphpタグがあります。 – persepolis