로그인 페이지 - login.php
- 페이지를 열면 POST 방식으로 넘어온 username과 password를 저장합니다.
- $username에 값이 없다면 이후의 PHP 코드는 실행되지 않습니다.
- 양식에 값을 입력하고 로그인 버튼을 클릭하면 $username에 값이 있으므로 이후의 PHP 코드가 실행됩니다.
- $username에 값이 있다면 DB에서 username에 해당하는 password를 가져와서 $encrypted_password에 저장합니다.
- 일치하는 username이 존재하지 않는다면 $encrypted_password의 값이 없으므로 '사용자이름이 존재하지 않습니다.'를 출력합니다.
- 일치하는 username이 존재하면 $password와 $encrypted_password를 비교하고, 일치하면 login-ok.php 페이지도 이동하고, 일치하지 않으면 '비밀번호가 틀렸습니다.'를 출력합니다.
<?php
$username = $_POST[ 'username' ];
$password = $_POST[ 'password' ];
if ( !is_null( $username ) ) {
$jb_conn = mysqli_connect( 'localhost', 'codingfactory', '1234qwer', 'codingfactory.net_example' );
$jb_sql = "SELECT password FROM member WHERE username = '" . $username . "';";
$jb_result = mysqli_query( $jb_conn, $jb_sql );
while ( $jb_row = mysqli_fetch_array( $jb_result ) ) {
$encrypted_password = $jb_row[ 'password' ];
}
if ( is_null( $encrypted_password ) ) {
$wu = 1;
} else {
if ( password_verify( $password, $encrypted_password ) ) {
header( 'Location: login-ok.php' );
} else {
$wp = 1;
}
}
}
?>
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<title>로그인</title>
<style>
body { font-family: sans-serif; font-size: 14px; }
input, button { font-family: inherit; font-size: inherit; }
</style>
</head>
<body>
<h1>로그인</h1>
<form action="login.php" method="POST">
<p><input type="text" name="username" placeholder="사용자이름" required></p>
<p><input type="password" name="password" placeholder="비밀번호" required></p>
<p><input type="submit" value="로그인"></p>
<?php
if ( $wu == 1 ) {
echo "<p>사용자이름이 존재하지 않습니다.</p>";
}
if ( $wp == 1 ) {
echo "<p>비밀번호가 틀렸습니다.</p>";
}
?>
</form>
</body>
</html>
로그인 성공 페이지 - login-ok.php
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<title>로그인</title>
<style>
body { font-family: sans-serif; font-size: 14px; }
input, button { font-family: inherit; font-size: inherit; }
</style>
</head>
<body>
<h1>로그인 하셨습니다.</h1>
</body>
</html>
스크린샷
로그인 페이지
사용자 이름이 존재하지 않는 경우
비밀번호가 틀린 경우
로그인에 성공한 경우