Register Page : PHP

DATE : 2023/11/2

Register Page : HTML에서 확인한 바와 같이 <form> tag의 버튼이 눌리게 되는 순간!

register.php가 동작하게 된다.

그 말은 register.php에 회원 가입 과정에 필요한 코드를 작성하면 된다는 말씀!

전체적으로 구현할 내용을 정리해보면

  • DB : 연결

  • username 사용 여부 확인 - 중복 예방

  • name & username 존재 여부 확인 - 이미 계정을 만들었는지 확인

  • password & password_re 일치 여부 확인

  • DB : 데이터 저장

  • login.html로 이동

이 정도가 되시겠다 👍

그럼 DB 연결부터하나하나 작성해보도록 하자.

[ register.php ]

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

    $name = trim($_POST['name']);
    $username = trim($_POST['username']);
    $password = trim($_POST['password']);
    $password_re = trim($_POST['password_re']);
    $mail = trim($_POST['mail']);

    if(!checkUsername($conn,$username)) {
        echo '<script>
            alert("이미 사용 중인 Username입니다.");
            location.href = "register.html";
            </script>';
    }
    
    if(checkAccount($conn, $name, $username)) {
        echo '<script>
            alert("존재하는 계정이 있습니다.");
            location.href = "register.html";
            </script>';
    }

    if(!comparePass($password, $password_re)) {
        echo '<script>
            alert("Password가 일치하지 않습니다.");
            location.href = "index.html";
            </script>';
    } else {
        $query = "INSERT INTO user value ('$name','$username','$password','$mail')";
        $res = mysqli_query($conn, $query);

        if($res) {
            echo '<script>
            alert("성공적으로 회원가입 되었습니다.");
            location.href = "login.html";
            </script>';
        } else {
            die("Error : ".mysqli_error($conn));
        }
    }

    mysqli_close($conn);
?>

register.php 내용은 위와 같다.

DB connection 부분은 db_connect.php에, 사용할 함수는 따로 구현해 register_func.php를

작성한 다음 require_once()로 import 해두었다.

그 다음으로 사용자가 입력한 값을 $_POST에서 가져와 각각의 변수에 할당한다.

$name = trim($_POST['name']);
$username = trim($_POST['username']);
$password = trim($_POST['password']);
$password_re = trim($_POST['password_re']);
$mail = trim($_POST['mail']);

여기서 사용된trim()은 입력된 파라미터 앞 or 뒤에 있는 공백을 제거하는 함수이다.

사용자의 파라미터가 모두 준비되었다면 3개의 if문을 거치게 된다.

(사용한 함수 설명은 register_func.php에서!)

[ 첫 번째 if문 : checkUsername ]

if(!checkUsername($conn,$username)) {
    echo '<script>
        alert("이미 사용 중인 Username입니다.");
        location.href = "register.html";
        </script>';
}

첫 번째 if문에서는 checkUsername 함수 결과가 false인 경우,

Pop up창을 통해 "이미 사용 중인 Username 입니다."를 띄우고 register.html로 이동한다.

이 조건을 True로 통과하게 되면 두 번째 if문이 실행된다.

[ 두 번째 if문 : checkAccount ]

if(checkAccount($conn, $name, $username)) {
    echo '<script>
        alert("존재하는 계정이 있습니다.");
        location.href = "register.html";
        </script>';
}

두 번째 if문에서는 checkAccount 함수 결과가 true인 경우,

Pop up 창을 띄우고 register.html로 이동한다.

마찬가지로 이 조건을 통과한 후에는 세 번째 if문을 거치게 된다.

[ 세 번째 if문 : comparePass ]

if(!comparePass($password, $password_re)) {
    echo '<script>
        alert("Password가 일치하지 않습니다.");
        location.href = "register.html";
        </script>';
} else {

마지막 if문에서 comparePass 함수 결과가 false라면 register.html로 이동하고

결과가 true로 else문이 실행되면

$query = "INSERT INTO user value ('$name','$username','$password','$mail')";
$res = mysqli_query($conn, $query);
        
if($res) {
    echo '<script>
    alert("성공적으로 회원가입 되었습니다.");
    location.href = "login.html";
    </script>';
} else {
    die("Error : ".mysqli_error($conn));
}

앞의 모든 조건이 만족 되었다는 의미로 DB에 회원 정보를 저장하는 query를 실행한다.

query 실행에 문제가 있다면 Error를 출력하고

정상적으로 처리 되었다면 login.html로 이동하는 흐름이다.

(마지막엔 connection을 닫아준다 => mysqli_close)

쉽게 정리하면 정상적으로 회원 가입이 완료된 경우에만 login.html로 이동하게 되고

나머지 경우에는 Pop up이 띄워진다는 말씀!

그럼 마지막으로 import 된 코드를 살펴보도록 하자.


[ db_connect.php ]

<?php
    define("DB_SERVER", "localhost");
    define("DB_USERNAME", "admin");
    define("DB_PASSWORD", "student1234");
    define("DB_NAME", "test");
    
    $conn = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_NAME);

    if(!$conn) {
        die("Error : ".mysqli_connect_error());
    }

?>

db_connect.php 같은 경우는 DB에 접근해야 할 때마다 동일한 코드를 작성하기 번거롭기 때문에

connector를 만드는 부분까지 코드를 따로 작성해둔 파일이다.

define() 함수를 이용해 host, name, password, DB name을 정의해두고

mysqli_connect()로 연결을 시도한다.

만약 문제가 있다면 Error를 출력하고 그렇지 않다면 이 파일을 import한 파일에서는

$conn을 사용해 DB와 소통할 수 있을 것이다.

[ register_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 false;
        } else {
            return true;
        }
    }

    function checkAccount($conn, $name, $username) {
        $query = "SELECT * from user where name='$name' and username='$username'";
        $res = mysqli_query($conn, $query);
    
        if(mysqli_num_rows($res) > 0) {
            return true;
        } else {
            return false;
        }
    }

    function comparePass($password, $password_re) {
        if($password === $password_re) {
            return true;
        } else {
            return false;
        }
    }

?>

register_func.php에서는 query를 실행하는 함수가 있기 때문에

require_once()로 db_connect.php를 import 해둔다.

첫 번째 함수 checkUsername은

사용자가 입력한 username이 DB에 존재하는 지 확인하는 함수이다.

register 과정에서는 username이 이미 존재하면 사용자가 입력한 username을 사용할 수 없기 때문에

SQL 결과가 존재하는 경우에는 false를, 존재하지 않는 경우에는 true를 반환한다.

두 번째 함수 checkAccount는

사용자가 입력한 name & username이 동시에 일치하는 record가 있는 지 확인한다.

만약 사용자가 자신의 이름과 username을 입력해 이미 회원 가입한 경우라면

계정이 존재하기 때문에 SQL 결과가 나올 것이고 이럴 경우 사용자는 회원 가입을 다시 할 필요가 없다.

세 번째 함수 comparePass는

사용자가 입력한 password와 확인 차 입력한 password_re가 일치하는 지 확인하는 함수이다.

두 값이 일치하면 true를, 일치하지 않으면 false를 반환한다.

이렇게 따로 함수를 구현해 정리하면 하나의 파일에서 함수를 정의하고 호출할 필요 없기 때문에

코드를 줄이기에도 좋고 사용하는 함수를 한 눈에 알아보기에도 좋은 거 같다.

그럼 이제 import한 코드가 제대로 동작을 하는 지 확인하러 가보자!

Last updated