1. member.sql
회원관리에 필요한 테이블을 구성하여 보자.
member.sql
create table member( mem_idx int not null auto_increment, mem_name varchar(15), mem_id varchar(15), mem_pwd varchar(10), mem_ssn varchar(15), mem_sex char(1), mem_job varchar(10), mem_email varchar(20), mem_intro text, primary key (mem_idx) ); | |
기본키를 mem_idx로 하고 이름, 아이디, 비밀번호, 주민번호, 성별, 직업, 이메일, 자기소개로 사용할 필드를 위 그림처럼 작성하자. 성별은 M(남자), F(여자)를 넣기 위해서 한자로 했다. DB를 디자인 할때 각각의 필드명 앞에 mem과 같은 접두어를 넣는 방법도 좋은 방법이다.
2. regist.php
회원 가입 폼에서는 사용자로 부터 각각 값을 받는 폼이다. 주의해야 할 것은 pwd1 과 pwd2로 암호 확인을 하는 걸 추가 했다는 것이다. 다음 페이지에서 이를 비교해서 처리 하면 되겠다.
regist.php
<HTML> <HEAD> <TITLE> 회원등록 </TITLE> </HEAD> <BODY> <center> <h3>회원 등록</h3> <FORM METHOD=POST ACTION="regist_ok.php"> <TABLE border=1 cellspacing=0> <TR> <TD>이름</TD> <TD><INPUT TYPE="text" NAME="name" size=10></TD> </TR> <TR> <TD>사용자ID</TD> <TD><INPUT TYPE="text" NAME="id" size=10></TD> </TR> <TR> <TD>암호</TD> <TD><INPUT TYPE="password" name=pwd1 size=10></TD> </TR> <TR> <TD>암호확인</TD> <TD><INPUT TYPE="password" name=pwd2 size=10></TD> </TR> <TR> <TD>주민등록번호</TD> <TD><INPUT TYPE="text" NAME="ssn1" size=6>-<INPUT TYPE="text" NAME="ssn2" size=6></TD> </TR> <TR> <TD>성별</TD> <TD><INPUT TYPE="radio" NAME="sex" value=M checked>남자 <INPUT TYPE="radio" NAME="sex" value=F >여자 </TD> </TR> <TR> <TD>직업</TD> <TD><SELECT NAME="job" size=1> <option value="학생">학생</option> <option value="직장인">직장인</option> <option value="기타">기타</option> </SELECT> </TD> </TR> <TR> <TD>E-mail</TD> <TD><INPUT TYPE="text" NAME="email" size=35></TD> </TR> <TR> <TD>자기소개</TD> <TD><TEXTAREA NAME="intro" ROWS="5" COLS="45"></TEXTAREA></TD> </TR> </TABLE> <INPUT TYPE="submit" value=회원가입><INPUT TYPE="reset" value=취소> </FORM> <center> </BODY> </HTML> | |
3. regist_ok.php
DB를 연결하는 부분을 인클루드를 사용해서 만들어 보도록 하자. 먼저 DB 연결에 필요한 파일(dbconn.inc)를 만들어서 member의 상위 폴더에 넣도록 하자. 이렇게 하는 이유는 우리의 가상디렉토리 아래 모든 DB연결 부분에 이 파일을 사용하기 위해서이다. 그렇게 하면 DB계정이나 비밀번호가 바뀌면 모든 페이지를 수정해야 하는 번거러움을 줄일 수 있기 때문이다.
dbconn.inc
<? $connect=mysql_connect( "localhost", "hanoogi", "1234") or die( "SQL server에 연결할 수 없습니다."); mysql_select_db("khwdb",$connect); ?> | |
이제 DB연결부분을 member의 상위에 있는 dbconn.inc를 사용하면 쉽게 인클루드가 될 것 이다.
본론으로 돌아와서 regist.php에서 넘긴 값들을 체크하고 비교하는 작업을 먼저 한후 가입을 처리하면 되겠다. 그런 후 include()함수를 이용해서 DB 연결을 추가 하였다.
regist_ok.php
<? if(!$name || !$id || !$pwd1 ) //이름, 아이디, 비밀번호 입력 체크 { echo(" <script> window.alert('이름, 아이디, 비밀번호 입력 오류!!') history.go(-1) </script> "); exit; } if($pwd1 != $pwd2) //비밀번호 입력체크 { echo(" <script> window.alert('비밀번호 불일치') history.go(-1) </script> "); exit; } include("../dbconn.inc"); $sql = "select mem_id from member where mem_id='$id'"; $rst = mysql_query($sql, $connect);
$row = mysql_fetch_array($rst);
if ($row[0]){
echo "
<script language='javascript'>
alert('이미 존재하는 아이디 입니다. 다시 기입해주세요');
history.back();
</script>"; exit;
}
else {
$sql = "insert into member (mem_name,mem_id,mem_pwd,mem_ssn,
mem_sex,mem_job,mem_email,mem_intro)
values ('$name','$id','$pwd1','$ssn1-$ssn2', '$sex','$job','$email','$intro')";
$rst = mysql_query($sql, $connect);
if($rst){
echo "
<script language='javascript'>
alert('회원가입완료!');
location.href='login.php';
</script>";
exit;
}
else {
echo("저장중오류 : $sql");
exit();
}
}
?> | |
그리고 만약 넘어온 id($id)와 같은 레코드가 하나라도 존재한다면 그 아이디는 이미 사용중인 아이디임으로 재입력을 요구 하고 그렇지 않으면 DB에 저장을 하면 된다 DB저장후 결과식별자($rst)에 참(true)값이 들어가면 회원가입을 알리고 login.php로 이동하고 그렇지 않으면 디버깅을 위해 $sql를 화면에 찍어 보았다.
4. login.php
단순히 id와 pwd를 받아서 다음페이지로 넘기는 기능을 한다.
login.php
<html> <head><title>회원 로긴 창</title></head> <body> <center> <form method="post" action="login_ok.php"> <TABLE border=1 cellspacing=0> <TR> <TD colspan=2 align=center>Member LOGIN</TD> </TR> <TR> <TD align=center>사용자ID</TD> <TD align=center><INPUT TYPE="text" NAME="id"></TD> </TR> <TR> <TD align=center>비밀번호</TD> <TD align=center><INPUT TYPE="password" NAME="pwd"></TD> </TR> <TD colspan=2 align=center><INPUT TYPE="submit" value=" OK "> <a href="regist.php">회원가입</a> </TD> </TR> </TABLE> </center> </form> </body> </html>
| |
5. login_ok.php
사용자가 입력한 아이디($id), 비밀번호($pwd)를 받아서 DB에 같은 ID가 존재 하는지 비밀번호는 맞는지 그러한 작업들이 이루어지겠죠. ID나 비밀번호가 다르다면 이전 페이지로 다시 넘기고 맞다면 Cookie값을 설정해 주면 되겠습니다.
login_ok.php
<? include("../dbconn.inc");
$sql = "select mem_id, mem_pwd from member where mem_id='$id'"; $rst = mysql_query($sql, $connect); $row = mysql_fetch_array($rst); if (!$row[mem_id]) {
echo "<script language='javascript'>
alert('ID없음!');
history.back();
</script>";
exit;
}
elseif($pwd !=$row[mem_pwd]){
echo "<script language=javascript>
alert('비밀번호 오류!');
history.back();
</script>";
exit;
}
else{
setcookie("ckid",$row[mem_id],time()+3600,"/");
setcookie("ckname",$row[mem_name],time()+3600,"/"); echo("<meta http-equiv='Refresh' content='0; URL=./main.php'>");
exit;
}
?> | |
첫번째, $row[mem_id]와 사용자가 입력한 $id의 같은 값이 존재를 하지 않는다면 가입이 되지 않을 사용자이므로 ID없음이라고 경고 메시지를 보여주고 이전 페이지로 이동하게 된다. $row[mem_id] 대신에 $row[0]를 사용해 된다.
두번째, $row[mem_pwd]와 사용자가 입력한 $pwd의 같은 값이 존재하지 않는다면 즉 비밀번호가 다르다는 말이죠 이경우에도 이전페이지로 넘기게 하였다. 여기서도 $row[mem_pwd] 대신에 $row[1]를 사용할 수 있다.
세번째, ID와 비밀번호가 일치하게 될 경우 쿠키값을 주게 된다. ckid라는 변수에 $id값를 대입하고 쿠키 설정 기간은 현재시간부터 3600초(1시간)으로 설정하였다. "/"는 한 가상디렉토리에서 적용하도록 범위를 주었다.
6. main.php
쿠키값이 있는 사용자(로긴을 한 사용자)와 없는 사용자를 구분하여 화면에 다른 페이지를 보여 주는 부분이다.
main.php
<? if($HTTP_COOKIE_VARS["ckid"]){ echo "{$HTTP_COOKIE_VARS["ckid"]}님 반갑습니다<br>"; echo "<a href='mem_logout.php'>로그아웃</a><br>"; echo "<a href='mem_edit.php'>개인정보수정</a><br>"; echo "<a href='mem_del.php'>회원탈퇴</a><br>"; } else{ echo "<a href=login.php>회원로긴</a>";} ?> | |
쿠키값을 PHP에 불러 올때는 $HTTP_COOKIE_VARS["변수명"] 형태의 연관배열로 가져 오면 된다. $id로 가져 올수 있지만 구분을 하기 위해 이렇게 사용하도록 하자.
7. mem_edit.php
회원이 자기정보를 수정할 때는 그 회원의 정보를 그대로 가입폼에 보여주면 된다.
mem_edit.php
<? if (!$HTTP_COOKIE_VARS["ckid"]) { echo "<SCRIPT> location.href='login.php'; </SCRIPT>"; } include("../dbconn.inc"); $sql = "select * from member where mem_id='$HTTP_COOKIE_VARS[ckid]'"; $rst = mysql_query($sql, $connect);
$row = mysql_fetch_array($rst); $ssn = explode("-", $row[mem_ssn]);
?> <HTML>
<HEAD>
<TITLE> 회원수정 </TITLE>
</HEAD>
<BODY>
<center>
<h3>회원등록정보수정</h3>
<FORM METHOD=POST ACTION="mem_edit_ok.php">
<TABLE border=1 cellspacing=0>
<TR>
<TD>이름</TD>
<TD><?=$row[mem_name]?> </TD>
</TR>
<TR>
<TD>사용자ID</TD>
<TD><?=$row[mem_id]?></TD>
</TR>
<TR>
<TD>암호</TD>
<TD><INPUT TYPE="password" name=pwd1 size=10 value="<?=$row[mem_pwd]?>"></TD>
</TR>
<TR>
<TD>암호확인</TD>
<TD><INPUT TYPE="password" name=pwd2 size=10 value="<?=$row[mem_pwd]?>"></TD>
</TR>
<TR>
<TD>주민등록번호</TD>
<TD><INPUT TYPE="text" NAME="ssn1" size=6 value="<?=$ssn[0]?>">- <INPUT TYPE="text" NAME="ssn2" size=7 value="<?=$ssn[1]?>"></TD>
</TR>
<TR>
<TD>성별</TD>
<TD><INPUT TYPE="radio" NAME="sex" value="M" <? if($row[mem_sex] == "M") echo "checked";?>>남자
<INPUT TYPE="radio" NAME="sex" value="F" <? if($row[mem_sex] == "F") echo "checked";?>>여자
</TD>
</TR>
<TR>
<TD>직업</TD>
<TD><SELECT NAME="job" size=1>
<option value="학생" <? if($row[mem_job] == "학생") echo "selected"; ?>>학생</option>
<option value="직장인" <? if($row[mem_job] == "직장인") echo "selected"; ?>>직장인</option>
<option value="기타" <? if($row[mem_job] == "기타") echo "selected"; ?>>기타</option>
</SELECT>
</TD>
</TR>
<TR>
<TD>E-mail</TD>
<TD><INPUT TYPE="text" NAME="email" size=35 value="<?=$row[mem_email]?>"></TD>
</TR>
<TR>
<TD>자기소개</TD>
<TD><TEXTAREA NAME="intro" ROWS="5" COLS="45"><?=$row[mem_intro]?></TEXTAREA></TD>
</TR> </TABLE><p>
<INPUT TYPE="submit" value=회원수정> <INPUT TYPE="reset" value="취소">
</FORM>
<center>
</BODY>
</HTML> | |
$ssn = explode("-", $row[mem_ssn]);는 explode() 함수는 문자열에 "-"로 구분하여 각각 $ssn[0],$ssn[1]...에 넣게 된다. 여기서 주민번호는 "-" 로 구분되기 때문에 이렇게 처리를 했다. 이름과 ID는 입력할 수 없도록 처리 했고 나머지는 입력폼에 value=<?=$row[필드명]?>의 형태로 처리 하였다.
8. mem_edit_ok.php
수정폼에서 넘온 값으로 업데이트를 처리 하면 되겠다. 그런 후에 main.php로 이동을 시켜준다.
mem_edit_ok.php
<? include("../dbconn.inc"); $sql = "Update member set mem_pwd = '$pwd1',
mem_ssn = '$ssn1-$ssn2',
mem_sex = '$sex',
mem_job = '$job',
mem_email = '$email',
mem_intro = '$intro' where mem_id = '$HTTP_COOKIE_VARS[ckid]' "; $rst = mysql_query($sql, $connect); if($rst){
echo("<script language='javascript'>
alert('정보수정완료!');
</script>
<meta http-equiv='Refresh' content='0; URL=./main.php'>");
exit;
}
else {
echo("Error : $sql");
exit; }
?> | |
ID가 $HTTP_COOKIE_VARS[id] 레코드를 수정폼에서 넘어온 값으로 Update를 한다. 이름, ID는 수정을 할 수 없도록 구성되어 있다.
9. mem_logout.php
로그 아웃은 쿠키값을 지워 주기만 하면 된다.
mem_logout.php
<? if ($HTTP_COOKIE_VARS["ckid"]) { setcookie("ckid",null,time(),"/"); } echo "<meta http-equiv='Refresh' content='0; URL=./main.php'>"; ?> | |
쿠키값이존재하면 setcookie("id",null,time(),"/")의 형태로 id에 null값을 넣고 시간을 현재시간으로 하면 간단하게 쿠키가 삭제 될 것이다.
회원삭제 부분은 여러분들이 스스로 처리할 수 있을 것이다. 수정과 다른 점은 삭제처리후 로그아웃으로 이동을 시켜 주어야 한다는 점이다.
출처 : http://blog.naver.com/aspdotnet/140004852471