반응형

 

 

글을 작성했으니 수정하는것도 해보자. 수정할때는 디비에 저장돼 있는 글쓴 사람의 아이디와 세션의 아이디를 비교하면 된다. 

 

우선 버튼을 생성하기 위해 view.php 를 아래와 같이 수정한다.

<?php
include $_SERVER["DOCUMENT_ROOT"]."/inc/header.php";

$bid=$_GET["bid"];
$result = $mysqli->query("select * from board where bid=".$bid) or die("query error => ".$mysqli->error);
$rs = $result->fetch_object();
?>
      <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 $rs->subject;?></h2>
        <p class="blog-post-meta"><?php echo $rs->regdate;?> by <a href="#"><?php echo $rs->userid;?></a></p>

        <hr>
        <p>
          <?php echo $rs->content;?>
        </p>
        <hr>
      </article>

      <nav class="blog-pagination" aria-label="Pagination">
        <a class="btn btn-outline-secondary" href="/index.php">목록</a>
        <a class="btn btn-outline-secondary" href="/reply.php?bid=<?php echo $rs->bid;?>">답글</a>
        <a class="btn btn-outline-secondary" href="/write.php?bid=<?php echo $rs->bid;?>">수정</a>
        <a class="btn btn-outline-secondary" href="/delete.php?bid=<?php echo $rs->bid;?>">삭제</a>
      </nav>

<?php
include $_SERVER["DOCUMENT_ROOT"]."/inc/footer.php";
?>

 

위 화면에서 수정 버튼을 클릭하면 게시물의 번호를 가지고 write.php 화면으로 넘어가게 된다. 이 경우 현재 화면에 들어간 회원의 세션값과 디비에 저장돼 있는 userid와 비교해서 다르면 수정 못하게 하고 같으면 수정하게 해준다.

 

write.php를 조금 수정해보자.

<?php
include $_SERVER["DOCUMENT_ROOT"]."/inc/header.php";

if(!$_SESSION['UID']){
    echo "<script>alert('회원 전용 게시판입니다.');history.back();</script>";
    exit;
}

$bid=$_GET["bid"];//get으로 넘겼으니 get으로 받는다.

if($bid){//bid가 있다는건 수정이라는 의미다.
    $result = $mysqli->query("select * from board where bid=".$bid) or die("query error => ".$mysqli->error);
    $rs = $result->fetch_object();
    if($rs->userid!=$_SESSION['UID']){
        echo "<script>alert('본인 글이 아니면 수정할 수 없습니다.');history.back();</script>";
        exit;
    }
}
?>
        <form method="post" action="write_ok.php">

            <input type="hidden" name="bid" value="<?php echo $bid;?>">
            <div class="mb-3">
            <label for="exampleFormControlInput1" class="form-label">제목</label>
                <input type="text" name="subject" class="form-control" id="exampleFormControlInput1" placeholder="제목을 입력하세요." value="<?php echo $rs->subject;?>">
            </div>
            <div class="mb-3">
            <label for="exampleFormControlTextarea1" class="form-label">내용</label>
            <textarea class="form-control" id="exampleFormControlTextarea1" name="content" rows="3"><?php echo $rs->content;?></textarea>
            </div>
            <button type="submit" class="btn btn-primary">등록</button>
        </form>
<?php
include $_SERVER["DOCUMENT_ROOT"]."/inc/footer.php";
?>

 

$bid에 값이 있으면 수정이다. $bid값으로 디비에서 조회후 userid와 세션값을 비교한다. 본인 글이 맞다면 수정하기 편하게 기존에 입력했던 값들을 뿌려준다. 그리고

 

<input type="hidden" name="bid" value="<?php echo $bid;?>">

 

어떤글을 수정하는지 넘겨주기 위해 $bid값을 hidden으로 넘겨준다.

 

이번엔 write_ok.php를 수정해보자

<?php session_start();
include $_SERVER["DOCUMENT_ROOT"]."/inc/dbcon.php";

if(!$_SESSION['UID']){
    echo "<script>alert('회원 전용 게시판입니다.');location.href='/index.php';</script>";
    exit;
}

$subject=$_POST["subject"];
$content=$_POST["content"];
$bid=$_POST["bid"];//bid값이 있으면 수정이고 아니면 등록이다.
$userid=$_SESSION['UID'];//userid는 세션값으로 넣어준다.
$status=1;//status는 1이면 true, 0이면 false이다.

if($bid){//bid값이 있으면 수정이고 아니면 등록이다.
    $result = $mysqli->query("select * from board where bid=".$bid) or die("query error => ".$mysqli->error);
    $rs = $result->fetch_object();

    if($rs->userid!=$_SESSION['UID']){
        echo "<script>alert('본인 글이 아니면 수정할 수 없습니다.');location.href='/';</script>";
        exit;
    }
    $sql="update board set subject='".$subject."', content='".$content."' where bid=".$bid;//수정하기
}else{
    $sql="insert into board (userid,subject,content) values ('".$userid."','".$subject."','".$content."')";//등록하기
}
$result=$mysqli->query($sql) or die($mysqli->error);

if($result){
    echo "<script>location.href='/index.php';</script>";
    exit;
}else{
    echo "<script>alert('글등록에 실패했습니다.');history.back();</script>";
    exit;
}
?>

 

마찬가지로 bid값을 받아서 본인인지 여부를 확인하고 update문을 통해 게시물을 수정했다.

 

bid값은 어떨때는 $_POST["bid"]로 받고 어떨때는 $_GET["bid"]으로 받는데 bid=11 이렇게 값을 =으로 넘기면 get으로 받고 form 문안에서 method가 post이면 post로 받는다.

 

둘중에 어떤형태로 받는지 모른다면

 

$bid=$_GET["bid"]??$_POST["bid"];

 

이렇게 처리할 수 도 있다.

반응형

+ Recent posts