반응형
이제 등록한 게시물에 첨부된 있는 이미지를 화면에 나타내 보자. 기존 컨트롤러와 뷰를 조금 수정하면 된다.
/app/Controllers/Board.php
<?php
namespace App\Controllers;
use App\Models\BoardModel;//사용할 모델을 반드시 써줘야한다.
class Board extends BaseController
{
public function list()
{
$db = db_connect();
$query = "select * from board order by bid desc";
$rs = $db->query($query);
$data['list'] = $rs->getResult();//결과값 저장
return render('board_list', $data);//view에 리턴
}
public function write()
{
if(!isset($_SESSION['userid'])){
echo "<script>alert('로그인하십시오.');location.href='/login'</script>";
exit;
}
return render('board_write');
}
public function save()
{
if(!isset($_SESSION['userid'])){
echo "<script>alert('로그인하십시오.');location.href='/login'</script>";
exit;
}
$db = db_connect();
$bid=$this->request->getVar('bid');//bid값이 있으면 수정이고 아니면 등록이다.
$subject=$this->request->getVar('subject');
$content=$this->request->getVar('content');
if($bid){
$query = "select * from board where bid=".$bid;
$rs = $db->query($query);
if($_SESSION['userid']==$rs->getRow()->userid){
$sql="update board set subject='".$subject."', content='".$content."' where bid=".$bid;
$rs = $db->query($sql);
return $this->response->redirect(site_url('/boardView/'.$bid));
}else{
echo "<script>alert('본인이 작성한 글만 수정할 수 있습니다.');location.href='/login';</script>";
exit;
}
}
$file = $this->request->getFile('upfile');//첨부한 파일의 정보를 가져온다.
if($file->getName()){//파일 정보가 있으면 저장한다.
$filename = $file->getName();//기존 파일명을 저장할때 필요하다. 여기서는 사용하지 않는다.
//$filepath = WRITEPATH. 'uploads/' . $file->store(); 매뉴얼에 나와있는 파일 저장 방법이다.여기서는 안쓴다.
$newName = $file->getRandomName();//서버에 저장할때 파일명을 바꿔준다.
$filepath = $file->store('board/', $newName);//CI4의 store 함수를 이용해 저장한다.
}
$sql="insert into board (userid,subject,content) values ('".$_SESSION['userid']."','".$subject."','".$content."')";
$rs = $db->query($sql);
$insertid=$db->insertID();
if($file->getName()){
$sql2="INSERT INTO file_table
(bid, userid, filename, type)
VALUES('".$insertid."', '".$_SESSION['userid']."', '".$filepath."', 'board')";
$rs2 = $db->query($sql2);
}
return $this->response->redirect(site_url('/board'));
}
public function view($bid = null)
{
$db = db_connect();
$query = "select b.*,f.filename from board b
left join file_table f on b.bid=f.bid where f.type='board' and b.bid=".$bid;
$rs = $db->query($query);
$data['view'] = $rs->getRow();
//error_log ('['.__FILE__.']['.__FUNCTION__.']['.__LINE__.']['.date("YmdHis").']'.print_r($data,true)."\n", 3, './php_log_'.date("Ymd").'.log');//로그를 남긴다.
return render('board_view', $data);
}
public function modify($bid = null)
{
$db = db_connect();
$query = "select * from board where bid=".$bid;
$rs = $db->query($query);
if($_SESSION['userid']==$rs->getRow()->userid){
$data['view'] = $rs->getRow();
return render('board_write', $data);
}else{
echo "<script>alert('본인이 작성한 글만 수정할 수 있습니다.');location.href='/login';</script>";
exit;
}
}
public function delete($bid = null)
{
$db = db_connect();
$query = "select * from board where bid=".$bid;
$rs = $db->query($query);
if($_SESSION['userid']==$rs->getRow()->userid){
$query = "delete from board where bid=".$bid;
$rs = $db->query($query);
return $this->response->redirect(site_url('/board'));
}else{
echo "<script>alert('본인이 작성한 글만 삭제할 수 있습니다.');location.href='/login';</script>";
exit;
}
}
}
view함수에 게시물 내용과 file_table에서 파일명도 함께 포함시켜서 전달한다.
/app/Views/board_view.php
<h3 class="pb-4 mb-4 fst-italic border-bottom" style="text-align:center;">
- 게시판 보기 -
</h3>
<article class="blog-post">
<h2 class="blog-post-title"><?php echo $view->subject;?></h2>
<p class="blog-post-meta"><?php echo $view->regdate;?> by <a href="#"><?php echo $view->userid;?></a></p>
<hr>
<p>
<?php echo $view->content;?>
</p>
<br>
<?php
if(isset($view->filename)){
?>
<img src="<?php echo base_url('/uploads/'.$view->filename);?>">
<?php }?>
<hr>
<p style="text-align:right;">
<?php
if($_SESSION['userid']==$view->userid){
?>
<a href="/modify/<?php echo $view->bid;?>"><button type="button" class="btn btn-primary">수정</button><a>
<a href="/delete/<?php echo $view->bid;?>"><button type="button" class="btn btn-warning">삭제</button><a>
<?php }?>
<a href="/board"><button type="button" class="btn btn-primary">목록</button><a>
</p>
</article>
filename에 값이 있으면 화면에 첨부 이미지를 뿌려준다. src뒤에 어떤식으로 뿌려줬는지 잘 확인해보자.
<img src="<?php echo base_url('/uploads/'.$view->filename);?>">
이렇게 해주면 public 폴더로 연결된다.
다음엔 첨부파일을 삭제하는 걸 해보자.
반응형
'PHP강좌 > [CI4]게시판만들기강좌' 카테고리의 다른 글
[PHP+CI4+mysql]회원 전용 게시판 만들기 강좌 #20. 다중 파일 첨부하기(내용수정) (0) | 2022.11.15 |
---|---|
[PHP+CI4+mysql]회원 전용 게시판 만들기 강좌 #19. 첨부한 파일 삭제하기(내용수정) (0) | 2022.11.14 |
[PHP+CI4+mysql]회원 전용 게시판 만들기 강좌 #17. 첨부파일 업로드 경로 변경 (0) | 2022.11.14 |
[PHP+CI4+mysql]회원 전용 게시판 만들기 강좌 #16. 파일업로드(내용 수정됨) (0) | 2022.11.14 |
[PHP+CI4+mysql]회원 전용 게시판 만들기 강좌 #15. 수정및 삭제 (0) | 2022.11.14 |