Web Programming >> PHP Programming
|
[목차] |
제21장 온라인 서점 쇼핑몰 만들기
3. 관리자 인증 처리 구현
관리자용 웹문서들은 /shop/admin/이라는 디렉토리를 만들고, admin디렉토리에 저장한다. 관리자 페이지를 따로 관리하기 위해서이다. / -- shop/ -- admin/ --- product/ (제품관리) | | | +- order/ (주문관리) | | | +- admin.html (관리자 인증에 필요한 파일) | +- index.html (아이디와 암호를 입력하는 폼) | +- login_process.html (로그인 처리프로그램) | +- home.html (관리자 화면) | +- menu.html (메뉴) | +- welcome.html (환영 메시지) | +- logout.html (종료 프로그램) | +-- user_function.html (사용자 정의 함수들) | +-- dbconn.html (DB connect에 필요한 파일)
디렉토리 구조는 위와 같다.
1. 관리자용 테이블 $ vi admin.sql CREATE TABLE admin ( uid int(9) unsigned DEFAULT '1' NOT NULL auto_increment, id varchar(30) DEFAULT '' NOT NULL, passwd varchar(30) DEFAULT '', logindate int(10) unsigned NOT NULL, PRIMARY KEY (uid) );
INSERT INTO admin (id,passwd) VALUES ('admin',password('1234')); $ mysql -u jklee -p bookshop < admin.sql
2. 로그인 화면(index.html)
<HTML> <HEAD> <TITLE> 온라인 서점 관리자 인증 - 로그인 화면 </TITLE> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <CENTER> <FONT SIZE=6 FACE='Comic Sans MS'>[ 관리자 인증 ]</FONT><BR>
<FORM METHOD=POST ACTION=login_process.html NAME=loginform> <TABLE border cellpadding=3 cellspacing=0 bordercolor=#545F81 width=400> <TR BGCOLOR=white> <TD ALIGN=CENTER bgcolor=#B3BBCD><FONT SIZE=2>아이디</FONT></TD> <TD><FONT SIZE=2><INPUT TYPE=TEXT NAME=id SIZE=15 MAXLENGTH=15></TD> </TR> <TR BGCOLOR=white> <TD ALIGN=CENTER bgcolor=#B3BBCD><FONT SIZE=2>비밀번호</FONT></TD> <TD><FONT SIZE=2><INPUT TYPE=PASSWORD NAME=passwd SIZE=15 MAXLENGTH=30></TD> </TR>
</TABLE><br> <TABLE WIDTH=400> <TR> <TD ALIGN=CENTER><INPUT TYPE=submit VALUE='로그인' ></TD> </TR> </TABLE> </FORM> </BODY> </HTML>
3. 인증 처리 프로그램(login_process.html) <? include "../user_function.html"; include "../dbconn.html";
if($id && $passwd) { if(!$id) { error('아이디를 입력하여 주세요.'); exit; } else if(!$passwd) { error('비밀번호를 입력하여 주세요.'); exit; } else { $result = mysql_query("SELECT password('$passwd')"); $user_passwd = mysql_result($result,0,0); $query = "SELECT id FROM admin WHERE id='$id' AND passwd='$user_passwd'"; $result = mysql_query($query);
if(!$result) { $errNO = mysql_errno($dbconn); $errMSG = mysql_error($dbconn); error("에러코드 $errNO : $errMSG"); exit; } $total_record = mysql_num_rows($result); if(!$total_record) { error('아이디 또는 암호 오류.'); exit; } else { $row = mysql_fetch_object($result);
session_start();
session_register("user_id"); session_register("user_logindate"); $user_id = $row->id;
$logindate = time(); $user_logindate = $logindate;
$query = "UPDATE admin SET logindate = $logindate WHERE id = '$row->id'"; $result = mysql_query($query); if(!$result) { error("QUERY_ERROR"); exit; }
echo " <SCRIPT> location.replace('home.html'); </SCRIPT>"; exit;
}
} } ?>
4. 관리자화면 관리자 인증후, 관리자 화면은 프레임으로 나뉘어서, 화면이 구성된다. 필요한 파일은 home.html, menu.html, welcome.html 세 개의 문서이다. 파일명 : home.html <? include "../user_function.html"; include "../dbconn.html";
include("admin.html");
if(!$user_id || strcmp($row->logindate,$user_logindate)) { echo ("<meta http-equiv='Refresh' content='0; URL=../'>"); exit; }
?>
<html> <head><title> 관리자 화면</title></head> <frameset border=1 cols="135,*"> <frame scrolling=no noresize src="menu.html" name=bookshop-menu> <frame scrolling=auto src="welcome.html" name='bookshop_detail'> </frameset> </html>
파일명 : menu.html <? include "../user_function.html"; include "../dbconn.html";
include("admin.html");
if(!$user_id || strcmp($row->logindate,$user_logindate)) { echo ("<meta http-equiv='Refresh' content='0; URL=../'>"); exit; } ?> <HTML> <HEAD> <TITLE> 관리자 - 메뉴 </TITLE> </HEAD>
<BODY BGCOLOR="#EEEEEE"> <br> <UL> <LI> <A HREF="product/list.html" target="bookshop-detail">제품관리</A> <LI> <A HREF="order/" target="bookshop-detail">주문관리</A><br> <LI> <a href="logout.html" target="_top">종료</a>
</UL> </BODY> </HTML>
파일명 : welcome.html <? include "../user_function.html"; include "../dbconn.html";
include("admin.html");
if(!$user_id || strcmp($row->logindate,$user_logindate)) { echo ("<meta http-equiv='Refresh' content='0; URL=../'>"); exit; }
?>
<HTML> <HEAD> <TITLE> 로그인을 환영합니다. </TITLE> </HEAD> <BODY BGCOLOR="#EEEEEE"> <br> <center> <h1>로그인을 환영합니다. </h1> </center> </BODY> </HTML>
3. 로그 아웃 (logout.html)
<? session_start(); $user_id = null; $HTTP_SESSION_VARS["user_id"] = null; $user_logindate = null; $HTTP_SESSION_VARS["user_logindate"] = null;
// echo "<SCRIPT>top.close();</SCRIPT>";
echo ("<meta http-equiv='Refresh' content='0; URL=./'>");
?>
4. 기타 실행에 필요한 Include파일들 파일명 : dbconn.html <? ########## 데이터베이스 서버에 연결한다. ########## $dbconn = mysql_connect("localhost","jklee","1234") or die("DB서버 연결에 실패하였습니다!");
########## BOOKSHOP 데이터베이스를 선택한다. ########## $status = mysql_select_db("bookshop",$dbconn); if(!$status) { $errNO = mysql_errno($dbconn); $errMSG = mysql_error($dbconn);
error("에러코드 $errNO : $errMSG<br>"); exit; } ?>
파일명 : user_function.html <?
function error($text) { echo " <SCRIPT> alert('$text'); history.go(-1); </SCRIPT>"; }
?>
파일명 : admin.html <? session_start();
if($user_id != "") { ########## 현재 로그인한 사용자의 데이터를 회원테이블에서 가져온다. ########## $query = "SELECT logindate FROM admin WHERE id = '$user_id'"; $result = mysql_query($query); if(!$result) { error("QUERY_ERROR"); exit; } $rows = mysql_num_rows($result);
if($rows) { $row = mysql_fetch_object($result); } }
?>
|
[목차] |