※ 보안적 요소는 거의 고려하지 않고 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코드 구성에 따라 패스워드 입력창은 다음과 같이 구성된다.
▶문의게시판 읽기 페이지 (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 적용. 후속 게시글에서 자세히 설명.
옳은 페스워드를 입력하면 다음과 같이 게시글을 읽을 수 있다.
만약 잘못된 패스워드를 입력하는 경우에는 다음과 같이 경고창이 뜨고 리다이렉션된다.
만약, 문의게시판을 url로 idx값을 설정해서 강제로 읽으려고 하면, 다음과 같이 경고창이 뜨고 리다이렉션 시킨다.
'Project > project 1 - JH community' 카테고리의 다른 글
[php] 문의 게시판 페이지 3 - 문의게시판 수정 페이지 만들기 (0) | 2023.01.02 |
---|---|
[php] 문의 게시판 페이지 1 - 메인페이지 만들기 (0) | 2022.12.13 |
[php] 게시판 페이지 7 - 마이페이지 만들기 (完) (0) | 2022.12.12 |
[php] 게시판 페이지 6 - 날짜,제목,조회 순 정렬 및 게시글 검색 시 기간 설정 만들기 (0) | 2022.11.12 |
[php] 게시판 페이지 5 - 좋아요 기능 처리페이지 만들기 (0) | 2022.11.11 |
댓글