크게 작게 인쇄

[그누보드]글쓰기에는 $wr_id 값을 사용하지 않습니다. - 에러 총정리


작업을 하면서 갑자기 "글쓰기에는 $wr_id 값을 사용하지 않습니다." 라는 에러를 뱉어 내는 일에 당황들 많이 하셨을 것이라 생각 합니다.

저같은경우에 분명 어제는 정상적으로 작동했는데. 오늘 스킨을 약간 수정하고 나니 갑자기 "글쓰기에는 $wr_id 값을 사용하지 않습니다." 라는 에러는 뱉어내네요!!!
분명 프로그램 로직을 손댄게 없이 테이블만 몇개 건드렸는데도!! 도저히 이해가 안됐습니다.
제가 그누보드 게시판을 뒤져보면서 알게된 총정리 솔루션을 알려 드리겠습니다.

먼저 글쓰기 폼 전송 로직을 좀 이해 하셔야 합니다.

skin/board/xxxxx/write.skin.php 를 수정해보시면 데이터를 입력 받는 폼의 이름이
<form name="fwrite" ~~~~> 입니다.
그런데 이 라인이 있는 코드에 한가지 없는 것이 있습니다. 원래는 필수 사항인 action='~~~~' 인 속성입니다.
만약에 이 action 값이 세팅이 안되어 있으면 자기 자신의 페이지로 submit 하게 됩니다.
이 속성을 넣지 않은 이유는 HTTPS 를 쓸것인지 HTTP 인지에 따라서 유동적으로 URL를 변경 하도록 하기 위해서 입니다.
어떻게 세팅이 되어지는지는 write.skin.php 소스의 function fwrite_submit(f){} 를 살펴 보시면

맨 마지막에
<?
    if ($g4[https_url])
        echo "f.action = '$g4[https_url]/$g4[bbs]/write_update.php';";
    else
        echo "f.action = './write_update.php';";
?>
이 코드가 있어서 세팅이 됩니다.

그런데 이 코드를 잘 보시면 submit 되어 지는 URL이 write_update.php 으로 가는 것을 볼수 있습니다.
그런데 "글쓰기에는 $wr_id 값을 사용하지 않습니다" 이 에러가 발생할때 alert 창을 끄지 마시고
브라우져에 있는 주소를 보시면 write.php?bo_table=xxxx 로 가시는걸 볼 수 있습니다.

즉 간단하게 말하자면 "글쓰기에는 $wr_id 값을 사용하지 않습니다" 에러가 발생 할때 문제는 form name=fwrite 의 action 값이 정상적으로 세팅이 안됐기 때문 입니다.

그러면 왜!!!! 이 action 값이 세팅이 안되어 지냐!! 그 이유는 앞에서 나온 function fwrite(f){ } 를 잘 살펴 보시면 알수 있습니다.

이 action 값을 세팅 하는 코드가 fwrite() 함수의 가장 마지막에 들어 있습니다.
즉 action 이 세팅이 안될때는 앞에 있는 코드 중에 어떤 코드가 에러가 있어서 에러가 난 이후의 스크립트들이 무시되어 지고 form 에는 이미 submit 명령이 내려 졌기 때문에 action 값이 세팅이 안되고 다시 자기 페이지로 submit 하게 됩니다
(이해가 되시나요?)

그렇기 때문에 어떤 분이 해결책으로 알려주신
<?
    if ($g4[https_url])
        echo "f.action = '$g4[https_url]/$g4[bbs]/write_update.php';";
    else
        echo "f.action = './write_update.php';";
    ?>
코드를 fwrite(f) {} 의 맨 앞으로 올리면 해결이 된다 라고 해주신 분이 있으십니다.
이 방법은 아주 효과적인 방법 입니다. 왜냐면 앞에 다른 코드가 없기 때문에 에러나는 코드가 없으므로 정상적으로 action 값이 세팅 되기 때문입니다.

그런데 이게 완전한 해결책은 아닙니다. 분명 아래 코드중에 에러나는 코드가 내재해 있기 때문입니다.


그러면 어떻게 에러가 있는 부분을 찾아 낼수 있느냐!

저는 원초적인 방법으로 띄어 내린 코드마다 alert("n"); 을 넣어 줍니다.

예를 보여드릴께요

