Today I Learned …
[웹개발] 비회원 문의글 작성, 조회 및 삭제 기능 본문
* 개인적인 공부 내용을 기록한 글입니다.
설명
문의게시판에는 비회원도 문의글을 남길 수 있다.
이 포스팅에서는 문의게시판의 전반적인 내용을 다룬다.
최종 화면
문의글 작성 기능
1. 문의글 DB 만들기 (= q_board)
[1] 문의글을 저장할 DB를 만들어준다.
① id : 문의글 식별자
② title : 제목
③ name : 작성자 이름
④ contact : 작성자 연락처
⑤ pw : 문의글 비밀번호
⑥ content : 문의글 내용
⑦ written : 작성일
⑧ hit : 조회수
2. 문의글 게시판 만들기 (= q_board.php)
[1] 문의글 리스트 출력과 페이징 기능을 구현한다.
[2] 게시글 제목을 클릭하면 문의글 식별자 (= id) 와 함께 q_check.php로 넘어가게끔 구현한다.
[3] 큰 틀은 회원게시판과 동일하다. 아래는 관련 링크이다.
https://choco4study.tistory.com/41?category=1054456
https://choco4study.tistory.com/51?category=1054456
3. 다음은 문의글 작성 페이지를 출력할 q_write.php의 내용이다.
<div class=head>문의하기</div>
<div class=middle>
<form method="post" action="q_write_ok.php" autocomplete="off">
<p><input class=textform type=text size=25 name=title placeholder="제목" required></p>
<p><textarea class=textform cols=35 rows=15 name=content placeholder="내용을 입력하세요."></textarea></p>
<p><input class=infoform type=text size=10 name=name placeholder="Name" required>
<br><input class=infoform type=text size=10 name=contact placeholder="Contact" required>
<br><input class=infoform type=password size=10 name=pw placeholder="Password" required></p>
<p><input class=write type="submit" value="글쓰기"></p>
</form>
</div>
[1] 문의글 작성을 위한 폼을 만들어준다.
[2] 관리를 위해 작성자 이름, 연락처, 비밀번호를 필수로 받아준다.
[3] method는 POST, action은 q_write_ok.php으로 넘겨준다.
4. 다음은 문의글 작성을 실질적으로 처리할 q_write_ok.php의 내용이다.
<?php
session_start();
$title = $_POST['title'];
$content = $_POST['content'];
$name = $_POST['name'];
$contact = $_POST['contact'];
$pw = $_POST['pw'];
$conn = mysqli_connect('localhost', 'choco', '7173', 'study_login');
$sql = "INSERT INTO q_board(title, name, contact, pw, written, content) VALUES ('$title', '$name', '$contact', '$pw', now(), '$content');";
$res = mysqli_query($conn, $sql);
if($res) {
echo "<script>alert('문의글이 작성되었습니다.');";
echo "window.location.replace('q_board.php');</script>";
} else {
echo mysqli_error($conn);
}
?>
[1] 이해가 어려울 시 회원글 작성 포스팅의 write_ok.php를 참고한다. 아래는 관련 링크이다.
https://choco4study.tistory.com/40?category=1054456
문의글 조회 기능
0. 전제
[1] 문의글은 해당 문의글의 작성자 및 관리자만 조회할 수 있다.
[2] 문의글 작성 시 기입한 비밀번호를 확인하여 해당 글의 작성자임을 검증한다.
1. 다음은 문의게시판에서 게시글 제목을 클릭할 시 넘어가게 되는 q_check.php의 내용이다.
<?php
session_start();
$conn= mysqli_connect('localhost', 'choco', '7173', 'study_login');
$id= $_GET["id"];
$sql= "SELECT * FROM q_board where id='$id'";
$res = mysqli_fetch_array(mysqli_query($conn, $sql));
if($_SESSION['user_id']=='choco') {
echo "<script>window.location.href=\"q_view.php?id=$id\"</script>";
}
?>
[1] GET으로 넘어온 id를 $id에 할당해준다.
[2] 해당 문의글의 정보를 가져온다.
[3] 만약 접속한 사용자가 관리자 (= choco) 라면, 즉시 q_view.php로 문의글 식별자 (= id) 와 함께 넘겨준다.
<div class=top><h2><?=$res['title']?> | <?=$res['name']?></h2></div>
<div class=middle>
<form method="post" action="q_view.php?id=<?=$id?>" autocomplete="off">
<p style="font-size:25px;">비밀번호를 입력하세요.</p>
<p><input style="text-align:center;" placeholder="Password" class=textform type=password name=pw></p>
<p><input type=submit value=확인></p>
</form>
</div>
[4] 문의글 비밀번호를 확인하기 위한 폼을 만들어준다.
[5] method는 POST로, action은 q_view.php로 문의글 식별자 (= id) 와 함께 넘겨준다.
2. 다음은 문의글 조회 페이지를 출력할 q_view.php의 내용이다.
<?php
session_start();
$id = $_GET['id'];
$pw = $_POST['pw'];
$conn = mysqli_connect('localhost', 'choco', '7173', 'study_login');
$sql_view = "SELECT * FROM q_board WHERE id=$id";
$res_view = mysqli_fetch_array(mysqli_query($conn, $sql_view));
if($_SESSION['user_id']=='choco') {
echo "<script>alert('관리자 권한으로 조회합니다.');</script>";
} else if ($res_view['pw']==$pw){
echo "<script>alert('비밀번호가 일치합니다.');</script>";
} else if ($res_view['pw']!=$pw) {
echo "<script>alert('비밀번호가 틀립니다.');";
echo "window.location.href=\"q_board.php\"</script>";
exit;
}
$sql_hit = "UPDATE q_board SET hit=hit+1 WHERE id=$id";
$res_hit = mysqli_query($conn, $sql_hit);
?>
//중간 내용 생략..
<div class=head>문의글조회 | <?=$res_view['name'];?></div>
<div class=middle>
<p><div class=title><?=$res_view['title'];?></div></p>
<p><div class=content><?=$res_view['content'];?></div></p>
<p><div class=hitlike> 조회수 <?=$res_view['hit'];?></div></p>
</div>
<div class=mine><button class=write onclick="window.location.href='q_remove.php?id=<?=$res_view['id']?>'" type="button">삭제</button></div>
[1] GET으로 넘어온 id를 $id에 할당해준다.
[2] POST로 넘어온 pw를 $pw에 할당해준다.
[3] 해당 문의글의 정보를 가져온다.
[4-1] 만약 접속한 사용자가 관리자 (= choco) 라면, alert를 출력하고 문의글 내용을 출력한다.
[4-2] 만약 접속한 사용자가 관리자가 아니라면, 비밀번호를 검증한다.
[5-1] 비밀번호가 일치하면, alert를 출력하고 문의글 내용을 출력한다.
[5-2] 비밀번호가 일치하지 않으면, alert를 출력하고 q_board.php로 돌아가준다.
[6] 게시글 조회에 성공하면 조회수를 +1 해준다. 아래는 관련 링크이다.
https://choco4study.tistory.com/53?category=1054456
[7] 게시글 조회에 성공하면 문의글 내용을 출력한다.
[8] 문의글은 삭제 기능만 제공할 것이므로 [삭제] 버튼을 만들고 q_remove.php로 문의글 식별자 (= id) 와 함께 링크해준다.
문의글 삭제 기능
0. 전제
[1] 문의글 조회 시와 마찬가지로 한 차례 추가적으로 비밀번호를 검증한 후 삭제를 진행해준다.
1. 다음은 문의글 조회 페이지에서 [삭제] 버튼을 클릭할 시 넘어가게 되는 q_remove.php의 내용이다.
<?php
session_start();
$conn= mysqli_connect('localhost', 'choco', '7173', 'study_login');
$id= $_GET["id"];
$sql= "SELECT * FROM q_board where id='$id'";
$res = mysqli_fetch_array(mysqli_query($conn, $sql));
if($_SESSION['user_id']=='choco') {
echo "<script>window.location.href=\"q_remove_ok.php?id=$id\"</script>";
}
?>
//중간 내용 생략..
<div class=top><h2><?=$res['title']?> | <?=$res['name']?> | 삭제</h2></div>
<div class=middle>
<form method="post" action="q_remove_ok.php?id=<?=$id?>" autocomplete="off">
<p style="font-size:25px;">비밀번호를 입력하세요.</p>
<p><input style="text-align:center;" placeholder="Password" class=textform type=password name=pw></p>
<p><input type=submit value=확인></p>
</form>
</div>
[1] 큰 틀은 q_check.php와 동일하다.
[2] 폼의 method는 POST로, action은 q_remove_ok.php로 문의글의 식별자 (= id) 와 함께 넘겨준다.
2. 다음은 문의글 삭제를 실질적으로 처리할 q_remove_ok.php의 내용이다.
<?php
session_start();
$conn = mysqli_connect('localhost', 'choco', '7173', 'study_login');
$id = $_GET['id'];
$pw = $_POST['pw'];
$sql_check = "SELECT * FROM q_board WHERE id=$id";
$res_check = mysqli_fetch_array(mysqli_query($conn, $sql_check));
if($_SESSION['user_id']=='choco') {
echo "<script>alert('관리자 권한으로 삭제합니다!');</script>";
} else if ($res_check['pw']==$pw){
echo "<script>alert('게시글이 삭제되었습니다.');</script>";
} else if ($res_check['pw']!=$pw) {
echo "<script>alert('비밀번호가 틀립니다.');";
echo "window.location.href=\"q_board.php\"</script>";
exit;
}
$sql = "DELETE FROM q_board WHERE id=$id;";
$res = mysqli_query($conn, $sql);
echo "<script>window.location.replace('q_board.php');</script>";
?>
[1] GET으로 넘어온 id를 $id에 할당해준다.
[2] POST로 넘어온 pw를 $pw에 할당해준다.
[3] 해당 문의글의 정보를 가져온다.
[4-1] 만약 접속한 사용자가 관리자 (= choco) 라면, alert를 출력하고 문의글을 삭제한다.
[4-2] 만약 접속한 사용자가 관리자가 아니라면, 비밀번호를 검증한다.
[5-1] 비밀번호가 일치하면, alert를 출력하고 문의글을 삭제한다.
[5-2] 비밀번호가 일치하지 않으면, alert를 출력하고 q_board.php로 돌아가준다.
[6] 삭제가 완료되면 q_board.php로 돌아가준다.
'Web > APM' 카테고리의 다른 글
[웹개발] 주소 검색 기능 (1) : 주소 DB 자체 구축 (MySql) (0) | 2021.11.16 |
---|---|
[웹개발] 게시글 검색 기능 (기간 설정 포함) (0) | 2021.11.15 |
[웹개발] 마이페이지 비밀번호 변경 기능 (0) | 2021.11.13 |
[웹개발] 마이페이지 개인 정보 조회 및 수정 기능 (0) | 2021.11.12 |
[웹개발] 게시글 삭제 기능 (0) | 2021.11.07 |