Login Page : PHP

DATE : 2023/11/3

[ login.php ]

<?php
    require_once("db_connect.php");
    require_once("login_func.php");

    $username = $_POST['username'];
    $password = $_POST['password'];

    if(!checkUsername($conn, $username)) {
        echo
        '<script>
            alert("존재하지 않는 Username 입니다.");
            location.href = "login.html";
        </script>';
    }

    if(!checkCredential($conn, $username, $password)) {
        echo
        '<script>
            alert("Password가 틀렸습니다");
            location.href = "login.html";
        </script>';
    } else {
        header("Location: index.html");
    }

    mysqli_close($conn);
?>

수정된 login.php 코드를 보면 위와 같다.

( index.html - result.php => login.html - login.php로 파일 이름도 수정되었다.)

우선 register.php에서 본 거 처럼 db_connect.php & login_func.php를 import 해두었다.

db_connect.php는 동일한 파일이니 여기서는 생략한다.

$username = $_POST['username'];
$password = $_POST['password'];

사용자가 입력한 정보를 $_POST에서 가져온 다음, 2개의 if문을 거치게 된다.

if(!checkUsername($conn, $username)) {
    echo
        '<script>
            alert("존재하지 않는 Username 입니다.");
            location.href = "login.html";
        </script>';
}

우선 사용자가 입력한 Username이 존재하는 지 확인하기 위한 checkUsername 함수를 실행하고

결과가 false인 경우 (= Username이 존재하지 않는 경우), login.html로 이동한다.

checkUsername 함수의 결과가 true로 첫 번째 if문을 통과했다면

if(!checkCredential($conn, $username, $password)) {
    echo
    '<script>
        alert("Password가 틀렸습니다");
         location.href = "login.html";
    </script>';
} else {
    header("Location: index.html");
}

두 번째 if문에서는 사용자가 입력한 Username & Password가 올바른 credential인지 확인한다.

지금 두 번째 if문이 실행된다는 건

사용자가 입력한 Username이 존재한다는 거 까지는 검증되었다는 의미이다.

이 시점에서 사용자가 입력한 Password가 Username에 상응하는 값인지 확인할 필요가 있다.

따라서 checkCredential 함수 결과가 false이면

Username에 대한 Password가 틀렸다는 의미이기에 login.html로 이동하게 되고

알맞은 Password를 입력한 경우에만 index.html로 이동할 수 있는 것이다.

[ login_func.php ]

<?php
    require_once("db_connect.php");

    function checkUsername($conn, $username) {
        $query = "SELECT * from user where username='$username'";
        $res = mysqli_query($conn, $query);

        if(mysqli_num_rows($res) > 0) {
            return true;
        } else {
            return false;
        }
    }

    function checkCredential($conn, $username, $password) {
        $query = "SELECT * from user where username = '$username' and password = '$password'";
        $result = mysqli_query($conn, $query);

        if(mysqli_num_rows($result) > 0) {
            return true;
        } else {
            return false;
        }
    }
?>

login.php에서 사용한 function은 login_func.php에 정의 되어있다.

첫 번째 함수 checkUsername은 register_func.php에 작성된 내용과 거의 동일하다.

한 가지 다른 점은 login 관점에서 봤을 때, 사용자가 입력한 Username이 존재해야 하므로

SQL 결과가 존재하면 true를, 존재하지 않으면 false를 반환한다는 점이다.

두 번째 함수 checkCredential은 사용자가 입력한 Username & Password를 가지고

두 값이 모두 일치하는 정보가 있는 지 확인한다.

즉 Username에 대한 Password가 올바른지 확인하는 함수이다.

조건을 만족하는 record가 있는 경우에는 true를, 아닌 경우에는 false를 반환한다.

이렇게 해서 login.php까지 수정을 완료했다!

이젠 admin이 아니라 DB에 저장된 회원 정보를 사용하기 때문에 회원 가입을 마친 사용자라면

정상적으로 로그인 과정을 완료할 수 있다! 👍👏

Last updated