오늘 할 것은 리뷰를 작성하고 저장하는 것입니다.
board 폴더를 만들고 그 안에
위와 같이 만들어줍니다.
board_process.php는 member_process와 같은 역활을 할 것이고
review.php는 리뷰를 보는 페이지
writeReview.php는 리뷰를 작성할 페이지 입니다.
writeReview.php를 아래와 같이 작성해줍시다.
<?php
require_once("../db/db.php");
session_start();
if(!$_SESSION['userid']){
errMsg('로그인 후 작성할 수 있습니다.');
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="../css/default.css">
<link rel="stylesheet" href="../css/style.css?ver=15">
<title>Sung's 영화 리뷰</title>
</head>
<body>
<header>
<nav id="navBar">
<div class="navBarCon">
<div class="navBarleft">
Sung's 영화 리뷰
</div>
<div class="navBarItem">
<ul>
<a href="../main.php"><li>홈으로</li></a>
<a href="review.php"><li>리뷰 보기</li></a>
</ul>
</div>
<div class="navBarRight">
<div class="navBarLogin">
<?php if(!isset($_SESSION['userid'])){
echo '<a href="../member/login.php">로그인</a>';
} else {
echo '<div class="helloUser">'.$_SESSION['name'].'님 환영합니다.</div>';
echo '<div class="outAndUpdate"><a href="../member/member_process.php?mode=logout">로그아웃</a> |
<a href="../member/update.php">정보수정</a>
</div>';
}
?>
</div>
</div>
</div>
</nav>
</header>
<section>
<div class="mainCon">
<div class="writeTitle">리뷰 쓰기</div>
<form class="writeForm" action="board_process.php?mode=write" method="post">
<input type="hidden" name="id" value="review">
<input type="hidden" name="userid" value="<?= $_SESSION['userid'] ?>">
<input type="hidden" name="name" value="<?= $_SESSION['name'] ?>">
<p><input class="writeTypeText" type="text" name="title" size="50" placeholder="제목을 입력해주세요" required></p>
<textarea class="writeTextarea" name="story" placeholder="본문을 입력해주세요" required></textarea>
<div class="writeBtn">
<input type="submit" value="작성">
<input type="button" value="취소" onclick="history.back(1)">
</div>
</form>
</div>
</section>
<footer></footer>
</body>
</html>
/* css 파일*/
.writeTitle{
width: 35%;
margin: auto;
margin-top: 30px;
text-align: center;
font-size: 30px;
}
.writeForm{
width: 40%;
margin: auto;
margin-top: 60px;
text-align: left;
}
.writeForm input[type=text]{
font-size: 20px;
margin-bottom: 30px;
}
.writeTextarea{
width: 95%;
height: 500px;
resize: none;
}
.writeBtn{
width: 95%;
margin-top: 20px;
text-align: center;
}
.writeBtn input[type=submit], .writeBtn input[type=button]{
font-size: 16px;
}
위쪽에 if문으로 로그인하지 않으면 작성하지 못한다는 경고창을 보이게합니다.
그리고 form 안에 hidden으로 id, userid, name 값을 보내게합니다.
그러면
이렇게 화면이 나옵니다.
먼저 DB에 작성할 글을 저장시킬 review 테이블을 만들어줍시다.
다음과 같이 테이블을 만들어줍시다.
이제 board_process.php를 작성해줍시다.
<?php
require_once("../db/db.php");
session_start();
switch($_GET['mode']){
case 'write':
if(!$_SESSION['userid']){
errMsg("로그인 해주세요");
}
$id = $_POST['id'];
$userid = $_POST['userid'];
$name = $_POST['name'];
$title = $_POST['title'];
$story = $_POST['story'];
$sql = $db -> prepare("INSERT INTO review
(id, userid, name, title, story, redate)
VALUE
(:id, :userid, :name, :title, :story, now())");
$sql -> bindParam("id", $id);
$sql -> bindParam("userid",$userid);
$sql -> bindParam("name",$name);
$sql -> bindParam("title",$title);
$sql -> bindParam("story",$story);
$sql -> execute();
header("location:review.php");
break;
}
?>
if 문으로 로그인 하지 않았을 때 글을 작성하지 못하게 해줍시다.
writeReview.php에서 보낸 값들을 각각의 변수에 저장시켜줍니다.
그 값들을 review 테이블로 보내주고
완료 시에 리뷰 보기 페이지로 가게 만들어줍니다.
이렇게 작성을 하고 제대로 저장되는지 확인해봅시다.
작성을 눌렀을 빈 화면이 나오시면 정상입니다.
아직 리뷰 보기 페이지를 만들지 않았기 때문입니다.
이제 제대로 저장이 됐는지 DB를 확인해봅시다.
모든 값들이 제대로 들어온 것을 확인 할 수 있습니다.
이제 리뷰 보기 페이지를 만들겠습니다.
review.php에 아래와 같이 입력해줍시다.
<?php
require_once("../db/db.php");
session_start();
$sql = $db -> prepare("SELECT * FROM review order by no DESC");
$sql -> execute();
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="../css/default.css">
<link rel="stylesheet" href="../css/style.css?ver=18">
<title>Sung's 영화 리뷰</title>
</head>
<body>
<header>
<nav id="navBar">
<div class="navBarCon">
<div class="navBarleft">
Sung's 영화 리뷰
</div>
<div class="navBarItem">
<ul>
<a href="../main.php"><li>홈으로</li></a>
<a href="review.php"><li>리뷰 보기</li></a>
</ul>
</div>
<div class="navBarRight">
<div class="navBarLogin">
<?php if(!isset($_SESSION['userid'])){
echo '<a href="../member/login.php">로그인</a>';
} else {
echo '<div class="helloUser">'.$_SESSION['name'].'님 환영합니다.</div>';
echo '<div class="outAndUpdate"><a href="../member/member_process.php?mode=logout">로그아웃</a> |
<a href="../member/update.php">정보수정</a>
</div>';
}
?>
</div>
</div>
</div>
</nav>
</header>
<section>
<div class="mainCon">
<div class="reviewTitle">리뷰 보기</div>
<table class="reviewTable">
<thead>
<tr>
<td class="reviewTd1">no</td>
<td class="reviewTd2">제목</td>
<td class="reviewTd3">글쓴이</td>
<td class="reviewTd4">작성시간</td>
</tr>
</thead>
<?php
while ($review = $sql -> fetch()){
?>
<tbody>
<tr>
<td class="reviewTd1"><?= $review['no']?></td>
<td class="reviewTd2"><?= $review['title']?></td>
<td class="reviewTd3"><?= $review['name']?></td>
<td class="reviewTd4"><?= $review['redate']?></td>
</tr>
</tbody>
<?php } ?>
<tfoot>
<tr>
<td class="reviewTd1"></td>
<td class="reviewTd2"></td>
<td class="reviewTd3"></td>
<td class="reviewTd4"></td>
</tr>
</tfoot>
</table>
<div class="writeReview"><a href="writeReview.php">글쓰기</a></div>
</div>
</section>
<footer></footer>
</body>
</html>
/* css 파일 */
.reviewTitle{
width: fit-content;
height: 35px;
margin: auto;
margin-left: 400px;
margin-top: 80px;
text-align: left;
font-size: 30px;
border-bottom: 2px solid #34495e;
}
.reviewTable{
margin: auto;
margin-top: 40px;
text-align: center;
border-top: 2px solid #34495e;
border-bottom: 2px solid #34495e;
}
.reviewTable td{
padding: 5px;
border-bottom: 1px solid #34495e;
}
.reviewTable thead td{
font-size: 24px;
font-weight: bold;
}
.reviewTable tbody .reviewTd1{
width: 5%;
font-size: 22px;
}
.reviewTable tbody .reviewTd2{
width: 40%;
text-align: left;
font-size: 22px;
}
.reviewTable tbody .reviewTd3{
width: 10%;
font-size: 22px;
}
.reviewTable tbody .reviewTd4{
width: 20%;
font-size: 22px;
}
.reviewTable tfoot td{
height: 5px;
border: none;
}
.writeReview{
width: 60%;
margin: auto;
margin-top: 30px;
font-size: 20px;
text-align: right;
}
.writeReview a:hover, .writeReview a:visited, .writeReview a:link{
color: black;
}
먼저
<?php
require_once("../db/db.php");
session_start();
$sql = $db -> prepare("SELECT * FROM review");
$sql -> execute();
?>
이렇게 입력해 DB에서 review 테이블의 정보를 받아옵니다.
그리고 table 부분에서 thead, tbody, tfoot 부분을 나누어 주고
tbody 부분을 while문 안에 넣어 DB에 저장된 글을 받아 오게 해줍니다.
현재 제 review 테이블에는 글이 두 개가 저장돼있는 상태입니다.
이것을 화면에 출력해보면
이렇게 2개가 제대로 뜨는 것을 확인 할 수 있습니다.
<?php
require_once("../db/db.php");
session_start();
$sql = $db -> prepare("SELECT * FROM review order by no DESC");
$sql -> execute();
?>
제일 윗 부분의 셀렉 문을 저렇게 바꿔주어 글이 내림차순으로 오게 바꿔줍시다.
이제 글을 작성 했을 때 목록에 글이 생성되는지 확인 해봅시다.
글을 작성하고 목록에 제대로 반영이됩니다.
마지막으로 작성시간을 년, 월, 일로 표시되도록 바꿔보겠습니다.
<?php while ($review = $sql -> fetch()){ ?>
<?php
$time = DateTime::createFromFormat('Y-m-d H:i:s', $review['redate']);
$time = date_format($time, 'Y-m-d');
?>
<tbody>
<tr>
<td class="reviewTd1"><?= $review['no']?></td>
<td class="reviewTd2"><?= $review['title']?></td>
<td class="reviewTd3"><?= $review['name']?></td>
<td class="reviewTd4"><?= $time?></td>
</tr>
</tbody>
<?php } ?>
기존 while문 안을 저렇게 바꾸어 줍시다.
그러면
이렇게 년, 월, 일만 보이게 바뀝니다.
DateTime::createFromFormat이 궁금하신분은 이곳을 참고해주시기 바랍니다.
https://www.php.net/manual/en/datetime.createfromformat.php
오늘은 이것으로 마치고
다음에는 작성한 리뷰를 보는 페이지를 만들어보겠습니다.
# Visual Studio Code, Xampp, MySQL Workbench 환경에서 작성된 코드입니다.
'IT > PHP' 카테고리의 다른 글
PHP(10) 이미지 업로드 (3) | 2020.02.17 |
---|---|
PHP(9) 리뷰 보기 (0) | 2020.02.17 |
PHP(7) 아이디/비밀번호 찾기 (0) | 2020.02.12 |
PHP(6) 회원정보 수정 (0) | 2020.02.09 |
PHP(5) 로그인, 로그아웃 (1) | 2020.02.08 |
댓글