테스트 사이트 - 개발 중인 베타 버전입니다

휴대폰인증문제 - 아이코드? ajax? 채택완료

마리오스 6년 전 조회 6,088

올려주신 아래 소스코드를 감사한맘으로 적용중입니다

https://sir.kr/g5_skin/20988" rel="nofollow noreferrer noopener" target="_blank">https://sir.kr/g5_skin/20988

 

구버전 그누보드(5.3.1)에서 작성된 코드다보니 제버전(5.3.2.6)에 맞추어 sms.php, register_form.php 등 변경된 부분만 적용하였습니다

 

그리고 phpMyadmin에서 a_num이 4자리로 되어있는걸 5자리로도 수정하였구요

 

그런데 계속 입력한 인증번호가 일치하지 않는다고 나오네요.

실제로 phpMyadmin에서 확인한 a_num을 동일하게 넣었는데도 말이에요..

 

 

코드를 좀 더 살펴보니 

ajax_send.php가 제대로 작동하지 않는것같다는 느낌이 들었습니다.

 

참고로 ajax_send.php는 아래와 같은데요.

 

<?php

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

 

$a_auth      = trim($_POST['a_auth']);

$recv_number = trim($_POST['mb_hp']);

 

$sql = "select count(*) as cnt from sms_auth where a_hp='$recv_number' and a_auth>'".(time()-60*10)."' "; // 현재 10분

입니다. 추후 10을 변경하시면 됩니다.

$row = sql_fetch($sql);

if ($row[cnt]>5){ //제한 횟수

        echo "F";

}else{

        if($config['cf_sms_use'] == 'icode') {

 

                include_once(G5_LIB_PATH.'/icode.sms.lib.php');

 

                $a_num = rand(10000, 99999);

 

                $sms_content = "본인확인 인증번호[".$a_num.']를 화면에 입력해주세요';

                $send_number = preg_replace('/[^0-9]/', '', $sms5['cf_phone']);

 

                if($recv_number) {

                        sql_query("insert into sms_auth set a_auth='$a_auth', a_num='$a_num', a_hp='$recv_number', a_regdate=now()");

 

                        $SMS = new SMS; // SMS 연결

                        $SMS->SMS_con($config['cf_icode_server_ip'], $config['cf_icode_id'], $config['cf_icode_pw'], $config['cf_icode_server_port']);

                        $SMS->Add($recv_number, $send_number, $config['cf_icode_id'], iconv("utf-8", "euc-kr", stripslashes($sms_content)), "");

                        $SMS->Send();

                }

 

                echo "Y";

                exit;

        }else{

                echo "N";

        }

}

?>

 

여기서는 각 경우에 대해 echo "F", "Y", "N"로 처리하는 반면 이 결과값이 sms.php로 제대로 넘어오지 않아 sms.php에서 제대로 작동하지 않는듯합니다 ㅜㅜ 

예컨대 sms.php에는 아래와 같은 코드가 있는데요.

 

function authSend(){

        var f1 = document.sForm;

        $.post("/bbs/ajax_send.php", $("#sForm").serialize(),function(data){

                if (data=="F"){

                        alert("단시간에 너무 많은 요청을 하셨습니다.\n\n잠시후 이용 부탁드립니다.");

                }else{

                        alert("요청하신 휴대폰으로 '인증번호'가 발송되었습니다.");

                        f1.sendYN.value = "Y";

                        f1.auth_num.focus();

                }

        });     

}

 

data값이 F일때 "단시간에 ~~"라는 alert를 띄워야하는데 그냥 무조건 else로 처리되더군요..

 

분명 예전댓글들을 보니 다들 잘 된다하셧는데..

혹시 버전이 구버전(5.3.1)에서 신버전(5.3.2.6) 그누보드가 되면서 위와 같은 ajax(?)가 안먹히게 되었을까요?

아니면 다른문제가 있는걸까요? 참고로 aws 사용중입니다...

답변달아주실분들께 미리 감사드리며..이 글이 후에 검색하시는분들께도 도움이 되면 좋겠습니다.

 

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

답변 7개

6년 전

if ($row['a_num']==$auth_num){

감싸고 했는데도 인증번호 오류로 나옵니다.

그리고 cnt도 감싸줬는데도 인증번호 오류가 납니다.

어떻게 해결을 해야될까요 ㅠㅠ

로그인 후 평가할 수 있습니다

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

6년 전

참고 많이 되었습니다

로그인 후 평가할 수 있습니다

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

같은 원리로 ajax_send의 cnt도 'cnt'로 감싸줘야합니다

로그인 후 평가할 수 있습니다

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

해결하였습니다... 자문자답이라 민망하지만ㅜ좀 써보자면..

이는 php 버전이 업데이트되면서 발생한 문제로 아래 링크를 참고하시면 됩니다..

https://www.happyjung.com:6001/lecture/2816

 

따라서 ajax_check.php의 

 

if ($row[a_num]==$auth_num){

        echo "Y";

부분의 a_num을 'a_num'으로 변경하였더니 잘 작동합니다..

로그인 후 평가할 수 있습니다

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

*나중에 정보를 찾는 분들 보시라고 댓글 남깁니다.

sms.php 에서 data == Y or N 로 판단을 하는데 이부분이 이상한것같아서 alert("인증번호가 일치하지 ~~" + data);로 data를 출력시도해보았습니다.

그러하였더니 아래와 같았습니다.

 

입력하신 '인증번호'가 일치하지 않습니다.<br />
<b>Warning</b>:  Use of undefined constant a_num - assumed 'a_num' (this will throw an Error in a future version of PHP) in <b>/opt/lampp/htdocs/bbs/ajax_check.php</b> on line <b>10</b><br />
N

로그인 후 평가할 수 있습니다

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

L
6년 전

디비에 인증번호 및 휴대폰번호가 정상으로 입력되고 인증번호가 발송된다면 위 파일들의 문제가 아닙니다. 인증번호를 체크하는 파일을 살펴보셔야합니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

마리오스
6년 전
네,, 번호는 정상적으로 db에 입력되는데
ajax_send.php에서 cnt>5 일 경우 "단시간너무많이입력~~"이라는 메세지가 떠야 하는데 이것조차 작동하지않아 ajax_send.php를 의심하였습니다
일단 인증번호체크하는곳도 살펴보겠습니다~~
마리오스
6년 전
인증번호체크하는 부분이 ajax_check.php인데 일치하는경우 echo "Y" 그렇지않은경우 echo "N"로 되어있네요.
테스트를 위해 일치하는경우 echo "N", 그렇지않은경우 "Y"로 바꿔보았는데도 번호가 일치하지않는다고 뜨는걸로 보아 그 전단계를 살펴봐야할지 고민입니다..

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

6년 전

5.3.2 로 바뀌었다고 해서 갑자기 ajax가 안 될리는 없을 겁니다.

최근 버전에 해당 팁을 적용해본 적이 있었는데 자리수 문제 말고는 별다른 문제가 없었던걸로 기억합니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

마리오스
6년 전
네 최근버전에서 적용성공하셧다는 댓글을 보니 좀 더 도전 의지가 생기네요..
작은별님도 저 skin파일 중 일부를 수동으로 합치신거지요?

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

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

로그인