PHP

PHP로 사이트 만들기(게시판)추가

이미사용 2023. 4. 26. 19:27
명언
-
728x90
반응형

※sessionCheck.php

<?php
    if(!isset($_SESSION['memberID'])){
        Header("Location:../login/login.php");
    }
?>

- 게시글보기(boardView.php) 맨 위에 <?php ?>부분에 include "../connect/sessionCheck.php";를 추가하여 로그인을 하여 memberID값이 있어야지만 게시글을 볼수 있게 하였습니다.


게시판 수정하기(boardModify.php)

echo "<div class= 'mt50'><label for='boardPass'>비밀번호</label><input type='password' id='boardPass' name='boardPass' class='inputStyle' autocomplete='off' required placeholder='글을 수정하려면 로그인 비밀번호를 입력하셔야 합니다.'></div>";

- $result 로게시글 수정하기에 내용과 제목을 입력한곳에 위에 문장을 더 추가하여 회원의 비밀번호를 입력해야지 게시글을 수정할수 있게 해주었습니다.

 

-게시판 수정저장하기boardModifySave.php

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

    $boardID = $_POST['boardID'];
    $boardTitle = $_POST['boardTitle'];
    $boardContents = $_POST['boardContents'];
    $boardPass = $_POST['boardPass'];

    echo $boardID, $boardTitle, $boardContents, $boardPass;

    $boardTitle = $connect -> real_escape_string($boardTitle);
    $boardContents = $connect -> real_escape_string($boardContents);
    $boardPass = $connect -> real_escape_string($boardPass);
    $memberID = $_SESSION['memberID'];
    
    // echo $memberID;
    $sql = "SELECT * FROM members WHERE memberID = {$memberID}"; 
    $result = $connect ->query($sql);

    if($result){
        $info = $result -> fetch_array(MYSQLI_ASSOC);
        
        if($info['memberID'] == $memberID && $info['youPass'] == $boardPass){
            $sql = "UPDATE board SET boardTitle = '{$boardTitle}', boardContents = '{$boardContents}' WHERE boardID = '{$boardID}'";
            $connect -> query($sql);

        } else {
            echo "<script>alert('비밀번호가 틀렸습니다. 다시 한번 확인해주세요!')</script>";
        }
    } else {
        echo "<script>alert('관리자에러!')</script>";
    };
?>

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

- boardModify.php에서 사용자가 입력한 비밀번호가 맞을때 게시글이 수정될수 있게 해주었습니다.


※board.php(게시판)  게시판 페이지 추가

    if(isset($_GET['page'])){
        $page = (int) $_GET['page']; //(int)출력문의 타입을 정해줄수있다. (숫자)
    } else {
        $page = 1;
    }

    $viewNum = 20;

    $viewLimit = ($viewNum * $page) -  $viewNum;
    
    // 1~20 DESC LIMIT 0,20   ---> page1 ($viewNum * 1) - $viewNum
    // 21~40 DESC LIMIT 20,20 ---> page2 ($viewNum * 2) - $viewNum
    // 41~60 DESC LIMIT 40,20 ---> page3 ($viewNum * 3) - $viewNum
    // 61~80 DESC LIMIT 60,20 ---> page4 ($viewNum * 4) - $viewNum

- 현재 페이지의 값을 숫자로 가져오고 없으면 1을 저장해줍니다.

- 한페이지에 보여주는 게시글의 갯수를 20으로 저장하고 그값을 SQL문으로 만들어주기위해 

 $viewLimit = ($viewNum * $page) -  $viewNum;공식을 만들어줍니다.

 

<?php
    // 게시글 총 갯수
    // 몇 페이지??

    $sql = "SELECT count(boardID) FROM board"; //총갯수 불러오기
    $result = $connect -> query($sql);

    $boardTotalCount = $result -> fetch_array(MYSQLI_ASSOC);
    $boardTotalCount = $boardTotalCount['count(boardID)'];

    // 총 페이지 갯수
    $boardTotalCount = ceil($boardTotalCount/$viewNum);
    
    //1 2 3 4 5 6 7 8 9 10 11 12 13
    $pageView = 5;
    $startPage = $page - $pageView;
    $endpage = $page + $pageView;

    //처음 페이지 초기화//마지막 페이지 초기화
    if(isset($boardTotalCount) && $page <= $boardTotalCount && $page >= 1){ //글이 없을 때 처음으로이전 다음마지막으로 없애기
        if($startPage < 1) $startPage = 1;
        if($endpage >= $boardTotalCount) $endpage = $boardTotalCount; //
        //처음으로/이전
        if($page != 1){
            $prevPage = $page - 1;
            echo "<li><a href='board.php?page=1'>처음으로</a></li>";
            echo "<li><a href='board.php?page={$prevPage}'>이전</a></li>";
        }
        //페이지
        for($i=$startPage; $i<=$endpage; $i++){
            $active = "";
            if($i == $page) $active = "active";
            echo " <li class='{$active}'><a href='board.php?page={$i}'>{$i}</a></li>";
        }
        //마지막으로/다음
        if($page != $boardTotalCount){
            $NextPage = $page + 1;
            echo "<li><a href='board.php?page={$NextPage}'>다음</a></li>";
            echo "<li><a href='board.php?page={$boardTotalCount}'>마지막으로</a></li>";
        }
    } else echo "게시글이 없습니다."
?>

- SQL에 저장되어있는 게시글의 총갯수를 가져와  fetch_array를 통해 배열로 가져온후 그값을 다시 한페이지당 보이는 게시글의 갯수(viewNum)와 나누어 ceil()로 반올림을하여 그값을 페이지갯수 값으로 저장합니다.

만약 없다면 "게시글이 없습니다"를 출력합니다.

-현재 있는 페이지를 기준으로 몇페이지 까지 보이게 하고싶은지 정한후 pageView에 저장합니다.

-현재 페이지에 이전에있는 페이지를 pageView만큼 보여주게 하기위해  그값을 startPage에 저장합니다.

-현재 페이지에 다음에있는 페이지를 pageView만큼 보여주게 하기위해  그값을 endpage에 저장합니다.

- 조건문을 통해 (boardTotalCount)값이 있는지 확인하고, 현재 페이지 번호($page)가 총 게시글 수($boardTotalCount)보다 작거나 같고, 1보다 크거나 같을 때에만 다음문장을 실행 하도록 해줍니다.

- 실행을 했을때 조건문으로  이전페이지를 보여주는 startPage가 1보다 작을때 그페이지를 1로 변경하도록 하였습니다.

- 조건문으로 다음 페이지를 보여주는 endpage가 페이지의 총갯수인 boardTotalCount 보다 클 경우 그값을 boardTotalCount로 변경 하였습니다.

//처음으로/이전

- 현재 페이지의 값이 1이 아닐때 "처음으로"와 "이전" 링크를 출력하게 하였습니다.

//페이지

- 반복문을 통해 보여주는이전페이지갯수(startPage)에서 시작해서 보여주는 다음페이지갯수(endpage)만큼 페이지수를 만들어 줍니다.

//마지막으로/다음

-현재 페이지의 값이 마지막 페이지의 값이 아닐때 출력하게 "다음"과 "마지막으로" 링크를 출력하게 하였습니다.