반응형

이제 등록한 게시물에 첨부된 있는 이미지를 화면에 나타내 보자. 기존 컨트롤러와 뷰를 조금 수정하면 된다.

 

/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 폴더로 연결된다.

 

다음엔 첨부파일을 삭제하는 걸 해보자.

반응형

+ Recent posts