포인트몰 만들기의 두번째 시간입니다.
지난시간에는 DB 를 설계 하였는데요.
먼저 기본 인클루되는 파일들입니다.
<?
//######################################
//
// 사용자정의함수파일 : lib.php
//
//######################################
$mysql_host = 'localhost';
$mysql_user = 'handsome';
$mysql_password = 'handsome';
$mysql_db = 'handsome';
//DB 접속 및 데이터 베이스 선택 사용자 함수
function sql_connect($db_host, $db_user, $db_pass, $db_name)
{
$result = mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error());
mysql_select_db($db_name) or die(mysql_error());
return $result;
}
// 쿼리 함수
function sql_query($sql)
{
global $connect;
$result = @mysql_query($sql, $connect) or die("<p>$sql<p>" . mysql_errno() . " : " . mysql_error() . "<p>error file : $_SERVER[PHP_SELF]");
return $result;
}
// 갯수 구하는 함수
function sql_total($sql)
{
global $connect;
$result_total = sql_query($sql, $connect);
$data_total = mysql_fetch_array($result_total);
$total_count = $data_total[cnt];
return $total_count;
}
// 쿼리를 실행한 후 결과값에서 한행을 구하는 함수
function sql_fetch($sql, $error=TRUE)
{
$result = sql_query($sql, $error);
$row = mysql_fetch_array($result);
return $row;
}
// 쿼리를 실행 한 후 결과값의 목록을 배열로 구하는 함수
function sql_list($sql)
{
$sql_q = sql_query($sql);
$sql_list = array();
while($sql_r = mysql_fetch_array($sql_q)){
$sql_list[]= $sql_r;
}
return $sql_list;
}
// 경고창 띄우고 이동시키는 함수
function alert($msg='', $url='')
{
if (!$msg) $msg = '올바른 방법으로 이용해 주십시오.';
echo "<script language='javascript'>alert('$msg');";
echo "</script>";
if($url){
goto_url($url);
}else{
echo "<script language='javascript'>history.back();";
echo "</script>";
}
exit;
}
// 페이지 이동시키는 함수
function goto_url($url)
{
echo "<script language='JavaScript'> location.replace('$url'); </script>";
exit;
}
// 페이징 사용자 함수
function paging($page, $page_row, $page_scale, $total_count, $ext = '')
{
// 1. 전체 페이지 계산
$total_page = ceil($total_count / $page_row);
// 2. 페이징을 출력할 변수 초기화
$paging_str = "";
// 3. 처음 페이지 링크 만들기
if ($page > 1) {
$paging_str .= "<a href='".$_SERVER[PHP_SELF]."?page=1&'".$ext.">처음</a>";
}
// 4. 페이징에 표시될 시작 페이지 구하기
$start_page = ( (ceil( $page / $page_scale ) - 1) * $page_scale ) + 1;
// 5. 페이징에 표시될 마지막 페이지 구하기
$end_page = $start_page + $page_scale - 1;
if ($end_page >= $total_page) $end_page = $total_page;
// 6. 이전 페이징 영역으로 가는 링크 만들기
if ($start_page > 1){
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".($start_page - 1)."&'".$ext.">이전</a>";
}
// 7. 페이지들 출력 부분 링크 만들기
if ($total_page > 1) {
for ($i=$start_page;$i<=$end_page;$i++) {
// 현재 페이지가 아니면 링크 걸기
if ($page != $i){
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".$i."&'".$ext."><span>$i</span></a>";
// 현재페이지면 굵게 표시하기
}else{
$paging_str .= " <b>$i</b> ";
}
}
}
// 8. 다음 페이징 영역으로 가는 링크 만들기
if ($total_page > $end_page){
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".($end_page + 1)."&'".$ext.">다음</a>";
}
// 9. 마지막 페이지 링크 만들기
if ($page < $total_page) {
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".$total_page."&'".$ext.">맨끝</a>";
}
return $paging_str;
}
// 세션사용은 위한 초기화
session_start();
// DB 연결
$connect = sql_connect($mysql_host, $mysql_user, $mysql_password, $mysql_db);
?>
[lib.php 소스] 사용하는 함수들의 모음 파일
<?
include "./lib.php";
?>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=euc-kr">
<title>PHPer's Heaven
포인트몰</title>
</head>
<table
style="width:1000px;height:50px;border:5px #CCCCCC solid;">
<tr>
<td align="center"
valign="middle" style="font-zise:15px;font-weight:bold;">
PHPer's Heaven 포인트몰
</td>
</tr>
</table>
<table
style="width:1000px;height:50px;border:5px #CCCCCC solid;">
<tr>
<td align="center"
valign="middle" style="font-size:12px;"><a
href="./index.php">포인트몰</a></td>
<?
// 1.로그인 여부에 따라 상단 메뉴가 다르게
if($_SESSION[user_idx]){
?>
<td align="center" valign="middle" style="font-size:12px;"><a href="./cart.php">장바구니</a></td>
<td align="center"
valign="middle" style="font-size:12px;"><a
href="./member.php">구매내역</a></td>
<td align="center"
valign="middle" style="font-size:12px;"><a
href="./point.php">포인트관리</a></td>
<td align="center"
valign="middle" style="font-size:12px;"><a
href="./order_list.php">판매내역</a></td>
<td align="center"
valign="middle" style="font-size:12px;"><a
href="./item_list.php">상품관리</a></td>
<td align="center"
valign="middle" style="font-size:12px;"><a
href="./logout.php">로그아웃</a></td>
<?}else{?>
<td align="center"
valign="middle" style="font-size:12px;"><a
href="./member_join.php">회원가입</a></td>
<td align="center"
valign="middle" style="font-size:12px;"><a
href="./login.php">로그인</a></td>
<?}?>
</tr>
</table>
<br>
[head.php
소스] 모든 파일의 상단과 인클루드 파일을 포함한 파일
메뉴를 보면 포인트를 사는 포인트몰, 장바구니와 본인의 구매내역, 포인트를 구매하고 구매한 목록을 보는 포인트관리, 판매한 내역을 보는 판매내역, 상품을 관리하는 상품관리가 있습니다.
이번시간에는 기존에 해봤던 회원가입, 로그인, 로그아웃 과 포인트관리를 배워봅니다.
일단 회원 부분은 설명없이 소스만 보고 가도록 하겠습니다.
<?
// 1. 공통 인클루드 파일
include ("./head.php");
// 2. 로그인한 회원은 뒤로 보내기
if($_SESSION[user_id]){
alert("로그인 하신 상태입니다.");
}
// 3. 입력 HTML 출력
?>
<br/>
<table style="width:1000px;height:50px;border:5px #CCCCCC solid;">
<tr>
<td align="center" valign="middle" style="font-zise:15px;font-weight:bold;">회원가입</td>
</tr>
</table>
<br/>
<form name="registForm" method="post" action="./member_join_save.php" style="margin:0px;">
<table style="width:1000px;height:50px;border:0px;">
<tr>
<td align="center" valign="middle" style="width:200px;height:50px;background-color:#CCCCCC;">아이디</td>
<td align="left" valign="middle" style="width:800px;height:50px;"><input type="text" name="m_id" style="width:380px;"></td>
</tr>
<tr>
<td align="center" valign="middle" style="width:200px;height:50px;background-color:#CCCCCC;">이름</td>
<td align="left" valign="middle" style="width:800px;height:50px;"><input type="text" name="m_name" style="width:380px;"></td>
</tr>
<tr>
<td align="center" valign="middle" style="width:200px;height:50px;background-color:#CCCCCC;">비밀번호</td>
<td align="left" valign="middle" style="width:800px;height:50px;"><input type="password" name="m_pass" style="width:380px;"></td>
</tr>
<tr>
<td align="center" valign="middle" style="width:200px;height:50px;background-color:#CCCCCC;">비밀번호 확인</td>
<td align="left" valign="middle" style="width:800px;height:50px;"><input type="password" name="m_pass2" style="width:380px;"></td>
</tr>
<!-- 4. 회원가입 버튼 클릭시 입력필드 검사 함수 member_save 실행 -->
<tr>
<td align="center" valign="middle" colspan="2"><input type="button" value=" 회원가입 " onClick="member_save();"></td>
</tr>
</table>
</form>
<script>
// 5.입력필드 검사함수
function member_save()
{
// 6.form 을 f 에 지정
var f = document.registForm;
// 7.입력폼 검사
if(f.m_id.value == ""){
// 8.값이 없으면 경고창으로 메세지 출력 후 함수 종료
alert("아이디를 입력해 주세요.");
return false;
}
if(f.m_name.value == ""){
alert("이름을 입력해 주세요.");
return false;
}
if(f.m_pass.value == ""){
alert("비밀번호를 입력해 주세요.");
return false;
}
if(f.m_pass.value != f.m_pass2.value){
// 9.비밀번호와 확인이 서로 다르면 경고창으로 메세지 출력 후 함수 종료
alert("비밀번호를 확인해 주세요.");
return false;
}
// 10.검사가 성공이면 form 을 submit 한다
f.submit();
}
</script>
[
member_join.php 소스]
<?
// 1. 공통 인클루드 파일
include ("./head.php");
// 2. 로그인한 회원은 뒤로 보내기
if($_SESSION[user_id]){
alert("로그인 하신 상태입니다.");
}
// 3. 넘어온 변수 검사
if(trim($_POST[m_id]) == ""){
alert("아이디를 입력해 주세요.");
}
if(trim($_POST[m_name]) == ""){
alert("이름을 입력해 주세요.");
}
if($_POST[m_pass] == ""){
alert("비밀번호를 입력해 주세요.");
}
if($_POST[m_pass] != $_POST[m_pass2]){
alert("비밀번호를 확인해 주세요.");
}
// 4. 같은 아이디가 있는지 검사
$chk_sql = "select * from m__member where m_id = '".trim($_POST[m_id])."'";
$chk_result = sql_query($chk_sql);
$chk_data = mysql_fetch_array($chk_result);
// 5. 가입된 아이디가 있으면 되돌리기
if($chk_data[m_idx]){
alert("이미 가입된 아이디 입니다.");
}
// 6. 회원정보 적기
$sql = "insert into m__member (m_id, m_name, m_pass, m_point) values ('".trim($_POST[m_id])."', '".trim($_POST[m_name])."', '".$_POST[m_pass]."', 0)";
sql_query($sql);
// 7. 로그인 페이지로 보내기
alert("회원가입이 완료 되었습니다.","./index.php");
?>
[member_join_save.php 소스]
<?
// 1. 공통 인클루드 파일
include ("./head.php");
// 2. 로그인한 회원은 뒤로 보내기
if($_SESSION[user_id]){
alert("로그인 하신 상태입니다.");
}
// 3. 입력 HTML 출력
?>
<br/>
<table style="width:1000px;height:50px;border:5px #CCCCCC solid;">
<tr>
<td align="center" valign="middle" style="font-zise:15px;font-weight:bold;">회원 로그인</td>
</tr>
</table>
<br/>
<form name="loginForm" method="post" action="./login_chk.php" style="margin:0px;">
<table style="width:1000px;height:50px;border:0px;">
<tr>
<td align="center" valign="middle" style="width:200px;height:50px;background-color:#CCCCCC;">아이디</td>
<td align="left" valign="middle" style="width:800px;height:50px;"><input type="text" name="m_id" style="width:380px;"></td>
</tr>
<tr>
<td align="center" valign="middle" style="width:200px;height:50px;background-color:#CCCCCC;">비밀번호</td>
<td align="left" valign="middle" style="width:800px;height:50px;"><input type="password" name="m_pass" style="width:380px;"></td>
</tr>
<!-- 4. 로그인 버튼 클릭시 입력필드 검사 함수 login_chk 실행 -->
<tr>
<td align="center" valign="middle" colspan="2"><input type="button" value=" 로그인 " onClick="login_chk();"></td>
</tr>
</table>
</form>
<script>
// 5.입력필드 검사함수
function login_chk()
{
// 6.form 을 f 에 지정
var f = document.loginForm;
// 7.입력폼 검사
if(f.m_id.value == ""){
// 8.값이 없으면 경고창으로 메세지 출력 후 함수 종료
alert("아이디를 입력해 주세요.");
return false;
}
if(f.m_pass.value == ""){
alert("비밀번호를 입력해 주세요.");
return false;
}
// 9.검사가 성공이면 form 을 submit 한다
f.submit();
}
</script>
[
login.php 소스]
<?
// 1. 공통 인클루드 파일
include ("./head.php");
// 2. 로그인한 회원은 뒤로 보내기
if($_SESSION[user_id]){
alert("로그인 하신 상태입니다.");
}
// 3. 넘어온 변수 검사
if(trim($_POST[m_id]) == ""){
alert("아이디를 입력해 주세요.");
}
if($_POST[m_pass] == ""){
alert("비밀번호를 입력해 주세요.");
}
// 4. 같은 아이디가 있는지 검사
$chk_sql = "select * from m__member where m_id = '".trim($_POST[m_id])."'";
$chk_result = sql_query($chk_sql);
$chk_data = mysql_fetch_array($chk_result);
// 5. 아이디가 존재 하는 경우
if($chk_data[m_idx]){
// 6. 입력된 비밀번호와 저장된 비밀번호가 같은지 비교해서
if($_POST[m_pass] == $chk_data[m_pass]){
// 7. 비밀번호가 같으면 세션값 부여 후 이동
$_SESSION[user_idx] = $chk_data[m_idx];
$_SESSION[user_id] = $chk_data[m_id];
$_SESSION[user_name] = $chk_data[m_name];
alert("환영합니다.", "./index.php");
}else{
// 8. 비밀번호가 다르면
alert("비밀번호가 다릅니다.");
}
}else{
// 9. 아이디가 존재하지 않으면
alert("존재하지 않는 회원입니다.");
}
?>
[login_chk.php 소스]
<?
// 1. 공통 인클루드 파일
include ("./head.php");
// 2. 모든 세션값을 빈값으로
$_SESSION[user_idx] = "";
$_SESSION[user_id] = "";
$_SESSION[user_name] = "";
session_destroy();
alert("로그아웃이 되었습니다.", "./login.php");
?>
[logout.php 소스]
이전에도 많이 설명했으니 아시리라 봅니다.
이제 포인트 구매페이지 입니다.
포인트 구매 페이지에서는 현재 자신이 보유한 포인트를 볼수 있고 또 포인트를 구매할 수 있는 페이지 입니다.
<?
// 1. 공통 인클루드 파일
include ("./head.php");
// 2. 로그인 하지 않은 회원은 로그인 페이지로 보내기
if(!$_SESSION[user_id]){
alert("로그인하셔야 이용이 가능합니다.", "./login.php");
}
// 3. 회원 데이터 불러오기
$sql = "select * from m__member where m_idx = '".$_SESSION[user_idx]."'";
$m_data = sql_fetch($sql);
// 4. HTML 출력
?>
<br/>
<table style="width:1000px;height:50px;border:5px #CCCCCC solid;">
<tr>
<td align="center" valign="middle" style="width:200px;height:50px;background-color:#CCCCCC;font-zise:15px;font-weight:bold;">보유 포인트</td>
<td align="left" valign="middle" style="width:800px;height:50px;"><?=number_format($m_data[m_point])?>점</td>
</tr>
</table>
<br/>
<form name="registForm" method="post" action="./point_save.php" style="margin:0px;">
<table style="width:1000px;height:50px;border:5px #CCCCCC solid;">
<tr>
<td align="center" valign="middle" style="font-zise:15px;font-weight:bold;">포인트 구매</td>
</tr>
<tr>
<td align="center" valign="middle" height="80">
<input type="radio" name="b_point" value="1000" checked> 1,000 포인트
<input type="radio" name="b_point" value="5000"> 5,000 포인트
<input type="radio" name="b_point" value="10000"> 10,000 포인트
<input type="radio" name="b_point" value="50000"> 50,000 포인트
</td>
</tr>
<tr>
<td align="center" valign="middle"><input type="submit" value=" 포인트 구매 "></td>
</tr>
</table>
</form>
[
point.php 소스]
우선 2번에서 로그인 여부를 체크한 후 3번에서 현재 회원의 포인트 정보를 불러 옵니다.
현재 포인트를 표시할때 사용한 number_format 함수가 보이실겁니다.
이 함수는 인자로 받은 변수를 숫자형태로 보여주면서 천단위 즉 세자리 마다 ',' 를 찍어 줍니다.
입력받은 변수 뒤에 인자를 추가해서 표시되는 소수점 자리수와 소수점 기호 '.'과 천단위 구분기호 ',' 를 변경할 수도 있습니다.
함수에 대한 자세한 내용은 이 블로그 오른쪽에 php 함수 검색을 통해 살펴 보시면 됩니다.
그리고 포인트 구매를 위해서 구매할 포인트들을 선택하게 해 줍니다.
이때 radio 태그가 사용되었는데요. radio 태그는 같은 이름(name)으로 여러개를 사용해서 그중에 하나를 선택하는 태그입니다.
그리고 선택이 되면 검사할게 없으므로 바로 submit 태그로 저장페이지로 넘깁니다.
<?
// 1. 공통 인클루드 파일
include ("./head.php");
// 2. 로그인 하지 않은 회원은 로그인 페이지로 보내기
if(!$_SESSION[user_id]){
alert("로그인하셔야 이용이 가능합니다.", "./login.php");
}
// 3. 포인트 더하기
$sql = "update m__member set m_point = m_point + ".$_POST[b_point]." where m_id = '".$_SESSION[user_id]."'";
sql_query($sql);
// 4. 포인트관리 페이지로 보내기
alert("포인트 구매가 완료 되었습니다.","./point.php");
?>
[point_save.php 소스]
point.php 에서 구매를 희망하는 포인트를 더해주는 페이지 입니다.
실제 포인트몰에서는 point.php 와 point_save.php 사이에 결제모듈이 들어가서 결제 결과에 따라 포인트를 올려주거나 실패메세지를 보여줍니다.
여기서는 결제모듈없이 바로 구매되는 형태로 구현했습니다.
3번에 보면 sql 문이 구매한 포인트를 더해주는 부분입니다.
update m__member set m_point = m_point + ".$_POST[b_point]." where m_id =
'".$_SESSION[user_id]."'
사용자 테이블에서 포인트 필드인 m_point 의 값을 기존 m_point 에 넘어온 변수 b_point 를 더한값을 업데이트 하라는 sql 문입니다.
쉽죠? ^^
실제 화면으로 보시면
5000 포인트 구매전
5000 포인트 구매후
포인트가 변화된것을 보실수 있습니다.
그럼 다음시간에는 상품을 등록하고 관리하는 상품관리를 배워보도록 하겠습니다.