Создание простой страницы входа. Если пользователь вводит пароль и подтверждение пароля, которые не совпадают, я хочу сбросить регистрационную форму и напечатать сообщение. В настоящее время сообщение не печатается, а продолжается через скрипт. Это то, что я пробовал, путем установки переменной SESSION при возникновении ошибки и показа этой переменной при перезагрузке:
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 или я должен искать альтернативы?