게시판 만들기(3) 로그아웃 기능 / 글쓰기 기능 / 페이징 처리에 대해서 정리한다.
3. write.php / write_ok.php
1). write.php
- 입력 폼
2). write_ok.php
- 입력 폼으로부터 데이터를 전달받아서 디비에 저장
- board 테이블: 게시글 번호(식별자), 게시글 제목, 게시글 본문, 글 작성자, 작성 시간( 자동으로 처리 )
- db 복구 방법
1). 기존 DB의 데이터는 삭제
2). DB가 없으면 먼저 생성
#>mysql -u root -p 디비이름 < backup.sql
( 로그아웃 기능을 확인하기 위해서 가입된 사용자로 로그인을 했고 정상적인 로그인을 알려주는 alert창이 나오게 된다 )
( 오른쪽에 있는 코드는 signout.php의 코드로써 index.php에서 Sign out 버튼을 눌렀을때 이동되는 페이지로
세션 정보와 DB에 있는 로그인중인 사용자를 관리하는 session 테이블에 해당 사용자 정보를 삭제 시키도록 되있다 )
* 조금더 완벽하게 로그아웃 기능을 처리하려면 Sign out 버튼을 누르지않고
웹 브라우저를 그냥 닫는 경우의 상황도 고려를 해줘야 한다..
( 글쓰기 폼과 기능 < write.php / write_ok.php >를 구현한 다음에 해당 기능이 잘 되는지 확인을 위해서
테스트 글을 하나 작성한 후에 DB에 board 테이블을 조회해봄으로써 확인이 된다 )
( select문을 이용해서 board 테이블에 내용을 확인해본 결과 위에서 테스트글로 남겼던 내용이 정상적으로 들어간걸 볼 수 있다 )
( 게시판 관련 테이블인 board 테이블의 내용을 가져와서 한줄씩 메인 페이지에서 출력해준다... )
( 한줄 출력이 가능하단 얘기는 해당 알고리즘을 반복문을 통해서 여러번 반복하면 마찬가지로 여러줄 출력이 가능.. )
( 위쪽에서부터 최신글이 출력이 되도록 하기 위해서 DB내에서 ORDER BY 쿼리를 이용해서 내림차순으로 정렬을 처리해줬다 )
* ORDER BY를 사용할 때는 기준으로 사용될 컬럼을 지정해줘야 한다!!
( 페이징 처리를 위해서 10개씩 게시글을 출력해주는 부분이 필요한데 이부분 또한 DB 내에서 LIMIT를 이용함으로써 해결 할 수 있다 )
- 게시판 만들기(4) 로그아웃 기능( signout.php ) / 글쓰기 기능( write.php / write_ok.php ) /
페이징 처리 ( index.php )
write_ok.php
<?php
include 'db.php';
session_start();
$title = $_POST[title];
$body = $_POST[body];
$user_id = $_SESSION[user_id];
$date = date("Y-m-d G:i:s");
$sql = "INSERT INTO board( title, body, writer, time ) VALUE ( '{$title}', '{$body}', '{$user_id}', '{$date}' )";
$ret = mysql_query( $sql );
?>
<meta http-equiv='refresh' content="0;url='http://192.168.12.100/index.php'">
signout.php
<?php
include 'db.php';
session_start();
$user_id = $_SESSION[user_id];
$sql = "DELETE FROM session WHERE user_id = '{$user_id}'";
$ret = mysql_query( $sql );
setcookie( session_name(), '', time()-99999999 );
session_destroy();
?>
<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
}
?>
</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>
<?php
$resource = mysql_query( " SELECT * FROM board" );
$total_len = mysql_num_rows( $resource );
if( isset($_GET[idx]) ) {
$start = $_GET[idx] * 10;
$sql = "SELECT * FROM board ORDER BY no DESC LIMIT $start, 10";
} else {
$sql = "SELECT * FROM board ORDER BY no DESC LIMIT 10";
}
$resource = mysql_query( $sql );
$num = 1;
while( $row = mysql_fetch_assoc( $resource ) ) {
print "<tr>";
print "<th scope='row'>$num</th>";
print "<td>$row[title]</td>";
print "<td>$row[writer]</td>";
print "<td>$row[time]</td>";
print "</tr>";
$num++;
}
$count = (int)($total_len / 10);
if( $total_len % 10 ) { $count++; }
print "<tr>";
print "<td colspan=4 align=center>";
for( $i = 0; $i < $count; $i++ ) {
print "<a href=http://192.168.12.100/index.php?idx={$i}> [";
$j = $i+1;
print $j;
print "] </a>";
}
print "</td>";
print "</tr>";
?>
</tbody>
</table>
</div>
</div>
<div class="container">
<form class="navbar-form navbar-right" method=POST action=write.php>
<button type="submit" class="btn btn-success">글쓰기</button>
</form>
</div>
<footer>
<p>© made 20170823</p>
</footer>
</body>
</html>
'프로그래밍 > WEB HACKING' 카테고리의 다른 글
[WEB HACKING] 제로보드 설치 / 제로보드 XSS( Cross Site Scripting ) 취약점 (0) | 2017.08.30 |
---|---|
[WEB HACKING] 게시판 만들기(4) 전체 코드 (5) | 2017.08.29 |
[WEB HACKING] 게시판 만들기(2) 메인 페이지 / 로그인 구현하기 / DB 연결 페이지 (2) | 2017.08.29 |
[WEB HACKING] 게시판 만들기(1) 시나리오 / 회원가입 페이지 만들기 (4) | 2017.08.29 |
[WEB HACKING] DB SQL( DDL / DML / DCL ) 개념 / MySQL 설정 및 DB Query (0) | 2017.08.29 |
댓글