Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
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
Archives
Today
Total
관리 메뉴

Leeyanggoo

[PHP] 게시판2 -> 사용자마다 접근할 수 있는 게시글 경로 설정하기 본문

2023/MySQL

[PHP] 게시판2 -> 사용자마다 접근할 수 있는 게시글 경로 설정하기

Leeyanggoo 2023. 4. 25. 20:53
<?php
    include "../connect/connect.php";
    include "../connect/session.php";
?>

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>게시판 페이지</title>

    <?php include "../include/head.php" ?>
</head>
<body class="gray">
    
    <?php include "../include/skip.php" ?>
    <!-- //skip -->

    <?php include "../include/header.php" ?>
    <!-- //header -->

    <main id="main" class="container">
        <div class="intro__inner center">
            <div class="intro__images small">
                <picture>
                    <source srcset="../assets/img/board01.png, ../assets/img/board01@2x.png 2x, ../assets/img/board01@3x.png 3x">
                    <img src="../assets/img/board01.png" alt="회원가입 이미지">
                </picture>
            </div>
            <h2>게시글 보기</h2>
            <p class="intro__text">
                웹디자이너, 웹 퍼블리셔, 프론트앤드 개발자를 위한 게시판입니다.<br>관련 문의사항은 여기서 확인하세요! 
            </p>
        </div>
        <!-- //intro__inner -->

        <div class="board__inner">
            <div class="board__view">
                <table>
                    <colgroup>
                        <col style="width: 20%;">
                        <col style="width: 80%;">
                    </colgroup>
                    <tbody>
                        <!-- <tr>
                            <th>제목</th>
                            <td>게시판 제목입니다.</td>
                        </tr>
                        <tr>
                            <th>등록자</th>
                            <td>이양구</td>
                        </tr>
                        <tr>
                            <th>등록일</th>
                            <td>2023-04-20</td>
                        </tr>
                        <tr>
                            <th>조회수</th>
                            <td>99</td>
                        </tr>
                        <tr>
                            <th>내용</th>
                            <td>
                                
                            </td>
                        </tr> -->

 

connect와 session을 include 하여 로그인한 사용자의 데이터와 게시판에 등록된 글의 정보를 불러옵니다.

외에 head, skip, header 등 페이지에 공통적으로 적용되는 HTML 코드를 저장하여 불러옵니다.

php 이전에 미리 만들어놓았던 html 파일에서는 게시글의 틀을 잡는 부분들을 table 태그로 만들었습니다.

이제는 각각 데이터를 불러와서 모양을 만들어야 하기에 주석 처리를 한 모양입니다.

 

<?php
    // 게시글 번호 확인
    if(isset($_GET['boardID'])) {
        $boardID = $_GET['boardID'];
        // echo $boardID;

        $sql = "SELECT b.boardContents, b.boardTitle, m.youName, b.regTime, b.boardView FROM board b JOIN members m ON(m.memberID = b.memberID) WHERE b.boardID = {$boardID}";
        $result = $connect -> query($sql);

        if($result && $result->num_rows > 0){
            $info = $result -> fetch_array(MYSQLI_ASSOC);

            echo "<tr><th>제목</th><td>".$info['boardTitle']."<td/></tr>";
            echo "<tr><th>등록자</th><td>".$info['youName']."<td/></tr>";
            echo "<tr><th>등록일</th><td>".date('Y-m-d', $info['regTime'])."<td/></tr>";
            echo "<tr><th>조회수</th><td>".$info['boardView']."<td/></tr>";
            echo "<tr><th>내용</th><td>".$info['boardContents']."<td/></tr>";
        } else {
            echo "<tr><td colspan='5'>게시글이 없습니다.</td></tr>";
        }
    } else {
        echo "<tr><td colspan='5'>잘못된 접근입니다.</td></tr>";
    }
?>
                    </tbody>
                </table>
            </div>
            <div class="board__btn mb100">

            <?php
                if (isset($_GET['boardID'])){
                    if ($result && $result->num_rows > 0){
                        $sql = "SELECT memberID FROM board WHERE boardID = {$boardID}";
                        $result2 = $connect -> query($sql);
                        $userID = $result2->fetch_assoc();

                        // 로그인 여부 확인
                        if(isset($_SESSION['memberID'])){
                            if($userID['memberID'] == $_SESSION['memberID']){
                                echo "<a href='boardModify.php?boardID=".$_GET['boardID']."' class='btnStyle3'>수정하기</a>";
                                echo "<a href='boardRemove.php?boardID=".$_GET['boardID']."' class='btnStyle3' onclick='return confirm(\"정말 삭제할 거임?\")'>삭제하기</a>";
                            } 
                        }
                    }
                }
            ?>
                <a href="board.php" class="btnStyle3">목록보기</a>
            </div>
        </div>

    </main>
    <!-- //main -->

    <?php include "../include/footer.php" ?>
    <!-- //footer -->
</body>
</html>

 

php의 isset() 함수는 변수가 설정되어 있고, NULL이 아닌지 확인하는 함수입니다.

이를 사용하여 "boardID(게시판 등록 번호)" 키가 $_GET 배열에 존재하는지 확인합니다.

첫 번째 php 코드는 다음과 같은 구조입니다.

  1. 먼저, isset($_GET['boardID'])를 사용하여 "boardID" 키가 $_GET 배열에 있는지 확인합니다.
  2. "boardID" 키가 존재하면, 기존 코드를 실행하여 게시글을 조회하고 출력합니다.
  3. "boardID" 키가 존재하지 않으면, "잘못된 접근입니다."라는 메시지를 출력합니다.

따라서 게시글의 boardID가 존재하지 않는 URL의 접근을 막고, 게시글 목록으로 이동하도록 사용자를 안내하는 코드입니다.

 

두 번째 php 코드는 접속한 사용자에 따라 게시글의 '수정하기'와 '삭제하기' 버튼을 보여주거나 숨기는 코드입니다.

memberID는 사용자가 회원가입 시 등록되는 고유한 번호입니다.

boardID의 일치 여부를 확인하고, 해당 게시글을 작성한 memberID와 SESSION의 memberID를 확인하여 사용자에게 HTML 코드를 출력합니다.

또한 isset() 함수를 사용하여 로그인하지 않은 경우에 게시글을 보는 경우에도 오류 코드가 발생하지 않도록 설정합니다.

이렇게 되면 별도의 버튼 클릭 이벤트를 만들지 않을 수 있습니다.

만약 모든 사용자에게 해당 버튼이 보이는 경우, 알맞지 않은 사용자가 삭제하거나 수정하려 하는 경우를 대비한 코드를 작성해야 하기 때문입니다.

 


 

🚀 코드 보러 가기

🚀 index.html로 쳐들어 가기(HTML만 방문 가능)