문의 글에 비밀번호를 설정하여 조회, 수정, 삭제 기능에 제한을 건다
▷ 문의 글 조회에 비밀번호 설정
문의게시판 페이지(qna.php) 리스트를 출력하는 테이블의 코드를 일부 수정한다
Step 1. 게시글의 제목을 클릭하면 q_check.php로 이동한다
<tbody>
<tr align=center>
<td><?php echo $cnt;?></td>
<td width="500" align="center"><a href="q_check.php?idx=<?=$row['idx']?>"><?php echo $row['title'];?></a></td>
<td width="100" align="center"><?php echo $row['name'];?></td>
<td width="200" align="center"><?php echo $row['udate'];?></td>
<td><?php echo $row['hit'];?></td>
</tr>
</tbody>
Step 2. q_check.php에서 비밀번호를 확인한다
관리자 계정일 경우 비밀번호만 입력하고, 이외의 사용자에게는 게시글 작성 시 함께 입력한 연락처와 비밀번호를 함께 입력받는다.
게시글의 번호($idx)는 GET 방식으로 전달하고, 입력받은 데이터는 POST 방식으로 q_read.php로 전달한다.
** q_check.php
<?php
session_start();
$conn = mysqli_connect('localhost', 'root', 'mysql', 'logindb');
$idx= $_GET["idx"];
$sql= "SELECT * FROM q_board where idx='$idx'";
$res = mysqli_fetch_array(mysqli_query($conn, $sql));
?>
<form method = "post" action = "q_read.php?idx=<?=$res['idx']?>">
<div>
<?php
if($_SESSION['username']=='admin') { ?>
<input name = "pw" type = "password" placeholder="게시글 비밀번호" autocomplete="new-password"/>
<input type = "submit" value = "입력" />
<?php } else { ?>
<input class = "textbox" name = "email" type = "text" placeholder="Email" autocomplete="off"/>
<span> & </span>
<input name = "pw" type = "password" placeholder="게시글 비밀번호" autocomplete="new-password" />
<input type = "submit" value = "입력" />
<?php } ?>
</div>
</form>
Step 3. q_read.php에서 사용자 및 비밀번호를 확인한다
대부분은 일반 게시판 페이지와 비슷하다.
<body> 태그 내 첫 부분에 php 코드를 작성한다
관리자(admin)일 경우 비밀번호만 입력하면 되지만, 일반 사용자에게는 email과 pw를 요구한다
<?php
$conn = mysqli_connect('localhost', 'root', 'mysql', 'logindb');
$idx= $_GET["idx"];
$email = $_POST['email'];
$pw = $_POST['pw'];
$hash = md5($pw); //암호화된 비밀번호
$sql_hit = "UPDATE q_board SET hit=hit+1 WHERE idx=$idx";
$res_hit = mysqli_query($conn, $sql_hit);
$sql= "SELECT * FROM q_board where idx='$idx'";
$res = mysqli_fetch_array(mysqli_query($conn, $sql));
if($_SESSION['username']=='admin' && $res['pw'] == $hash) {
echo "<script>alert('관리자 권한으로 조회합니다.');</script>";
} else if ($_SESSION['username']=='admin' && $res['pw']!=$hash) {
echo "<script>alert('비밀번호가 틀렸습니다.');";
echo "window.location.href=\"q_check.php?idx=$idx\"</script>";
} else if ($res['email'] == $email && $res['pw'] == $hash) {
echo "<script>alert('작성자 권한으로 조회합니다.');</script>";
} else {
echo "<script>alert('게시글 조회 권한이 없습니다');";
echo "window.location.href=\"q_check.php?idx=$idx\"</script>";
}
?>
확인이 완료되면 게시글을 조회할 수 있다.
이 때 게시글 아래의 수정 버튼과 삭제 버튼도 일부 수정한다
Step 4. 수정 버튼 및 삭제 버튼 수정
편의상 버튼 아래에 script 코드를 작성했다.
<input type="hidden" name="pw" id="pw">
<button onclick="pw_check();">수정</button>
<script>
function pw_check(){
document.getElementById('pw').value = prompt('게시글 비밀번호를 입력해주세요.', '비밀번호')
var pw = document.getElementById('pw').value;
if(pw){
window.location = "q_modify.php?idx=<?=$idx?>&pw="+pw;
}
}
</script>
input type="hidden"을 이용해 pw 값을 prompt 창으로 받은 값으로 넘긴다
버튼을 클릭하면 script에서 pw_check() 함수를 실행한다
pw_check()가 실행되면 prompt창으로 비밀번호를 입력받고 q_modify.php(문의게시글 수정 페이지)에 idx와 입력받은 pw를 GET 방식으로 전달한다
삭제 버튼에도 이와 같이 적용한다.
ask()가 실행되면 prompt창으로 비밀번호를 입력받고 q_delete.php(문의게시글 삭제 페이지)에 idx와 입력받은 pw를 GET 방식으로 전달한다
<button onclick="ask();">삭제</button>
<script>
function ask() {
document.getElementById('pw').value = prompt('게시글 비밀번호를 입력해주세요.', '비밀번호')
var pw = document.getElementById('pw').value;
if(pw){
window.location = "q_delete.php?idx=<?=$idx?>&pw="+pw;
}
}
</script>
** q_read.php (더보기 클릭)
<!DOCTYPE html>
<?php
session_start();
?>
<html lang="ko">
<head>
<meta charset="UTF-8">
</head>
<body>
<?php
$conn = mysqli_connect('localhost', 'root', 'mysql', 'logindb');
$idx= $_GET["idx"];
$email = $_POST['email'];
$pw = $_POST['pw'];
$hash = md5($pw);
$sql_hit = "UPDATE q_board SET hit=hit+1 WHERE idx=$idx";
$res_hit = mysqli_query($conn, $sql_hit);
$sql= "SELECT * FROM q_board where idx='$idx'";
$res = mysqli_fetch_array(mysqli_query($conn, $sql));
if($_SESSION['username']=='admin' && $res['pw'] == $hash) {
echo "<script>alert('관리자 권한으로 조회합니다.');</script>";
} else if ($_SESSION['username']=='admin' && $res['pw']!=$hash) {
echo "<script>alert('비밀번호가 틀렸습니다.');";
echo "window.location.href=\"q_check.php?idx=$idx\"</script>";
} else if ($res['email'] == $email && $res['pw'] == $hash) {
echo "<script>alert('작성자 권한으로 조회합니다.');</script>";
} else {
echo "<script>alert('게시글 조회 권한이 없습니다');";
echo "window.location.href=\"q_check.php?idx=$idx\"</script>";
}
?>
<table align=center>
<tr>
<td colspan="4");"><?php echo $res['title'] ?></td>
</tr>
<tr>
<td>작성자</td>
<td><?php echo $res['name'] ?></td>
<td>조회수</td>
<td><?php echo $res['hit'] ?></td>
</tr>
<tr>
<td>연락처</td>
<td colspan="4">
<?php echo $res['email'] ?></td>
</tr>
<tr>
<td colspan="4">
<?php echo $res['content'] ?></td>
</tr>
<tr>
<td>첨부파일</td>
<td>
<?php
if($res['file']) { ?>
<a href='./download.php?file=<?=$res['file'];?>&target_Dir=./file/uploads'>다운로드</a>
<?php } else { ?>
<?php } ?>
</td>
</tr>
</table>
<div>
<button onclick="location.href='qna.php'">목록</button>
<input type="hidden" name="pw" id="pw">
<button onclick="pw_check();">수정</button>
<script>
function pw_check(){
document.getElementById('pw').value = prompt('게시글 비밀번호를 입력해주세요.', '비밀번호')
var pw = document.getElementById('pw').value;
if(pw){
window.location = "q_modify.php?idx=<?=$idx?>&pw="+pw;
}
}
</script>
<button onclick="ask();">삭제</button>
<script>
function ask() {
document.getElementById('pw').value = prompt('게시글 비밀번호를 입력해주세요.', '비밀번호')
var pw = document.getElementById('pw').value;
if(pw){
window.location = "q_delete.php?idx=<?=$idx?>&pw="+pw;
}
}
</script>
</div>
</body>
</html>
▷ 문의 글 수정 페이지(q_modify.php) 및 문의 글 수정 처리 페이지(q_modify_ok.php)
Step 1. 글을 수정하기 전, 사용자 확인
<body> 안에 php 코드 입력
idx와 pw 값을 GET 방식으로 받는다
DB의 암호화된 pw와 prompt로 넘겨받은 pw가 같은지 확인한다.
<?php
$conn = mysqli_connect('localhost', 'root', 'mysql', 'logindb');
$idx = $_GET['idx'];
$sql= "SELECT * FROM q_board where idx='$idx'";
$res = mysqli_fetch_array(mysqli_query($conn, $sql));
$pw = $_GET['pw'];
$hash = md5($pw);
if($res['pw'] == $hash) {
echo "<script>alert('게시글을 수정합니다.');</script>";
} else if ($res['pw']!=$hash) {
echo "<script>alert('비밀번호가 틀렸습니다.');";
echo "window.location.href=\"q_check.php?idx=$idx\"</script>";
} else {
echo "<script>alert('게시글 수정 권한이 없습니다');";
echo "window.location.href=\"q_check.php?idx=$idx\"</script>";
}
?>
사용자 확인이 되면 문의글 수정 페이지를 볼 수 있다
글 수정이 완료되면 form 태그를 통해 q_modify_ok.php로 이동한다
** q_modify.php (더보기 클릭)
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
</head>
<body>
<?php
$conn = mysqli_connect('localhost', 'root', 'mysql', 'logindb');
$idx = $_GET['idx'];
$sql= "SELECT * FROM q_board where idx='$idx'";
$res = mysqli_fetch_array(mysqli_query($conn, $sql));
$pw = $_GET['pw'];
$hash = md5($pw);
if($res['pw'] == $hash) {
echo "<script>alert('게시글을 수정합니다.');</script>";
} else if ($res['pw']!=$hash) {
echo "<script>alert('비밀번호가 틀렸습니다.');";
echo "window.location.href=\"q_check.php?idx=$idx\"</script>";
} else {
echo "<script>alert('게시글 수정 권한이 없습니다');";
echo "window.location.href=\"q_check.php?idx=$idx\"</script>";
}
?>
<form method="post" action="q_modify_ok.php" enctype="multipart/form-data" autocomplete="off">
<table align=center width=auto border=0 cellpadding=2>
<tr>
<td>
<p><b>Write</b></p>
</td>
</tr>
<tr>
<td>
<table class="table2">
<tr>
<td>이름</td>
<td ><input type="text"name="name" cols=20 size=15 value="<?=$res['name']?>" required></td>
</tr>
<tr>
<td>제목</td>
<td><input type="text" name="title" cols=25 size=40 value="<?=$res['title']?>" required></td>
</tr>
<tr>
<td>내용</td>
<td><textarea name="content" cols=40 rows=15 required><?=$res['content']?></textarea></td>
</tr>
<tr>
<td>연락처(E-MAil)</td>
<td ><input type="text" name="email" cols=25 size=40 value="<?=$res['email']?>"required></td>
</tr>
<tr>
<td>비밀번호</td>
<td ><input type="password" name="pass" cols=25 size=15 autocomplete="new-password" required></td>
</tr>
</table>
</td>
</tr>
</table>
<div>
<input type="hidden" name="idx" value="<?=$idx?>">
<button class="read_btn1" type="submit">작성</button>
</div>
</form>
</body>
</html>
Step 2. q_modify_ok.php에서 게시글 수정을 처리한다
** q_modify_ok.php (더보기 클릭)
<?php
$connect = mysqli_connect('localhost', 'root', 'mysql', 'logindb');
$idx = $_POST['idx'];
$title = $_POST['title'];
$content = $_POST['content'];
$name = $_POST['name'];
$email = $_POST['email'];
$pass = $_POST['pass'];
$hash = md5($pass);
$query = "update q_board set title='$title', content='$content', name = '$name', pw='$hash', email='$email', udate=now() where idx='$idx'";
$result = $connect->query($query);
if ($result) {
?>
<script>
alert("수정되었습니다.");
location.replace("qna.php?idx=<?=$idx?>");
</script>
<?php } else {
echo "다시 시도해주세요.";
}
?>
▷ 문의 글 삭제 처리 페이지(q_delete.php)
Step 1. 사용자와 비밀번호를 확인하고 처리한다
** q_delete.php (더보기 클릭)
<?php
session_start();
$conn = mysqli_connect('localhost', 'root', 'mysql', 'logindb');
$idx = $_GET['idx'];
$sql= "SELECT * FROM q_board where idx='$idx'";
$res = mysqli_fetch_array(mysqli_query($conn, $sql));
$pw = $_GET['pw'];
$hash = md5($pw);
$sql_check = "SELECT * FROM q_board WHERE idx=$idx";
$res_check = mysqli_fetch_array(mysqli_query($conn, $sql_check));
if($_SESSION['username']=='admin') {
echo "<script>alert('관리자 권한으로 삭제합니다!');</script>";
} else if ($res_check['pw']==$hash){
echo "<script>alert('게시글이 삭제되었습니다.');</script>";
} else if ($res_check['pw']!=$hash) {
echo "<script>alert('비밀번호가 틀렸습니다.');";
echo "window.location.href=\"qna.php\"</script>";
exit;
}
$sql = "DELETE FROM q_board WHERE idx=$idx;";
$res = mysqli_query($conn, $sql);
echo "<script>window.location.replace('qna.php');</script>";
?>
※ 문의게시판 비밀번호 구현
** 기능 구현 (더보기 클릭)
문의 게시글 클릭
▶ 관리자 계정

비밀번호 입력하고 조회

▶ 일반 사용자

이메일, 비밀번호 입력하고 조회

조회 과정만 다르고 수정, 삭제 부분은 관리자와 일반 사용자의 UI가 똑같다
비밀번호가 확인되면 게시글 열람

게시글 수정 시 비밀번호 입력

게시글 수정페이지(q_modify.php)

게시글 삭제 시 비밀번호 확인

▶ 관리자가 게시글 삭제

▶ 일반 사용자가 게시글 삭제

게시글들이 잘 삭제되었다

'Web Hacking Study > Web Page 만들기' 카테고리의 다른 글
| 웹 개발 환경 구축 oracle DB, tomcat (jsp, oracle) (0) | 2024.04.22 |
|---|---|
| 문의 게시판 (연락처 포함한 문의 글 작성) (0) | 2022.06.22 |
| 게시판 페이지 개발 (날짜, 제목, 조회 순 정렬) (0) | 2022.06.20 |
| 마이페이지 (개인정보 확인, 개인정보 수정, 비밀번호 변경 기능) (0) | 2022.06.19 |
| 게시판 페이지 개발 (좋아요/좋아요 취소) (0) | 2022.06.15 |
댓글