본문 바로가기
Project/project 1 - JH community

[php] 문의 게시판 페이지 2 - 문의게시판 읽기 페이지 만들기

by 끊임없는정진 2022. 12. 14.

※ 보안적 요소는 거의 고려하지 않고 php명령어 숙달용으로 혼자서 만드는 로그인 페이지 입니다.

 

▶게시판 페이지를 위해 만들어야 할 파일 (※이번 시간에 만들파일은 굵은 글씨로 표기)

 

inquiry.php : 문의게시판 메인화면

inquiry_read.php : 문의게시판 읽기 페이지

inquiry_modify.php : 문의게시판 수정페이지

inquiry_delete.php : 문의게시판 삭제 처리 페이지

inqmodi_check.php : 문의게시판 수정 처리 페이지

inquiry_search.php : 문의게시판 검색 페이지

pwcheck.php : 문의게시판 게시글 읽기 전 비밀번호 확인 페이지

pwcheck2.php : 문의게시판 삭제 전 비밀번호 확인 페이지

pwcheck3.php : 문의게시판 글 수정 전 비밀번호 확인 페이지

 

▶문의게시판 읽기 과정 구상

 

 우선, 문의 게시판 읽기페이지를 만들기 전, 그 과정에 대해서 생각해보기로 한다. 자바스크립트 팝업창으로 검사하는 방법, php로 검사하는 방법 등 많은 방법이 있겠지만, php 연마에 목적이 있는 만큼 되도록 php로 만들어보기로 했다. 그래서 별도의 페이지를 만들어 비밀번호를 체크하는 구간을 만드는 식으로 비밀번호를 검사한다. 

대강 다음과 같은 구조가 되겠다.

익명게시판 비밀번호 검증 단계

 

▶게시글 읽기 전 비밀번호 확인 페이지 (pwcheck.php)

 

 게시글을 읽는 페이지에 패스워드 값을 'POST' 방식으로 전달하는 페이지를 구상한다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" type="text/css" href="./css/bootstrap.css">
    <link rel="stylesheet" type="text/css" href="./css/bootstrap.min.css">
        <link rel="stylesheet" href="./style.css">
        <title>EnterPw</title>
    </head>
    <body class="text-center">
        <main>
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script>
 
        <div class="container">
          <h4 class="display-4 text-center">비밀번호</h4>
          <form action="./inquiry_read.php?idx=<?=$id?>" method="post">
            <div class="mb-3">
              <label for="password"></label>
              <input type="password" id="pw_wr" name="pw_wr" class="form-control" required>
            </div>
            <button type ="submit" class="btn btn-primary">확인</button>
          </form>
        </div>
 
    </main>
    </body>
</html>
cs

단순히 password값을 읽을 페이지에 전달하는 페이지이다. 패스워드 검증은 POST로 password값을 받는 읽기페이지 (inquiry_read.php) 에서 구성한다.

위에서 입력한 php코드 구성에 따라 패스워드 입력창은 다음과 같이 구성된다.

패스워드 입력 검증창(pwcheck.php)

 

▶문의게시판 읽기 페이지 (inquiry_read.php)

 

 문의게시글을 읽는 페이지로, 게시판 읽기 페이지와 데이터를 불러오고 출력하는 과정에 큰 차이가 없다. 하지만, 익명게시판인만큼 비밀번호 검증은 꼭 거쳐야하는 과정이다.

우선, POST로 password값을 받지않으면 비정상적인 접근임을 알리고 메인페이지로 리다이렉션한다. 그 다음으로 POST로 password값을 받더라도 틀린값일때, 비밀번호가 틀렸음을 알려주고 메인페이지로 리다이렉션 시켜준다.

 페이지가 존재하지도 않을 수 있는데, 이런 경우는 존재하지 않는 글임을 알리며 메인페이지로 리다이렉션 시킨다.

 좋아요 기능은 삭제했다. 어차피 패스워드 검증이 있는 이상, 남들이 내 글을 볼일이 없기 때문이다. 다만, 조회수는 여전히 남겨놨다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php
include ("./db.php");
// 패스워드 받기
$pw_wr = $_POST['pw_wr'];
if(isset($pw_wr)){
else {
  echo "<script>alert('비정상적인 접근입니다.');</script>";
  echo "<script>location.replace('./inquiry.php');</script>";
  exit;
}
?>
 
<!--(html 생략)-->
 
    <?php
 
    // 해당 id로 row 호출
    $id = $_GET['idx'];
    $sql = "SELECT * FROM inquiry WHERE idx='$id'";
    $res = mysqli_query($conn2$sql);
    $inquiry = mysqli_fetch_array($res);
 
    // pw 일치 검사
    if($pw_wr==$inquiry['pw']) {
    } else {
      echo "<script>alert('비밀번호가 틀렸습니다.');</script>";
      echo "<script>history.go(-1);</script>";
      exit;
    }
 
    // 데이터 존재 검열
    if(mysqli_num_rows($res)<1) {
      echo "<script>alert('존재하지 않는 글입니다.');</script>";
      echo "<script>location.replace('./inquiry.php');</script>";
      exit;
    } else {
    // 조회수 갱신
    $hit = $inquiry['hit'+ 1;
    $upd = "UPDATE inquiry SET hit='".$hit."' WHERE idx='".$id."'";
    $hit_up = mysqli_query($conn2$upd);
  } ?>
 
<!-- 글 보여주는 부분 -->
 
<!-- 제목, 이름, 날짜, 조회수-->
<div class="container">
 
    <div class="col-lg-12 mt-5">
      <div class="page-header">
      <h1 id="title"><?=$inquiry['title'];?></h1>
      <small id="title"><?=$inquiry['name'];?> | <?=$inquiry['date'];?> | 조회수 : <?=$inquiry['hit'];?> </small>
    </div>
  </div>
 
<hr color="black">
 
    <div class="col-lg-12 mt-5 mb-5">
      <div class="bs-component fs-3">
    <p><?=nl2br("$inquiry[content]"); ?></p>
    </div>
  </div>
 
<hr color="black">
 
  <!-- 첨부파일 -->
  <div>
  첨부파일 : <a href="./upload_file/<?php echo $inquiry['file'];?>" download><?php echo $inquiry['file']; ?></a>
  </div>
 
<hr color="black">
<!-- 목록, 수정, 삭제 -->
 
  <div class="row">
 
    <div class="col-md-9">
 
    </div>
    <div class="col-md-1 mt-3">
     <a href ="./index.php">[목록]</a>
    </div>
    <div class="col-md-1 mt-3">
     <a href ="./pwcheck3.php?idx=<?php echo $inquiry['idx']; ?>">[수정]</a>
    </div>
    <div class="col-md-1 mt-3">
     <a href ="./pwcheck2.php?idx=<?php echo $inquiry['idx']; ?>">[삭제]</a>
    </div>
   </div>
 
  </body>
</html>
cs

※ div 부분 col,md,mt 등으로 class 정의해놓은건 bootstrap 적용. 후속 게시글에서 자세히 설명.

옳은 페스워드를 입력하면 다음과 같이 게시글을 읽을 수 있다.

문의게시판 읽기 페이지(inquiry_read.php)

 

만약 잘못된 패스워드를 입력하는 경우에는 다음과 같이 경고창이 뜨고 리다이렉션된다.

잘못된 비밀번호 입력시 뜨는 경고창

 

만약, 문의게시판을 url로 idx값을 설정해서 강제로 읽으려고 하면, 다음과 같이 경고창이 뜨고 리다이렉션 시킨다.

url로 idx를 강제로 설정하고 접속시 뜨는 경고창

댓글