결과물
- read_index.php 페이지이다. 아직 페이지가 완성되지 않아, DB에는 여러 게시글이 있지만, 게시글 하나만 출력하는 모습이다.
- read.php 페이지이다. css를 적용하지 않아 보기 흉하지만, 쿼리문을 통해 서버로부터 데이터를 잘 읽어오는 것을 알 수 있다.
- 수정, 삭제 버튼에서 문제가 생겨 작동하지 않는다. javascript쪽 문제인 듯하다.
- write.php이다. 이 페이지에는 로그인 해야 들어올 수 있고, GET 메소드로 bid를 받게 되면 게시글을 수정하게 된다.(read.php 수정버튼)
- write_action.php 파일이다. 성공적으로 게시글이 올라간 것을 확인할 수 있다.
코드
//write.php
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Write</title>
</head>
<body>
<?php
session_start();
if(isset($_SESSION['id'])){
$id = $_SESSION['id'];
}
else{
echo "<script>alert('Wrong path!');</script>";
echo "<script>histroy.back();</script>";
exit;
}
# 로그인 해야 접근 가능
$title = '';
$detail = '';
$bid = $_GET['bid'];
if(!empty($bid)){# modify
$username = $_SESSION['id'];
$mysqli = new mysqli('localhost', 'conn', 'Testnote!%89', 'test');
$q = "SELECT * from board where bid = '$bid'";
$row = ($mysqli->query($q))->fetch_array(MYSQLI_ASSOC);
if($row['id'] != $username){
echo "<script>alert('Wrong path!');</script>";
echo "<script>location.replace('read_index.php')</script>";
exit;
}
$title = $row['title'];
$detail = $row['detail'];
}
?>
<form method="post" action="write_action.php" class = "writeForm" >
<div>
<input type="text" name = "title" style="witdh:600px" id = "title" class = "titleFrom" value = <?php echo $title; ?> >
</div>
<div>
<input type="text" name = "detail" style="witdh:600px;height:400px" id = "detail" class = "detailForm" value = <?php echo $detail; ?> >
</div>
<div>
<input type="hidden" name="bid" id = "bid" value = <?php echo $bid; ?> >
</div>
<button type="submit">작성</button>
<button type="button" name = "cancel" id = "name" onclick="location.href='read_index.php'">취소</button>
</form>
</body>
</html>
//write_action.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
session_start();
if(!isset($_SESSION['id'])){
echo "<script>alert('Wrong path!');</script>";
echo "<script>history.back();</script>";
exit;
}
$id = $_SESSION['id'];
# 로그인을 해야만 접근 가능
$mysqli = new mysqli('localhost', 'conn', 'Testnote!%89', 'test');//host, user, pw, db_name, you need to make table
$bid = $_POST['bid'];
$title = $_POST['title'];
$detail = $_POST['detail'];
if(!empty($bid)){# modify
$q = "SELECT id from board where bid = $bid" # 전달 받은 bid 값이 올바른 값인지 확인
$result = ($mysqli->query($q))->fetch_array(MYSQLI_ASSOC);
if($result['id'] != $_SESSION['id']){
echo "<script>alert('Wrong path!')</script>";
echo "<script>location.replace('read_index.php');</script>";
exit;
}
$q = "UPDATE board SET title = '$title', detail = '$detail' where bid = '$bid'";
}
else{# write
$q = "INSERT INTO board(id, title, detail, created) VALUES ('$id', '$title', '$detail', default)";
}
$result = $mysqli->query($q);
if($result){
echo "<script>alert('Your request is successfully posted!')</script>";
}
else{
echo "<script>alert('Something is wrong with the server...')</script>";
}
?>
</body>
</html>
- POST, GET 메소드에 인자가 없더라도 isset함수에는 인자가 있는 것으로 판단되어서, empty 함수를 사용했다.
- bid가 있다면 수정, 없다면 일반적인 작성으로 판단했다.
- Session을 확인해 로그인을 안했을 경우에 대한 접근을 차단했다.
문제점
- read_index.php에서 여러 게시글이 목록에 올라오지 않고 하나만 올라와 있다.
- read.js에 문제가 생겼는지 수정과 삭제가 되지 않는다.
- update할 때 db의 board table이 갱신되게 설정을 했는지 접속할 때마다 날짜가 바뀐다.