아이디 => 이메일 형식으로 회원가입 및 로그인 정보
아이디 => 이메일 형식으로 회원가입 및 로그인관련링크
본문
1. lib/common.lib.php
파일에 함수 생성
function get_email($mb_id, $fields='*', $is_cache=false){
global $g5;
// $mb_id = preg_replace("/[^0-9a-z_]+/i", "", $mb_id);
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];
}
2.ajax.mb_id.php파일
if ($msg = valid_mb_id($mb_id)) die($msg);
G5_LIB_PATH.'/register.lib.php' => valid_mb_id()함수 커스터마이징
function valid_mb_id($reg_mb_id)
{
if (!preg_match("/([0-9a-zA-Z_-]+)@([0-9a-zA-Z_-]+)\.([0-9a-zA-Z_-]+)/", $reg_mb_id))
return "E-mail 주소가 형식에 맞지 않습니다.";
else
return "";
}
3. jquery.register_form.js 파일
reg_mb_id_check 함수 data 부분 아래와 같이 변경
data: {
"reg_mb_id": $("#reg_mb_id").val()
},
4.login.check.php 파일
// $mb = get_member($mb_id);
$mb = get_email($mb_id);
다음과 같이 변경
5. member_form.php 파일
// $mb = get_member($mb_id);
$mb = get_email($mb_id);
다음과 같이 변경
6. root/ common.php
// $member = get_member($_SESSION['ss_mb_id']);
$member = get_email($_SESSION['ss_mb_id']);
다음과 같이 변경
update `g5_config` set `cf_admin` = '*** 개인정보보호를 위한 이메일주소 노출방지 ***' where `cf_admin` = "admin";
관리자도 메일 형식으로 바꿔주세요
*추가
데이터 베이스에 mb_id 부분들은 꼭 char 255로 해주세요.
회원디비, 게시판디비등 mb_id가 들어가는 부분들은 전부 (20)으로 되어있어서
아이디 짤려서 들어갑니다!
16
댓글 30개
감사합니다.
이것 정말 추천 합니다.
그런데, 위 코드를 사용하고 db에 mb_id데이터 형식을 varchar(20)으로 그대로 두어도 될까요?
이메일의 경우 varchar(20)을 초과할까봐서요. 프론트에서 max 20으로 막는 방법도 있겠지만, 이메일 주소에 형식을 제외한 제한을 두는건 이상하지 않을까 하여 여쭤봅니다!
g5_member 의 데이터 베이스 기본을 보면, mb_email의 데이터 형식은 varchar(255)로 되어 있습니다.
말씀주신데로 varchar(20)을 그대로 두는 것 보다 (255)로 변경하는게 좋을 것 같습니다 ^.,^
get_member 함수 안에 내용을 get_email로 바꿔 사용하면 안되나요??
감사합니다
$reg_mb_id 찍어보면 @ 대신에 %40 이 뜨는데 왜 그런 걸까요?
그런데 이메일 유효성 검사면 해당 함수만 조금 조정하면 해결될 것 같네요
(DB내) 모든 테이블에서 mb_id 컬럼을 찾는 쿼리입니다. 참고 바랍니다.
SELECT sc.TABLE_SCHEMA, sc.TABLE_NAME, sc.COLUMN_NAME, sc.COLUMN_TYPE
FROM INFORMATION_SCHEMA.COLUMNS AS sc
WHERE COLUMN_NAME='mb_id'
@나눔앤 감사합니다 :)
감사합니다.
@ㅐ늑대ㅐ 도움이되셨다니 다행이네요 :)
@2히히히
update `g5_config` set `cf_admin` = '*** 개인정보보호를 위한 이메일주소 노출방지 ***' where `cf_admin` = "admin";
이건 데이터 베이스에서 query문 으로 작성하셔야합니다~