카테고리 없음

PHP 사이트 만들기 -게시판

Hyeon been 2023. 4. 25. 22:55
728x90

중요한 부분 정리하기

<?php
    $sql = "SELECT b.boardID, b.boardTitle, m.youName, b.regTime, b.boardView FROM  board b JOIN members m ON(b.memberID = m.memberID) ORDER BY boardID DESC LIMIT 100";               
    $result = $connect -> query($sql);

    if($result){
        $count = $result -> num_rows;

        if($count > 0){
            for($i=0; $i<$count; $i++){
                $info = $result -> fetch_array(MYSQLI_ASSOC);

                echo "<tr>";
                echo "<td>".$info['boardID']."</td>";
                echo "<td><a href='boardView.php?boardID={$info['boardID']}'>".$info['boardTitle']."</a></td>";
                echo "<td>".$info['youName']."</td>";
                echo "<td>".date('Y-m-d', $info['regTime'])."</td>";
                echo "<td>".$info['boardView']."</td>";
                echo "</tr>";
            };
        }
    }
?>

이 코드는 PHP를 사용하여 게시판 목록을 출력하는 코드입니다.

처음에는 board와 members 테이블을 조인하여 게시물의 제목, 작성자, 작성 시간, 조회 수 등의 정보를 가져옵니다. 그리고 ORDER BY와 LIMIT을 사용하여 최신 게시물 100개만 가져오도록 설정합니다.

 $sql = "SELECT b.boardID, b.boardTitle, m.youName, b.regTime, b.boardView FROM  board b JOIN members m ON(b.memberID = m.memberID) ORDER BY boardID DESC LIMIT 100";

      

 

이후에는 query() 메서드를 사용하여 SQL 쿼리를 실행하고, num_rows 속성을 사용하여 결과 집합의 행 수를 가져옵니다.

$result = $connect -> query($sql);  if($result){ $count = $result -> num_rows;

 

행 수가 0보다 크면 fetch_array() 메서드를 사용하여 한 행씩 결과를 가져와서 for 루프에서 출력합니다.

각 행을 출력할 때는 echo 함수를 사용하여 HTML <tr> 태그를 출력하고, 가져온 정보를 사용하여 <td> 태그에 넣어서 출력합니다. 특히, 게시물 제목은 링크로 출력하며, 이 때 boardView.php 페이지로 이동할 수 있도록 boardID 값을 GET 방식으로 전달합니다.

        if($count > 0){
            for($i=0; $i<$count; $i++){
                $info = $result -> fetch_array(MYSQLI_ASSOC);

                echo "<tr>";
                echo "<td>".$info['boardID']."</td>";
                echo "<td><a href='boardView.php?boardID={$info['boardID']}'>".$info['boardTitle']."</a></td>";
                echo "<td>".$info['youName']."</td>";
                echo "<td>".date('Y-m-d', $info['regTime'])."</td>";
                echo "<td>".$info['boardView']."</td>";
                echo "</tr>";
            };

게시판 보기  내용 php로 만들기

<?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){
                    $info = $result -> num_rows;
                    if($info > 0){
                        $info = $result -> fetch_array(MYSQLI_ASSOC);
                        echo "<tr><th>".'제목'."</th>";
                        echo "<td>".$info['boardTitle']."</td>";
                        echo "</tr>";
                        echo "<tr>";
                        echo "<th>".'등록자'."</th>";
                        echo "<td>".$info['youName']."</td>";
                        echo "</tr>";
                        echo "<tr>";
                        echo "<th>".'등록일'."</th>";
                        echo "<td>".date('Y-m-d', $info['regTime'])."</td>";
                        echo "</tr>";
                        echo "<tr>";
                        echo "<th>".'조회수'."</th>";
                        echo "<td>".$info['boardView']."</td>";
                        echo "</tr>";
                        echo "<tr>";
                        echo "<th>".'내용'."</th>";
                        echo "<td>".$info['boardContents']."</td>";
                        echo "</tr>";
                    }
                }
            } else {
                echo "<tr><td colspan='4'>게시글이 없습니다.</td></tr>";
            }
?>

이 코드는 PHP를 사용하여 게시판의 글 보기 페이지를 출력하는 코드입니다.

먼저, GET 방식으로 전달된 boardID 값을 받아와서 해당 게시물의 정보를 가져옵니다. 가져온 정보를 사용하여 게시물의 제목, 작성자, 작성일, 조회 수, 내용 등을 출력합니다.

fetch_array() 메서드를 사용하여 한 행씩 결과를 가져와서 출력합니다.

미션1

