ID가 한글인 사람에게 ID변경을 유도 한번더 질문을 드립니다.

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
ID가 한글인 사람에게 ID변경을 유도 한번더 질문을 드립니다.

QA

ID가 한글인 사람에게 ID변경을 유도 한번더 질문을 드립니다.

본문

다름이 아니라 

로그인한 회원ID가 한글이라면 bbb.php 페이지로 이동을 하고 싶습니다. 

 

if ( preg_match('/[^0-9a-zA-Z]+/',$member[mb_id]) { 

    header("location: bbb.php");

이렇게 하면 되나요?

 

그 이유는 

지금까지 관리를 하면서 한글도 가능하게 했는데 업데이트마다 변경을 해야하는 어려움이 있습니다. 

그래서 한글ID를 사용하는 사람을 ID변경 페이지로 유도를 하고 싶습니다. 

 

 

그럼 즐거운 하루 되세요.

이 질문에 댓글 쓰기 :

답변 2

if ( !preg_match('/^[0-9a-zA-Z]+$/',$member[mb_id]) ) { 

    header("location: bbb.php");

}

 

preg_match('/^[0-9a-zA-Z]+$/',$member[mb_id]) 이건 숫자, 영소문, 영대문자만 있냐? 라는 질문이구요. 

숫자, 영문자(소/대) 만 있으면 1을 반환하고 다른 문자가 껴있으면 0을 반환합니다.

 

!preg_match 앞에 !는 preg_match 가 참이면 거짓으로 바꾸는거고, 거짓이면 참으로 바꾸는 역활을 합니다. 

 

답변에 감사드립니다.

bbs/login_check.php 파일에

if ( !preg_match('/^[0-9a-zA-Z]+$/',$member[mb_id]) ) {
      header("location: bbb.php");
}
위와 추가하니 로그인이 되면서 이동은 하지 않네요. ㅠㅠ

/bbs/login_check.php 12번줄 보면

$mb = get_member($mb_id); 이렇게 되어있죠?

$member['mb_id'] 가 아니라
$mb['mb_id'] 쓰세요.

그리고 header는 맨 위에 와야합니다.

이 맨위에 와야한다는게 무조건 코드 위에 와야한다는것은 아니구요. header 호출하기 전에 위쪽에서 echo 와 같은 출력하는 구문이 있으면 안됩니다.

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

$g5['title'] = "로그인 검사";

$mb_id      = trim($_POST['mb_id']);
$mb_password = trim($_POST['mb_password']);

if (!$mb_id || !$mb_password)
    alert('회원아이디나 비밀번호가 공백이면 안됩니다.');

$mb = get_member($mb_id);

if ( !preg_match('/^[0-9a-zA-Z]+$/',$mb[mb_id])) {
      header("location: 도메인/gnu4/bbs/member_confirm.php?url=register_form.php");
}

// 가입된 회원이 아니다. 비밀번호가 틀리다. 라는 메세지를 따로 보여주지 않는 이유는
// 회원아이디를 입력해 보고 맞으면 또 비밀번호를 입력해보는 경우를 방지하기 위해서입니다.
// 불법사용자의 경우 회원아이디가 틀린지, 비밀번호가 틀린지를 알기까지는 많은 시간이 소요되기 때문입니다.
//if (!$mb['mb_id'] || !check_password($mb_password, $mb['mb_password'])) {
//    alert('가입된 회원아이디가 아니거나 비밀번호가 틀립니다.\\n비밀번호는 대소문자를 구분합니다.');
//}

//회원로그인에 관련된 수정내용
function sql_password2($value)
{
    // mysql 4.0x 이하 버전에서는 password() 함수의 결과가 16bytes
    // mysql 4.1x 이상 버전에서는 password() 함수의 결과가 41bytes
    $row = sql_fetch(" select old_password('$value') as pass ");

    return $row['pass'];
}

// 비밀번호 비교
function check_old_password($pass, $hash)
{
$password = sql_password2($pass);
    return ($password === $hash);
}

if (!$mb['mb_id'] || (!check_password($mb_password, $mb['mb_password']) && !check_old_password($mb_password, $mb['mb_password']))) {
    alert('가입된 회원아이디가 아니거나 비밀번호가 틀립니다.\\n비밀번호는 대소문자를 구분합니다.');
}

if(check_old_password($mb_password, $mb['mb_password'])) {
$sql= " update {$g5['member_table']} set mb_password = password('$mb_password') where mb_id = '{$mb['mb_id']}' ";
    sql_query($sql);
}

// 차단된 아이디인가?
if ($mb['mb_intercept_date'] && $mb['mb_intercept_date'] <= date("Ymd", G5_SERVER_TIME)) {
    $date = preg_replace("/([0-9]{4})([0-9]{2})([0-9]{2})/", "\\1년 \\2월 \\3일", $mb['mb_intercept_date']);
    alert('회원님의 아이디는 접근이 금지되어 있습니다.\n처리일 : '.$date);
}

// 탈퇴한 아이디인가?
if ($mb['mb_leave_date'] && $mb['mb_leave_date'] <= date("Ymd", G5_SERVER_TIME)) {
    $date = preg_replace("/([0-9]{4})([0-9]{2})([0-9]{2})/", "\\1년 \\2월 \\3일", $mb['mb_leave_date']);
    alert('탈퇴한 아이디이므로 접근하실 수 없습니다.\n탈퇴일 : '.$date);
}

if ($config['cf_use_email_certify'] && !preg_match("/[1-9]/", $mb['mb_email_certify'])) {
    $ckey = md5($mb['mb_ip'].$mb['mb_datetime']);
    confirm("{$mb['mb_email']} 메일로 메일인증을 받으셔야 로그인 가능합니다. 다른 메일주소로 변경하여 인증하시려면 취소를 클릭하시기 바랍니다.", G5_URL, G5_BBS_URL.'/register_email.php?mb_id='.$mb_id.'&ckey='.$ckey);
}

@include_once($member_skin_path.'/login_check.skin.php');

// 회원아이디 세션 생성
set_session('ss_mb_id', $mb['mb_id']);
// FLASH XSS 공격에 대응하기 위하여 회원의 고유키를 생성해 놓는다. 관리자에서 검사함 - 110106
set_session('ss_mb_key', md5($mb['mb_datetime'] . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']));

// 포인트 체크
if($config['cf_use_point']) {
    $sum_point = get_point_sum($mb['mb_id']);

    $sql= " update {$g5['member_table']} set mb_point = '$sum_point' where mb_id = '{$mb['mb_id']}' ";
    sql_query($sql);
}

// 3.26
// 아이디 쿠키에 한달간 저장
if ($auto_login) {
    // 3.27
    // 자동로그인 ---------------------------
    // 쿠키 한달간 저장
    $key = md5($_SERVER['SERVER_ADDR'] . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . $mb['mb_password']);
    set_cookie('ck_mb_id', $mb['mb_id'], 86400 * 31);
    set_cookie('ck_auto', $key, 86400 * 31);
    // 자동로그인 end ---------------------------
} else {
    set_cookie('ck_mb_id', '', 0);
    set_cookie('ck_auto', '', 0);
}

if ($url) {
    // url 체크
    check_url_host($url);

    $link = urldecode($url);
    // 2003-06-14 추가 (다른 변수들을 넘겨주기 위함)
    if (preg_match("/\?/", $link))
        $split= "&amp;";
    else
        $split= "?";

    // $_POST 배열변수에서 아래의 이름을 가지지 않은 것만 넘김
    foreach($_POST as $key=>$value) {
        if ($key != 'mb_id' && $key != 'mb_password' && $key != 'x' && $key != 'y' && $key != 'url') {
            $link .= "$split$key=$value";
            $split = "&amp;";
        }
    }
} else  {
    $link = G5_URL;
}

goto_url($link);
?>

위처럼 임시로 수정으로 넘어가게 했는데 로그인은 되는데 링크로 찾아가지를 못하네요.
alert('ID가 한글입니다. 영문으로 변경하세요.');
이렇게 alert 함수를 사용하니 창이 뜨기는 합니다.
ㅠㅠ

if ( !preg_match('/^[0-9a-zA-Z]+$/',$mb[mb_id])) {
 alert('한글 ID를 사용하고 있습니다..\\n\\영문으로 변경해 주십시오.','도메인/gnu4/bbs/register.php');
}

이렇게 했습니다. 한글아이디로 접속을 하니 팝업창이 나오면서 확인버튼 클릭시 가입화면으로 가네요.
근데 로그인이 안되는 이유는 뭘까요?

if ( !preg_match('/^[0-9a-zA-Z]+$/',$mb[mb_id])) {
 alert('한글 ID를 사용하고 있습니다..\\n\\영문으로 변경해 주십시오.','도메인/gnu4/bbs/register.php');
}

그누에 선언된 alert 함수는 메세지 출력하고 두번째 인자인 주소로 페이지 이동하고 해당 페이지 프로세스를 종료 시켜버립니다. 그러므로  아래 로그인 처리하는 부분을 처리 안하고 페이지 이동하는거예요.


로그인 처리해서 로그인 정보 session 다 남기고 이동하도록 하려면 맨 아래로 옮겨야합니다. 그러니 체크하는 코드를 맨 아래로 옮겨주세요.

preg_match('/[가-힣]/', 'gㄱks한d글e') 로 한글 포함 여부를 검사해도 되겠네요.

그리고 리다이렉트 후 불필요한 로직 실행을 막기 위해 header 함수 아래에 exit 넣는 걸 추천합니다. 

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

회원로그인

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