“ 당신이 6개월 이상 한 번도 보지 않은 코드는 다른 사람이 다시 만드는 게 훨씬 더 나을 수 있다. ”
PHP란?
PHP는 Hypertext Preprocessor의 약어로, 서버 측에서 실행되는 스크립트 언어입니다. PHP는 주로 동적 웹 페이지를 생성하고 관리하는 데 사용됩니다. PHP는 오픈 소스 언어이며, 웹 서버에서 무료로 실행될 수 있습니다.
PHP는 HTML과 함께 사용되며, PHP 코드를 HTML 문서 안에 포함시킬 수 있습니다. 이렇게 함으로써 PHP는 웹 페이지를 동적으로 생성하고 데이터베이스와 상호 작용할 수 있는 능력을 갖춥니다. PHP는 또한 파일 업로드, 이메일 전송, 세션 관리, 암호화, 데이터베이스 연결 등과 같은 기능도 제공합니다.
PHP는 많은 유명한 CMS(Content Management System) 및 프레임워크(Framework)에서 사용됩니다. 예를 들어, WordPress, Drupal, Joomla, Laravel, CodeIgniter 등이 있습니다.
board.php
<?php
$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 100";
$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>";
}
}
?>
JOIN을 사용하여 회원 테이블(members)과 게시글 테이블(board)을 연결하고, 회원 ID와 게시글 작성자 ID가 일치하는 항목을 가져옵니다. 그리고 게시글 ID를 내림차순으로 정렬하며 최대 100개의 게시글만 조회합니다.
결과는 num_rows() 함수를 사용하여 조회된 결과의 행 수를 확인한 후, 해당 행 수가 0보다 큰 경우에는 for문을 사용하여 각 행의 정보를 가져와 HTML 테이블의 행으로 출력합니다. 행 출력시, 각 열의 정보를 표시하기 위해 HTML 태그와 PHP 변수를 조합하여 행을 생성합니다. 만약 조회된 게시글이 없는 경우 "게시글이 없습니다."라는 메시지를 출력합니다.
마지막으로, 코드 중 주석 처리된 부분은 변수 $info를 디버깅하기 위해 사용한 것으로, 해당 부분은 주석 처리하여 불필요한 출력을 막을 수 있습니다.
boardView.php
<?php
$boardID = isset($_GET['boardID']) ? $_GET['boardID'] : '';
// echo $boardID;
$sql = "SELECT b.boardContents, b.boardTitle, m.youName, b.regTime, b.boardView FROM board b JOIN members m ON(m.memberID = b.memberID) WHERE b.boardID = {$boardID}";
$result = $connect -> query($sql);
if($result){
$info = $result -> fetch_array(MYSQLI_ASSOC);
echo "<tr><th>제목</th><td>".$info['boardTitle']."</td></tr>";
echo "<tr><th>등록자</th><td>".$info['youName']."</td></tr>";
echo "<tr><th>등록일</th><td>".date('Y-m-d', $info['regTime'])."</td></tr>";
echo "<tr><th>조회수</th><td>".$info['boardView']."</td></tr>";
echo "<tr><th>내용</th><td>".$info['boardContents']."</td></tr>";
} else {
echo "<tr><td colspan='4'>게시글이 없습니다.</td></tr>";
}
?>
- GET 방식으로 전달받은 boardID 값을 변수 $boardID에 저장합니다. 이때, 삼항 연산자를 이용하여 $_GET['boardID'] 값이 존재하지 않으면 빈 문자열을 할당합니다.
- 데이터베이스에서 게시글 정보를 가져오기 위한 SQL 쿼리를 작성합니다. 게시글의 내용(boardContents), 제목(boardTitle), 등록자(youName), 등록일(regTime), 조회수(boardView)를 board 테이블과 members 테이블을 조인하여 가져옵니다. WHERE 구문을 이용하여 전달받은 boardID 값과 일치하는 게시글만을 가져옵니다.
- 작성한 SQL 쿼리를 실행하고, 결과 값을 $result 변수에 저장합니다.
- $result 변수의 값이 존재하는 경우, fetch_array 함수를 이용하여 결과 값을 배열 형태로 가져옵니다. MYSQLI_ASSOC 옵션을 이용하여 연관 배열 형태로 가져옵니다.
- 가져온 게시글 정보를 HTML 테이블 형태로 출력합니다. 이때, echo 함수를 이용하여 출력합니다. 출력되는 내용은 게시글의 제목, 등록자, 등록일, 조회수, 내용 등입니다. 게시글이 존재하지 않는 경우, '게시글이 없습니다.'라는 메시지가 출력됩니다.
<div class="board__btn mb100">
<a href="boardModify.php?boardID=<?=$_GET['boardID']?>" class="btnStyle3">수정하기</a>
<a href="boardRemove.php?boardID=<?=$_GET['boardID']?>" class="btnStyle3" onclick="return confirm('정말 삭제하시겠습니까?')">삭제하기</a>
<a href="board.php" class="btnStyle3">목록보기</a>
</div>
- 첫 번째 <a> 태그에서는 boardModify.php 파일에 $_GET['boardID'] 값을 전달하여 해당 게시글을 수정할 수 있는 페이지로 이동하는 링크를 생성합니다.
- 두 번째 <a> 태그에서는 boardRemove.php 파일에 $_GET['boardID'] 값을 전달하여 해당 게시글을 삭제할 수 있는 페이지로 이동하는 링크를 생성합니다. 이때, onclick 이벤트가 설정되어 있어 사용자가 삭제 버튼을 클릭할 때 "정말 삭제하시겠습니까?" 라는 메시지를 출력하게 됩니다.
- 마지막 <a> 태그에서는 board.php 파일로 이동하는 링크를 생성하여 게시글 목록을 확인할 수 있도록 합니다.
이렇게 작성된 코드는 게시글 수정, 삭제, 목록보기 버튼을 쉽게 생성할 수 있으며, onclick 이벤트를 통해 사용자의 실수를 방지하고, 목록보기 버튼을 통해 게시글 목록을 쉽게 확인할 수 있도록 구성되어 있습니다.
boardModify.php
<?php
include "../connect/connect.php";
include "../connect/session.php" ;
session_start();
// 로그인한 사용자만 접근 가능하도록 설정
if (!isset($_SESSION['memberID'])) {
echo "<script>alert('로그인 후 이용해주세요.'); location.href='../login/login.php';</script>";
exit;
}
// boardID가 존재하지 않을 경우
if (!isset($_GET['boardID'])) {
echo "<script>alert('잘못된 접근입니다.'); history.back();</script>";
exit;
}
$boardID = mysqli_real_escape_string($connect, $_GET['boardID']);
$memberID = mysqli_real_escape_string($connect, $_SESSION['memberID']);
// 해당 게시글의 작성자와 로그인한 사용자가 다를 경우
$sql = "SELECT boardID FROM board WHERE boardID = {$boardID} AND memberID = '{$memberID}'";
$result = $connect->query($sql);
if ($result->num_rows == 0) {
echo "<script>alert('작성자만 수정할 수 있습니다.'); history.back();</script>";
exit;
}
?>
- 게시글을 수정하기 위해 필요한 boardID 값을 가져옵니다. 만약 boardID가 설정되어 있지 않은 경우 "잘못된 접근입니다." 라는 메시지를 출력하고 이전 페이지로 이동합니다.
- 해당 게시글의 작성자와 로그인한 사용자가 다를 경우 "작성자만 수정할 수 있습니다." 라는 메시지를 출력하고 이전 페이지로 이동합니다.
- $boardID와 $memberID 값으로 쿼리문을 작성하여 결과를 얻어내는 부분이 있습니다. 이 부분에서 mysqli_real_escape_string() 함수를 사용하여 SQL Injection 공격을 방지하고 있습니다.