view.skin.php 에서 여분필드 정보 업데이트 하기 질문입니다. > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

view.skin.php 에서 여분필드 정보 업데이트 하기 질문입니다. 정보

view.skin.php 에서 여분필드 정보 업데이트 하기 질문입니다.

본문

글읽기 상태에서 여분필드 정보를 업데이트 하려고 합니다.

처음 질문은 http://sir.co.kr/bbs/board.php?bo_table=g4_qa&wr_id=260046 이구요.
이 때는 업데이트 파일에 뭐가 잘못이 있는지 빈 화면만 나와서 균이님의 도움으로
어느 정도 문제가 수습?된 듯 한데요.

하려는 기능은 Q&A 게시판 글읽기 상태에서 작성자(질문자)분이 자신의 글 상태를
해결 또는 진행 상태로 바로 설정하는 것입니다. 여기서 여분필드 wr_12를 사용해요.

제가 그누보드 소스 이것 저것 참고해서 만들어 봤는데 막상 여분필드(wr_12) 정보는
업데이트 되지 않아 문의 드립니다.

view.skin.php에서 여분필드 wr_12의 정보를 업데이트 하려면 어떻게 해야 하나요?


view.skin.php

<form id="s_status" name="s_status" method="post" action="<?php echo $board_skin_path; ?>/view_solved_update.php" enctype="multipart/form-data">
<input type="hidden" name="bo_table" value="<?php echo $bo_table; ?>" />
<input type="hidden" name="wr_id" value="<?php echo $view['wr_id']; ?>" />
<input type="hidden" name="wr_12" id="wr_12" value="" />
	<fieldset class="qna_status ac">
		<legend>문제해결상태</legend>
		<label for="unsolved"><input type="radio" id="unsolved" name="s_status" value="unsolved"<?php if($view['wr_12'] == "unsolved") echo " checked=\"checked\""; ?> /> 진행중</label>
		<label for="solved"><input type="radio" id="solved" name="s_status" value="solved"<?php if($view['wr_12'] == "solved") echo " checked=\"checked\""; ?> /> 해결됨</label>
		<button type="submit" id="s_process" class="common_single_btn" />처리하기</button>
	</fieldset>
</form>

<script type="text/javascript">
//<![CDATA[
$(function() {
	$("input[type=radio]").on("click", function()
	{
		$("#wr_12").val($(this).val());
	});
});
//]]>
</script>



view_solved_update.php

<?php
include_once("./_common.php");

	if (!($bo_table && $wr_id))
		die("값이 제대로 넘어오지 않았습니다.");

	$ss_name = "ss_view_{$bo_table}_{$wr_id}";
	if (!get_session($ss_name))
		die("해당 게시물에서만 해결상태를 설정하실 수 있습니다.");

	$row = sql_fetch(" select count(*) as cnt from {$g4[write_prefix]}{$bo_table} ", FALSE);
	if (!$row[cnt])
		die("존재하는 게시판이 아닙니다.");

	if($write['mb_id'] != $member['mb_id'])
		die("타회원의 글에는 해결상태를 설정하실 수 없습니다.");

	if ($board['bo_19'] != "Y" && ($wr_12 == "solved" || $wr_12 == "unsolved"))
		die("이 게시판은 해결상태설정 기능을 사용하지 않습니다.");

	if ($wr_12 == "solved")
		$status = "해결됨";
	else
		$status = "진행중";

	alert("이 글을 [$status] 으로 설정하셨습니다.");

	if($wr_12  != "")
	{
		sql_query(" update {$g4[write_prefix]}{$bo_table} set wr_12 = '$wr_12' where wr_id = '$wr[wr_id]' ");
	}
	else
	{
		sql_query(" insert into {$g4[write_prefix]}{$bo_table} set wr_12 = '$wr_12' ");
	}

goto_url("./board.php?bo_table=$bo_table&wr_id=$wr_id");
?>



view_solved_update.php 이 파일이 업데이트를 정상적으로 못하는건지... 제가 뭔가를 잘못한거 같은데
초보라서 잘 모르겠습니다. ^^;;;;

부디 도움 부탁드리겠습니다.

댓글 전체