----------------------------------------------------------
function fwrite_submit(f)
{
    /*
    var s = "";
    if (s = word_filter_check(f.wr_subject.value)) {
        alert("제목에 금지단어('"+s+"')가 포함되어있습니다");
        return false;
    }

    if (s = word_filter_check(f.wr_content.value)) {
        alert("내용에 금지단어('"+s+"')가 포함되어있습니다");
        return false;
    }
    */

    if (document.getElementById('char_count')) {
        if (char_min > 0 || char_max > 0) {
            var cnt = parseInt(document.getElementById('char_count').innerHTML);
            if (char_min > 0 && char_min > cnt) {
                alert("내용은 "+char_min+"글자 이상 쓰셔야 합니다.");
                return false;
            }
            else if (char_max > 0 && char_max < cnt) {
                alert("내용은 "+char_max+"글자 이하로 쓰셔야 합니다.");
                return false;
            }
        }
    }
alert("1");
    if (document.getElementById('tx_wr_content')) {
        if (!ed_wr_content.outputBodyText()) {
            alert('내용을 입력하십시오.');
            ed_wr_content.returnFalse();
            return false;
        }
    }
alert("2");
    <?
    if ($is_dhtml_editor) echo cheditor3('wr_content');
    ?>

    var subject = "";
    var content = "";
    $.ajax({
        url: "<?=$board_skin_path?>/ajax.filter.php",
        type: "POST",
        data: {
            "subject": f.wr_subject.value,
            "content": f.wr_content.value
        },
        dataType: "json",
        async: false,
        cache: false,
        success: function(data, textStatus) {
            subject = data.subject;
            content = data.content;
        }
    });
alert("3");
    if (subject) {
        alert("제목에 금지단어('"+subject+"')가 포함되어있습니다");
        f.wr_subject.focus();
        return false;
    }
alert("4");
    if (content) {
        alert("내용에 금지단어('"+content+"')가 포함되어있습니다");
        if (typeof(ed_wr_content) != "undefined")
            ed_wr_content.returnFalse();
        else
            f.wr_content.focus();
        return false;
    }
alert("5");
    if (!check_kcaptcha(f.wr_key)) {
        return false;
    }
alert("6");
    document.getElementById('btn_submit').disabled = true;
    document.getElementById('btn_list').disabled = true;

    <?
    if ($g4[https_url])
        echo "f.action = '$g4[https_url]/$g4[bbs]/write_update.php';";
    else
        echo "f.action = './write_update.php';";
    ?>
alert("7");   
    return true;
}

------------------------------------------------


에러 나는 코드 아래는 무시가 되기 때문에 alert("5")가 실행이 되고 6이 실행이 안되면 6 앞에 있는 코드가 에러인 것이겠죠!!!

이렇게 해서 해당 스크립트를 없애거나, 없앨수 없는 코드이면 정상작동하도록 디버깅 하시면 될것 같습니다.

저같은 경우는 목록 버튼을 다른 버튼으로 바꿨는데 그 과정에서
    document.getElementById('btn_list').disabled = true;
이 코드가 에러가 났습니다.
기존에 코드는
<a href="list.php?~~~~~" id="btn_list">asdfasd</a> 라고 되어 있었는데
저는 이 id="btn_list" 를 지워서 생겼던 에러 였습니다.

그래서 저는 이 id 값을 넣어 줬더니 정상적으로 동작 합니다.


결론
그동안 많은 분들이 솔루션을 주셨고, 그에 대한 댓글에 해봤는데 잘 되요, 또는 저는 왜 안되죠?? 이런 댓글들이 많았습니다.
이게 단지 구버전의 스킨이어서 그런 것이라기 보다는 스크립트 상의 에러를 해결 하면 구버전의 스킨에서도 작동 하게 됩니다.

많은 분들이 발생 하는 원인이 달라서 솔루션이 달랐을 뿐이구요,
그리고 action 을 맨 위로 가져오는것이 좋은 해결 방법이었던것 같습니다.

그동안 많은 내용 조언 받았으므로 저도 공유 하나 하고 갑니다~~
부디 많은 분들 해결 하시길~~ 바래요~~^^


ps. 그누보드 개발 하시는분
action 값을 js 에서 다루지 말고

<?
    if ($g4[https_url])
        $fwriteAction =  "$g4[https_url]/$g4[bbs]/write_update.php";
    else
        $fwriteAction =  "./write_update.php"; 
?>
<form name="fwrite" action = "{$fwriteAction}" ~~~~>

으로 변경 하는건 어떨까요?






※ 로그인 하시면 원본파일을 볼 수 있습니다. ※

0
코멘트 1
  • 새싹2단계 geta 2013-03-02 23:58:49

    0

    아....어렵다.....

    답글달기

자동등록방지 코드
그누보드팁 | 전체게시물 160
안내

포인트안내닫기

  • 글읽기0
  • 글쓰기100
  • 댓글쓰기50
  • 다운로드-500
그누보드팁리스트
번호 제목 글쓴이 날짜 조회 추천
 공지  텍스트 슈퍼맨 웹스터디 12-17 - -
160 파일첨부 +1 링크 슈퍼맨 웹스터디 12-07 4928 0
159 텍스트 +3 슈퍼맨 웹스터디 12-07 4320 0
158 텍스트 +1 슈퍼맨 웹스터디 01-10 5451 0
157 텍스트 슈퍼맨 웹스터디 12-14 5069 0
156 텍스트 링크 슈퍼맨 웹스터디 12-06 7200 0
155 텍스트 링크 슈퍼맨 웹스터디 11-27 5265 0
154 텍스트 링크 슈퍼맨 웹스터디 09-27 6243 0
153 텍스트 슈퍼맨 웹스터디 09-06 4944 0
152 텍스트 +2 링크 슈퍼맨 웹스터디 08-15 5197 1
151 파일첨부 링크 슈퍼맨 웹스터디 07-19 4557 0
150 파일첨부 링크 슈퍼맨 웹스터디 07-12 6243 0
149 파일첨부 링크 슈퍼맨 웹스터디 07-02 6014 0
148 파일첨부 +2 링크 슈퍼맨 웹스터디 06-06 4789 0
147 텍스트 슈퍼맨 웹스터디 04-02 4809 0
146 파일첨부 링크 슈퍼맨 웹스터디 03-28 4966 0
145 파일첨부 링크 슈퍼맨 웹스터디 03-28 4962 0
144 파일첨부 +1 슈퍼맨 웹스터디 03-19 4808 0
143 파일첨부 슈퍼맨 웹스터디 03-13 4929 0
142 텍스트 +4 슈퍼맨 웹스터디 03-12 6968 0
141 텍스트 링크 슈퍼맨 웹스터디 02-15 5316 0