아이디에 특수문자가 들어가면 register_form_update.php가 제대로 작동하지 않는건

아이디에 특수문자가 들어가면 register_form_update.php가 제대로 작동하지 않는건

QA

아이디에 특수문자가 들어가면 register_form_update.php가 제대로 작동하지 않는건

본문

아이디에 특수문자가 들어간채로 회원가입을 하면

쿼리에 정상적으로 데이터 등록은 되는데

 register_form_update.php에서

 

if ($w == '') {

    goto_url(G5_HTTP_BBS_URL.'/register_result.php');

 

이부분 register_result.php로 이동하는부분이 작동하지 않습니다.

특수문자 없이 했을땐 정상 작동하는데

아이디를 이메일 형식으로 진행중이라서요 ㅠㅠ

도무지 질문글에 찾아봐도 비슷한 내용이 나오지않아 어떻게 하면 될지 문의드립니다.

이 질문에 댓글 쓰기 :

답변 5

다음과 같이 해보시는건 어떨까 합니다.

 

url 인코딩


header('Content-Type: text/html; charset=utf-8');
 
$encoded_id = urlencode($user_id); // $user_id에는 특수문자가 포함된 아이디가 들어갑니다.
goto_url(G5_HTTP_BBS_URL.'/register_result.php?id=' . $encoded_id);

 

위와 같이 해도 해결이 되지 않으신다면 디버깅 및 오류메세지를 확인하셔서 해결하시는것도 하나의 해결방법 일 것으로 생각합니다.

 

디버깅 출력


if ($w == '') {
    $redirect_url = G5_HTTP_BBS_URL.'/register_result.php';
    echo "Redirecting to: $redirect_url"; // 디버깅용 출력
    goto_url($redirect_url);
}

 

로그확인


error_reporting(E_ALL);
ini_set('display_errors', 'On');

 

아이디에 특수문자가 들어갔다면, get_member 함수에서 숫자와 영문 그리고 _ 를 제외한 문자를 걸러내기 때문에 로그인이 되지 않습니다.
때문에 회원가입 후 result 페이지로 넘어가기 전에 로그인이 풀려버려서 메인페이지로 이동하게 됩니다.
때문에 이메일형식을 아이디로 사용하고 자 한다면,
common.lib.php 파일의 get_member 함수의 정규식을

preg_match("/[^0-9a-z@_.]/i", $mb_id) 정도로 수정해 주시면 될 것 같습니다.

// 회원 정보를 얻는다.
function get_member($mb_id, $fields='*', $is_cache=false)
{
    global $g5;
   
    if (preg_match("/[^0-9a-z_]+/i", $mb_id))
        return array();

    static $cache = array();

    $key = md5($fields);

    if( $is_cache && isset($cache[$mb_id]) && isset($cache[$mb_id][$key]) ){
        return $cache[$mb_id][$key];
    }

    $sql = " select $fields from {$g5['member_table']} where mb_id = TRIM('$mb_id') ";

    $cache[$mb_id][$key] = run_replace('get_member', sql_fetch($sql), $mb_id, $fields, $is_cache);

    return $cache[$mb_id][$key];
}




이미 common.lib
get_member 쪽은 이렇게 되어있는데 어느부분을 수정해야할까용??...ㅠㅠㅠ

if (preg_match("/[^0-9a-z_]+/i", $mb_id))
        return array();

이 부분에 걸려서 회원정보가 빈배열로 리턴이 되므로,
회원 로그인이 풀리게 됩니다.

preg_match("/[^0-9a-z@_.]/i", $mb_id) 정도로 수정해 주시면 될 것 같네요.

안녕하세요.

/bbs/ajax.mb_id.php 파일을 보시면 관련 함수들을 수정을 하셔야 할거 같습니다~

 

if ($msg = empty_mb_id($mb_id))     die($msg);
if ($msg = valid_mb_id($mb_id))     die($msg);
if ($msg = count_mb_id($mb_id))     die($msg);
if ($msg = exist_mb_id($mb_id))     die($msg);
if ($msg = reserve_mb_id($mb_id))   die($msg);
 

 

if ($msg = empty_mb_id($mb_id))    die($msg);
if ($msg = valid_mb_id($mb_id))    die($msg);
if ($msg = count_mb_id($mb_id))    die($msg);
if ($msg = exist_mb_id($mb_id))    die($msg);
if ($msg = reserve_mb_id($mb_id))  die($msg);


이부분을 전부 삭제해도 동일하게
register_result.php로 이동하지 않고
바로 메인페이지로 튕겨나갑니다 ㅠㅠ

중간에 하나씩 브레이크를 걸어서 에러 코드를 찍으면서 확인을 해야 할거 같습니다~ (페이지 및 콘솔)

<?php

error_reporting( E_ALL );

ini_set( "display_errors", 1 );

?>

register_form_update.php
에 해당 내용을 삽입하고 다시 돌려봤는데

너무 순식간에 페이지가 메인페이지로 넘어가져서 콘솔에 제대로 뜨는지 모르겠습니당....
제가 너무 문외한이라 조금만 더 설명가능할까요....... 죄송합니다
왜 특수문자만 넣으면 이럴까요....


https://sir.kr/qa/404384
전에 동일한 분도 계셨는데 그냥 특수문자 계정을 삭제하는식으로 처리된것 밖에 못보겠더라구요 ㅠㅠ,,,,

당연한것 아닌가요?? 메일형식은 특수문자를쓸수없습니다.

 

알파벳 (a-z, A-Z) 및 숫자 (0-9) 만 허용합니다. 그렇니 특수문자가 들어간다면 거부해야하는게 맞지요.

 

네 그래서 현재 회원 폼에서는 이메일 로그인 하기 위한 로직이 별도로 필요한다는거에요..관련 스킨도 있으니 참조하시면됩니다.

https://sir.kr/g5_skin?sca=&sfl=wr_subject%7C%7Cwr_content&stx=%EC%9D%B4%EB%A9%94%EC%9D%BC

답변을 작성하시기 전에 로그인 해주세요.
전체 129,406 | RSS
QA 내용 검색

회원로그인

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