본문 바로가기
프로그래밍/WEB HACKING

[WEB HACKING] 게시판 만들기(3) 로그아웃 기능 / 글쓰기 기능 / 페이징 처리

by B T Y 2017. 8. 29.
반응형

게시판 만들기(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>&copy; made 20170823</p>

    </footer>


  </body>

</html>





반응형

댓글