반응형
우선 쿠폰 리스트 페이지를 만들고 쿠폰 등록페이지부터 시작해보자.
/admin/coupon/coupon_list.php
<?php
include $_SERVER["DOCUMENT_ROOT"]."/inc/header.php";
if(!$_SESSION['AUID']){
echo "<script>alert('권한이 없습니다.');history.back();</script>";
exit;
}
$pageNumber = $_GET['pageNumber']??1;//현재 페이지, 없으면 1
if($pageNumber < 1) $pageNumber = 1;
$pageCount = $_GET['pageCount']??10;//페이지당 몇개씩 보여줄지, 없으면 10
$startLimit = ($pageNumber-1)*$pageCount;//쿼리의 limit 시작 부분
$firstPageNumber = $_GET['firstPageNumber'];
$search_keyword=$_GET["search_keyword"];
if($search_keyword){
$search_where.=" and (coupon_name like '%".$search_keyword."%')";//like 검색으로 검색
}
$sql = "select * from coupons c where 1=1";
$sql .= $search_where;
$order = " order by cid desc";//마지막에 등록한걸 먼저 보여줌
$limit = " limit $startLimit, $pageCount";
$query = $sql.$order.$limit;
//echo "query=>".$query."<br>";
$result = $mysqli->query($query) or die("query error => ".$mysqli->error);
while($rs = $result->fetch_object()){
$rsc[]=$rs;
}
//전체게시물 수 구하기
$sqlcnt = "select count(*) as cnt from coupons where 1=1";
$sqlcnt .= $search_where;
$countresult = $mysqli->query($sqlcnt) or die("query error => ".$mysqli->error);
$rscnt = $countresult->fetch_object();
$totalCount = $rscnt->cnt;//전체 갯수를 구한다.
$totalPage = ceil($totalCount/$pageCount);//전체 페이지를 구한다.
if($firstPageNumber < 1) $firstPageNumber = 1;
$lastPageNumber = $firstPageNumber + $pageCount - 1;//페이징 나오는 부분에서 레인지를 정한다.
if($lastPageNumber > $totalPage) $lastPageNumber = $totalPage;
?>
<div style="text-align:center;"><h3>쿠폰 리스트</h3></div>
<form method="get" action="<?php echo $_SERVER["PHP_SELF"]?>">
<div class="input-group mb-4">
<input class="form-control me-2" type="search" name="search_keyword" id="search_keyword" placeholder="제목에서 검색합니다." aria-label="Search" value="<?php echo $search_keyword;?>">
<button class="btn btn-outline-dark" type="submit">Search</button>
</div>
</form>
<table class="table table-sm table-bordered">
<thead>
<tr style="text-align:center;">
<th scope="col">사진</th>
<th scope="col">쿠폰명</th>
<th scope="col">쿠폰타입</th>
<th scope="col">할인가</th>
<th scope="col">할인율</th>
<th scope="col">최소사용금액</th>
<th scope="col">최대할인금액</th>
<th scope="col">등록자</th>
<th scope="col">상태</th>
</tr>
</thead>
<tbody>
<?php
foreach($rsc as $r){
?>
<tr>
<th scope="row" style="width:200px;"><img src="<?php echo $r->coupon_image;?>" style="max-width:100px;"></th>
<td><?php echo $r->coupon_name;?></td>
<td><?php echo $r->coupon_type;?></td>
<td style="text-align:right;"><?php echo number_format($r->coupon_price);?>원</td>
<td style="text-align:right;"><?php echo number_format($r->coupon_ratio);?>%</td>
<td style="text-align:right;"><?php echo number_format($r->use_min_price);?>원</td>
<td style="text-align:right;"><?php echo number_format($r->max_value);?>원</td>
<td><?php echo $r->userid;?></td>
<td><?php echo $r->status;?></td>
</tr>
<?php }?>
</tbody>
</table>
<a href="coupon_up.php">
<button class="btn btn-primary" type="button">쿠폰등록</button>
</a>
<!-- Modal -->
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script>
$(function(){
$("#sale_end_date").datepicker({ dateFormat: 'yy-mm-dd' });
});
</script>
<?php
include $_SERVER["DOCUMENT_ROOT"]."/inc/footer.php";
?>
간단하게 만들었다. 기존에 다른 페이지를 가져와서 대충 수정해주면 된다.이런 페이지를 처음부터 새롭게 만드는 사람은 없다.
이번엔 등록페이지도 만들어보자.
/admin/coupon/coupon_up.php
<?php
include $_SERVER["DOCUMENT_ROOT"]."/inc/header.php";
if(!$_SESSION['AUID']){
echo "<script>alert('권한이 없습니다.');history.back();</script>";
exit;
}
?>
<style>
.thst{
text-align: center;
vertical-align: middle;
}
</style>
<div style="text-align:center;padding:20px;"><H3>쿠폰등록하기</H3></div>
<form method="post" action="cupok.php" onsubmit="return save()" enctype="multipart/form-data">
<table class="table table-sm table-bordered">
<tbody>
<input type="hidden" name="file_table_id" id="file_table_id" value="">
<input type="hidden" name="contents" id="contents" value="">
<tr>
<th scope="row" class="thst">쿠폰명</th>
<td><input type="text" class="form-control" name="coupon_name" id="coupon_name" required></td>
</tr>
<tr>
<th scope="row" class="thst">쿠폰이미지</th>
<td><input type="file" class="form-control" name="coupon_image" id="coupon_image"></td>
</tr>
<tr>
<th scope="row" class="thst">쿠폰타입</th>
<td>
<select class="form-select" name="coupon_type" id="coupon_type" aria-label="Default select example">
<option value="1">정액</option>
<option value="2">정율</option>
</select>
</td>
</tr>
<tr id="ct1">
<th scope="row" class="thst">할인가</th>
<td>
<div class="input-group">
<input type="text" style="width:200px;text-align:right;" class="form-control" name="coupon_price" id="coupon_price" value='0'>
<span class="input-group-text">원</span>
</div>
</td>
</tr>
<tr id="ct2" style="display:none;">
<th scope="row" class="thst">할인비율</th>
<td>
<div class="input-group">
<input type="text" style="width:200px;text-align:right;" class="form-control" name="coupon_ratio" id="coupon_ratio" value='0'>
<span class="input-group-text">%</span>
</div>
</td>
</tr>
<tr>
<th scope="row" class="thst">최소사용금액</th>
<td>
<div class="input-group">
<input type="number" style="width:200px;text-align:right;" class="form-control" name="use_min_price" id="use_min_price">
<span class="input-group-text">원</span>
</div>
</td>
</tr>
<tr>
<th scope="row" class="thst">최대할인금액</th>
<td>
<div class="input-group">
<input type="number" style="width:200px;text-align:right;" class="form-control" name="max_value" id="max_value">
<span class="input-group-text">원</span>
</div>
</td>
</tr>
<tr>
<th scope="row" class="thst">상태</th>
<td>
<select class="form-select" name="status" id="status" aria-label="Default select example">
<option value="1">대기</option>
<option value="2">사용중</option>
<option value="3">폐기</option>
</select>
</td>
</tr>
</tbody>
</table>
<button class="btn btn-primary" type="submit">등록완료</button>
</form>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script>
$("#coupon_type").change(function(){
var ct1 = $("#coupon_type option:selected").val();
if(ct1==1){
$("#ct1").show();
$("#ct2").hide();
}else if(ct1==2){
$("#ct2").show();
$("#ct1").hide();
}else{
$("#ct1").show();
$("#ct2").hide();
}
});
function save(){
if(!$('#coupon_image').val()){
alert('썸네일을 등록하십시오.');
return false;
}
}
</script>
<?php
include $_SERVER["DOCUMENT_ROOT"]."/inc/footer.php";
?>
아주 심플하다. 쿠폰타입에서 정액과 정율을 선택하는 것에 따라 입력하는 컬럼을 바꿔주었다. 이제 여기서 입력한 값을 디비에 저장해보자.
/admin/coupon/cupok.php
<?php session_start();
include $_SERVER["DOCUMENT_ROOT"]."/inc/dbcon.php";
ini_set( 'display_errors', '0' );
if(!$_SESSION['AUID']){
echo "<script>alert('권한이 없습니다.');history.back();</script>";
exit;
}
$coupon_name=$_POST["coupon_name"];//쿠폰명
$coupon_type=$_POST["coupon_type"];//쿠폰타입
$coupon_price=$_POST["coupon_price"];//할인가
$coupon_ratio=$_POST["coupon_ratio"];//할인율
$status=$_POST["status"];//상태
$max_value=$_POST["max_value"];//최대할인금액
$use_min_price=$_POST["use_min_price"];//최소사용가능금액
if($_FILES["coupon_image"]["name"]){//첨부한 파일이 있으면
if($_FILES['coupon_image']['size']>10240000){//10메가
echo "<script>alert('10메가 이하만 첨부할 수 있습니다.');history.back();</script>";
exit;
}
if($_FILES['coupon_image']['type']!='image/jpeg' and $_FILES['coupon_image']['type']!='image/gif' and $_FILES['coupon_image']['type']!='image/png'){//이미지가 아니면, 다른 type은 and로 추가
echo "<script>alert('이미지만 첨부할 수 있습니다.');history.back();</script>";
exit;
}
$save_dir = $_SERVER['DOCUMENT_ROOT']."/pdata/";//파일을 업로드할 디렉토리
$filename = $_FILES["coupon_image"]["name"];
$ext = pathinfo($filename,PATHINFO_EXTENSION);//확장자 구하기
$newfilename = "CPN_".date("YmdHis").substr(rand(),0,6);
$coupon_image = $newfilename.".".$ext;//새로운 파일이름과 확장자를 합친다
if(move_uploaded_file($_FILES["coupon_image"]["tmp_name"], $save_dir.$coupon_image)){
$coupon_image = $_CONFIG["CDN_SERVER"]."/pdata/".$coupon_image;
}else{
echo "<script>alert('이미지를 등록할 수 없습니다. 관리자에게 문의해주십시오.');history.back();</script>";
exit;
}
}
$mysqli->autocommit(FALSE);//커밋이 안되도록 지정
try {
$query="INSERT INTO testdb.coupons
(coupon_name, coupon_image, coupon_type, coupon_price, coupon_ratio, status, regdate, userid, max_value, use_min_price)
VALUES('".$coupon_name."'
, '".$coupon_image."'
, '".$coupon_type."'
, '".$coupon_price."'
, '".$coupon_ratio."'
, '".$status."'
, now()
, '".$_SESSION['AUID']."'
, '".$max_value."'
, '".$use_min_price."'
)";
$rs=$mysqli->query($query) or die($mysqli->error);
$pid = $mysqli -> insert_id;
$mysqli->commit();//디비에 커밋한다.
echo "<script>alert('등록했습니다.');location.href='/admin/coupon/coupon_list.php';</script>";
exit;
}catch (Exception $e) {
$mysqli->rollback();//저장한 테이블이 있다면 롤백한다.
echo "<script>alert('등록하지 못했습니다. 관리자에게 문의해주십시오.');history.back();</script>";
exit;
}
?>
아주 간단하게 만들었다. 쿠폰은 쿠폰 등록이 중요한게 아니니까.
다음엔 쿠폰을 사용자에게 발행하는 것을 해보자. 회원가입을 하거나 로그인을 하거나 이벤트에 참여하거나 몇만원이상 구매를 하거나 하는 경우 말이다.
반응형
'PHP강좌 > 쇼핑몰만들기강좌' 카테고리의 다른 글
php+mysql 쇼핑몰 만들기 강좌 - #23. 쿠폰 발행하기 feat.함수 (0) | 2022.06.08 |
---|---|
php+mysql 쇼핑몰 만들기 강좌 - #22. 쿠폰 발행하기 (0) | 2022.04.28 |
php+mysql 쇼핑몰 만들기 강좌 - #20. 쿠폰 설계 (0) | 2022.04.20 |
php+mysql 쇼핑몰 만들기 강좌 - #19. Api를 통해 제품 등록하기(인바운드, Putter). feat.CURL (0) | 2022.04.13 |
php+mysql 쇼핑몰 만들기 강좌 - #18. Api를 통해 제품 등록하기(아웃바운드, Getter). feat.CURL (0) | 2022.04.12 |