슈와이님 답변 고맙습니다. ^^
지적해 주신 오타부분과 if 부분을 수정했으나 역시 필드정보가 업데이트 되지 않는거 같아요.
뭔가 제가 놓치고 있는게 있는지 모르겠습니다. ㅠ ㅠ
슈와이님 ^^ 와 빠른 답변 감사합니다.
jQuery 부분과 쿼리 부분은 변경해 봤습니다.
jQuery 부분은 수정전이나 수정후나 모두 정상적으로 작동합니다.
(<input type="hidden" name="wr_12" id="wr_12" value="" /> 의 밸류값이 변함)

그런데 역시나 필드정보가 업데이트 되지 않습니다. ㅠ ㅠ
쿼리 업데이트 부분에 문제가 없는 것 같은데...
<?php
include_once("./_common.php");

if (!($bo_table && $wr_id))
die("값이 제대로 넘어오지 않았습니다.");

// 세션 처리 삭제
// 게시판 유무 삭제 - 보기 페이지이니 이미 존재 하는 게시판

if($write['mb_id'] != $member['mb_id'])
die("타회원의 글에는 해결상태를 설정하실 수 없습니다.");

      // 이 부분은 bo_19 존재 하는지 추가 점검 후 아래조건 수정 - 유지해 둠
if ($board['bo_19'] != "Y" && ($wr_12 == "solved" || $wr_12 == "unsolved"))
die("이 게시판은 해결상태설정 기능을 사용하지 않습니다.");


if ($wr_12 == "solved")
$status = "해결됨";
else
$status = "진행중";

if($wr_12) {
sql_query(" update {$g4[write_prefix]}{$bo_table} set wr_12 = '$wr_12' where wr_id = '$wr_id' "); // '$wr[wr_id]' "); -> $wr_id 로 수정 ★★
} // insert 조건 삭제

alert("이 글을 [$status] 으로 설정하셨습니다."); // 알림 메시지 처리 위치 이동 ★★
goto_url("./board.php?bo_table=$bo_table&wr_id=$wr_id");
?>
사노라가노라님 ^^ 답변 고맙습니다.

일단 세션부분은 이미 삭제했구요.(댓글이 3개 이상 달려서 수정이 안된 상태)

알림메시지는 옮겨서 해 봤습니다.
쿼리 부분은 슈와이님께서 지적해 주셔서 $wr_id 로 수정된 상태입니다.

그런데도 안되는 상태에요...

현재 수정된 내용(view_solved_update.php)

<?php
include_once("./_common.php");

if (!($bo_table && $wr_id))
die("값이 제대로 넘어오지 않았습니다.");

$row = sql_fetch(" select count(*) as cnt from {$g4[write_prefix]}{$bo_table} ", FALSE);
if (!$row[cnt])
die("존재하는 게시판이 아닙니다.");

if($write['mb_id'] != $member['mb_id'])
die("타회원의 글에는 해결상태를 설정하실 수 없습니다.");

if ($board['bo_19'] != "Y" && ($wr_12 == "solved" || $wr_12 == "unsolved"))
die("이 게시판은 해결상태설정 기능을 사용하지 않습니다.");

if ($wr_12 == "solved")
$status = "해결됨";
else
$status = "진행중";

if($wr_12)
{
sql_query(" update {$g4[write_prefix]}{$bo_table} set wr_12 = '$wr_12' where wr_id = '$wr_id' ");
}
else
{
sql_query(" insert into {$g4[write_prefix]}{$bo_table} set wr_12 = '$wr_12' ");
}

alert("이 글을 [$status] 으로 설정하셨습니다.");

goto_url("./board.php?bo_table=$bo_table&wr_id=$wr_id");
?>


쿼리도 어느 정도 맞는 것 같은데...
이제 의심이 가는건 혹시 글쓰기 상태가 아니라 글읽기 상태라 자신의 글에 대한
디비 수정 권한이 없어서 그런거 아닐까 싶기도 하네요. write_updata.php를 보면
쿼리 업데이트 할 때 패스워드 부분이 들어가 있더라구요.

bbs/write_update.php 이걸 참고해 보면...

$sql_password = $wr_password ? " , wr_password = '".sql_password($wr_password)."' " : "";

