“ 당신이 6개월 이상 한 번도 보지 않은 코드는 다른 사람이 다시 만드는 게 훨씬 더 나을 수 있다. ”
PHP란?
PHP는 Hypertext Preprocessor의 약어로, 서버 측에서 실행되는 스크립트 언어입니다. PHP는 주로 동적 웹 페이지를 생성하고 관리하는 데 사용됩니다. PHP는 오픈 소스 언어이며, 웹 서버에서 무료로 실행될 수 있습니다.
PHP는 HTML과 함께 사용되며, PHP 코드를 HTML 문서 안에 포함시킬 수 있습니다. 이렇게 함으로써 PHP는 웹 페이지를 동적으로 생성하고 데이터베이스와 상호 작용할 수 있는 능력을 갖춥니다. PHP는 또한 파일 업로드, 이메일 전송, 세션 관리, 암호화, 데이터베이스 연결 등과 같은 기능도 제공합니다.
PHP는 많은 유명한 CMS(Content Management System) 및 프레임워크(Framework)에서 사용됩니다. 예를 들어, WordPress, Drupal, Joomla, Laravel, CodeIgniter 등이 있습니다.
sessionCheck.php
<?php
// 로그인한 사용자만 접근 가능하도록 설정
if (!isset($_SESSION['memberID'])) {
echo "<script>alert('로그인 후 이용해주세요.'); location.href='../login/login.php';</script>";
exit;
}
?>
boardModify.php에 "../connect/sessionCheck.php" 파일을 include 해주었습니다.
그리고 sessionCheck 파일 안에 현재 로그인한 사용자인지 여부를 확인합니다. isset() 함수를 사용하여 $_SESSION['memberID'] 값이 존재하는지 확인하고, 값이 없으면 로그인 페이지로 이동하는 alert 메시지를 출력하고 exit로 실행을 중지합니다.
이를 통해, 로그인하지 않은 사용자는 해당 페이지에 접근하지 못하게 됩니다.
boardModify.php 추가
echo "<div class='mt50'><label for='boardPass'>비밀번호</label><input type='password' id='boardPass' name='boardPass' class='inputStyle' autocomplete='off' required placeholder='글을 수정하려면 로그인 비밀번호를 입력하셔야 합니다.'></div>";
게시글을 수정할 때, 로그인 비밀번호를 입력받기 위해 해당 input 요소를 생성하는 부분입니다.
- div 요소를 생성하고, label 요소를 이용해 해당 input 요소에 대한 설명을 표시합니다.
- input 요소를 생성하고 type 속성을 password로 설정해 비밀번호를 입력받을 수 있게 합니다.
- id와 name 속성을 boardPass로 설정하고, class 속성을 inputStyle로 설정해 CSS 스타일을 적용할 수 있습니다.
- autocomplete 속성을 off로 설정해 이전에 입력한 내용을 자동완성하지 않도록 합니다.
- required 속성을 추가해 필수 입력 필드임을 나타내고, placeholder 속성을 이용해 해당 input 요소가 어떤 용도인지 설명합니다.
board.php 추가
<?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
//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){
$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>";
}
} else {
echo "<tr><td colspan='4'>게시글이 없습니다.</td></tr>";
}
}
?>
- 페이지 번호를 GET 방식으로 전달받아서 $page 변수에 저장합니다. 만약 GET 방식으로 전달된 페이지 번호가 없다면 $page 변수에 1을 할당합니다.
- 한 페이지에 보여질 게시글 수를 $viewNum 변수에 저장하고, $viewLimit 변수를 통해 MySQL의 LIMIT 절에서 사용할 게시글 시작 인덱스를 계산합니다.
- MySQL의 JOIN을 이용하여 게시글 정보와 작성자 정보를 합쳐서 최신순으로 정렬한 뒤, LIMIT 절을 적용하여 해당 페이지에 보여질 게시글 정보를 가져옵니다. 가져온 정보를 for 문을 이용하여 HTML 테이블 형태로 출력합니다. 게시글이 하나도 없을 경우, "게시글이 없습니다."라는 문구를 출력합니다.
- 게시글 정보를 출력할 때, 게시글 번호, 제목, 작성자, 등록일시, 조회수를 순서대로 출력합니다. 이때, 게시글 제목은 링크로 설정하여 클릭 시 해당 게시글로 이동할 수 있도록 합니다.
<?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($startPage <1 ) $startPage = 1;
if($endPage >= $boardTotalCount) $endPage = $boardTotalCount;
//처음, 이전
if($page != 1 && $boardTotalCount !=0 && $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";
if($page <= $boardTotalCount){
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>";
}
?>
- 게시글의 총 갯수를 구하기 위해 데이터베이스에서 board 테이블의 boardID 컬럼의 갯수를 가져와서 $boardTotalCount 변수에 할당합니다.
- 페이지당 보여줄 게시글의 수를 $viewNum 변수에 할당합니다.
- $boardTotalCount와 $viewNum 변수를 이용해서 총 페이지 갯수를 구합니다. 이때, ceil 함수를 이용해서 소수점 이하의 값이 존재할 경우에는 다음 페이지로 넘어가야 하기 때문에 올림 처리를 해줍니다.
- 그 다음, 현재 페이지에서 좌우로 몇 개의 페이지를 보여줄 것인지를 결정하기 위해 $pageView 변수에 숫자를 할당합니다.
- $startPage 변수와 $endPage 변수를 구하는데, 현재 페이지($page)에서 $pageView 만큼 빼서 시작 페이지($startPage)를 구하고, 현재 페이지($page)에서 $pageView 만큼 더해서 끝 페이지($endPage)를 구합니다.
- $startPage 변수와 $endPage 변수를 이용해서 페이지 번호를 출력합니다.
- 현재 페이지($page)와 같은 페이지는 활성화된(active) 상태로 표시하기 위해 $active 변수를 이용해서 CSS 클래스를 추가합니다.
- 마지막으로, 첫 페이지로 이동하는 링크와 이전 페이지로 이동하는 링크, 다음 페이지로 이동하는 링크, 마지막 페이지로 이동하는 링크를 출력합니다. 이때, 현재 페이지가 첫 페이지나 마지막 페이지일 경우에는 해당 링크가 비활성화되도록 조건문을 이용합니다.