간단한 로그인 페이지를 작성하십시오. 사용자가 일치하지 않는 암호와 암호 확인을 입력하면 등록 양식을 재설정하고 메시지를 인쇄하려고합니다. 현재 메시지는 인쇄되지 않지만 스크립트를 통해 전달됩니다.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