채택완료

리스트에서 특정 필드 수정하기에 대해서

2016-07-20 (수) 09:48:31 4,900

리스트 화면에서 특정 필드의 값을 수정하기 위해 아래와 같이 진행했습니다.

그런데, "수정" 버턴을 누르면 "목록에서 항목을 선택하세요"라는 메세지가 뜨면서 수정이 되지 않습니다.

어디가 잘못되었는지 모르겠습니다.

list.skin.php 파일에서

<select name="wr_3" id="wr_3_<?php echo $i;?>" required class="form-control input-sm">

<option value="">확인중</option>

<option value="50" <? if($list[$i]['wr_3'] == '50') echo " selected "; ?>>예약완료</option>

<option value="10" <? if($list[$i]['wr_3'] == '10') echo " selected "; ?>>예약취소</option>

<option value="70" <? if($list[$i]['wr_3'] == '70') echo " selected "; ?>>환불완료</option>

</select>

</b>

<button id="list_select_<?php echo $i;?>">수정</button>

<script>

$(document).ready(function(){

$("#list_select_<?php echo $i;?>").click(function(){

var bo_table = "<?=$bo_table?>";

var wr_id = "<?php echo $list[$i]['wr_id'] ?>";

var value0 = $("#wr_3_<?php echo $i;?>").val();

$.ajax({

 type: "POST",

 url: "<?php echo $board_skin_url?>/list_up.php",

 data: { bo_table:bo_table, wr_id:wr_id, wr_3:value0 },

 success: function () {

  //do somthing here

  location.reload();

  alert("수정되었습니다")

 }

});

});

});

</script>

그리고, list_up.php 파일에는 아래와 같은 내용을 넣었습니다.

include_once('./_common.php');

$sql = " update g5_write_{$_POST[bo_table]} 

set wr_3 = '{$_POST[wr_3]}'

where wr_id = '{$_POST[wr_id]}' ";

    sql_query($sql);

|

답변 4개 / 댓글 13개

채택된 답변
+20 포인트
2016-07-20 (수) 11:15:20
음.............

값을 넘겨줘야 하니까

ajax 구문과 select 구문을 이렇게 바꿔보세요

- ajax -
Copy
<script type="text/javascript">var wr3_chk = function(wr_num,wr_id,field) {    $.ajax({        type:"post",        url:"<?php echo $board_skin_url?>/list_up.php",        data:        {            bo_table : g5_bo_table,           wr_num : wr_num,            wr_id : wr_id,            field : field        },        dataType:"html",        success:function(res){            $("#wr_3_"+wr_num).val(res);            if(res)                alert(res+"(으)로 변경되었습니다");            else                alert("변경 실패");        }    });}</script>


- select -
Copy
<select name="wr_3" id="wr_3_<?php echo $i;?>" onchange="wr3_chk('<?php echo $i;?>','<?php echo $list[$i]['wr_id']?>',this.value);" required class="form-control input-sm">    <option value="">확인중</option>    <option value="50" <? if($list[$i]['wr_3'] == '50') echo " selected "; ?>>예약완료</option>    <option value="10" <? if($list[$i]['wr_3'] == '10') echo " selected "; ?>>예약취소</option>    <option value="70" <? if($list[$i]['wr_3'] == '70') echo " selected "; ?>>환불완료</option></select>


- ajax 처리 list_up.php 파일 -
Copy
<?phpinclude_once("경로에 맞는 설정/_common.php");$write_table = $g5['write_prefix'].$POST['bo_table'];$sql = " update ".$write_table." set wr_3 = '".$_POST['wr_3']."' where wr_id = '".$_POST['wr_id']."' ";sql_query($sql);$sql = "select wr_3 from ".$write_table." where wr_id = '".$POST['wr_id']."' ";$row = sql_fetch($sql);if($row['wr_3'])  echo $row['wr_3'];else echo '';?>

답변에 대한 댓글 5개

불량학생님 이렇게 신경써 주셔서 감사합니다.
적용해 보니 "변경실패"라는 메세지가 뜨면서 변경이 되지 않습니다. ;;
아 위에 틀렸네요
ajax 부분에서 field 부분에
field : field ==> wr_3 : field

이렇게 바꾸시던지 아니면
list_up.php 에서
$_POST['wr_3'] ==> $_POST['field'] 로 바꾸세요
ajax부분을 수정을 했는데, "변경실패" 메세지 뜨는 같은 현상입니다.
현재 http://samsungedu.kr/sge/v2016/bbs/board.php?bo_table=test2 이페이지에서 넘어가는 파라미터 값은
bo_table : test2
wr_num : 1
wr_id : 1
wr_3 : 50
이라는 값이 넘거가고 있습니다
list_up.php 페이지에서 틀린 부분이 있는지 확인을 해보셔야 할 듯 합니다
제가 적어드린 대로 복사 하셨다면
$sql = "select wr_3 from ".$write_table." where wr_id = '".$POST['wr_id']."' ";
이부분에서 $_POST 인데 $POST라고 적었군요 수정해보세요
네. ^^ 오랜시간 감사합니다.
드디어 해결이 되었습니다.
감사합니다.
2016-07-20 (수) 10:20:42

