게시판 만들기(2) 메인 페이지 / 로그인 구현하기 / DB 연결 페이지에 대해서 정리한다.
2. sign in( 로그인 )
- signin.php
- session 테이블에 로그인된 사용자의 정보를 저장
- 사용자 번호, 사용자 아이디, 세션 번호(session_id())
( 부트스트랩을 이용해서 index.php의 디자인과 뼈대를 구성해줬다 )
( index.php 페이지에서 id, pw를 입력해서 signin.php 페이지로 전송하게 되고 그 값이
잘 전송이 되는지를 $_POST에 들어있는 내용을 출력해보면 알 수 있다 )
( 위 그림을 보면 user_id와 user_pw에 대한 정보가 정상적으로 signin.php로 전달이 되는걸 볼 수 있다 )
( 로그인된 사용자의 no, 사용자 아이디와 세션 아이디를 저장해서 로그인중인지를 체크할 수 있는 session 테이블을 하나 구성했다 )
( mysql_num_rows()를 이용해서 SQL 쿼리에 대한 해당 행이 하나도 없다면 인증이 실패한 경우로 판단해서
사용자에게 경고창으로 알려준다 )
( mysql_fetch_row()를 이용해서 행에 대한 해당 컬럼의 값을 인덱스를 통해서 접근 할 수 있고
mysql_fetch_assoc()을 이용하면 인덱스가 아닌 컬럼명을 통해서 접근 할 수 있다 )
- 게시판 만들기(2) 로그인 구현( signin.php ) / 메인 페이지 ( index.php ) / DB 연결 ( db.php ) 코드
db.php
<?php
$db = mysql_connect( 'localhost', 'root', '1234' );
if( !$db ) {
die( 'MYSQL connect ERROR: ' . mysql_error());
}
$ret = mysql_select_db( 'bbs', $db );
if( !$ret ) {
die( 'MYSQL select ERROR: ' . mysql_error());
}
?>
signin.php
<?php
include 'db.php';
session_start();
$id = $_POST[user_id];
$pw = $_POST[user_pw];
$sql = "SELECT * FROM user WHERE user_id = '{$id}' and user_pw = md5('{$pw}')";
$resource = mysql_query( $sql );
$num = mysql_num_rows( $resource );
$row = mysql_fetch_assoc( $resource );
if( $num > 0 ) {
// 인증에 성공한 경우
// 중복 체크
$sql = "SELECT * FROM session WHERE user_id = '{$id}'";
$resource = mysql_query( $sql );
$num = mysql_num_rows( $resource );
if( $num > 0 ) {
// 이미 로그인한 사용자인 경우
echo "<script> alert('해당 아이디는 이미 로그인한 상태입니다'); </script>";
} else {
// 아직 로그인하지 않은 경우
// 1. 세션 테이블에 사용자 정보를 입력(insert)
$sess_id = session_id();
$sql = "INSERT INTO session VALUE( $row[no], '$id', '$sess_id' )";
$ret = mysql_query( $sql );
// 2. 세션 변수에 아이디 추가
$_SESSION[user_id] = $id;
$_SESSION[is_login] = 1;
// 3. 로그인 환영 메시지 출력
echo "<script> alert('로그인 되었습니다'); </script>";
}
} else {
// 인증에 실패한 경우
echo "<script> alert('아이디 또는 패스워드가 올바르지 않습니다.'); </script>";
}
?>
<meta http-equiv='refresh' content="0;url='http://192.168.12.100/index.php'">
index.php
<?php
include 'db.php';
session_start();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title> 게시판 </title>
<!-- Bootstrap core CSS -->
<link href="bootstrap-3.3.2-dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="bootstrap-3.3.2-dist/css/jumbotron.css" rel="stylesheet">
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#"> 게시판 </a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<?php
if( !isset($_SESSION[is_login]) && $_SESSION[in_login] != 1 ) {
?>
<form class="navbar-form navbar-right" method=POST action=signin.php>
<div class="form-group">
<input type="text" name=user_id placeholder="USER ID" class="form-control">
</div>
<div class="form-group">
<input type="password" name=user_pw placeholder="Password" class="form-control">
</div>
<button type="submit" class="btn btn-success">Sign in</button>
</form>
<?php
} else {
?>
<form class="navbar-form navbar-right" method=POST action=signout.php>
<button type="submit" class="btn btn-success">Sign out</button>
</form>
<?php
}
?>
</form>
</div><!--/.navbar-collapse -->
</div>
</nav>
<!-- Main jumbotron for a primary marketing message or call to action -->
<div class="jumbotron">
<div class="container">
<table class="table table-striped">
<thead>
<tr>
<th> 번호 </th>
<th> 게시글 제목 </th>
<th> 작성자 </th>
<th> 작성시간 </th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td>Larry</td>
<td>the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
</div>
</div>
<footer>
<p>© made 20170823</p>
</footer>
</body>
</html>
'프로그래밍 > WEB HACKING' 카테고리의 다른 글
[WEB HACKING] 게시판 만들기(4) 전체 코드 (5) | 2017.08.29 |
---|---|
[WEB HACKING] 게시판 만들기(3) 로그아웃 기능 / 글쓰기 기능 / 페이징 처리 (1) | 2017.08.29 |
[WEB HACKING] 게시판 만들기(1) 시나리오 / 회원가입 페이지 만들기 (4) | 2017.08.29 |
[WEB HACKING] DB SQL( DDL / DML / DCL ) 개념 / MySQL 설정 및 DB Query (0) | 2017.08.29 |
[WEB HACKING] php 간단한 로그인 창 만들기 / 쿠키 & 세션 이용방법 (0) | 2017.08.29 |
댓글