isset() 함수를 사용하여 GET 방식으로 boardID 값이 전달되지 않았을 경우에는 "게시글이 없습니다." 라는 메시지를 출력합니다. 이렇게 함으로써, 존재하지 않는 게시물 번호로 접근할 때 오류를 방지할 수 있습니다.

 

미션2

            <div class="board__btn mb100">
                <a href="boardModify.php?boardID=<?=$_GET['boardID']?>" class="btnstyle3">수정하기</a>
                <a href="boardRemove.php?boardID=<?=$_GET['boardID']?>" class="btnstyle3" onclick="return confirm('정말 삭제하시겠습니까?')">삭제하기</a>
                <a href="board.php" class="btnstyle3">목록보기</a>
            </div>

onclick에 리턴을 써줍니다. 확인이나 취소 버튼을 누를경우 리턴값이 반환되기 때문에 취소를 누를경우 false가 나와 아무것도 실행되지 않게 됩니다.

 

삭제 PHP

<?php
    include "../connect/connect.php";
    include "../connect/session.php";

    $boardID =$_GET['boardID'];
    $boardID =$connect -> real_escape_string($boardID);

    $sql = "DELETE FROM board WHERE boardID = {$boardID}";
    $connect -> query($sql);

?>

<script> 
    location.href = "board.php";
</script>

HTTP POST 방식을 사용하여 게시판 삭제를 처리하는 PHP 코드입니다. 이 코드에는 데이터베이스 연결 코드를 포함하는 "connect/connect.php"와 PHP 세션을 시작하는 "connect/session.php"라는 두 개의 PHP 파일이 포함되어 있습니다.

이 코드는 HTTP GET 메서드를 사용하여 boardID를 검색한 다음 real_escape_string()SQL 주입 공격을 방지하는 기능을 사용하여 삭제합니다.

그런 다음 SQL 쿼리를 구성하여 데이터베이스에서 해당 보드를 삭제합니다.

쿼리를 실행한 후 코드는 JavaScript를 사용하여 사용자를 "board.php" 페이지로 리디렉션합니다.

이 코드는 데이터베이스에서 데이터를 영구적으로 삭제하고 부적절하게 사용하면 데이터가 손실될 수 있으므로 주의해서 사용해야 합니다. 무단 삭제를 방지하기 위해 적절한 인증 및 권한 부여 메커니즘도 마련되어 있어야 합니다.

 

<?php
    $boardID = $_GET['boardID'];

    $sql = "SELECT boardID, boardTitle, boardContents FROM board WHERE boardID = {$boardID}";
    $result = $connect -> query($sql);

    if($result){
        $info = $result -> fetch_array(MYSQLI_ASSOC);
        echo "<div style='display:none'><label for='boardID'>아이디 값</label><input type='text' id='boardID' name='boardID' class='inputStyle' value='".$info['boardID']."'></div>";
        echo "<div><label for='boardTitle'>제목</label><input type='text' id='boardTitle' name='boardTitle' class='inputStyle' value='".$info['boardTitle']."'></div>";
        echo "<div><label for='boardContents'>내용</label><textarea name='boardContents' id='boardContents' rows='20' class='inputStyle'>".$info['boardContents']."</textarea></div>";
    }
?>

 

POST방식과 GET방식

_POST 방식은 HTTP 수신자를 이용하여 클라이언트(웹 브라우저)와 서버 내부에서 데이터를 전송하는 방식 중 하나입니다.
POST 방식은 GET 방식과 달리 데이터를 URL에 표시하지 않기 때문에 보안성이 높습니다. 또한 GET 방식보다 더 많은 양의 데이터를 복구할 수 있고 파일 업로드와 같은 이진 전송도 가능합니다.
보통 웹 폼(form)을 이용하여 데이터를 복구할 때 POST 방식을 사용합니다. 예를 들어, 로그인 폼, 회원가입 폼, 검색 폼 등에서 사용됩니다.

 

_GET 방식_은 웹에서 클라이언트가 서버에게 정보를 요청할 때 사용되는 방식 중 하나입니다. 이 방식은 URL을 통해 정보를 전달하며, 요청하는 정보는 URL 끝에 ? 뒤에 파라미터 형태로 쿼리 스트링(query string)으로 전달됩니다.

예를 들어, https://www.example.com/search?q=apple과 같은 URL에서 ? 뒤에 오는 q=apple은 파라미터이며, 서버에서는 이를 해석하여 q라는 이름의 변수에 apple 값을 저장하고 이를 기반으로 검색 결과를 반환합니다.

_GET 방식은 요청하는 정보가 URL 상에 노출되므로 보안에 취약할 수 있지만, 간단하고 빠르게 정보를 전달할 수 있다는 장점이 있습니다. 따라서 검색이나 데이터 조회와 같이 보안이 크게 중요하지 않은 경우에 주로 사용됩니다.