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

[WEB HACKING] 게시판 만들기(2) 메인 페이지 / 로그인 구현하기 / DB 연결 페이지

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

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

    </footer>


  </body>

</html>












반응형

댓글