Winnie The Pooh Bear php 사이트 만들기 게시판작업

배움기록/PHP

php 사이트 만들기 게시판작업

코딩은 처음이라 2023. 4. 26. 21:35

“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”

- Frederick Philips Brooks
Mythical Man-Month 저자
728x90
반응형

php 사이트 만들기 게시판작업

 

 

 

 

board.php

if(isset($_GET['page'])){
    $page = (int) $_GET['page'];
} else {
    $page = 1;
}

$viewNum = 10;
$viewLimit = ($viewNum * $page) - $viewNum; 

//   1~20 DESC LIMIT 0, 20 -> page1 (viewNum * 1) - viewNum
// 21~40 DESC LIMIT 20, 20 -> page2 (viewNum * 2) - viewNum
// 40~60 DESC LIMIT 40, 20 -> page3 (viewNum * 3) - viewNum
// 60~80 DESC LIMIT 60, 20 -> page4 (viewNum * 4) - viewNum

페이지네이션 기능을 구현해줍니다.

 

page값이 존재하는지 확인합니다.

isset()함수를 사용해 page파라미터가 존재하는지 확인합니다.

 

page값이 존재하면 해당 값을 정수로 형변환해 $page변수에 저장, $_GET['page]'는 page파라미터의 값이며, int를 사용해 정수로 형변환합니다. 이렇게 함으로써 사용자가 전달한 page값이 숫자가 아니더라도 정수로 변환되어 사용됩니다.

 

page값이 존재하지 않는다면 $page 변수에 1을 할당합니다.

즉 page파라미터가 전달되지 않았을 경우, 기본적으로 $page변수에 1이 할당됩니다.

 

$viewNum 변수는 한 페이지에 보여줄 항복의 개수를 나타냅니다.

($viewNum * $page)-$viewNum을 계산해 현재 페이지에 해당하는 항목의 범위를 설정합니다.

예를 들어 첫 번째 페이지인 경우 $page가 1이므로 $viewLimit은 0이 되어, 두 번째 페이지인 경우 $page가 2이므로 $viewLimit은 10이 되어 LIMIT 10, 10으로 설정됩니다.

 

 

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

$viewNum = 10;

$sql = "SELECT count(boardID) FROM board";
$result = $connect->query($sql);

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



//총 페이지 갯수
$boardTotalCount = ceil($boardTotalCount / $viewNum);

// echo $boardTatalCount;
//1 2 3 4 5 6 7 8 9 10 11 12 13 ...
$pageView = 5;
$startPage = $page - $pageView;
$endPage = $page + $pageView;

//처음 페이지 초기화/ 마지막 페이지
if ($startPage < 1) $startPage = 1;
if ($endPage >= $boardTotalCount) $endPage = $boardTotalCount;

// 첫 페이지로 가기/ 이전 페이지로 가기
if ($page != 1 && $page < $boardTotalCount) {
    echo "<li><a href='board.php?page=1'>처음으로</a></li>";
    $prevPage = $page - 1;
    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 && $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>";
}

$viewNum 한 페이지에서 표시할 게시글의 수

$sql 게시판의 총 게시글 수를 조회하는 SQL 쿼리

$result SQL 쿼리를 실행한 결과를 정리하는 변수

$boardTotalCount 게시판의 총 게시글 수를 저장하는 변수

ceil($boardTotalCount / $viewNum) 총 게시글 수를 한 페이지에 표시할 게시글 수로 나누어 총 페이지를 구함

ceil() 소수점을 올림하여 정수형으로 반환

$pageview 현재 페이지를 기준으로 표시할 페이지 번호의 범위 지정

$startPage $endPage 표시할 페이지 번호의 시작과 끝을 계산

 

첫 페이지로 가기/ 이전 페이지로 가기 : 현재 페이지가 1보다 크고 총 페이지 수보다 작을 경우에만 처음 페이지로 가는 링크와 이전 페이지로 가는 링크를 출력합니다.

 

페이지 $startPage 부터 $endPage까지의 페이지 번호를 출력하고 현재 페이지와 일치하는 페이지 번호에는 active를 적용해줬습니다.

 

마지막 페이지로 가기/ 다음 페이지로 가기 : 현재 페이지가 총 페이지수보다 작고 총 페이지 수보다 작을 경우에만 다음 페이지로 가는 링크와 마지막 페이지로 가는링크를 출력합니다.

 

 

sessionCheck.php

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

사용자의 로그인 상태를 확인하고, 로그인되어 있지 않은 경우 로그인 페이지로 이동시킵니다.

 

 

boardModifiy.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>";
        echo "<div class='mt50'><label for='boardPass'>비밀번호</label><input type='passWord' id='boardPass' name='boardPass' class='inputStyle' autocomplete='off' requied placeholder='글을 수정하려면 로그인 비밀번호를 입력해야 합니다.'></div>";

    }
?>

echo 4번째 부분에 게시글 수정시에 비밀번호를 입력해야 수정할 수 있도록 추가해줬습니다.

사용자가 로그인 비밀번호를 입력해야만 글을 수정할 수 있습니다.

 

 

type속성이 pasWord로 설정된 입력 필드를 생성

id속성이 boardPass로 설정되어 있어 위에서 생성한것과 연결

name 속성이 boardPass로 설정되어 있어 입력 필드의 이름이 boardPass 라는 값으로 서버에 전동

class 속성이 inputstyle로 설정

autocomplate속성이 off로 설정되어 있어, 브라우저가 자동 완성 기능을 사용하지 않도록 지시

requied 속성을 사용해 필수 입력 필드로 저장

반응형