필요없는 목록/PHP

PHP 게시판 닷버튼, 게시글 정리를 만들어봤어요.

비밀안 2023. 4. 26. 13:21
클릭

버튼을 클릭하면 명언이 나와요

-

이름이 나와요

최종 완성된 모습

오늘은 어제에 이어서 만든 게시판에 또 내용을 추가했어요

닷버튼을 PHP로 만들고

게시글들을 정리를 하였습니다.

 

 

다시 또 미션이네요

1. page가 범위 밖으로 넘어갔을때 "마지막 버튼"과 "다음 버튼"을 숨기라는 미션이네요

 

변경 전

위에 저렇게 "처음으로, 이전, 닷버튼, 다음, 마지막으로" 버튼이 나오네요

page가 범위 밖으로 넘어갔을때 "처음으로, 이전"으로만 나오게 하라는 미션입니다.

변경 후

ㅎ_ㅎ

게시판 PHP 코드

<?php
if(isset($_GET['page'])){
    // (int) 문자를 숫자형으로 변환함
    // 혹시 문자로 받아 올수 있으니간 강제 형변환 함.
    $page = (int) $_GET['page'];
}
else {
    $page = 1;
}
$page = $_GET['page'];

echo $page;

$viewNum = 10;
// $page가 1일 때 0
// $page가 2일 때 20
$viewLimit = ($viewNum * $page) - $viewNum;

// 1,2,3,4,5는 반복문의 i값
// 요약하면 LIMIT 20;
// 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

$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 {$viewLimit}, {$viewNum}";
$result = $connect -> query($sql);


if($result){
    // num_rows : 쿼리의 결과로 넘어온 행의 갯수를 알수 있음.
    $count = $result -> num_rows;

    if($count > 0){
        for($i=0; $i<$count; $i++){
            // 상수 기능
            // MYSQLI_NUM	인덱스를 숫자로 사용 (기입순서)
            // MYSQLI_ASSOC	인덱스를 문자로 사용 (필드명)
            // MYSQLI_BOTH	인텍스를 숫자와 문자로 사용
            $info = $result -> fetch_array(MYSQLI_ASSOC);

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

            // 정보 확인
            // echo "<pre>";
            // var_dump($info);
            // echo "</pre>";
        }
    }
    else {
        echo "<tr><td colspan='4'>게시글이 없습니다.</td></tr>";
    }

    if($info['youName'] === ""){
        echo "asd";
    }
}
?>
                </tbody>
            </table>
        </div>
        <div class="board__pages">
            <ul>
<?php
// 게시글 총 갯수
// 몇 페이지

// count : 갯수 확인
$sql = "SELECT count(boardID) FROM board";
$result = $connect -> query($sql);

// fetch_array() : PHP의 MySQLi (MySQL Improved) 확장을 사용하여 MySQL 쿼리에서
//                             반환된 결과 집합에서 행을 가져와 연관 배열로 반환하는 함수입니다.

// MYSQLI_ASSOC :  이 매개변수는 fetch_array() 함수가 연관 배열로 결과를
//                 반환하도록 지정합니다. 결과 배열의 키는 컬럼 이름이 되며,
//                 값은 해당 컬럼의 값을 가집니다.
$boardTotalCount = $result -> fetch_array(MYSQLI_ASSOC);
$boardTotalCount = $boardTotalCount['count(boardID)'];


// 총 페이지 갯수 
// ceil :
// boardTotalCount : 전체 갯수
// $viewNum: 10
$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($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 != $endPage){
    $none = "";
    $nextPage = $page + 1;

    if($page > $boardTotalCount) {
        $none = "accc";
    }

    echo "<li class='{$none}'><a href='board.php?page={$page}'>다음</a></li>";
    echo "<li class='{$none}'><a href='board.php?page={$boardTotalCount}'>마지막으로</a></li>";
}

?>
            <!-- 
                <li><a href="#">처음으로</a></li>
                <li><a href="#">이전</a></li>
                <li class="active"><a href="#">1</a></li>
                <li><a href="#">2</a></li>
                <li><a href="#">3</a></li>
                <li><a href="#">4</a></li>
                <li><a href="#">5</a></li>
                <li><a href="#">6</a></li>
                <li><a href="#">7</a></li>
                <li><a href="#">8</a></li>
                <li><a href="#">다음</a></li>
                <li><a href="#">마지막으로</a></li> 
            -->
            </ul>
        </div>
    </div>
      <!-- //board__list -->
</main>
<!-- //main -->

<?php include "../include/footer.php"?>

</body>

코드설명

1.

if(isset($_GET['page'])){
    // (int) 문자를 숫자형으로 변환함
    // 혹시 문자로 받아 올수 있으니간 강제 형변환 함.
    $page = (int) $_GET['page'];
}
else {
    $page = 1;
}
  • $_GET['page']은 닷버튼을 클릭할떄마다 값을 가져옵니다.
  • 그리고 가져온 값을 $page에 정수형으로 변환해서 저장합니다.
  • 만약에 값을 못가져오면 $page을 1로 만듭니다.

 

2.

$viewNum = 10;
// $page가 1일 때 0
// $page가 2일 때 20
$viewLimit = ($viewNum * $page) - $viewNum;
  • $viewNum을 10으로 설정합니다.
  • $viewLimit는 게시판에 보여줄 갯수를 넣을 예정입니다.

 

3.

// 처음으로 + 이전
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가 1과 같지 않다면 $prevPage를 현재 페이지에서 1을 뺍니다.

그리고 echo문으로 태그를 만들어 줍니다.

 

for문으로 현재 갯수만큼 태그를 생성해줍니다.

(맞나?)

 

4. 오늘의 미션입니다.

// 마지막으로 + 다음
if($page != $endPage){
    $none = "";
    $nextPage = $page + 1;

    if($page > $boardTotalCount) {
        $none = "accc";
    }

    echo "<li class='{$none}'><a href='board.php?page={$page}'>다음</a></li>";
    echo "<li class='{$none}'><a href='board.php?page={$boardTotalCount}'>마지막으로</a></li>";
}
  • 마지막 버튼과 다음 버튼을 생성해주는 코드 안에서 작성을 해봤어요
  • if문으로 현재 page의 갯수와 boardTottalCount라는 전체 페이지 개수를 비교하고
  • 현재 page의 갯수가 더 많으면 클래스를 줍니다.
  • 그게 아니라면 클래스를 안줍니다.
  • 이런식으로 하여서 미션으로 주어진 마지막 버튼과 다음 버튼을 삭제를 하였습니다.

으으. 마지막 미션 몹시 고민을 했습니다.

css를 부여하고 싶은데. 원하는 것들에게 css를 못주니간요.

한참 고민하다가 선생님이 만들어주신 css코드 부여하는 것을 보고 따라해봤어요