[제로] 회원가입시 아이디체크 (중복, 필터링, 검색, 사용시 입력창으로..)
페이지 정보
첨부파일
-
2005-07-07 18:19:53
짧은주소
-
https://yadolee.com/tip/55 주소복사
평점
본문
제로보드의 좋은기능을 살려서 회원가입시의 아이디체크창과 시스템을 좀 더 멋지게 꾸며 볼까 합니다.
꾸미는데 필요한 파일은 check_user_id.php, member_join.php, member_join_ok.php 이 3개의 파일과 별도로 script_check_id.php 총 4개의 파일이 필요하게 됩니다.
자..준비 되셨으면 지금부터 시작합니다.~~
그럼 check_user_id.php를 여시고 원본을 기준으로..
9번줄부터
<?
include "lib.php";
$user_id = trim($user_id);
$connect=dbconn();
$check=mysql_fetch_array(mysql_query("select count(*) from $member_table where user_id='$user_id'"));
mysql_close($connect);
head();
?>
이 다음줄에 아래의 스크립트를 삽입해 주세요.
<script language="JavaScript">
<!--
function use_id() {
opener.write.user_id.value='<?=$user_id?>';
self.close();
}
function check_submit() {
if(!write.user_id.value) {
alert("아이디를 입력하여 주십시오.");
write.user_id.focus();
return false;
}
<? include "script/script_check_id.php"; ?>
return true;
}
-->
</script>
use_id()는 사용가능한 아이디를 회원가입창으로 재전송해주는 스크립트이고,
check_submit()은 다들 아시겠지만 검색버튼을 클릭했을때 벌어지는 이벤트에 관한 스크립트 입니다.
다음 9번줄..
<table border=0 width=100% height=100%>
아래에 다음의 폼태그를 적어주세요.
<form name="write" method="post" enctype="multipart/form-data" OnSubmit="return check_submit();">
이 폼태그는 사용가능한 아이디를 회원가입창으로 전송하고 아이디 검색시에 벌어지는 이벤트를 제어하는 기능을 합니다.
* 이 폼태그를 적어주셨으면 하단부의 <form> 이것은 지워 주세요.
그다음 12번줄..
<?
if($check[0]) echo "$user_id 는 이미 등록된<br> 아이디입니다";
else echo"$user_id 는 사용하실수 있습니다";
?>
이 부분을 아래와 같이 수정해 주세요.
<?
$array = array("root", "admin", "master", "aaaa", "bbbb", "cccc", "dddd", "eeee", "ffff", "gggg", "hhhh", "iiii", "jjjj", "kkkk", "llll", "mmmm", "nnnn", "oooo", "pppp", "qqqq", "rrrr", "ssss", "tttt", "uuuu", "vvvv", "wwww", "xxxx", "yyyy", "zzzz");
for($i=0;$i<count($array);$i++)
eregi($array[$i], $user_id, $reg);
if($reg) {
echo "
<font color=red><b>사용할 수 없는 아이디(ID)입니다.</b></font><br><br>
<b>$user_id</b>(은)는 사용이 금지된<br>
아이디(ID)입니다.";
} elseif($check[0]) {
echo "
<font color=red><b>사용할 수 없는 아이디(ID)입니다.</b></font><br><br>
<b>$user_id</b>(은)는 이미 사용중인<br>
아이디(ID)입니다.";
} else {
echo "
<b>$user_id</b>(은)는 사용하실 수 있습니다.<br><br>
<input type='button' name='write' value='사용하기' OnClick='use_id()'>";
}
?>
대충 설명드리면 불량단어와 같은문자열의 반복, 즉 4자 이상 40자 이하 같은 문자열로 반복된 아이디와 이미 등록된 아이디, 또 root, admin, master와 같은 불량 단어는 사용이 불가능한 반면,
사용가능한 아이디는 input 버튼을 이용해 클릭시 회원가입창으로 아이디를 전송해 줍니다.
불량 단어는 위에서 추가해 주시면 되지만,
그렇다고 한글로된 단어나 4자리 이하의 영문, 또 특수문자등을 불량단어로 등록하지는 마시구요.;;
어짜피 영문이 아닌 다른 문자와 4자리 이하의 문자는 스크립트로 원천봉쇄 됩니다.
그럼 다음으로 넘어가서.. 21번줄
<td align=center><input type=button value='Close window' onclick=window.close(); class=submit></td>
이 부분을 아래와 같이 수정해 주세요.
<td align="center">
<input type="text" name="user_id" size="16" value="">
<input type="submit" value="검색">
<input type="button" value="닫기" OnClick="window.close();" OnFocus="this.blur()">
</td>
이 부분은 보시는 바와 같이 아이디 검색폼입니다.
여기까지 하셨으면 check_user_id.php는 끝입니다. -저장, 닫기-
다음은 script_check_id.php를 한번 만들어 볼까요.
메모장으로 새파일을 하나 만드시고 여기에 다음과 같이 스크립트를 적어주세요.
if(write.user_id.value.length<4 || write.user_id.value.length>40) {
alert("아이디는 4자 이상, 40자 이하여야 합니다.");
write.user_id.focus();
return false;
}
var valid = "abcdefghijklmnopqrstuvwxyz0123456789_";
var startChar = "abcdefghijklmnopqrstuvwxyz";
var temp;
write.user_id.value = write.user_id.value.toLowerCase();
temp = write.user_id.value.substring(0,1);
if (startChar.indexOf(temp) == "-1") {
alert("아이디의 첫 글자는 영문이어야 합니다.");
write.user_id.value = "";
write.user_id.focus();
return false;
}
for (var i=0; i<write.user_id.value.length; i++) {
temp = "" + write.user_id.value.substring(i, i+1);
if (valid.indexOf(temp) == "-1") {
alert("아이디는 영문과 숫자, _ 로만 이루어질수 있습니다.");
write.user_id.value = "";
write.user_id.focus();
return false;
}
}
이 스크립트는 원래 member_join.php에서 사용하는 스크립트 입니다.
보다 체크를 강조하려다 보니 본의아니게도 이 스크립트가 3번이나 반복되는것 때문에
편의상 그 부분만 따로 include 시키기 위해서 잘라 내었습니다.
여기까지 하셨으면 이름을 script_check_id.php 고친다음 저장해 주세요.
저장은 제로보드 디렉토리 안에 있는 script디렉토리에 해주시면 됩니다.-저장,닫기-
이번에는 member_join.php를 열어주세요.
85번줄 부터 119번줄까지..
if(!write.user_id.value) {alert("아이디를 입력하여 주십시요.");write.user_id.focus(); return false;}
<?
if($_zbDefaultSetup[enable_hangul_id]=="false") {
?>
// ID Check
if(write.user_id.value.length<4||write.user_id.value.length>40) {
alert("아이디는 4자 이상, 40자 이하여야 합니다.");
write.user_id.focus();
return false;
}
var valid = "abcdefghijklmnopqrstuvwxyz0123456789_";
var startChar = "abcdefghijklmnopqrstuvwxyz";
var temp;
write.user_id.value = write.user_id.value.toLowerCase();
temp = write.user_id.value.substring(0,1);
if (startChar.indexOf(temp) == "-1") {
alert("아이디의 첫 글자는 영문이어야 합니다.");
write.user_id.value = "";
write.user_id.focus();
return false;
}
for (var i=0; i<write.user_id.value.length; i++) {
temp = "" + write.user_id.value.substring(i, i+1);
if (valid.indexOf(temp) == "-1") {
alert("아이디는 영문과 숫자, _ 로만 이루어질수 있습니다.");
write.user_id.value = "";
write.user_id.focus();
return false;
}
}
<?
}
?>
이 부분을 다음과 같이 수정해 주세요.
if(!write.user_id.value) {
alert("아이디를 입력하여 주십시오.");
write.user_id.focus();
return false;
}
<?
if($_zbDefaultSetup[enable_hangul_id]=="false") {
include "script/script_check_id.php";
}
?>
그리고 아래로 내려가셔서 159번줄..
function check_id(id) {
if(!id) {
alert('아이디를 입력하여 주십시요');
} else {
window.open('check_user_id.php?user_id='+id,'check_user_id','width=200,height=100,toolbar=no,status=no,resizable=no');
}
}
이 부분을 다음과 같이 수정해 주세요.
function check_id(id) {
if(!id) {
alert("아이디를 입력하여 주십시오.");
write.user_id.focus();
return false;
}
<? include "script/script_check_id.php"; ?>
window.open('check_user_id.php?user_id='+id,'check_user_id','width=330,height=230,toolbar=no,status=no,resizable=no');
}
여기까지 하셨으면 member_join.php는 끝입니다.-저장.닫기-
그럼 마지막으로 member_join_ok.php를 수정해 볼까요.~
44번줄..
$user_id=trim($user_id);
if(isBlank($user_id)) Error("ID를 입력하셔야 합니다","");
$check=mysql_fetch_array(mysql_query("select count(*) from $member_table where user_id='$user_id'",$connect));
if($check[0]>0) Error("이미 등록되어 있는 ID입니다","");
이 부분을 아래와 같이 수정해 주세요.
$user_id=trim($user_id);
if(isBlank($user_id)) Error("아이디(ID)를 입력하셔야 합니다.","");
$array = array("root", "admin", "master", "aaaa", "bbbb", "cccc", "dddd", "eeee", "ffff", "gggg", "hhhh", "iiii", "jjjj", "kkkk", "llll", "mmmm", "nnnn", "oooo", "pppp", "qqqq", "rrrr", "ssss", "tttt", "uuuu", "vvvv", "wwww", "xxxx", "yyyy", "zzzz");
for($i=0;$i<count($array);$i++) {
if(eregi($array[$i], $user_id, $reg)) {
Error("<b>$user_id</b>(은)는 사용이 금지된<br>아이디(ID)입니다.","");
break;
}
}
$check=mysql_fetch_array(mysql_query("select count(*) from $member_table where user_id='$user_id'",$connect));
if($check[0]>0) Error("<b>$user_id</b>(은)는 이미 사용중인<br>아이디(ID)입니다.","");
이 부분은 아이디체크를 하지 않고 회원가입을 할 시에 빈문자열과 불량아이디(관리자 사칭 아이디, 4자 이상의 반복된 단어의 아이디등등),또는 중복된 아이디를 걸러내기 위한 소스입니다.
* 참고로 4자 이상의 단어에서 aaaa,aaaad,daaaa,aaaaaaaaaaaaaaaaaa등과 같은 단어들은 절대 가입이 허용되지 않습니다.
여기까지...-저장,닫기-
먼길 오시느라 수고들 많으셨습니다.
지친몸 잘 추스리시고;; 여러분들 만의 멋진 제로보드를 만들어 나가시기 바라겠습니다.
정보가 마음에 드시면 추천한방 부탁드리구요.
* 한가지 빠뜨린거...;
체크창이 떴을때 커서가 검색폼으로 올라가게 해주기 위해서 check_user_id.php에 한가지를 더 추가해 주세요.
<body leftmargin=0 topmargin=0 marginwidth=0 marginheight=0 OnLoad="document.write.user_id.focus();">
OnLoad를 이용한 커서제어 방법입니다.
위치는 아무래도 미각상 </script> 다음이 좋을듯 하겠죠.
추천인
Progress Bar 74%
-
[배경 화면] 프랑스의 에귀으 듀 샤흐도네(Aiguille du Chardonnet)산으로 스위스와 접경지에 위치해 있습니다. /*0) generatedType=2; if (generatedType==2) { dMap.style.cursor = "pointer"; dMap.onclick = function(e) {initGmapsLoader(e||event)}; var t = document.createTextNode("로딩하려면 클릭하세요"), d = document.createElement("div"); d.appendChild(t); d.style.cssText="background-color:#e5e5e5; filter:alpha(opacity=80); opacity:0.8; padding:1em; font-weight:bold; text-align:center; position:absolute; left:0; box-sizing:border-box; width:100%; max-width:500px; top:0"; dMap.appendChild(d); } function CreateGMapgmap202421141257() { var dMap = document.getElementById("gmap202421141257"); if (dMap) dMap = dMap.parentNode; else dMap = document.getElementById("wgmap202421141257"); if (!dMap) return; if (dMap.ckemap) { var map = dMap.ckemap.map, center = map.getCenter(); google.maps.event.trigger(map, "resize"); map.setCenter(center); return; } dMap.onclick = null; var mapOptions = { zoom: 11, center: [45.96864,7.00157], mapType: 0, zoomControl: "Default", mapsControl: "Default", heading: 0, tilt: 0, overviewMapControlOptions: {opened:true}, pathType: "Default", googleBar: false }; var myMap = new CKEMap(dMap, mapOptions); dMap.ckemap=myMap; } if (!window.gmapsLoaders) window.gmapsLoaders = []; window.gmapsLoaders.push(CreateGMapgmap202421141257); if (generatedType==3) window.gmapsAutoload=true; window.gmapsKey="AIzaSyApiu_e4Br_dRpB-RNC3XgioygMilKhadA"; /*]]>*/ /* CK googlemapsEnd v3.6 */2024-03-05
-
[공지사항] 특별한 버그가 발견되지 않으면 공개하도록 하겠습니다.2024-01-23
-
[공지사항] 한가지를 빼먹었습니다 사운드클라우드도 썸네일을 생성합니다 사운드클라우드는 meta tag > og:image > content의 url를 통해 이미지를 추출2023-05-05
-
[공지사항] 제법 추가해야 할 소스가 많습니다 또한 외부 프로그램(php exec 함수 이용)도 필요해요 ffmpeg, youtube-dl, twitter-media-downloader 간략하게 설명을 드려 볼게요 twitter-media-downloader은 트위터 트윗 이미지를 추출하는 용도 youtube-dl은 트위터 트윗 이미지 및 동영상 url, 페이스북 watch 동영상 url를 추출하는 용도 ffmpeg는 페이스북 watch의 동영상 url를 이용해 포스터 이미지를 추출하는 용도 인스타그램은 meta tag > og:image > content의 url를 통해 이미지를 추출 그 이미지를 게시판 설정 크기로 썸네일화하기2023-05-04
-
[공지사항] 네 맞습니다. Tagify 기능이 훌륭해 변경해 놓았습니다. 한번 적용해 보세요.2022-12-25
-
[영어 문법] 7년 전 게시되었을 때에는 재생에 문제가 없었던 것으로 기억하고 있었으나 현재에는 재생 목록 파라미터가 변경된 걸로 확인했습니다. 수정완료하였으며 3000점의 경험치를 제공해 드렸습니다. 오류 제보 감사드립니다.2022-12-04
-
[공지사항] 공지와 연관되지 않는 댓글은 자제 부탁드립니다.2022-12-03
-
[공지사항] SortableJS를 이용했습니다. https://inpa.tistory.com/entry/%EB%93%9C%EB%9E%98%EA%B7%B8-%EC%95%A4-%EB%93%9C%EB%A1%AD-Drag-Drop-%EA%B8%B0%EB%8A%A5 {코드} https://github.com/SortableJS/Sortable {코드}위 두 링크를 참조해 보세요.2022-11-27
댓글
첫 번째 댓글을 남겨 주세요