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 가 참이면 거짓으로 바꾸는거고, 거짓이면 참으로 바꾸는 역활을 합니다.
답변에 대한 댓글 6개
$mb = get_member($mb_id); 이렇게 되어있죠?
$member['mb_id'] 가 아니라
$mb['mb_id'] 쓰세요.
그리고 header는 맨 위에 와야합니다.
이 맨위에 와야한다는게 무조건 코드 위에 와야한다는것은 아니구요. header 호출하기 전에 위쪽에서 echo 와 같은 출력하는 구문이 있으면 안됩니다.
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= "&";
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 = "&";
}
}
} else {
$link = G5_URL;
}
goto_url($link);
?>
위처럼 임시로 수정으로 넘어가게 했는데 로그인은 되는데 링크로 찾아가지를 못하네요.
alert('ID가 한글입니다. 영문으로 변경하세요.');
이렇게 alert 함수를 사용하니 창이 뜨기는 합니다.
ㅠㅠ
alert('한글 ID를 사용하고 있습니다..\\n\\영문으로 변경해 주십시오.','도메인/gnu4/bbs/register.php');
}
이렇게 했습니다. 한글아이디로 접속을 하니 팝업창이 나오면서 확인버튼 클릭시 가입화면으로 가네요.
근데 로그인이 안되는 이유는 뭘까요?
alert('한글 ID를 사용하고 있습니다..\\n\\영문으로 변경해 주십시오.','도메인/gnu4/bbs/register.php');
}
그누에 선언된 alert 함수는 메세지 출력하고 두번째 인자인 주소로 페이지 이동하고 해당 페이지 프로세스를 종료 시켜버립니다. 그러므로 아래 로그인 처리하는 부분을 처리 안하고 페이지 이동하는거예요.
로그인 처리해서 로그인 정보 session 다 남기고 이동하도록 하려면 맨 아래로 옮겨야합니다. 그러니 체크하는 코드를 맨 아래로 옮겨주세요.
댓글을 작성하려면 로그인이 필요합니다.
preg_match('/[가-힣]/', 'gㄱks한d글e') 로 한글 포함 여부를 검사해도 되겠네요.
그리고 리다이렉트 후 불필요한 로직 실행을 막기 위해 header 함수 아래에 exit 넣는 걸 추천합니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
bbs/login_check.php 파일에
if ( !preg_match('/^[0-9a-zA-Z]+$/',$member[mb_id]) ) {
header("location: bbb.php");
}
위와 추가하니 로그인이 되면서 이동은 하지 않네요. ㅠㅠ