Web Programming >> PHP Programming
|
[목차] |
제24장 쇼핑몰 만들기 2
6. 추천상품 기능 추가
추천상품은 구매자 메인 화면에 나타나는 제품들이다. 이기능을 위해 아래와 같이 제품 중에서 추천상품을 체크할 필드가 하나 필요하다. 이 필드의 값이 1이상이면 추천상품에 등록된다. 숫자가 높을수록 우선순위가 높은 추천상품이다.
1. 테이블의 필드 추가 ALTER TABLE product ADD suggest INT (5) UNSIGNED DEFAULT '0' not null
2. 추천상품 기능 추가 관리자 기능에서 추천상품을 등록하는 부분이 필요하다. 파일명 : product/postform.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> <style type="text/css"> <!-- a:link,a:visited,a:active { text-decoration : none; font-size: 10pt; } a:hover { text-decoration : underline; font-size: 10pt; color : red; } //--> </style> <script language="javascript"> <!-- function checkIt(form) { if(!form.name.value) { alert('이름을 입력하세요!'); form.name.focus(); return; } form.submit(); } //--> </script> <body bgColor="#FFFFFF"> <table width="500" border="0" align="center" cellspacing="0" cellpadding="0"> <tr> <td align=center height=30><b><font size=4>제 품 관 리</font></b></td> </tr> </table>
<form name="signform" method="POST" ENCTYPE="multipart/form-data" action="post.html"> <table width="500" border="0" cellspacing="1" cellpadding="0" align="center"> <tr> <td bgColor="#000000"> <table width="500" border="0" cellspacing="1" cellpadding="5" align="center"> <tr> <td width="120" align="center" bgColor="#BBBBBB"><font size=2>분류 </font></td> <td width="380" bgColor="#EEEEEE"> <input type="text" name="part" size="20" maxlength="20"></td> </tr> <tr> <td align="center" bgColor="#BBBBBB"><font size=2>도서명</font></td> <td bgColor="#EEEEEE"> <input type="text" name="name" size="30" maxlength="50"></td> </tr> <tr> <td align="center" bgColor="#BBBBBB"><font size=2>지은이</font></td> <td bgColor="#EEEEEE"> <input type="text" name="author" size="30" maxlength="30"></td> </tr> <tr> <td align="center" bgColor="#BBBBBB"><font size=2>가격</font></td> <td bgColor="#EEEEEE"> <input type="text" name="price" size="15" maxlength="15"></td> </tr> <tr> <td align="center" bgColor="#BBBBBB"><font size=2>출판일</font></td> <td bgColor="#EEEEEE"> <input type="text" name="date" size="15" maxlength="15"></td> </tr> <tr> <td align="center" bgColor="#BBBBBB"><font size=2>재고량</font></td> <td bgColor="#EEEEEE"> <input type="text" name="remain" size="5" maxlength="5"></td> </tr> <tr> <td align="center" bgColor="#BBBBBB"><font size=2>등록할 파일</font></td> <td bgColor="#EEEEEE"> <input type="file" name="userfile" size="15"><font size=2>(Maximum : 20M)</font></td> </tr> <tr> <td align="center" bgColor="#BBBBBB"><font size=2>추천상품</font></td> <td bgColor="#EEEEEE"> <input type="text" name="suggest" size="5" maxlength="5"> <br>1이상이면 추천상품에 등록됩니다.</td> </tr> <tr> <td align="center" bgColor="#BBBBBB"><font size=2>자 료 소 개</font> </td> <td bgColor="#EEEEEE"><textarea name="info" cols="50" rows="10"></textarea> </tr> <tr> <td align="center" colspan="2" bgColor="#BBBBBB"> <font size=2> <input type="button" value="자료 등록" onClick="checkIt(this.form)"> <input type="reset" value="취 소"> </font> </td> </tr> </table> </td> </tr> </table> </form> </body> </html>
파일명 : product/post.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; }
if(!ereg("([^[:space:]]+)", $name)) { error("INVALID_NAME"); exit; }
if($userfile_name == "") { $userfile_name = ""; } else { ########## 파일이 저장될 자료실의 디렉토리를 설정한다. ########## $savedir = "../../product_files";
########## 등록한 파일이 업로드가 허용되지 않는 확장자를 갖는 파일인지를 검사한다. ########## $full_filename = explode(".", "$userfile_name"); $extension = $full_filename[sizeof($full_filename)-1];
if(strcmp($extension,"jpg") && strcmp($extension,"gif")) { error("NO_ACCESS_UPLOAD"); exit; } ########## 등록하려는 파일과 동일한 이름을 갖는 파일이 이미 존재하는지를 검사한다. ########## $same_file_exist = file_exists("$savedir/$userfile_name"); if($same_file_exist) { error("SAME_FILE_EXIST"); exit; }
########## 등록하려는 파일을 현재 자료실의 지정디렉토리에 저장 ########## if(!copy($userfile,"$savedir/$userfile_name")) { error("UPLOAD_COPY_FAILURE"); exit; }
########## 작업이 끝난후 임시디렉토리에 저장된 파일을 삭제한다. ########## if(!unlink($userfile)) { error("UPLOAD_DELETE_FAILURE"); exit; }
}
########## 데이터베이스에 입력값을 삽입한다. ########## $query = "INSERT INTO product (uid, part,name, author, price, date,info,remain,userfile,suggest) VALUES ('$new_uid', '$part','$name', '$author', $price, '$date', '$info', $remain, '$userfile_name',$suggest)";
$result = mysql_query($query); if($result) { ########## 리스트 출력화면으로 이동한다. ########## echo ("<meta http-equiv='Refresh' content='0; URL=list.html'>"); } else { error("QUERY_ERROR"); exit; }
?>
파일명 : product/modifyform.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> <style type="text/css"> <!-- a:link,a:visited,a:active { text-decoration : none; font-size: 10pt; } a:hover { text-decoration : underline; font-size: 10pt; color : red; } //--> </style>
<script language="javascript"> <!-- function checkIt(form) { if(!form.name.value) { alert('이름을 입력하세요!'); form.name.focus(); return; } form.submit(); }
function focusIt() { document.signform.name.focus(); } //--> </script> <body bgColor="#FFFFFF" onLoad="focusIt()"> <?
######### 파일이 저장될 자료실의 디렉토리를 설정한다. ########## $savedir = "../../product_files";
########## 수정하고자 하는 글의 입력값을 뽑아낸다. ########## $query = "SELECT name,part,author,price,date,info,remain,userfile,suggest FROM product WHERE uid = $number"; $result = mysql_query($query); if(!$result) { error("QUERY_ERROR"); exit; }
$my_name = mysql_result($result,0,0); $my_part = mysql_result($result,0,1); $my_author = mysql_result($result,0,2); $my_price = mysql_result($result,0,3); $my_date = mysql_result($result,0,4); $my_info = mysql_result($result,0,5); $my_remain = mysql_result($result,0,6); $my_filename = mysql_result($result,0,7); $my_suggest = mysql_result($result,0,8);
########## addslashes() 함수로 escape된 제목과 본문의 문자열을 원상복귀시킨다. ##########
$my_info = stripslashes($my_info);
########## 검색문자열을 인코딩한다. ########## $encoded_key = urlencode($key); ?> <table width="500" border="0" align="center" cellspacing="0" cellpadding="0"> <tr> <td align=center height=30><b><font size=4>제 품 관 리</font></b></td> </tr> </table>
<form name="signform" method="post" ENCTYPE="multipart/form-data" action="modify.html?page=<?echo("$page")?>&number=<?echo("$number")?>&keyfield=<?echo("$keyfield")?>&key=<?echo("$encoded_key ")?>">
<table width="502" border="0" cellspacing="1" cellpadding="0" align="center"> <tr> <td bgColor="#000000"> <table width="500" border="0" cellspacing="1" cellpadding="5" align="center"> <tr> <td width="120" align="center" bgColor="#BBBBBB"><font size=2>도서명</font></td> <td width="380" bgColor="#EEEEEE"> <input type="text" name="name" size="20" maxlength="10" value="<?echo ("$my_name")?>"></td> </tr> <tr> <td align="center" bgColor="#BBBBBB"><font size=2>분류</font></td> <td bgColor="#EEEEEE"> <input type="text" name="part" size="30" maxlength="40" value="<?echo ("$my_part")?>"></td> </tr> <tr> <td align="center" bgColor="#BBBBBB"><font size=2>지은이</font></td> <td bgColor="#EEEEEE"> <input type="text" name="author" size="35" maxlength="60" value="<?echo ("$my_author")?>"></td> </tr> <tr> <td align="center" bgColor="#BBBBBB"><font size=2>출판일</font></td> <td bgColor="#EEEEEE"> <input type="text" name="date" size="40" maxlength="40" value='<?echo ("$my_date")?>'></td> </tr> <tr> <td align="center" bgColor="#BBBBBB"><font size=2>가격</font></td> <td bgColor="#EEEEEE"> <input type="text" name="price" size="40" maxlength="40" value='<?echo ("$my_price")?>'></td> </tr> <tr> <td align="center" bgColor="#BBBBBB"><font size=2>재고수량</font></td> <td bgColor="#EEEEEE"> <input type="text" name="remain" size="40" maxlength="40" value='<?echo ("$my_remain")?>'></td> </tr> <tr> <td align="center" bgColor="#BBBBBB"><font size=2>등 록 파 일</font></td> <td bgColor="#EEEEEE"><font size=2> <input type="file" name="userfile" size="30"> <input type='hidden' name='o_userfile' value='<?echo("$my_filename");?>'><br> <?if($my_filename !="") echo("<img src=\"$savedir/$my_filename\" border=0>")?></font></td> </tr> <tr> <td align="center" bgColor="#BBBBBB"><font size=2>추천상품</font></td> <td bgColor="#EEEEEE"> <input type="text" name="suggest" size="5" maxlength="5" value="<?echo ("$my_suggest")?>"> <br>1이상이면 추천상품에 등록됩니다.</td> </tr> <tr> <td align="center" bgColor="#BBBBBB"><font size=2>도 서 소 개</font> </td> <td bgColor="#EEEEEE"><textarea name="info" cols="50" rows="5"><?echo("$my_info")?></textarea> </tr> <tr> <td align="center" colspan="2" bgColor="#BBBBBB"> <font size=2> <input type="button" value=" 수 정 " onClick="checkIt(this.form)"> <input type="reset" value=" 취 소 "> </font> </td> </tr> </table> </td></tr> </table> </form> </body> </html>
파일명 : product/modify.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; }
if(!ereg("([^[:space:]]+)", $name)) { error("INVALID_NAME"); exit; }
$info = addslashes($info);
$savedir = "../../product_files";
$filename = $o_userfile;
if(!strcmp($userfile,"none")) { $userfile_name = $filename; } else { if($filename != "") { $same_file_exist = file_exists("$savedir/$filename"); if($same_file_exist) { unlink("$savedir/$filename"); } }
########## 등록한 파일이 업로드가 허용되지 않는 확장자를 갖는 파일인지를 검사한다. $full_filename = explode(".", "$userfile_name");
$extension = $full_filename[sizeof($full_filename)-1];
if(strcmp($extension,"gif") && strcmp($extension,"jpg")) { error("NO_ACCESS_UPLOAD"); exit; }
########## 등록하려는 파일과 동일한 이름을 갖는 파일이 이미 존재하는지를 검사한다. $userfile_name_id = $userfile_name;
$userfile_id = 0; while(file_exists("$savedir/$userfile_name_id")) { $userfile_id = $userfile_id + 1; $userfile_name_id = $userfile_id."_".$userfile_name_id; }
if($userfile_id != 0) $userfile_name = $userfile_name_id; if(!copy($userfile,"$savedir/$userfile_name")) { error("UPLOAD_COPY_FAILURE"); exit; }
########## 작업이 끝난후 임시디렉토리에 저장된 파일을 삭제한다. ########## if(!unlink($userfile)) { error("UPLOAD_DELETE_FAILURE"); exit; } }
if($price == "") $price = 0;
$query = "UPDATE product SET name = '$name', part = '$part', author = '$author', price = $price, date = '$date',info = '$info',remain = $remain, userfile='$userfile_name' , suggest=$suggest WHERE uid = $number";
$result = mysql_query($query); if (!$result) { error("QUERY_ERROR"); exit; } echo("<meta http-equiv='Refresh' content='0; URL=list.html?page=$page&keyfield=$keyfield&key=$encoded_key'>");
?>
기타 제품관리에서 list.html(목록보기)에서 추천레벨를 표시해주면 좋을 것같다. 그리고, viewbody.html(세부내역보기)에서도 추천레벨이 표시되어야 할 것 같다. 수정해보기 바란다.
welcome.html이 구매자 화면의 처음에 나타나는 메인 화면이다. 파일명 : welcome.html <? session_start();
include "./user_function.html"; include "./dbconn.html";
$imgdir = "./product_files";
if(!$user_uid) {
$result = mysql_query("SELECT max(uid)+1 FROM sold"); if (!$result) { error("QUERY_ERROR"); exit; } $new_uid = (int)mysql_result($result,0,0);
$query = "INSERT INTO sold (uid) VALUES ($new_uid)"; $result = mysql_query($query); if (!$result) { error("QUERY_ERROR"); exit; }
session_register("user_uid"); $user_uid = $new_uid; } ?> <HTML> <HEAD> <TITLE> 환영합니다. </TITLE> <style type="text/css"> <!-- a:link,a:visited,a:active { text-decoration : none; } a:hover { text-decoration : underline; color : red; } TABLE, TD, TR, TH { font-size : 10pt; } //--> </style> <script language="javascript"> <!-- function newWindow(ref) { var window_left = (screen.width-900)/2; var window_top = (screen.height-500)/2; window.open(ref,"profilewindow",'width=900,height=500,status=no,scrollbars=yes,top=' + window_top + ',left=' + window_left + ''); } //--> </script>
</HEAD> <BODY BGCOLOR="#EEEEEE"> <br> <center> <h1>방문을 환영합니다. </h1> </center> <br> <br> <table border="0" cellpadding="0" width="800" align=left> <tr> <td align=center> <? $query1 = "SELECT uid,name,author,price,userfile,info FROM product WHERE suggest > 0 ORDER BY suggest "; $result1 = mysql_query($query1); if (!$result1) { error("QUERY_ERROR"); exit; } $total_record1 = mysql_num_rows($result1);
echo("<font size=3><b>추천상품</b></font>"); ?>
<table border="0" width="600" align="center" cellspacing="0" cellpadding="0"> <tr><td colspan=3><hr size=1></td></tr> <? for($i = 0; $i < $total_record1; $i++) { $my_p_uid = mysql_result($result1,$i,0); $my_p_name = mysql_result($result1,$i,1); $my_p_author = mysql_result($result1,$i,2); $my_p_price = mysql_result($result1,$i,3); $my_p_imgname = mysql_result($result1,$i,4); $my_p_info = mysql_result($result1,$i,5); ?> <tr><td width="100" rowspan=4 align=center> <?if($my_p_imgname == ""){ echo("<font color=red>그림없음"); }else {?> <img src=<?echo("$imgdir/$my_p_imgname");?> border=0> <?}?> </td><td width=90>도서명</td> <td height="25" align=left> <a href="javascript:view_product_Window('viewproduct.html?number=<?echo("$my_p_uid");?>')"><?echo("$my_p_name");?></a> </td></tr> <tr><td height="25">지은이</td> <td height="25" align=left><?echo("$my_p_author");?></td> </tr> <tr><td height="100%">내용</td> <td valign="top" height="25" align=left> <?echo("$my_p_info");?></td> </tr> <tr><td height="25">가격</td> <td height="25" align=left><?echo("$my_p_price");?> <a href="save_bag.html?part=<?echo("$part");?>&number=<?echo("$my_p_uid");?>">담기</a> </td></tr> <tr><td colspan=3><hr size=1></td></tr> <? } echo("</table>"); ?> <br><br> </td></tr> </table>
</BODY> </HTML>
|
[목차] |