$sql_ip = "";
if (!$is_admin)
$sql_ip = " , wr_ip = '$_SERVER[REMOTE_ADDR]' ";

$sql = " update $write_table
set ca_name = '$ca_name',
wr_option = '$html,$secret,$mail',
... 생략
wr_11 = '$wr_11',
... 생략
$sql_ip
$sql_password <---- 이 것...
  where wr_id = '$wr[wr_id]' ";
sql_query($sql);
테스트 해 보니 익스10은 on 오류 나던데요.. (click으로 변경)
맨 아래 $_POST 추가참고 ★ register_globals 설정 차이 ★


<form id="s_status" name="s_status" method="post" action="<?php echo $board_skin_path; ?>/view_solved_update.php" enctype="multipart/form-data">
<input type="hidden" name="bo_table" value="<?php echo $bo_table; ?>" />
<input type="hidden" name="wr_id" value="<?php echo $view['wr_id']; ?>" />
<input type="hidden" name="wr_12" id="wr_12" value="" />
<fieldset class="qna_status ac">
<legend>문제해결상태</legend>
<label for="unsolved"><input type="radio" id="unsolved" name="s_status" value="unsolved"<?php if($view['wr_12'] == "unsolved") echo " checked="checked""; ?> /> 진행중</label>
<label for="solved"><input type="radio" id="solved" name="s_status" value="solved"<?php if($view['wr_12'] == "solved") echo " checked="checked""; ?> /> 해결됨</label>
<button type="submit" id="s_process" class="common_single_btn" />처리하기</button>
</fieldset>
</form>

<script type="text/javascript">
//<![CDATA[
$(document).ready(function(){
$("input[type=radio]").click( function()
{
$("#wr_12").val($(this).val());
});
});
//]]>
</script>




<?php
include_once("./_common.php");

if (!($bo_table && $wr_id))
die("값이 제대로 넘어오지 않았습니다.");

if ($wr_12 == "solved")
$status = "해결됨";
else
$status = "진행중";

if($wr_12) {
sql_query(" update {$g4[write_prefix]}{$bo_table} set wr_12 = '$wr_12' where wr_id = '$wr_id' ");
}

alert("이 글을 [$status] 으로 설정하셨습니다.");
goto_url("./board.php?bo_table=$bo_table&wr_id=$wr_id");
?>

위 내용만으로 테스트 해 보신 후 update 페이지 필요한 소스는 결과 체크 후 추가.보완 해 보세요.


# 아래 처럼 두 줄 주석 처리하고 실제 값 넘어오는지 찍어 보세요.
echo $wr_10;
//alert("이 글을 [$status] 으로 설정하셨습니다.");
//goto_url("./board.php?bo_table=$bo_table&wr_id=$wr_id");


결과가 안 찍히면
<?
include_once("./_common.php");
$wr_12 = $_POST[wr_12]; // 추가 후 테스트
사노라가노라님 ^^ 필드업데이트는 되는 것을 확인했습니다.

$wr_12 = $_POST[wr_12]; // 추가 후 테스트 <-- 이 부분은 넣지 않았습니다.
결과값은(wr_12)은 정상적으로 view_solved_update.php로 넘어 오고 있네요.

그런데 정확한 이유는 모르겠으나
goto_url("./board.php?bo_table=$bo_table&wr_id=$wr_id");  이걸로 다시 글읽기로
돌아가 페이지 리로드 상태가 되면 설정전 상태로 라디오 버튼이 체크되어 있습니다.
소스를 보면 input hidden wr_12 의 값도 설정 이전값이구요.

그래서 페이지를 수동으로 리로드 하면 정상적으로 보이네요. 브라우저 캐쉬 문제인거
같은데... 결과적으로 일단 필드는 업데이트가 정상적으로 됩니다.

설정 후 다시 읽기 페이지로 가면 왜 수정된 설정상태가 안되는지는 해결해야 할 부분이네요.

도움 주셔서 정말 고맙습니다. ^^


ps : php alert을 사용하지 않고 스크립트 alert을 사용하니까 정상적으로 보이네요. ^^
전체 66,558 |RSS
그누4 질문답변 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT