“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”
- Frederick Philips Brooks
Mythical Man-Month 저자
설명:
html 로 목표로 하는 페이지를 만든 후에 php 로 만들었습니다.
게시판 페이지를 만드는 과정에 있기 때문에 오늘 수정한 부분을 설명하겠습니다.
게시글을 보는 설정과 게시판을 삭제하는 설정에 대해서 설명하겠습니다.
boardView.php
<?php
$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>";
}
?>
이 부분은 게시글을 보는 페이지입니다.
이렇게 설정했을 때 warning 이 뜹니다.
이 문제를 해결해봤습니다.
<?php
// boardID 키가 정의되어 있는지 확인
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 -> 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>";
}
} else {
echo "<tr><td colspan='4'>게시글 ID가 지정되지 않았습니다.</td></tr>";
}
?>
이 오류는 $_GET 배열에 'boardID' 키가 정의되어 있지 않기 때문에 발생하는 것으로 보입니다.
이를 해결하기 위해서는 'boardID' 키가 존재하는지 확인하고, 그렇지 않은 경우에는 기본값을 할당하거나 오류 메시지를 출력해야합니다.
여기서는 isset() 함수를 사용하여 $_GET['boardID']가 정의되어 있는지 확인하고, 그렇지 않은 경우에는 오류 메시지를 출력합니다.
이 코드에 쓰인 속성들에 대해서 알아보겠습니다.
$_GET은 PHP에서 내장된 전역 변수 중 하나로, HTTP GET 요청을 통해 전달된 변수들을 담고 있는 연관 배열입니다. GET 방식으로 전달된 변수들은 URL에 쿼리 문자열(query string) 형태로 포함되어 전달됩니다.
예를 들어, "http://example.com/?name=John&age=25"와 같은 URL에서, name과 age는 $_GET 변수를 통해 사용할 수 있습니다.
$_GET 변수는 다음과 같은 방식으로 사용됩니다.
- $_GET['변수명'] : 해당 변수명에 대한 값을 반환합니다.
- isset($_GET['변수명']) : 해당 변수명이 설정되었는지 확인합니다.
- empty($_GET['변수명']) : 해당 변수명에 값이 있는지 확인합니다. 값이 없는 경우 true를 반환합니다.
- count($_GET) : $_GET 배열의 요소 개수를 반환합니다.
주로 HTML form 태그의 method 속성이 "get"인 경우나, URL의 일부분으로 데이터를 전달할 때 사용됩니다.
GET 방식은 URL에 데이터가 노출되므로 보안적인 이슈가 있습니다.
따라서 비밀번호와 같은 민감한 데이터를 전송할 때는 POST 방식을 사용하는 것이 안전합니다.
isset은 PHP에서 내장된 함수 중 하나로, 변수가 설정되어 있는지 확인하는 역할을 합니다.
변수가 설정되어 있다면 true를, 설정되어 있지 않으면 false를 반환합니다.
$name = "John"; if (isset($name)) { echo "The variable is set."; } else { echo "The variable is not set."; }
위의 코드는 "The variable is set."이라는 문자열을 출력합니다.
isset 함수는 다음과 같은 특징을 가지고 있습니다.
- 다수의 인자를 받을 수 있습니다.
- 변수가 설정되어 있어도 값이 null인 경우 false를 반환합니다.
- 배열 요소가 존재하는지 확인할 때도 사용됩니다.$arr = [1, 2, 3]; if (isset($arr[0])) { echo "The element exists."; } else { echo "The element does not exist."; }
위의 코드는 "The element exists."라는 문자열을 출력합니다.
echo는 PHP에서 사용하는 출력 함수 중 하나로, 인자로 전달된 값을 출력합니다. 다음과 같은 방식으로 사용됩니다.echo "Hello, world!";
위의 코드는 "Hello, world!"라는 문자열을 출력합니다.
echo는 다음과 같은 특징을 가지고 있습니다.
- 여러 개의 인자를 받을 수 있습니다.
- 반환값이 없습니다.
- 쉼표(,)를 사용하여 문자열과 변수를 함께 출력할 수 있습니다.
- 큰 따옴표("") 안에서 변수를 인라인으로 사용할 수 있습니다.$name = "John"; echo "My name is " . $name . ".";
위의 코드는 "My name is John."이라는 문자열을 출력합니다.
$name = "John"; echo "My name is $name.";
위의 코드도 같은 결과를 출력합니다.
"info"는 일반적으로 정보를 나타내는 용어로 사용됩니다.
웹 프로그래밍에서는 주로 "info"라는 단어가 메시지를 나타내는 용어로 사용됩니다.
예를 들어, 회원가입 폼에서 입력한 정보가 유효하지 않을 때 "유효하지 않은 정보입니다"와 같은 메시지를 출력하는 경우가 있습니다.
이 경우 메시지를 "info"라는 클래스를 가진 태그로 둘러싸서 스타일링하거나 자바스크립트를 사용하여 이벤트를 처리할 수 있습니다.<div class="info">유효하지 않은 정보입니다.</div>
PHP에서는 "info"라는 변수명으로 사용되는 경우도 있습니다.
이 변수는 주로 어떤 정보를 담고 있는지 설명하는 문자열을 저장하는 용도로 사용됩니다.$info = "이메일 주소가 중복됩니다."; echo "<div class='info'>$info</div>";
위의 코드는 "이메일 주소가 중복됩니다."라는 메시지를 "info" 클래스를 가진 div 태그로 출력합니다.
boardRemove.php
<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="confirm('삭제하겠습니까?', '')">삭제하기</a>
<a href="board.php" class="btnStyle3">목록보기</a>
</div>
이 코드는 게시글을 삭제하려고 삭제하기 버튼을 눌렀을 때 알림창이 뜨며 삭제하겠냐는 물음과 확인, 취소 버튼을 누르면 적용되는 화면입니다.
이 코드에서 '삭제하기' 버튼을 클릭하면 confirm() 함수가 실행되고, 사용자가 '취소'를 클릭하면 삭제가 취소되지 않고 계속 진행됩니다.
이를 수정하기 위해서는 confirm() 함수의 결과를 확인하고, 그 결과에 따라서 삭제를 실행하거나 취소해야합니다.
확인 버튼과 취소 버튼 모두 누르면 삭제가 실행되기 때문에 취소 버튼을 눌렀을 때 취소되지 않도록 설정해봤습니다.
<div class="board__btn mb100">
<a href="boardModify.php?boardID=<?=$_GET['boardID'] ?>" class="btnStyle3">수정하기</a>
<a href="#" class="btnStyle3" onclick="deleteBoard()">삭제하기</a>
<a href="board.php" class="btnStyle3">목록보기</a>
</div>
<script>
function deleteBoard() {
if(confirm('삭제하겠습니까?')) {
location.href = "boardRemove.php?boardID=<?=$_GET['boardID'] ?>";
}
}
</script>
여기서는 '삭제하기' 버튼에 onclick 속성을 추가하고, deleteBoard() 함수를 호출합니다.
이 함수에서는 confirm() 함수의 결과를 확인하고, 사용자가 '확인'을 클릭한 경우에는 삭제를 실행하고, '취소'를 클릭한 경우에는 아무 작업도 하지 않습니다.
삭제를 실행하기 위해서는 location.href 속성을 사용하여 boardRemove.php 파일로 이동합니다.
이 코드에 쓰인 속성들에 대해서 알아보겠습니다.
"onclick"은 HTML에서 사용되는 이벤트 속성 중 하나로, 클릭 이벤트가 발생했을 때 실행할 자바스크립트 코드를 지정할 수 있습니다.
<button onclick="alert('Hello, world!')">Click me</button>
위의 코드는 "Click me"라는 버튼을 클릭하면 "Hello, world!"라는 알림창을 띄우는 예시입니다.
onclick 속성은 버튼, 링크, 이미지 등 다양한 HTML 요소에 사용될 수 있습니다.
onclick 속성에는 일반적으로 함수 호출 구문이 들어갑니다.
이때 자바스크립트 함수를 직접 작성하여 onclick 속성에 지정할 수도 있고, 이미 작성된 함수를 호출하는 구문을 onclick 속성에 지정할 수도 있습니다.<button onclick="myFunction()">Click me</button> <script> function myFunction() { alert('Hello, world!'); } </script>
위의 코드는 "Click me"라는 버튼을 클릭하면 myFunction()이라는 함수를 호출하여 "Hello, world!"라는 알림창을 띄우는 예시입니다.
location.href는 현재 문서의 URL을 나타내는 프로퍼티입니다.
이 값을 변경하면 새로운 페이지로 이동할 수 있습니다.
예를 들어, 아래의 코드는 버튼을 클릭하면 google.com으로 이동합니다.<button onclick="location.href = 'https://www.google.com'">Go to Google</button>
location.href는 URL을 문자열로 반환하며, 다른 유용한 프로퍼티와 메서드들도 제공합니다.
예를 들어, location.host는 호스트 이름과 포트 번호를 반환하며, location.reload()는 현재 페이지를 새로 고침합니다.