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>";
};
}
}
?>
이 코드는 PHP를 사용하여 게시판 목록을 출력하는 코드입니다.
처음에는 board와 members 테이블을 조인하여 게시물의 제목, 작성자, 작성 시간, 조회 수 등의 정보를 가져옵니다. 그리고 ORDER BY와 LIMIT을 사용하여 최신 게시물 100개만 가져오도록 설정합니다.
$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";
이후에는 query() 메서드를 사용하여 SQL 쿼리를 실행하고, num_rows 속성을 사용하여 결과 집합의 행 수를 가져옵니다.
$result = $connect -> query($sql); if($result){ $count = $result -> num_rows;
행 수가 0보다 크면 fetch_array() 메서드를 사용하여 한 행씩 결과를 가져와서 for 루프에서 출력합니다.
각 행을 출력할 때는 echo 함수를 사용하여 HTML <tr> 태그를 출력하고, 가져온 정보를 사용하여 <td> 태그에 넣어서 출력합니다. 특히, 게시물 제목은 링크로 출력하며, 이 때 boardView.php 페이지로 이동할 수 있도록 boardID 값을 GET 방식으로 전달합니다.
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>";
};
게시판 보기 내용 php로 만들기
<?php
if (isset($_GET['boardID'])) {
$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 -> num_rows;
if($info > 0){
$info = $result -> fetch_array(MYSQLI_ASSOC);
echo "<tr><th>".'제목'."</th>";
echo "<td>".$info['boardTitle']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th>".'등록자'."</th>";
echo "<td>".$info['youName']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th>".'등록일'."</th>";
echo "<td>".date('Y-m-d', $info['regTime'])."</td>";
echo "</tr>";
echo "<tr>";
echo "<th>".'조회수'."</th>";
echo "<td>".$info['boardView']."</td>";
echo "</tr>";
echo "<tr>";
echo "<th>".'내용'."</th>";
echo "<td>".$info['boardContents']."</td>";
echo "</tr>";
}
}
} else {
echo "<tr><td colspan='4'>게시글이 없습니다.</td></tr>";
}
?>
이 코드는 PHP를 사용하여 게시판의 글 보기 페이지를 출력하는 코드입니다.
먼저, GET 방식으로 전달된 boardID 값을 받아와서 해당 게시물의 정보를 가져옵니다. 가져온 정보를 사용하여 게시물의 제목, 작성자, 작성일, 조회 수, 내용 등을 출력합니다.
fetch_array() 메서드를 사용하여 한 행씩 결과를 가져와서 출력합니다.
미션1
isset() 함수를 사용하여 GET 방식으로 boardID 값이 전달되지 않았을 경우에는 "게시글이 없습니다." 라는 메시지를 출력합니다. 이렇게 함으로써, 존재하지 않는 게시물 번호로 접근할 때 오류를 방지할 수 있습니다.
미션2
<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>
onclick에 리턴을 써줍니다. 확인이나 취소 버튼을 누를경우 리턴값이 반환되기 때문에 취소를 누를경우 false가 나와 아무것도 실행되지 않게 됩니다.
삭제 PHP
<?php
include "../connect/connect.php";
include "../connect/session.php";
$boardID =$_GET['boardID'];
$boardID =$connect -> real_escape_string($boardID);
$sql = "DELETE FROM board WHERE boardID = {$boardID}";
$connect -> query($sql);
?>
<script>
location.href = "board.php";
</script>
HTTP POST 방식을 사용하여 게시판 삭제를 처리하는 PHP 코드입니다. 이 코드에는 데이터베이스 연결 코드를 포함하는 "connect/connect.php"와 PHP 세션을 시작하는 "connect/session.php"라는 두 개의 PHP 파일이 포함되어 있습니다.
이 코드는 HTTP GET 메서드를 사용하여 boardID를 검색한 다음 real_escape_string()SQL 주입 공격을 방지하는 기능을 사용하여 삭제합니다.
그런 다음 SQL 쿼리를 구성하여 데이터베이스에서 해당 보드를 삭제합니다.
쿼리를 실행한 후 코드는 JavaScript를 사용하여 사용자를 "board.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>";
}
?>
POST방식과 GET방식
_POST 방식은 HTTP 수신자를 이용하여 클라이언트(웹 브라우저)와 서버 내부에서 데이터를 전송하는 방식 중 하나입니다.
POST 방식은 GET 방식과 달리 데이터를 URL에 표시하지 않기 때문에 보안성이 높습니다. 또한 GET 방식보다 더 많은 양의 데이터를 복구할 수 있고 파일 업로드와 같은 이진 전송도 가능합니다.
보통 웹 폼(form)을 이용하여 데이터를 복구할 때 POST 방식을 사용합니다. 예를 들어, 로그인 폼, 회원가입 폼, 검색 폼 등에서 사용됩니다.
_GET 방식_은 웹에서 클라이언트가 서버에게 정보를 요청할 때 사용되는 방식 중 하나입니다. 이 방식은 URL을 통해 정보를 전달하며, 요청하는 정보는 URL 끝에 ? 뒤에 파라미터 형태로 쿼리 스트링(query string)으로 전달됩니다.
예를 들어, https://www.example.com/search?q=apple과 같은 URL에서 ? 뒤에 오는 q=apple은 파라미터이며, 서버에서는 이를 해석하여 q라는 이름의 변수에 apple 값을 저장하고 이를 기반으로 검색 결과를 반환합니다.
_GET 방식은 요청하는 정보가 URL 상에 노출되므로 보안에 취약할 수 있지만, 간단하고 빠르게 정보를 전달할 수 있다는 장점이 있습니다. 따라서 검색이나 데이터 조회와 같이 보안이 크게 중요하지 않은 경우에 주로 사용됩니다.