반응형
지난 시간에는 ajax를 이용해서 만들어진 카테고리를 계층적으로 확인하는 방법을 알아보았다. 이번엔 각 카테고리를 만드는 방법을 알아보자.
우선 분류 생성 버튼을 만든다.
/admin/product/category.php
<?php
include $_SERVER["DOCUMENT_ROOT"]."/inc/header.php";
$query="select * from category where step=1";
$result = $mysqli->query($query) or die("query error => ".$mysqli->error);
while($rs = $result->fetch_object()){
$cate1[]=$rs;
}
?>
<div style="margin-top:20px;">
<form class="row g-3">
<div class="col-md-4">
<select class="form-select" name="cate1" id="cate1" aria-label="Default select example">
<option value="">대분류</option>
<?php
foreach($cate1 as $c){
?>
<option value="<?php echo $c->code;?>"><?php echo $c->name;?></option>
<?php }?>
</select>
</div>
<div class="col-md-4">
<select class="form-select" name="cate2" id="cate2" aria-label="Default select example">
<option value="">중분류</option>
</select>
</div>
<div class="col-md-4">
<select class="form-select" name="cate3" id="cate3" aria-label="Default select example">
<option value="">소분류</option>
</select>
</div>
</form>
</div>
<div>
<br><br>
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#cate1Modal">
대분류등록
</button>
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#cate2Modal">
중분류등록
</button>
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#cate3Modal">
소분류등록
</button>
bootstrap의 modal기능을 이용해서 만들어보자. 아래에 버튼을 달아주고 버튼을 누르면 각각의 분류를 등록할 수 있는 창을 띄워준다.
/admin/product/category.php
<?php
include $_SERVER["DOCUMENT_ROOT"]."/inc/header.php";
$query="select * from category where step=1";
$result = $mysqli->query($query) or die("query error => ".$mysqli->error);
while($rs = $result->fetch_object()){
$cate1[]=$rs;
}
?>
<div style="margin-top:20px;">
<form class="row g-3">
<div class="col-md-4">
<select class="form-select" name="cate1" id="cate1" aria-label="Default select example">
<option value="">대분류</option>
<?php
foreach($cate1 as $c){
?>
<option value="<?php echo $c->code;?>"><?php echo $c->name;?></option>
<?php }?>
</select>
</div>
<div class="col-md-4">
<select class="form-select" name="cate2" id="cate2" aria-label="Default select example">
<option value="">중분류</option>
</select>
</div>
<div class="col-md-4">
<select class="form-select" name="cate3" id="cate3" aria-label="Default select example">
<option value="">소분류</option>
</select>
</div>
</form>
</div>
<div>
<br><br>
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#cate1Modal">
대분류등록
</button>
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#cate2Modal">
중분류등록
</button>
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#cate3Modal">
소분류등록
</button>
<!-- Modal -->
<div class="modal fade" id="cate1Modal" tabindex="-1" aria-labelledby="cate1ModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="cate1ModalLabel">대분류등록</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-6">
<input class="form-control" name="code1" id="code1" type="text" placeholder="코드명을 입력하세요">
</div>
<div class="col-md-6">
<input class="form-control" name="name1" id="name1" type="text" placeholder="대분류명을 입력하세요">
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>
<button type="button" class="btn btn-primary" onclick="catetory_save(1)">등록</button>
</div>
</div>
</div>
</div>
<!-- Modal -->
<div class="modal fade" id="cate2Modal" tabindex="-1" aria-labelledby="cate2ModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="cate2ModalLabel">중분류등록</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="row">
<?php
$query="select * from category where step=1";
$result = $mysqli->query($query) or die("query error => ".$mysqli->error);
while($rs = $result->fetch_object()){
$pcode2[]=$rs;
}
?>
<select class="form-select" name="pcode" id="pcode2" aria-label="Default select example">
<option value="">대분류를 선택하세요.</option>
<?php
foreach($pcode2 as $p){
?>
<option value="<?php echo $p->code;?>"><?php echo $p->name;?></option>
<?php }?>
</select>
</div>
<br>
<div class="row">
<div class="col-md-6">
<input class="form-control" name="code2" id="code2" type="text" placeholder="코드명을 입력하세요">
</div>
<div class="col-md-6">
<input class="form-control" name="name2" id="name2" type="text" placeholder="중분류명을 입력하세요">
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>
<button type="button" class="btn btn-primary" onclick="catetory_save(2)">등록</button>
</div>
</div>
</div>
</div>
<!-- Modal -->
<div class="modal fade" id="cate3Modal" tabindex="-1" aria-labelledby="cate3ModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="cate3ModalLabel">소분류등록</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="row">
<?php
$pcode2= array();
$query="select * from category where step=1";
$result = $mysqli->query($query) or die("query error => ".$mysqli->error);
while($rs = $result->fetch_object()){
$pcode2[]=$rs;
}
?>
<div class="col-md-6">
<select class="form-select" name="pcode" id="pcode2_1" aria-label="Default select example">
<option value="">대분류를 선택하세요.</option>
<?php
foreach($pcode2 as $p){
?>
<option value="<?php echo $p->code;?>"><?php echo $p->name;?></option>
<?php }?>
</select>
</div>
<div class="col-md-6">
<select class="form-select" name="pcode3" id="pcode3" aria-label="Default select example">
<option value="">대분류를 먼저 선택하세요.</option>
</select>
</div>
</div>
<br>
<div class="row">
<div class="col-md-6">
<input class="form-control" name="code3" id="code3" type="text" placeholder="코드명을 입력하세요">
</div>
<div class="col-md-6">
<input class="form-control" name="name3" id="name3" type="text" placeholder="소분류명을 입력하세요">
</div>
</div>
<div style="padding:10px;text-align:right;">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>
<button type="button" class="btn btn-primary" onclick="catetory_save(3)">등록</button>
</div>
</div>
</div>
<div class="modal-footer">
</div>
</div>
</div>
</div>
</div>
<script>
$("#cate1").change(function(){
var cate1 = $("#cate1 option:selected").val();
var data = {
cate1 : cate1
};
$.ajax({
async : false ,
type : 'post' ,
url : 'category2.php' ,
data : data ,
dataType : 'html' ,
error : function() {} ,
success : function(return_data) {
$("#cate2").html(return_data);
}
});
});
$("#cate2").change(function(){
var cate2 = $("#cate2 option:selected").val();
var data = {
cate2 : cate2
};
$.ajax({
async : false ,
type : 'post' ,
url : 'category3.php' ,
data : data ,
dataType : 'html' ,
error : function() {} ,
success : function(return_data) {
$("#cate3").html(return_data);
}
});
});
function catetory_save(step){
var name = $("#name"+step).val();
var code = $("#code"+step).val();
var pcode = $("#pcode"+step+" option:selected").val();
if(step>1 && !pcode){
alert('부모 코드를 선택하세요.');
return;
}
if(!code){
alert('코드명을 입력하세요.');
return;
}
if(!name){
alert('분류명을 입력하세요.');
return;
}
var data = {
name : name,
code : code,
pcode : pcode,
step : step
};
$.ajax({
async : false ,
type : 'post' ,
url : 'save_category.php' ,
data : data ,
dataType : 'json' ,
error : function() {} ,
success : function(return_data) {
if(return_data.result==1){
alert('등록했습니다.');
location.reload();
}else if(return_data.result==-1){
alert('코드나 분류명이 이미 사용중입니다.');
location.reload();
}else{
alert('등록하지 못했습니다.');
}
}
});
}
$("#pcode2_1").change(function(){
var cate = $("#pcode2_1 option:selected").val();
var data = {
cate : cate
};
$.ajax({
async : false ,
type : 'post' ,
url : 'category4.php' ,
data : data ,
dataType : 'html' ,
error : function() {} ,
success : function(return_data) {
$("#pcode3").html(return_data);
}
});
});
</script>
<?php
include $_SERVER["DOCUMENT_ROOT"]."/inc/footer.php";
?>
버튼을 눌러보면 대,중,소분류의 생성창이 나타난다. 창의 역할이 다르기때문에 화면에 보이는 부분도 다르다. 사용하는 ajax파일도 다른데 필요한 파일들을 만들어보자.
/admin/product/category4.php
<?php session_start();
include $_SERVER["DOCUMENT_ROOT"]."/inc/dbcon.php";
ini_set( 'display_errors', '0' );
$cate = $_POST['cate'];
$html = "<option value=\"\">중분류를 선택하세요.</option>";
$query="select * from category where step=2 and pcode='".$cate."'";
$result = $mysqli->query($query) or die("query error => ".$mysqli->error);
while($rs = $result->fetch_object()){
$html.="<option value=\"".$rs->code."\">".$rs->name."</option>";
}
echo $html;
?>
대분류값을 이용해서 중분류를 가져오는 ajax파일이다.
이번엔 분류를 저장하는 파일을 만들어보자. 소스를 보면 분류를 만드는 창은 3가지인데 분류를 저장하는 함수는 한가지이다. 대,중,소분류를 생성할때 각각 다른 값을 던져주지만 분류에 맞게 분리해서 저장해준다.
/admin/product/save_category.php
<?php session_start();
include $_SERVER["DOCUMENT_ROOT"]."/inc/dbcon.php";
ini_set( 'display_errors', '0' );
if(!$_SESSION['AUID']){
$retun_data = array("result"=>"member");
echo json_encode($retun_data);
exit;
}
$name = $_POST['name'];
$code = $_POST['code'];
$pcode = $_POST['pcode'];
$step = $_POST['step'];
//코드와 분류명을 사용하고 있는지 확인
$result = $mysqli->query("select cid from category where step=".$step." and (name='".$name1."' or code='".$code1."')") or die("query error => ".$mysqli->error);
$rs = $result->fetch_object();
if($rs->cid){
$retun_data = array("result"=>"-1");
echo json_encode($retun_data);
exit;
}
$sql="INSERT INTO category
(code, pcode, name, step)
VALUES('".$code."', '".$pcode."', '".$name."', ".$step.")";
$result=$mysqli->query($sql) or die($mysqli->error);
if($result){
$retun_data = array("result"=>1);
echo json_encode($retun_data);
}else{
$retun_data = array("result"=>0);
echo json_encode($retun_data);
}
?>
분류명과 코드를 받아서 단계에 맞게 입력해준다. 어차피 insert문은 한가지인데 거기에 필요한 값들을 선택해서 입력하면 된다.
하지만 소스에는 관리자만 등록할 수 있도록 돼 있기때문에 등록이 안된다. 관리자 등록부분부터 먼저 보고나서 확인해보자.
개발하다 힘들면 눌러.
반응형
'PHP강좌 > 쇼핑몰만들기강좌' 카테고리의 다른 글
php+mysql 쇼핑몰 만들기 강좌 - #5 상품 리스트 (2) | 2022.03.15 |
---|---|
php+mysql 쇼핑몰 만들기 강좌 - #4 상품 등록하기 (0) | 2022.03.03 |
php+mysql 쇼핑몰 만들기 강좌 - #3 관리자 등록하기 (4) | 2022.02.24 |
php+mysql 쇼핑몰 만들기 강좌 - #2 상품 테이블 설계하기 (0) | 2022.02.24 |
php+mysql 쇼핑몰 만들기 강좌 - #1 카테고리 만들기 (2) | 2022.02.16 |