Today I Learned …

[웹개발] 비회원 문의글 작성, 조회 및 삭제 기능 본문

Web/APM

[웹개발] 비회원 문의글 작성, 조회 및 삭제 기능

염베리 2021. 11. 14. 05:01

* 개인적인 공부 내용을 기록한 글입니다.


설명

문의게시판에는 비회원도 문의글을 남길 수 있다.

이 포스팅에서는 문의게시판의 전반적인 내용을 다룬다.

 

최종 화면

클릭하면 확대됩니다.


문의글 작성 기능

 

 

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 

 

[웹개발] 게시글 리스트 출력 기능

* 개인적인 공부 내용을 기록한 글입니다. 최종 화면 게시판 리스트 출력 기능 0. 요약 [1] 게시판 페이지를 만든다. [2] 게시글 목록을 출력할 표를 만든다. [3] DB에 담긴 게시글 정보를 최신글부터

choco4study.tistory.com

https://choco4study.tistory.com/51?category=1054456 

 

[웹개발] 게시글 리스트 페이징 기능

* 개인적인 공부 내용을 기록한 글입니다. 설명 저번에 게시글 리스트 출력을 다뤘으니 이번에는 페이징을 다뤄볼까 한다. 페이징에는 크게 두 가지의 목표가 있다. 1. 한 페이지 당 원하는 개수

choco4study.tistory.com

 

 

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] 게시글 DB 만들기 [2] 게시글 폼 만들기 [3] 폼과 DB 연결 [4] 끝! + 회원만 작성할 수 있게 세션 검증은 덤 1. 게시글

choco4study.tistory.com


문의글 조회 기능

 

 

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 

 

[웹개발] 조회수/좋아요(취소 포함) 기능

* 개인적인 공부 내용을 기록한 글입니다. 설명 오늘은 조회수와 좋아요 기능에 대해 살펴보려고 한다. 최종 화면 조회수 기능 0. 전제 [1] 게시글 DB에 조회수를 저장할 hit 컬럼을 추가해준 상태

choco4study.tistory.com

 

[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로 돌아가준다.

프로필사진
berry
FE Developer, loves React & better DX
Comments