리스트에서 체크박스로 체크된 게시물만 수정하기

리스트에서 체크박스로 체크된 게시물만 수정하기

QA

리스트에서 체크박스로 체크된 게시물만 수정하기

답변 1

본문

게시판 리스트에서 체크박스를 통해 체크된 항목에 관련된 게시물 내용을 수정을 하고자 많은 분들의 도움을 받아 아래와 같이 코드를 만들었습니다.

 

문제는 게시판리스트에 있는 체크박스 전체선택을 한 후 수정을 해야만 게시물이 수정이 되고 있습니다.

즉, A라는 게시물과 B라는 게시물의 wr_14, wr_16 셀렉트값을 선택하고 '선택수정'을 눌렀을 경우 값이 저장되지 않습니다. 대신 전체 체크박스 체크를 해준 뒤에 선택수정을 눌러야만 값이 변경됩니다.

 

체크된 게시물만 선택수정을 하기 위해선 어떤 부분을 고쳐야 할까요?

 

- 리스트 페이지의 해당부분 소스입니다.


    <td class="wth">
    <select id="wr_14[<?echo $i?>]" name="wr_14[<?echo $i?>]"> 
        <option value="미납" <? if ($list[$i]['wr_14']=="미납") echo 'selected'; ?>>미납</option>                <option value="납부" <? if ($list[$i]['wr_14']=="납부") echo 'selected'; ?>>납부</option>       
    </select> 
    </td>
    <td class="etc">
    <select id="wr_16[<?echo $i?>]" name="wr_16[<?echo $i?>]" style="background-color:orange;"> 
       <option value="완료" <? if ($list[$i]['wr_16']=="완료") echo 'selected'; ?>>완료</option>        
       <option value="보류" <? if ($list[$i]['wr_16']=="보류") echo 'selected'; ?>>보류</option>    
        <option value="미완료" <? if ($list[$i]['wr_16']=="미완료") echo 'selected'; ?>>미완료</option>
    </select> 
    <?php if ($is_checkbox) { ?>
    <td class="chk">
       <label for="chk_wr_id_<?php echo $i ?>" class="sound_only"><?php echo $list[$i]['subject'] ?></label>
       <input type="checkbox" name="chk_wr_id[]" value="<?php echo $list[$i]['wr_id'] ?>" id="chk_wr_id_<?php echo $i ?>">
    </td>
    <?php } ?>

 

- 위 소스를 처리해 주는 board_list_update.php 소스


<?php
include_once('./_common.php');
$count = count($_POST['chk_wr_id']);
if(!$count) {
    alert($_POST['btn_submit'].' 하실 항목을 하나 이상 선택하세요.');
}
if($_POST['btn_submit'] == '선택삭제') {
    include './delete_all.php';
} else if($_POST['btn_submit'] == '선택복사') {
    $sw = 'copy';
    include './move.php';
} else if($_POST['btn_submit'] == '선택이동') {
    $sw = 'move';
    include './move.php';
} else if($_POST['btn_submit'] == '선택수정') {
    include './list_update.php';
} else {
    alert('올바른 방법으로 이용해 주세요.');
}
?>

 

- 최종 업데이트 소스 list_update.php


<?php 
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 
 
if(!$is_admin) 
    alert('접근 권한이 없습니다.', G5_URL); 
    for ($i=0; $i<count($_POST['chk_wr_id']); $i++){ 
        $k = $_POST['chk_wr_id'][$i]; 
        $j = $_POST['wr_14'][$i]; 
        $h = $_POST['wr_16'][$i]; 
        $sql = " update $write_table set wr_14='$j', wr_16='$h' where wr_id='$k' "; 
        $result = sql_query($sql); 
    } 
    goto_url('./board.php?bo_table='.$bo_table.'&subject='.$subject.'&page='.$page.$qstr); 
?> 

이 질문에 댓글 쓰기 :

답변 1

눈으로 봐서는 이상이 없어보이는데요?

 

update 실행문과 페이지 이동시키는 부분 주석으로 막아놓고

sql 만 디버깅 해보세요..

선택한 값이 안넘어오는건지 테스트해볼 필요가 있습니다.

 

echo $sql;

//$result = sql_query($sql);

// goto_url('./board.php?bo_table='.$bo_table.'&subject='.$subject.'&page='.$page.$qstr);  

 

 

 

 

혹은 아래와같이 변수로 담지말고 직접 쿼리문에 넣어보세요.

 

   

   
          $sql = " update $write_table set wr_14='$_POST[wr_14][$i]', wr_16='$_POST[wr_16][$i]' where wr_id='$_POST[chk_wr_id][$i]' "; 
답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 5
© SIRSOFT
현재 페이지 제일 처음으로