2022. 10. 26. 03:35ㆍ무료강좌&튜토리얼/PHP
[PHP] 게시판 만들기 (6/10) - 게시물 목록 페이지 생성하기
앞 포스팅에서 임의로 게시물을 생성했다.
이제 이 게시물의 목록을 보는 페이지를 생성해보자.
게시물 목록 페이지는 모든 게시물을 불러오지 않고 등록된 시간을 기준으로 최신순으로 20개만 표시하게 생성하도록 하자.
또한 게시물은 table 태그를 사용하여 목록을 출력하도록 한다.
다음은 table 태그를 사용하여 만들 게시물 출력 폼이다.
| 번호 | 제목 | 작성자 | 게시일 |
| 50 | 50번째 제목 | 노는아빠 | 2022-10-26 02:50 |
| 49 | 49번째 제목 | 노는아빠 | 2022-10-26 02:50 |
| 48 | 48번째 제목 | 노는아빠 | 2022-10-26 02:50 |
위와 같은 테이블을 만들려면 table 태그를 사용하며, 제목에 해당하는 부분을 구성하려면 table 태그 내에서 thead 태그를 사용하며, thead 태그 내에서 칸을 생성할 때는 th 태그를 사용한다. 내용을 표시하는 부분은 tbody 태그를 사용한다. 라인을 생성할 때는 tr 태그를 사용하며 칸을 생성할 때는 td 태그를 사용한다.
위의 태이블을 table 태그를 사용하여 표시하면 다음과 같은 코드를 사용한다.
<table>
<thead>
<th>번호</th>
<th>제목</th>
<th>작성자</th>
<th>게시일</th>
</thead>
<tbody>
<tr>
<td>50</td>
<td>50번째 제목</td>
<td>노는아빠>/td>
<td>2022-10-26 02:50</td>
</tr>
<tr>
<td>49</td>
<td>49번째 제목</td>
<td>노는아빠>/td>
<td>2022-10-26 02:50</td>
</tr>
<tr>
<td>48</td>
<td>48번째 제목</td>
<td>노는아빠>/td>
<td>2022-10-26 02:50</td>
</tr>
</tbody>
</table>
다음은 게시물의 목록을 생성하는 예제이다.
[예제: 183_list.php ]
<?php
include $_SERVER['DOCUMENT_ROOT'].'/php/common/171_session.php';
include $_SERVER['DOCUMENT_ROOT'].'/php/common/179_checkSignSession.php';
include $_SERVER['DOCUMENT_ROOT'].'/php/cssControlPanel/163_connection.php';
?>
<!DOCTYPE html>
<html lang="ko">
<head>
<title>게시물목록</title>
</head>
<body>
<a href="./180_writeForm.php">글 작성하기</a>
<a href="/php/joinLogin/177_signOut.php">로그아웃</a>
<table>
<thead>
<th>번호</th>
<th>제목</th>
<th>작성자</th>
<th>게시일</th>
</thead>
<tbody>
<?php
if(isset($_GET['page'])) {
$page = (int) $_GET['page'];
} else {
$page = 1;
}
$numView = 10;
$firstLimitValue = ($numView * $page) - $numView;
$sql = "SELECT b.boardID, b.title, m.nickName, b.regDate FROM board b ";
$sql .= "JOIN member m ON (b.memberID = m.memberID) ORDER BY boardID ";
$sql .= "DESC LIMIT {$firstLimitValue}, {$numView}";
$result = $dbConnect->query($sql);
if($result) {
$dataCount = $result->num_rows;
if($dataCount > 0) {
for($i = 0; $i < $dataCount; $i++) {
$memberInfo = $result->fetch_array(MYSQLI_ASSOC);
echo "<th>";
echo "<td>".$memberInfo['boardID']."</td>";
echo "<td><a href='/php/board/185_view.php?boardID={$memberInfo['boardID']}'>{$memberInfo['title']}</a></td>";
echo "<td>{$memberInfo['nickName']}</td>";
echo "<td>".date('Y-m-d H:i:s', $memberInfo['regDate'])."</td>";
echo "</tr>";
}
} else {
echo "<tr><td colspan='4'>게시글이 없습니다.</td></tr>";
}
}
?>
</tbody>
</table>
<?php
include $_SERVER['DOCUMENT_ROOT'].'/php/board/184_nextPageLink.php';
include $_SERVER['DOCUMENT_ROOT'].'/php/board/186_searchForm.php';
?>
</body>
</html>
1. [171_session] 파일을 include 한다.
2. 비로그인 시에 접근할 수 없도록 [179_checkSignSession.php] 파일을 include 한다.
3. member 테이블과 board 테이블의 데이터를 가져오므로 [163_connection.php] 파일을 include 한다.
4. 게시물 목록 페이지에서 글 작성하기 페이지로 바로 이동할 수 있는 링크를 만든다.
5. 게시물 목록 페이지에서 바로 로그아웃 할 수 있는 링크이다.
6. table 태그의 제목에 해당하는 부분이다. 게시물 목록에서 출력할 정보는 게시물의 번호, 제목, 작성자, 게시일 이다.
7. 게시물 목록 페이지에는 한 페이지에 10개의 게시물 데이터를 출력한다. 그러므로 책의 쪽수 정보를 $_GET 방식으로 데이터를 전달한다. $_GET['page']가 없다면 1페이지 임을 의미한다.
8. 한번에 출력할 게시물의 수는 10이며 이 값을 변수 numView에 대입한다.
9. 변수 firstLimitValue는 쿼리문 LIMIT 문의 첫 번째 값으로 사용된다. 페이지수의 값에 따라 불러오는 데이터를 정하는 공식이다.
페이지수에 따른 LIMIT 문의 첫 번쨰 값의 변화는 다음과 같다.
| 페이지수 | 계산시 | LIMIT문 |
| 1 | (10 * 1) - 10 | LIMIT 0, 10 |
| 2 | (10 * 2) - 10 | LIMIT 10, 10 |
| 3 | (10 * 3) -10 | LIMIT 20, 10 |
10. 게시글의 데이터를 불러오는 쿼리문이다. 작성자 정보를 함께 표시하지만 board 테이블에는 작성자 정보가 없기 때문에 member 테이블과 함께 memberID 정보를 매칭하여 작성자 정보를 함께 불러온다.
11. 불러온 데이터의 수만큼 table 태그의 tr 태그와 td 태그를 출력한다.
12. 제목을 누르면 해당 게시물의 내용을 볼 수 있는 페이지로 이동해야 하므로 a 링크를 사용하여 주소를 지정한다.
boardID의 값을 GET 방식으로 전송한다.
13. board 테이블에는 게시글을 작성한 시간이 타임스탬프로 되어 있으므로 이 값을 보기 쉽게 yyyy-mm-dd hh:mm:ss 형태로 변환한다.
14. 다음 페이지로 이동하는 링크가 있는 파일을 include 한다.
15. 검색 기능이 있는 파일을 include 한다.
실행 URL은 http://localhost/php/board/183_list.php 이다
실행결과

184_nextPageLink.php 와 186_searchForm.php 파일은 아직 만들지 않았기 때문에 에러가 표시된다.
초보자를 위한 PHP 200제
김태영 지음 | 정보문화사
'무료강좌&튜토리얼 > PHP' 카테고리의 다른 글
| [PHP] 게시판 만들기 (8/10) - 게시물 내용 보기 (1) | 2022.10.27 |
|---|---|
| [PHP] 게시판 만들기 (7/10) - 다음 페이지로 이동 링크(페이징) 생성하기 (0) | 2022.10.26 |
| [PHP] 게시판 만들기 (5/10) - 임의 게시물(Random Data) 입력하기 (0) | 2022.10.26 |
| [PHP] 게시판 만들기 (4/10) - 게시글 작성하기 (0) | 2022.10.25 |
| [PHP] 게시판 만들기 (3/10) - 게시글 작성 폼 만들기 (0) | 2022.10.25 |