웹개발/PHP

[PHP] 회원가입, 로그아웃 기능 구현

본캐 2022. 10. 26. 03:37

 

 

register_server.php  -  회원가입 서버

register.php  -  회원가입 페이지

logout.php  -  로그아웃 페이지

 

 

 

 

register_server.php ( 전체 코드 )

<?php

$conn = mysqli_connect('localhost', 'admin', 'student', 'DB');

if(isset($_POST['id'])&&isset($_POST['pw'])&&isset($_POST['pw2'])){

        $uid=$_POST['id'];
        $upw=$_POST['pw'];
        $upw2=$_POST['pw2'];

        if(empty($uid)) {

                echo header("location: register.php?error=아이디를 입력해주세요");
                exit();
        } else if(empty($upw)) {

                echo header("location: register.php?error=비밀번호를 입력해주세요.");
                exit();

        } else if(empty($upw2)) {

                echo header("location: register.php?error=비밀번호를 입력해주세요.");
                exit();

        } else if($upw !== $upw2) {

                echo header("location: register.php?error=비밀번호가 맞지않아요.");
                exit();

        }

        $upw = password_hash($upw,PASSWORD_DEFAULT);

        $q_same = "select * from Login where uid='$uid'";
        $res = mysqli_query($conn, $q_same);

        if(mysqli_num_rows($res) > 0) {

                header("location: register.php?error=중복된 아이디가 있습니다.");
                exit();
        } else {

                $q_save = "insert into Login(uid, upw) values('$uid', '$upw')";
                $result = mysqli_query($conn, $q_save);

                if($result) {

                        header("location: register.php?success=축하합니다 가입이 되셨습니다.!!");
                        exit();
                } else {

                        header("location: register.php?error=가입에 실패하였습니다.");
                        exit();
                }
        }
}

?>

 

 

 

 

 

 

설명

 

 

$conn = mysqli_connect('localhost', 'admin', 'student', 'DB');

> DB 연결

 

 

if(isset($_POST['id'])&&isset($_POST['pw'])&&isset($_POST['pw2'])){

 

사용자가 입력한 값이 있으면 실행

 

isset( ) 

-> 괄호안에 값이 있으면 참 반환 

 

** NULL > False

** 공백, 0, 빈 값 > True

 

 

if(empty($uid)) {

 

사용자가 입력한 값이 없으면 실행

 

empty( )

->괄호안에 값이 없으면 참 반환

 

** NULL, 공백, 0, 빈 값 > True

 

 

$upw = password_hash($upw,PASSWORD_DEFAULT);

 

$upw 를 암호화한다

 

ex) password_hash( 암호화 할 비밀번호, PASSWORD_DEFAULT ); 

 

$q_same = "select * from Login where uid='$uid'";

 

사용자가 입력한 $uid, $upw의 정보를 서버에 저장되있는 uid,upw와 비교한다.

 

 

$res = mysqli_query($conn, $q_same);

 

서버에 $q_same 의 SQL 구문을 실행한다.

 

mysqli_query( ) -> 서버에 SQL을 실행하는 함수

 

 

if(mysqli_num_rows($res) > 0) {

                header("location: register.php?error=중복된 아이디가 있습니다.");
                exit();

 

아이디 중복체크

 

> 사용자가 입력한 ' $uid ' 값이  서버에 있는 ' uid ' 와 값이 같다면,

 

mysqli_num_rows의 값이 1이 나오면서 조건문이 ' 참 ' 이 되어 " 중복된 아이디가 있습니다. " 멘트가 나올거다.

 

 

 

 

 

 

 

 } else {

                $q_save = "insert into Login(uid, upw) values('$uid', '$upw')";
                $result = mysqli_query($conn, $q_save);

                if($result) {

                        header("location: register.php?success=축하합니다 가입이 되셨습니다.!!");
                        exit();

 

> 사용자가 입력한 ' $uid ' 값이  서버에 있는 ' uid ' 와 값이 다르면,

 

mysqli_num_rows의 값이 0이 나오면서 조건문이 ' 거짓 ' 이 되어

 

$q_save에 담긴 SQL구문이 실행되며 사용자가 입력한 $uid , $upw 정보가 서버에 생성되고, 

 

" 축하합니다 가입이 되셨습니다 " 멘트가 나오게된다.

 

 

 

 

 

 

test123 / test123 으로 회원가입을 했고, 비밀번호는 암호화가 된 걸 확인 할 수 있다.

 

 

 

 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

 

 

 

register.php ( 전체 코드 )

<html lang='ko'>
        <head>
                <title>register</title>
        </head>
        <body>
                <form action="register_server.php" method="POST">

                <div align='center'>
                <span>회원가입</span>


                <?php if(isset($_GET['error'])){ ?>
                <p><?php echo $_GET['error']; ?></p>
                <?php } ?>

                <?php if(isset($_GET['success'])){ ?>
                <p><?php echo $_GET['success']; ?></p>
                <?php } ?>


                <p><input type="text" placeholder="아이디 입력" name="id" ></p>
                <p><input type="password" placeholder="비밀번호 입력" name="pw" ></p>
                <p><input type="password" placeholder="비밀번호 재입력" name="pw2"></p>
                <p><button type="submit">저장</button></p>

                </form>
                </div>
                <div align='center'>
                <button type="button" onclick="location.href='login.php'">로그인</button>
                </div>
        </body>
</html>

 

 

 

 

 

<?php if(isset($_GET['error'])){ ?>
<p><?php echo $_GET['error']; ?></p>
<?php } ?>

<?php if(isset($_GET['success'])){ ?>
<p><?php echo $_GET['success']; ?></p>
<?php } ?>

 

회원가입 페이지에 메세지를 띄운다.

 

 

 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

 

 

 

 

logout.php ( 전체 코드 )

<?php

//세션 시작
session_start();

//세션 비우기
session_unset();

//세션 완전 삭제
session_destroy();

header("location: login.php");
exit();

?>

 

 

로그아웃을 누르면 세션이 삭제되고, 로그인 페이지로 돌아간다.