에고.. 왠지 버젼이 바뀔때 마다 기존에 적은걸 다시 적는 기분이 드네요 ㅡㅡ;;
기존에 올렸던 주민등록 입력 폼에 많은 분들이 문의 해주신 내용들과 불편했던 내용들을 한꺼번에 다시 한번 정리 했습니다.
1.2.0 버젼 기준으로 좀더 세세하게 다시 수정 하였습니다.
첨부 파일은 1.2.0 full 새로 다운 받아서 아래 내용만 수정 하였습니다.
아래 내용 작성 끝나면 다시 삭제될 자료 ;;;
1. DB Tool
개인 서버 사용자 -
http://www.navicat.com/download.html - non-commercial(Free) - lite version 으로 다운 받으시면 됩니다.
비 상업사이트에 한해 무료 제공인듯 합니다.
해당 sql서버에 직접 접속이 가능하다면 프로그램은 개인 로컬PC에 설치하고 원격으로 서버에 접속도 가능합니다.
호스팅 업체 사용자 -
http://www.phpmyadmin.net/home_page/downloads.php
설치 후 웹페이지를 통해 접속하는 프로그램입니다.
아래 설명은 navicat 기준으로 설명합니다.
1. DBTool 을 사용하여 xe_member 테이블의 디자인 보기를 선택합니다.
2. insert field 를 (필드 삽입)을 선택하여 jumin - char(13) 으로 필드를 생성 합니다.
3. /xe/modules/member/skins/default/filter/signup.xml
<filter name="signup" module="member" act="procMemberInsert" extend_filter="member.getJoinFormList" confirm_msg_code="confirm_submit">
<form>
<node target="user_id" required="true" minlength="2" maxlength="80" filter="userid" />
<node target="password1" required="true" minlength="6" maxlength="20" />
<node target="password2" required="true" minlength="6" maxlength="20" equalto="password1" />
<node target="user_name" required="true" minlength="2" maxlength="40" />
<node target="nick_name" required="true" minlength="2" maxlength="40" />
<node target="email_address" required="true" minlength="1" maxlength="200" filter="email"/>
<node target="jumin" required="true" minlength="13" maxlength="13" filter="jumin"/>
</form>
<parameter>
<param name="accept_agreement" target="accept_agreement" />
<param name="member_srl" target="member_srl" />
<param name="user_id" target="user_id" />
<param name="password" target="password1" />
<param name="user_name" target="user_name" />
<param name="nick_name" target="nick_name" />
<param name="jumin" target="jumin" />
<param name="homepage" target="homepage" />
<param name="blog" target="blog" />
<param name="birthday" target="birthday" />
<param name="allow_mailing" target="allow_mailing" />
<param name="email_address" target="email_address" />
</parameter>
<response callback_func="completeInsert">
<tag name="error" />
<tag name="message" />
<tag name="redirect_url" />
</response>
</filter>
4. /xe/modules/member/queries/insertMember.xml
<query id="insertMember" action="insert">
<tables>
<table name="member" />
</tables>
<columns>
<column name="member_srl" var="member_srl" filter="number" notnull="notnull" />
<column name="user_id" var="user_id" filter="userid" notnull="notnull" />
<column name="email_address" var="email_address" filter="email" notnull="notnull" />
<column name="password" var="password" notnull="notnull" />
<column name="email_id" var="email_id" notnull="notnull" />
<column name="email_host" var="email_host" notnull="notnull" />
<column name="user_name" var="user_name" notnull="notnull" minlength="1" maxlength="40" />
<column name="nick_name" var="nick_name" notnull="notnull" minlength="1" maxlength="40" />
<column name="homepage" var="homepage" />
<column name="jumin" var="jumin" />
<column name="blog" var="blog" />
<column name="birthday" var="birthday" />
<column name="allow_mailing" var="allow_mailing" default="Y" />
<column name="allow_message" var="allow_message" default="Y" />
<column name="denied" var="denied" default="N" />
<column name="limit_date" var="limit_date" />
<column name="regdate" var="regdate" default="curdate()" />
<column name="last_login" var="last_login" default="curdate()" />
<column name="is_admin" var="is_admin" default="N" />
<column name="description" var="description" />
<column name="extra_vars" var="extra_vars" />
</columns>
</query>
5. /xe/modules/member/queries/getMemberSrl.xml
<query id="getMemberSrl" action="select">
<tables>
<table name="member" />
</tables>
<columns>
<column name="member_srl" />
</columns>
<conditions>
<condition operation="equal" column="user_id" var="user_id" pipe="and" />
<condition operation="equal" column="email_address" var="email_address" pipe="and" />
<condition operation="equal" column="nick_name" var="nick_name" pipe="and" />
<condition operation="equal" column="jumin" var="jumin" pipe="and" />
</conditions>
</query>
6.xe/modules/member/tpl/js/signup_check.js
- line 17
function memberSetEvent() {
var fo_obj = xGetElementById('fo_insert_member');
for(var node_name in fo_obj) {
var obj = fo_obj[node_name];
if(!obj || typeof(obj.nodeName)=="undefined" || obj.nodeName != "INPUT") continue;
if(node_name != "user_id" && node_name != "nick_name" && node_name != "email_address" && node_name!="jumin") continue;
xAddEventListener(obj, 'blur', memberCheckValue);
}
}
7. /xe/modules/member/lang/ko.lang.php
-line 80
$lang->search_target_list = array(
'user_id' => '아이디',
'user_name' => '이름',
'nick_name' => '닉네임',
'email_address' => '메일주소',
'jumin' => 주민등록번호,
'regdate' => '가입일시',
'regdate_more' => '가입일시(이상)',
'regdate_less' => '가입일시(이하)',
'last_login' => '최근로그인일시',
'last_login_more' => '최근로그인일시(이상)',
'last_login_less' => '최근로그인일시(이하)',
'extra_vars' => '확장변수',
);
// 관리자 페이지에서 주민등록번호로 검사 필드 추가
- line 142 ~ 143 / line 165
$lang->msg_exists_jumin = '이미 존재하는 주민등록번호입니다. 계정도용이 의심 될 경우 관리자에게 연락 주세요.';
$lang->msg_false_jumin_no = '잘못된 주민등록번호 형식입니다.';
$lang->about_jumin = '- 를 제외한 숫자 13자리를 입력해 주세요.';
8. /xe/common/lang/ko.lang.php
- line 89
$lang->jumin = '주민등록번호';
- line 299
$lang->filter->invalid_jumin = '잘못된 %s 형식입니다.';
9. /xe/modules/member/skins/default/signup_form.html
- line 67
<tr>
<th><div>{$lang->jumin}</div></th>
<td>
<input type="password" name="jumin" value="" maxlength="13" class="inputTypeText"/> <input type="checkbox" name="foreigner" value="1" /> 외국인 (*외국인인 경우 체크 하세요)
<p>{$lang->about_jumin}</p>
</td>
</tr>
10. /xe/modules/member/member.controller.php
- line 501 ~ 514
/**
* @brief 회원 가입시 특정 항목들에 대한 값 체크
**/
function procMemberCheckValue() {
$name = Context::get('name');
$value = Context::get('value');
if(!$value) return;
$oMemberModel = &getModel('member');
// 로그인 여부 체크
$logged_info = Context::get('logged_info');
switch($name) {
case 'user_id' :
// 금지 아이디 검사
if($oMemberModel->isDeniedID($value)) return new Object(0,'denied_user_id');
// 중복 검사
$member_srl = $oMemberModel->getMemberSrlByUserID($value);
if($member_srl && $logged_info->member_srl != $member_srl ) return new Object(0,'msg_exists_user_id');
break;
case 'nick_name' :
// 중복 검사
$member_srl = $oMemberModel->getMemberSrlByNickName($value);
if($member_srl && $logged_info->member_srl != $member_srl ) return new Object(0,'msg_exists_nick_name');
break;
case 'email_address' :
// 중복 검사
$member_srl = $oMemberModel->getMemberSrlByEmailAddress($value);
if($member_srl && $logged_info->member_srl != $member_srl ) return new Object(0,'msg_exists_email_address');
break;
case 'jumin' : // 주민등록 번호 검사
// 형식 검사
if($oMemberModel->isTrueNumber($value)==false) return new Object(0,'msg_false_jumin_no');
//중복 검사
$member_srl = $oMemberModel->getMemberSrlByJumin($value);
if($member_srl && $logged_info->member_srl != $member_srl) return new Object(0,'msg_exists_jumin');
break;
case 'jumin2' : // 외국인 번호 검사.
// 형식 검사
if($oMemberModel->isTrueNumber2($value)==false) return new Object(0,'msg_false_jumin_no');
//중복 검사
$member_srl = $oMemberModel->getMemberSrlByJumin($value);
if($member_srl && $logged_info->member_srl != $member_srl) return new Object(0,'msg_exists_jumin');
break;
}
}
// 외국인가입이 필요없는 경우는 case 'jumin2' : 아래는 삭제 하셔도 됩니다.
- line 532
/**
* @brief 회원 가입
**/
function procMemberInsert() {
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('member');
// 관리자가 회원가입을 허락하였는지 검사
if($config->enable_join != 'Y') return $this->stop('msg_signup_disabled');
// 약관에 동의하였는지 검사 (약관이 있을 경우만)
if($config->agreement && Context::get('accept_agreement')!='Y') return $this->stop('msg_accept_agreement');
// 필수 정보들을 미리 추출
$args = Context::gets('user_id','user_name','nick_name','jumin','homepage','blog','birthday','email_address','password','allow_mailing');
$args->member_srl = getNextSequence();
// 넘어온 모든 변수중에서 몇가지 불필요한 것들 삭제
$all_args = Context::getRequestVars();
unset($all_args->module);
unset($all_args->act);
unset($all_args->is_admin);
unset($all_args->description);
unset($all_args->group_srl_list);
unset($all_args->body);
unset($all_args->accept_agreement);
unset($all_args->signature);
// 메일 인증 기능 사용시 회원 상태를 denied로 설정
if ($config->enable_confirm == 'Y') $args->denied = 'Y';
// 모든 request argument에서 필수 정보만 제외 한 후 추가 데이터로 입력
$extra_vars = delObjectVars($all_args, $args);
$args->extra_vars = serialize($extra_vars);
// member_srl의 값에 따라 insert/update
$output = $this->insertMember($args);
if(!$output->toBool()) return $output;
// 로그인 시킴
if ($config->enable_confirm != 'Y') $this->doLogin($args->user_id);
$this->add('member_srl', $args->member_srl);
if($config->redirect_url) $this->add('redirect_url', $config->redirect_url);
if ($config->enable_confirm == 'Y') {
$msg = sprintf(Context::getLang('msg_confirm_mail_sent'), $args->email_address);
$this->setMessage($msg);
}
else $this->setMessage('success_registed');
}
- line 1444
/**
* @brief member 테이블에 사용자 추가
**/
function insertMember(&$args, $password_is_hashed = false) {
// trigger 호출 (before)
$output = ModuleHandler::triggerCall('member.insertMember', 'before', $args);
if(!$output->toBool()) return $output;
// 멤버 설정 정보에서 가입약관 부분을 재확인
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('member');
$logged_info = Context::get('logged_info');
// 임시 제한 일자가 있을 경우 제한 일자에 내용 추가
if($config->limit_day) $args->limit_date = date("YmdHis", time()+$config->limit_day*60*60*24);
// 입력할 사용자의 아이디를 소문자로 변경
$args->user_id = strtolower($args->user_id);
// 필수 변수들의 조절
if($args->allow_mailing!='Y') $args->allow_mailing = 'N';
if($args->denied!='Y') $args->denied = 'N';
$args->allow_message= 'Y';
if($logged_info->is_admin == 'Y') {
if($args->is_admin!='Y') $args->is_admin = 'N';
} else {
unset($args->is_admin);
}
list($args->email_id, $args->email_host) = explode('@', $args->email_address);
// 홈페이지, 블로그의 주소 검사
if($args->homepage && !preg_match("/^http:\/\//i",$args->homepage)) $args->homepage = 'http://'.$args->homepage;
if($args->blog && !preg_match("/^http:\/\//i",$args->blog)) $args->blog = 'http://'.$args->blog;
// 모델 객체 생성
$oMemberModel = &getModel('member');
// 금지 아이디인지 체크
if($oMemberModel->isDeniedID($args->user_id)) return new Object(-1,'denied_user_id');
// 아이디, 닉네임, email address 의 중복 체크
$member_srl = $oMemberModel->getMemberSrlByUserID($args->user_id);
if($member_srl) return new Object(-1,'msg_exists_user_id');
$member_srl = $oMemberModel->getMemberSrlByNickName($args->nick_name);
if($member_srl) return new Object(-1,'msg_exists_nick_name');
$member_srl = $oMemberModel->getMemberSrlByEmailAddress($args->email_address);
if($member_srl) return new Object(-1,'msg_exists_email_address');
$member_srl = $oMemberModel->getMemberSrlByJumin($args->jumin);
if($member_srl) return new Object(-1, 'msg_exists_jumin');
$oDB = &DB::getInstance();
$oDB->begin();
// DB에 입력
$args->member_srl = getNextSequence();
if($args->password && !$password_is_hashed) $args->password = md5($args->password);
elseif(!$args->password) unset($args->password);
$output = executeQuery('member.insertMember', $args);
if(!$output->toBool()) {
$oDB->rollback();
return $output;
}
// 입력된 그룹 값이 없으면 기본 그룹의 값을 등록
if(!$args->group_srl_list) {
$default_group = $oMemberModel->getDefaultGroup(0);
// 기본 그룹에 추가
$output = $this->addMemberToGroup($args->member_srl,$default_group->group_srl);
if(!$output->toBool()) {
$oDB->rollback();
return $output;
}
// 입력된 그룹 값이 있으면 해당 그룹의 값을 등록
} else {
$group_srl_list = explode('|@|', $args->group_srl_list);
for($i=0;$i<count($group_srl_list);$i++) {
$output = $this->addMemberToGroup($args->member_srl,$group_srl_list[$i]);
if(!$output->toBool()) {
$oDB->rollback();
return $output;
}
}
}
// 메일 인증 모드 사용시(가입된 회원이 denied일 때) 인증 메일 발송
if ($args->denied == 'Y') {
// 인증 DB에 데이터를 넣음
$auth_args->user_id = $args->user_id;
$auth_args->member_srl = $args->member_srl;
$auth_args->new_password = $args->password;
$auth_args->auth_key = md5(rand(0, 999999));
$auth_args->is_register = 'Y';
$output = executeQuery('member.insertAuthMail', $auth_args);
if (!$output->toBool()) {
$oDB->rollback();
return $output;
}
// 메일 내용을 구함
Context::set('auth_args', $auth_args);
Context::set('member_info', $args);
$member_config = $oModuleModel->getModuleConfig('member');
if(!$member_config->skin) $this->member_config->skin = "default";
if(!$member_config->colorset) $this->member_config->colorset = "white";
Context::set('member_config', $member_config);
$tpl_path = sprintf('%sskins/%s', $this->module_path, $member_config->skin);
if(!is_dir($tpl_path)) $tpl_path = sprintf('%sskins/%s', $this->module_path, 'default');
$oTemplate = &TemplateHandler::getInstance();
$content = $oTemplate->compile($tpl_path, 'confirm_member_account_mail');
// 사이트 웹마스터 정보를 구함
$oModuleModel = &getModel('module');
$member_config = $oModuleModel->getModuleConfig('member');
// 메일 발송
$oMail = new Mail();
$oMail->setTitle( Context::getLang('msg_confirm_account_title') );
$oMail->setContent($content);
$oMail->setSender( $member_config->webmaster_name?$member_config->webmaster_name:'webmaster', $member_config->webmaster_email);
$oMail->setReceiptor( $args->user_name, $args->email_address );
$oMail->send();
}
// trigger 호출 (after)
if($output->toBool()) {
$trigger_output = ModuleHandler::triggerCall('member.insertMember', 'after', $args);
if(!$trigger_output->toBool()) {
$oDB->rollback();
return $trigger_output;
}
}
$oDB->commit(true);
$output->add('member_srl', $args->member_srl);
return $output;
}
11. /xe/modules/member/member.model.php
- line 244
/**
* @brief jumin에 해당하는 member_srl을 구함
**/
function getMemberSrlByJumin($jumin){
$args->jumin = $jumin;
$output = executeQuery('member.getMemberSrl', $args);
return $output->data->member_srl;
}
- line 270 ~ 321
/**
* @brief 주민등록번호 형식 확인
**/
function isTrueNumber($jumin){
$total = 0;
for($i=0;$i<13;$i++){
$sval = substr($jumin, $i, 1);
if($i < 8){
$total = $total + ($sval * ($i+2));
}
if($i > 7 && $i < 12){
$total = $total + ($sval * ($i-6));
}
}
$total = $total % 11;
$total2 = 11 - $total;
if($total2 > 9) $total2 = $total2 % 10;
$total = substr($jumin, 12, 1);
if($total == $total2) return true;
else return false;
}
/**
* @brief 외국인번호 확인
**/
function isTrueNumber2($jumin){
for($i=0;$i<13;$i++){
$buf[$i] = (int)substr($jumin, $i, 1);
}
$odd = (int)$buf[7] * 10 + (int)$buf[8];
if($odd % 2 != 0){
return false;
}
if(($buf[11] != 6) && ($buf[11] != 7) && ($buf[11] != 8) && ($buf[11] != 9)){
return false;
}
$multi = "2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5";
$multipliers = str_split(",", $multi);
$sum = 0;
for($i=0;$i<12;$i++){
$sum += (int)$bnf[$i] *= (int)$multipliers[$i];
}
$sum = 11 - ($sum % 11);
if($sum >= 10) $sum -= 10;
$sum += 2;
if($sum >= 10) $sum -=10;
if($sum != $buf[12]) {
return false;
} else {
return true;
}
}
// 외국인 가입이필요없는 경우 외국인 번호 체크 삭제
12. /xe/common/js/xml-js_filter.js
- line 192 ~ 19
function XmlJsFilterExecuteFilter(filter, value) {
switch(filter) {
case "email" :
case "email_address" :
var regx = /^[_0-9a-zA-Z-]+(\.[_0-9a-zA-Z-]+)*@[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*$/;
return regx.test(value);
break;
case "userid" :
case "user_id" :
var regx = /^[a-zA-Z]+([_0-9a-zA-Z]+)*$/;
return regx.test(value);
break;
case "homepage" :
var regx = /^(http|https|ftp|mms):\/\/[0-9a-z-]+(\.[_0-9a-z-\/\~]+)+(:[0-9]{2,4})*$/;
return regx.test(value);
break;
case "korean" :
var regx = /^[가-힣]*$/;
return regx.test(value);
break;
case "korean_number" :
var regx = /^[가-힣0-9]*$/;
return regx.test(value);
break;
case "alpha" :
var regx = /^[a-zA-Z]*$/;
return regx.test(value);
break;
case "alpha_number" :
var regx = /^[a-zA-Z][a-zA-Z0-9\_]*$/;
return regx.test(value);
break;
case "number" :
return !isNaN(value);
break;
case "jumin" :
return juminChk(value);
break;
case "jumin2" :
return juminChk2(value);
break;
}
return null;
}
- line 203 ~ 247
function juminChk(val) {
var total = 0;
var sval;
for(i=0;i<13;i++) {
sval = val.substr(i, 1);
if(i < 8) {
total = total + (sval * (i + 2));
}
if(i > 7 && i < 12) {
total = total + (sval * (i - 6));
}
}
total = total % 11;
var total2 = 11 - total;
if(total2 > 9) total = total2 % 10;
total = val.charAt(12);
if(total == total2) return true;
else return false;
}
function juminChk2(val) {
var sum = 0;
var odd = 0;
var buf = new Array(13);
for(i=0;i<13;i++) buf[i] = parseInt(reg_no.charAt(i));
odd = buf[7] * 10 + buf[8];
if(odd % 2 != 0) {
return false;
}
if((buf[11] != 6) && (buf[11] != 7) && (buf[11] != 8) && (buf[11] != 9)) {
return false;
}
var multipliers = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5];
for(i=0,sum=0;i<12;i++) sum += (buf[i] *= multipliers[i]);
sum = 11 - (sum % 11);
if(sum >= 10) sum -= 10;
sum += 2;
if(sum >= 10) sum -= 10;
if(sum != buf[12]) {
return false;
} else {
return true;
}
}
- line 306 ~ 310
function XmlJsFilterCheckFieldItem() {
for(var i=0; i<extra_vars.length;i++) {
var name = extra_vars[i];
this.addFieldItem(name, false, 0, 0, "", "");
}
for(var i=0; i<this.field.length;i++) {
var item = this.field[i];
var target = item[0];
var required = item[1];
var minlength = item[2];
var maxlength = item[3];
var equalto = item[4];
var filter = item[5].split(",");
if(typeof(this.fo_obj[target])=='undefined') continue;
for(var j=0; j<notnull_list.length; j++) {
if(notnull_list[j]==target) required = true;
}
var value = this.getValue(target);
if(!required && !value) continue;
if(required && !value && this.fo_obj[target]) return this.alertMsg(target,'isnull');
if(minlength>0 && maxlength>0 && (value.length < minlength || value.length > maxlength)) return this.alertMsg(target, 'outofrange', minlength, maxlength);
if(equalto) {
var equalto_value = this.getValue(equalto);
if(equalto_value != value) return this.alertMsg(target, 'equalto');
}
if(filter.length && filter[0]) {
for(var j=0;j<filter.length;j++) {
var filter_item = filter[j];
if(filter_item == 'jumin') {
if(document.getElementById(filter_item).form.foreigner.checked == true){
filter_item == 'jumin2';
}
}
if(!this.executeFilter(filter_item, value)) return this.alertMsg(target, "invalid_"+filter_item);
}
}
}
return true;
}
//외국인 번호를 체크하실게 아니면 역시 jumin2 관련 된 부분은 삭제 가능합니다.
13. /xe/modules/member/tpl/member_info.html
- line 97 ~ 100
<tr>
<th scope="row"><div>{$lang->juimn}</div></th>
<td>{substr($member_info->jumin, 0, 6)} - {substr($member_info->jumin, 6, 7)}</td>
</tr>
14. /xe/modules/member/skins/default/member_info.html
- line 37 ~ 40
<tr>
<th><div>{lang->jumin}</div></th>
<td>{substr($member_info->jumin, 0, 6)} - {substr($member_info->jumin, 6, 7)}</td>
</tr>
15. /xe/modules/member/member.admin.model.php // 관리자 페이지에서 주민등록번호로 검사
- line 74 ~ 76
/**
* @brief 회원 목록을 구함
**/
function getMemberList() {
// 검색 옵션 정리
$args->is_admin = Context::get('is_admin')=='Y'?'Y':'';
$args->is_denied = Context::get('is_denied')=='Y'?'Y':'';
$args->selected_group_srl = Context::get('selected_group_srl');
$search_target = trim(Context::get('search_target'));
$search_keyword = trim(Context::get('search_keyword'));
if($search_target && $search_keyword) {
switch($search_target) {
case 'user_id' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_user_id = $search_keyword;
break;
case 'user_name' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_user_name = $search_keyword;
break;
case 'nick_name' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_nick_name = $search_keyword;
break;
case 'email_address' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_email_address = $search_keyword;
break;
case 'regdate' :
$args->s_regdate = ereg_replace("[^0-9]","",$search_keyword);
break;
case 'regdate_more' :
$args->s_regdate_more = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
break;
case 'regdate_less' :
$args->s_regdate_less = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
break;
case 'last_login' :
$args->s_last_login = $search_keyword;
break;
case 'last_login_more' :
$args->s_last_login_more = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
break;
case 'last_login_less' :
$args->s_last_login_less = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
break;
case 'extra_vars' :
$args->s_extra_vars = ereg_replace("[^0-9]","",$search_keyword);
break;
case 'jumin' : // 검색대상이 jumin 이면..
$args->s_jumin = ereg_replace("[^0-9]","",$search_keyword);
break;
}
}
// selected_group_srl이 있으면 query id를 변경 (table join때문에)
if($args->selected_group_srl) {
$query_id = 'member.getMemberListWithinGroup';
$args->sort_index = "member.member_srl";
} else {
$query_id = 'member.getMemberList';
$args->sort_index = "member_srl";
}
// 기타 변수들 정리
$args->page = Context::get('page');
$args->list_count = 40;
$args->page_count = 10;
return executeQuery($query_id, $args);
}
16 . /xe/modules/member/quries/getMemberList.xml
- line 16
<query id="getMemberList" action="select">
<tables>
<table name="member" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="is_admin" var="is_admin" />
<condition operation="equal" column="denied" var="is_denied" pipe="and" />
<group pipe="and">
<condition operation="like" column="user_id" var="s_user_id" />
<condition operation="like" column="user_name" var="s_user_name" pipe="or" />
<condition operation="like" column="nick_name" var="s_nick_name" pipe="or" />
<condition operation="like" column="email_address" var="s_email_address" pipe="or" />
<condition operation="like" column="jumin" var="s_jumin" pipe="or" />
<condition operation="like" column="extra_vars" var="s_extra_vars" pipe="or" />
<condition operation="like_prefix" column="regdate" var="s_regdate" pipe="or" />
<condition operation="like_prefix" column="last_login" var="s_last_login" pipe="or" />
<condition operation="more" column="member.regdate" var="s_regdate_more" pipe="or" />
<condition operation="less" column="member.regdate" var="s_regdate_less" pipe="or" />
<condition operation="more" column="member.last_login" var="s_last_login_more" pipe="or" />
<condition operation="less" column="member.last_login" var="s_last_login_less" pipe="or" />
</group>
</conditions>
<navigation>
<index var="sort_index" default="member_srl" order="desc" />
<list_count var="list_count" default="20" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />
</navigation>
</query>
추가로 첨부파일에 /xe/modules/member/ 폴더를 압축한 파일 첨부 합니다.
- 위 내용은 주민등록 번호가 필수 입력 사항이 아닙니다.
// 덧 : 이거 하느라 하느 업무의 반을 날려먹었군요 ㅎㅎ 오늘 좀 여유가 있어서 정리해봅니다.
그 동안 제가 올린 주민등록번호 입력 폼 게시물을 보고 고생 하셨던 분들에게 좀 더 도움이 되시길 바랍니다.
배포자 개돌
여기에서 행복한 시간 되십시오.