이전글 : [PHP] 게시판 만들기 with MVC - 1부 Migration
이전글 : [PHP] 게시판 만들기 with MVC - 2부 Routing
이전글 : [PHP] 게시판 만들기 with MVC - 3부 View(List & Create)
이전글 : [PHP] 게시판 만들기 with MVC - 4부 Controller
이전글 : [PHP] 게시판 만들기 with MVC - 5부 Pagination
이전글 : [PHP] 게시판 만들기 with MVC - 6부 Read
이전글 : [PHP] 게시판 만들기 with MVC - 7부 Update & Delete
Lock
이번 포스팅에는 잠긴 글 기능을 만들어봅시다.
Post 테이블의 구조를 보면 lock 컬럼이 존재합니다.
이 값으로 잠긴 글인지 여부를 파악하는데 0이면 기본 값, 1이면 글이 잠겼다고 보시면 됩니다.
현재 코드로도 비밀글 체크박스를 선택하면
해당 글을 보려고 할 때 비밀번호를 입력해야 합니다.
하지만 비밀번호 입력 후 확인하기에서 404가 발생하죠.
이 부분을 마저 만들어봅시다.
View
이전에 만들었던 read.php에서 input tpye이 잘못되어 있어서 수정합시다.
bbs/view/read.php
<input id="pw" type="text" class="form-control" name="pw" placeholder="비밀번호를 입력하세요">
=>
<input id="pw" type="password" class="form-control" name="pw" placeholder="비밀번호를 입력하세요">
Route
bbs/Route/PostRoute.php
<?php
namespace Route;
use Controller\PostController;
class PostRoute extends BaseRoute
{
function routing($url): bool
{
...
else if ($this->routeCheck($url, "post/lockCheck", "POST")) {
$PostController->lockCheck();
return true;
}
...
}
}
Controller
bbs/Controller/PostController.php
<?php
namespace Controller;
use Model\Post;
class PostController extends BaseController
{
...
/**
* 게시글의 잠긴 걸 확인 후 해제를 담당
* @return void
*/
public function lockCheck()
{
$idx = $_POST['idx'];
$pw = $_POST['pw'];
if ($this->parametersCheck($pw)) {
if ($this->post->lockCheck($idx, $pw)) {
$this->redirect('/bbs/post/read?idx=' . $idx, '비밀번호가 일치합니다.');
} else {
$this->redirectBack('비밀번호가 일치하지 않습니다.');
}
} else {
$this->redirectBack('입력되지 않은 값이 있습니다.');
}
}
...
}
Model
비밀번호가 동일할 경우 1시간짜리 쿠키를 생성합니다.
이 쿠키를 가지고 있다면 1시간 동안 해당 게시글을 비밀번호 기입 없이 볼 수 있습니다.
bbs/Model/Post.php
<?php
namespace Model;
use PDO;
use PDOException;
class Post extends BaseModel
{
...
/**
* Post 잠김 확인 후 해제
* @param $idx
* @param $pw
* @return bool
*/
public function lockCheck($idx, $pw): bool
{
try {
echo $idx;
$query = "SELECT pw FROM posts WHERE idx = :idx";
$stmt = $this->conn->prepare($query);
$stmt->execute([
'idx' => $idx,
]);
$check = $stmt->fetch();
// 비밀번호 체크
if (!$check || !password_verify($pw, $check['pw'])) {
return false;
}
// 1시간짜리 쿠키 생성
setcookie("post_key" . $idx, $pw, time() + 3600, "/");
return true;
} catch (PDOException $e) {
error_log($e->getMessage());
return false;
}
}
...
}
이제 다음과 같은 결과를 볼 수 있습니다.
'PHP > Modern PHP' 카테고리의 다른 글
[PHP] 게시판 만들기 with MVC - 10부 Reply(Update & Delete) (2) | 2023.12.28 |
---|---|
[PHP] 게시판 만들기 with MVC - 9부 Reply(List & Create) (1) | 2023.12.28 |
[PHP] 게시판 만들기 with MVC - 7부 Update & Delete (0) | 2023.12.27 |
[PHP] 게시판 만들기 with MVC - 6부 Read (0) | 2023.12.27 |
[PHP] 게시판 만들기 with MVC - 5부 Pagination (1) | 2023.12.27 |