본문 바로가기
PHP 게시판 만들기

7. 로그인 페이지 만들기

by 똑똑한 영장류 2012. 12. 12.


Chap 7.



이제까지 회원가입을 받는 기능은 최소한의 기능으로 구현해봤습니다.

그럼, 가입한 회원이 로그인해서 사이트를 이용할 수 있도록 로그인 기능을 구현해봅시다.


index.php 에 로그인 버튼을 만들어 줍시다.


<a href="./member/login.php">로그인</a>


회원가입 아래에 표시되도록 합니다.


그리고,

login.php 를 www/member에 만듭니다.


회원으로부터 아이디와 암호를 입력받아야 하니까, form 태그를 이용한 signup.php 와 유사하게 만들수 있겠네요.


<html>
    <head>
        <title>로그인 페이지</title>
        <meta charset="utf-8" >
    </head>
    <body>
        login.php - 로그인 페이지<br />
        <hr />

         <form name="login_form" method="post" action="./login_check.php" >
            아이디 : <input type="text" name="user_id" /><br />
            비밀번호 : <input type="password" name="user_pass" /><br />
            <input type="submit" value="로그인" />
        </form>   
       
    </body>
</html>
 


user_id 와 user_pass 를 입력받아 login_check.php 로 전달합니다.


login_check.php에서는 입력받은 값과 DB에 저장되어 있는 값을 비교해서 로그인을 허락할지 말지를 결정해야겠지요.


<?php
include_once ('../config.php');
$mysqli = new mysqli($DB['host'], $DB['id'], $DB['pw'], $DB['db']);
if (mysqli_connect_error()) {
    exit('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
}

extract($_POST);



우선 DB관련 설정값을 위해 config.php 를 포함시키고, DB와의 연결의 끈을 만듭니다.


그 다음엔, extract($_POST)로 POST 방식으로 전달된 값들을 뽑아내서 값으로 사용할 수 있게 준비시킵니다. $user_id 와 $user_pass 를 이용할 수 있습니다.


먼저 DB에서 $user_id 라는 회원이 있는지, 있으면 그 데이터를 뽑아와야겠지요?


$q = "SELECT * FROM ap_member WHERE id='$user_id'";
$result = $mysqli->query( $q);


SELECT 를 이용한 쿼리문입니다. ap_member 테이블에서 id 가 $user_id 와 같은 행을 가져오라는 겁니다.

그 결과는 $result 에 담겨있습니다.


if($result->num_rows==1) {
    //해당 ID 의 회원이 존재할 경우
    // 암호가 맞는지를 확인

    $encryped_pass = sha1($user_pass);
    $row = $result->fetch_array(MYSQLI_ASSOC);
    if( $row['pw'] == $encryped_pass ) {
        // 올바른 정보
        header("Location: http://mydomain.com/member/login_done.php");
        exit();
    }
    else {
        // 암호가 틀렸음
        echo 'wrong password';
    }

}
else {
    // 없거나, 비정상
   
}


결과값이 1개라면 DB에 해당 아이디의 정보가 있다는 말이니까, 이후 암호를 비교해서 같으면 정상적으로 로그인 시켜줍니다.

암호를 비교할 때는 입력받은 $user_pass 를 회원가입때 암호화했던 방법과 같은 방법, sha1()으로 암호화를 해서 DB에 있는 값과 비교를 해야합니다.


mysqli에 새로운 함수들이 나타났는데요, php 카테고리의 다음 글을 참고하시기 바랍니다.


mysqli <- 클릭해서 확인하기


올바른 값으로 로그인이 이루어지면, 이후 사이트 전체에서 로그인 상태를 유지를 할 수 있어야 합니다. 주로 session 을 이용하게 되는데요, 다음 편에서 더 알아보겠습니다.


이상!








댓글