<button id="list_select_<?php echo $i;?>">수정</button>

여기에 type="button"을 넣어 보세요. 

답변에 대한 댓글 5개

감사합니다.
"목록에서 항목을 선택하세요"라는 메세지는 뜨지 않네요.
하지만, 수정이 되지는 않습니다.
저 select가 있는 부분만 html로 보여 주셔도 됩니다.
php 코드가 들어간 거 말구요 웹 페이지에서 렌더링이 끝난 화면요.
소스 보기로 해서 나오는 코드
아니면 저 코드가 있는 페이지 주소를 알려 주세요.
권한 문제가 있어 답변이 늦었습니다. 임시적으로 만들어서 링크해 드립니다.

http://samsungedu.kr/sge/v2016/bbs/board.php?bo_table=test2

id : test
pw : 1234
입니다.
<select name="wr_3" class="form-control input-sm" id="wr_3_<?=$list[$i]['wr_id']?>" required="">
select 이렇게 바꿔 보세요.

<button class="form-control btn-submit" id="list_select_<?=$list[$i]['wr_id']?>" type="button">수정</button>
button 이렇게 바꾸시고.

아래 스크립트는 제일 밑으로 빼세요.
지금은 보니 for 안에 넣으셨네요.
[code]
$(function() {
$("button.btn-submit").on("click", function() {
var wrid = $(this).attr("id").split("_");
var value0 = $("#wr_3_" + wrid[2]).val();
$.ajax({
... 생략 ...
data : {
bo_table : bo_table,
wr_id : wrid[2],
wr_3 : value0
}
});
});
});
[/code]
왕계란님 감사합니다.
적용해 보니 버튼이 동작을 하지 않아서요. ;;
2016-07-20 (수) 10:18:02

list_up.php 파일의 위치가 <?php echo $board_skin_url?>이라면

list_up.php 파일에서 불러오는 _common.php 파일이 <?php echo $board_skin_url?> 이곳에 존재하나요?

아니면 root 폴더의 _common을 불러오나요?

일단은 경로를 확인해봐야 하겠네요

ajax넘겨지는 부분 파이어폭스나 크록 요소검사의 네트웍 부분에서 볼 수있습니다 

답변에 대한 댓글 2개

네. 루트의 _common을 불러옵니다. 요소검사부분은 한번 확인해 보겠습니다.
감사합니다.
_common파일에는 아래와 같이 넣었습니다.

include_once("../../../common.php");

사용하던 스킨이있는데

참고해서 만들어보세요^^

비밀글을 등록하고 비밀글을 공개글로 전환하는 스킨을 만들어서 사용중이였습니다.

조금 응용하시면 가능하시리라 생각되네요

list.skin.php에 form안에 추가

Copy
<select id="wr_option[<?echo $i?>]" name="wr_option[<?echo $i?>]">
	<option value="">노출</option>
	<option value="secret" <?if($list[$i]['wr_option']=="secret") echo "selected"; ?>>비밀글</option>
</select>

<ul class="btn_bo_adm">
	<li><input type="submit" name="btn_submit" value="선택삭제" onclick="document.pressed=this.value"></li>
	<li><input type="submit" name="btn_submit" value="선택복사" onclick="document.pressed=this.value"></li>
	<li><input type="submit" name="btn_submit" value="선택이동" onclick="document.pressed=this.value"></li>
	<li><input type="submit" name="btn_submit" value="선택수정" onclick="document.pressed=this.value"></li>
</ul>

 

www/bbs/board_list_update.php에 추가 

Copy
<?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';
}if($_POST['btn_submit'] == "선택수정"){//수정하기위해 추가코드
	include './change.php';
} else {
    alert('올바른 방법으로 이용해 주세요.');
}
?>

 

www/bbs/change.php 파일 생성 

Copy
<?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_option'][$i];
		$sql = " update $write_table set wr_option='$j' where wr_id='$k' ";
		$result = sql_query($sql);
	}
	goto_url('./board.php?bo_table='.$bo_table.'&amp;page='.$page.$qstr);
?>

답변에 대한 댓글 1개

<?php if($is_admin) {?> <td>
<?php if ($list_href || $is_checkbox || $write_href) { ?>
<?php if ($is_checkbox) { ?>
<form action="./board_list_update.php" method="post">
<select id="wr_1[<?echo $i?>]" name="wr_1[<?echo $i?>]">
<option value="">주문상태변경</option><option value="입고중" <?if($list[$i]['wr_1']=="입고중") echo "selected"; ?>>입고중</option>
</select>
<ul>
<li><input type="submit" name="btn_submit" value="선택수정" onclick="document.pressed=this.value"></li>
</ul>
</form>
</td>
<?php }}} ?>


이렇게 했더니 제일 상단에 값은 체크했을 때 넘어가는데

밑에 부터는 체크하라고 뜨네요 조언 좀 부탁드려도 될까요

답변을 작성하려면 로그인이 필요합니다.