추가옵션안됨

버그신고
추가옵션안됨

QA

추가옵션안됨

본문

추가옵션이 안담겨요..

마지막에 insert 할때  옵션이 3개일경우 3개의 insert 가 생겨야 하는데 옵션을 아무리 넣어도 1번밖에 안돌더라고요.ㅠㅠ

$opt_count 는 옵션갯수만큼 찍히는데 왜 for 문이 한번만 될까요?

혹시 왜그러는지 아시는분 있으띾요?

 

 


<?php
include_once('./_common.php');
// print_r2($_POST); exit;
// 보관기간이 지난 상품 삭제
cart_item_clean();
// cart id 설정
set_cart_id($sw_direct);
$sql ='';
if($sw_direct){
    $tmp_cart_id = get_session('ss_cart_direct');
}else{
    $sql = " select * from {$g5['g5_shop_cart_table']} where mb_id = '{$member['mb_id']}' and ct_status = '쇼핑' ";
    $result = sql_query($sql);
    if($result->num_rows > 0){
        $row = $result->fetch_assoc();
        $tmp_cart_id = $row['od_id'];
    }else{
        $tmp_cart_id = get_uniqid();
    }
    set_session('ss_cart_id', $tmp_cart_id);
    $tmp_cart_id = get_session('ss_cart_id');
}
// 브라우저에서 쿠키를 허용하지 않은 경우라고 볼 수 있음.
if (!$tmp_cart_id)
{
    alert('더 이상 작업을 진행할 수 없습니다.\\n\\n브라우저의 쿠키 허용을 사용하지 않음으로 설정한것 같습니다.\\n\\n브라우저의 인터넷 옵션에서 쿠키 허용을 사용으로 설정해 주십시오.\\n\\n그래도 진행이 되지 않는다면 쇼핑몰 운영자에게 문의 바랍니다.');
}
$tmp_cart_id = preg_replace('/[^a-z0-9_\-]/i', '', $tmp_cart_id);
// 레벨(권한)이 상품구입 권한보다 작다면 상품을 구입할 수 없음.
if ($member['mb_level'] < $default['de_level_sell'])
{
    alert('상품을 구입할 수 있는 권한이 없습니다.');
}
$action = $_POST['action'];
$subscription = "";
if(isset($_POST['subscription'])){
    $subscription = $_POST['subscription'];
}
$url_from = "";
if(isset($_POST['url'])){
    $url_from = $_POST['url']; //외부로부터 가져오자 url을...
}
$option_text = "";
if($_POST['option_text']){
    $option_text = "|".$_POST['option_text'];
}
$post_ct_chk = (isset($_POST['ct_chk']) && is_array($_POST['ct_chk'])) ? $_POST['ct_chk'] : array();
$act = isset($_POST['act']) ? clean_xss_tags($_POST['act'], 1, 1) : '';
$post_it_ids = (isset($_POST['it_id']) && is_array($_POST['it_id'])) ? $_POST['it_id'] : array();
if($act == "buy")
{
    if(!count($_POST['ct_chk']))
        alert("주문하실 상품을 하나이상 선택해 주십시오.");
    // 선택필드 초기화
    $sql = " update {$g5['g5_shop_cart_table']} set ct_select = '0' where od_id = '$tmp_cart_id' ";
    sql_query($sql);
    $fldcnt = count($post_it_ids);
    for($i=0; $i<$fldcnt; $i++) {
      $ct_chk = isset($post_ct_chk[$i]) ? 1 : 0;
      if($ct_chk) {
          $it_id = isset($post_it_ids[$i]) ? safe_replace_regex($post_it_ids[$i], 'it_id') : '';
          if( !$it_id ) continue;
          // 본인인증, 성인인증체크
          if(!$is_admin) {
              $msg = shop_member_cert_check($it_id, 'item');
              if($msg)
                  alert($msg, G5_SHOP_URL);
          }
            // 주문 상품의 재고체크
            $sql = " select ct_qty, it_name, ct_option, io_id, io_type
                        from {$g5['g5_shop_cart_table']}
                        where od_id = '$tmp_cart_id'
                          and it_id = '$it_id' ";
            $result = sql_query($sql);
            for($k=0; $row=sql_fetch_array($result); $k++) {
                $sql = " select SUM(ct_qty) as cnt from {$g5['g5_shop_cart_table']}
                          where od_id <> '$tmp_cart_id'
                            and it_id = '$it_id'
                            and io_id = '{$row['io_id']}'
                            and io_type = '{$row['io_type']}'
                            and ct_stock_use = 0
                            and ct_status = '쇼핑'
                            and ct_select = '1' ";
                $sum = sql_fetch($sql);
                $sum_qty = $sum['cnt'];
                // 재고 구함
                $ct_qty = $row['ct_qty'];
                $io_id = explode("|",$row['io_id']);
                if(!$row['io_id'])
                    $it_stock_qty = get_it_stock_qty($it_id);
                else
                    $it_stock_qty = get_option_stock_qty($it_id, $io_id[0], $row['io_type']);
                if ($ct_qty + $sum_qty > $it_stock_qty)
                {
                    $item_option = $row['it_name'];
                    if($io_id[0])
                        $item_option .= '('.$row['ct_option'].')';
                    alert($item_option." 의 재고수량이 부족합니다.\\n\\n현재 재고수량 : " . number_format($it_stock_qty - $sum_qty) . " 개");
                }
            }
            $sql = " update {$g5['g5_shop_cart_table']}
                          set ct_select = '1',
                              ct_select_time = '".G5_TIME_YMDHIS."'
                          where od_id = '$tmp_cart_id'
                            and it_id = '$it_id' ";
              sql_query($sql);
        }
    }
 if($subscription == '1'){
   if ($is_member) { // 회원인 경우
       goto_url(G5_SHOP_URL.'/orderform_sub.php');
   //goto_url(G5_SHOP_URL.'/item.php?it_id='.$it_id.'#cart');
   } else {
       goto_url(G5_BBS_URL.'/login_if.php?url='.urlencode(G5_SHOP_URL.'/orderform.php'));
 }
 }else{
    if ($is_member) { // 회원인 경우
        goto_url(G5_SHOP_URL.'/orderform.php');
        //goto_url(G5_SHOP_URL.'/item.php?it_id='.$it_id.'#cart');
    } else {
        goto_url(G5_BBS_URL.'/login_if.php?url='.urlencode(G5_SHOP_URL.'/orderform.php'));
    }
  }
}
else if ($act == "alldelete") // 모두 삭제이면
{
    $sql = " delete from {$g5['g5_shop_cart_table']}
              where od_id = '$tmp_cart_id' ";
    sql_query($sql);
}
else if ($act == "seldelete") // 선택삭제
{
    if(!count($_POST['ct_chk']))
        alert("삭제하실 상품을 하나이상 선택해 주십시오.");
    $fldcnt = count($_POST['it_id']);
    for($i=0; $i<$fldcnt; $i++) {
        $ct_chk = $_POST['ct_chk'][$i];
        if($ct_chk) {
            $it_id = $_POST['it_id'][$i];
            $sql = " delete from {$g5['g5_shop_cart_table']} where it_id = '$it_id' and od_id = '$tmp_cart_id' ";
            sql_query($sql);
        }
    }
}
else if ($act == "currentdelete") // 그냥 선택삭제
{
    $sql = " delete from {$g5['g5_shop_cart_table']} where it_id = '$currentdelete' and od_id = '$tmp_cart_id' ";
    sql_query($sql);
}
else // 장바구니에 담기
{
    $count = count($_POST['it_id']);
    //alert($count);
    if ($count < 1)
        alert('장바구니에 담을 상품을 선택하여 주십시오.');
    $ct_count = 0;
    for($i=0; $i<$count; $i++) {
        // 보관함의 상품을 담을 때 체크되지 않은 상품 건너뜀
        if($act == 'multi' && !$_POST['chk_it_id'][$i])
            continue;
        $it_id = $_POST['it_id'][$i];
        $opt_count = count($_POST['io_id'][$it_id]);
        if($opt_count && $_POST['io_type'][$it_id][0] != 0)
            alert('상품의 선택옵션을 선택해 주십시오.');
        for($k=0; $k<$opt_count; $k++) {
            if ($_POST['ct_qty'][$it_id][$k] < 1)
                alert('수량은 1 이상 입력해 주십시오.');
        }
        // 본인인증, 성인인증체크
        if(!$is_admin) {
            $msg = shop_member_cert_check($it_id, 'item');
            if($msg)
                alert($msg, G5_SHOP_URL);
        }
        // 상품정보
        $sql = " select * from {$g5['g5_shop_item_table']} where it_id = '$it_id' ";
        $it = sql_fetch($sql);
        if(!$it['it_id'])
            alert('상품정보가 존재하지 않습니다.');
        // 바로구매에 있던 장바구니 자료를 지운다.
        if($i == 0 && $sw_direct)
            sql_query(" delete from {$g5['g5_shop_cart_table']} where od_id = '$tmp_cart_id' and ct_direct = 1 ", false);
        // 최소, 최대 수량 체크
        if($it['it_buy_min_qty'] || $it['it_buy_max_qty']) {
            $sum_qty = 0;
            for($k=0; $k<$opt_count; $k++) {
                if($_POST['io_type'][$it_id][$k] == 0)
                    $sum_qty += (int) $_POST['ct_qty'][$it_id][$k];
            }
            if($it['it_buy_min_qty'] > 0 && $sum_qty < $it['it_buy_min_qty'])
                alert($it['it_name'].'의 선택옵션 개수 총합 '.number_format($it['it_buy_min_qty']).'개 이상 주문해 주십시오.');
            if($it['it_buy_max_qty'] > 0 && $sum_qty > $it['it_buy_max_qty'])
                alert($it['it_name'].'의 선택옵션 개수 총합 '.number_format($it['it_buy_max_qty']).'개 이하로 주문해 주십시오.');
            // 기존에 장바구니에 담긴 상품이 있는 경우에 최대 구매수량 체크
            if($it['it_buy_max_qty'] > 0) {
                $sql4 = " select sum(ct_qty) as ct_sum
                            from {$g5['g5_shop_cart_table']}
                            where od_id = '$tmp_cart_id'
                              and it_id = '$it_id'
                              and io_type = '0'
                              and ct_status = '쇼핑' ";
                $row4 = sql_fetch($sql4);
                if(($sum_qty + $row4['ct_sum']) > $it['it_buy_max_qty'])
                    alert($it['it_name'].'의 선택옵션 개수 총합 '.number_format($it['it_buy_max_qty']).'개 이하로 주문해 주십시오.', './cart.php');
            }
        }
        // 옵션정보를 얻어서 배열에 저장
        $opt_list = array();
        $sql = " select * from {$g5['g5_shop_item_option_table']} where it_id = '$it_id' and io_use = 1 order by io_no asc ";
        $result = sql_query($sql);
        $lst_count = 0;
        for($k=0; $row=sql_fetch_array($result); $k++) {
            $opt_list[$row['io_type']][$row['io_id']]['id'] = $row['io_id'];
            $opt_list[$row['io_type']][$row['io_id']]['use'] = $row['io_use'];
            $opt_list[$row['io_type']][$row['io_id']]['price'] = $row['io_price'];
            $opt_list[$row['io_type']][$row['io_id']]['stock'] = $row['io_stock_qty'];
            // 선택옵션 개수
            if(!$row['io_type'])
                $lst_count++;
        }
        //--------------------------------------------------------
        //  재고 검사, 바로구매일 때만 체크
        //--------------------------------------------------------
        // 이미 주문폼에 있는 같은 상품의 수량합계를 구한다.
        if($sw_direct) {
            for($k=0; $k<$opt_count; $k++) {
                $io_id = preg_replace(G5_OPTION_ID_FILTER, '', $_POST['io_id'][$it_id][$k]);
                $io_type = preg_replace('#[^01]#', '', $_POST['io_type'][$it_id][$k]);
                $io_value = $_POST['io_value'][$it_id][$k];
                $sql = " select SUM(ct_qty) as cnt from {$g5['g5_shop_cart_table']}
                          where od_id <> '$tmp_cart_id'
                            and it_id = '$it_id'
                            and io_id = '$io_id'
                            and io_type = '$io_type'
                            and ct_stock_use = 0
                            and ct_status = '쇼핑'
                            and ct_select = '1' ";
                $row = sql_fetch($sql);
                $sum_qty = $row['cnt'];
                // 재고 구함
                $ct_qty = (int) $_POST['ct_qty'][$it_id][$k];
                if(!$io_id)
                    $it_stock_qty = get_it_stock_qty($it_id);
                else
                    $it_stock_qty = get_option_stock_qty($it_id, $io_id, $io_type);
                if ($ct_qty + $sum_qty > $it_stock_qty)
                {
                    alert($io_value." 의 재고수량이 부족합니다.\\n\\n현재 재고수량 : " . number_format($it_stock_qty - $sum_qty) . " 개");
                }
            }
        }
        //--------------------------------------------------------
        // 옵션수정일 때 기존 장바구니 자료를 먼저 삭제
        if($act == 'optionmod')
            sql_query(" delete from {$g5['g5_shop_cart_table']} where od_id = '$tmp_cart_id' and it_id = '$it_id' ");
        // 장바구니에 Insert
        // 바로구매일 경우 장바구니가 체크된것으로 강제 설정
        if($sw_direct) {
            $ct_select = 1;
            $ct_select_time = G5_TIME_YMDHIS;
        } else {
            $ct_select = 0;
            $ct_select_time = '0000-00-00 00:00:00';
        }
        //이미 같은 일반제품  담겨 있으면 추가하지말고 업데이트를 한다.
        $sql_check_exist = " select count(*) as cnt from {$g5['g5_shop_cart_table']}
                            where mb_id = '{$member['mb_id']}' and it_id = '$it_id'
                              and ct_status = '쇼핑' ";
        $row_check_exist = sql_fetch($sql_check_exist);
        $check_exist = $row_check_exist['cnt'];
        if($check_exist == 0) {
            // 장바구니에 Insert
            $comma = '';
            $sql = " INSERT INTO {$g5['g5_shop_cart_table']}
                            ( od_id, mb_id, it_id, it_name, it_sc_type, it_sc_method, it_sc_price, it_sc_minimum, it_sc_qty, ct_status, ct_price, ct_point, ct_point_use, ct_stock_use, ct_option, ct_qty, ct_notax, io_id, io_type, io_price, ct_time, ct_ip, ct_send_cost, ct_direct, ct_select, ct_select_time, subscription)
                        VALUES ";
            for($k=0; $k<$opt_count; $k++) {
        $io_id = isset($_POST['io_id'][$it_id][$k]) ? preg_replace(G5_OPTION_ID_FILTER, '', $_POST['io_id'][$it_id][$k]) : '';
        $io_type = isset($_POST['io_type'][$it_id][$k]) ? preg_replace('#[^01]#', '', $_POST['io_type'][$it_id][$k]) : '';
        $io_value = isset($_POST['io_value'][$it_id][$k]) ? $_POST['io_value'][$it_id][$k] : '';
        // 선택옵션정보가 존재하는데 선택된 옵션이 없으면 건너뜀
        if($lst_count && $io_id == '')
            continue;
        // 구매할 수 없는 옵션은 건너뜀
        if($io_id && !$opt_list[$io_type][$io_id]['use'])
            continue;
        $io_price = isset($opt_list[$io_type][$io_id]['price']) ? $opt_list[$io_type][$io_id]['price'] : 0;
        $ct_qty = isset($_POST['ct_qty'][$it_id][$k]) ? (int) $_POST['ct_qty'][$it_id][$k] : 0;
                // 구매가격이 음수인지 체크
                if($io_type) {
                    if((int)$io_price < 0)
                        alert('구매금액이 음수인 상품은 구매할 수 없습니다.');
                } else {
                    if((int)$it['it_price'] + (int)$io_price < 0)
                        alert('구매금액이 음수인 상품은 구매할 수 없습니다.');
                }
                // 동일옵션의 상품이 있으면 수량 더함
        $sql2 = " select ct_id, io_type, ct_qty
                        from {$g5['g5_shop_cart_table']}
                        where od_id = '$tmp_cart_id'
                          and it_id = '$it_id'
                          and io_id = '$io_id'
                          and ct_status = '쇼핑' ";
                $row2 = sql_fetch($sql2);
                if($row2['ct_id']) {
                    // 재고체크
                    $tmp_ct_qty = $row2['ct_qty'];
                    if(!$io_id)
                        $tmp_it_stock_qty = get_it_stock_qty($it_id);
                    else
                        $tmp_it_stock_qty = get_option_stock_qty($it_id, $io_id, $row2['io_type']);
                    if ($tmp_ct_qty + $ct_qty > $tmp_it_stock_qty)
                    {
                        alert($io_value." 의 재고수량이 부족합니다.\\n\\n현재 재고수량 : " . number_format($tmp_it_stock_qty) . " 개");
                    }
                    $sql3 = " update {$g5['g5_shop_cart_table']}
                                set ct_qty = ct_qty + '$ct_qty'
                                where ct_id = '{$row2['ct_id']}' ";
                    sql_query($sql3);
                    continue;
                }
                // 포인트
                $point = 0;
                if($config['cf_use_point']) {
                    if($io_type == 0) {
                        $point = get_item_point($it, $io_id);
                    } else {
                        $point = $it['it_supply_point'];
                    }
                    if($point < 0)
                        $point = 0;
                }
                // 배송비결제
                if($it['it_sc_type'] == 1)
                    $ct_send_cost = 2; // 무료
                else if($it['it_sc_type'] > 1 && $it['it_sc_method'] == 1)
                    $ct_send_cost = 1; // 착불
                $io_value = sql_real_escape_string(strip_tags($io_value));
                $remote_addr = get_real_client_ip();
                $sql .= $comma."( '$tmp_cart_id', '{$member['mb_id']}', '{$it['it_id']}', '".addslashes($it['it_name'])."', '{$it['it_sc_type']}', '{$it['it_sc_method']}', '{$it['it_sc_price']}', '{$it['it_sc_minimum']}', '{$it['it_sc_qty']}', '쇼핑', '{$it['it_price']}', '$point', '0', '0', '$io_value$option_text', '$ct_qty', '{$it['it_notax']}', '$io_id$option_text', '$io_type', '$io_price', '".G5_TIME_YMDHIS."', '$remote_addr', '$ct_send_cost', '$sw_direct', '$ct_select', '$ct_select_time', '$subscription' )";
                $comma = ' , ';
                $ct_count++;
            }
        }else{
            $io_id = preg_replace(G5_OPTION_ID_FILTER, '', $_POST['io_id'][$it_id][0]);
            $io_value = $_POST['io_value'][$it_id][0];
            $io_type = preg_replace('#[^01]#', '', $_POST['io_type'][$it_id][0]);
            $io_price = $opt_list[$io_type][$io_id]['price'];
            $ct_qty = (int) $_POST['ct_qty'][$it_id][0];
            $sql_exist_update = " update {$g5['g5_shop_cart_table']}
                                set ct_option = '$io_value$option_text', ct_price = '{$it['it_price']}', ct_qty = '$ct_qty', io_id = '$io_id$option_text', io_price = '$io_price', ct_time = '".G5_TIME_YMDHIS."', ct_select_time = '".G5_TIME_YMDHIS."', ct_ip = '".get_real_client_ip()."',subscription = '$subscription'
                                where ct_status = '쇼핑' and mb_id = '{$member['mb_id']}' and it_id = '$it_id' ";
            sql_query($sql_exist_update);
        }
        if($ct_count > 0)
            sql_query($sql);
    }
}
// print_r($sql);
// die(".");
// 바로 구매일 경우
if ($sw_direct)
{
      if ($is_member)
      {
          goto_url(G5_SHOP_URL."/orderform.php?sw_direct=$sw_direct");
          //goto_url(G5_SHOP_URL.'/item.php?it_id='.$it_id.'#cart');
      }
      else
      {
          //goto_url(G5_BBS_URL."/login.php?url=".urlencode(G5_SHOP_URL."/orderform.php?sw_direct=$sw_direct"));
          goto_url(G5_BBS_URL."/login_if.php?url=".urlencode(G5_SHOP_URL."/orderform.php?sw_direct=$sw_direct"));
      }
}
else
{
    //goto_url(G5_SHOP_URL.'/cart.php');
  if($subscription == '1'){
    if ( $act == 'optionmod' || $act == 'seldelete' || $act == 'alldelete' || $act == 'currentdelete' ) {
          goto_url(G5_SHOP_URL.'/cart_sub.php');
          //header("Refresh:0");
      } else if($action == 'all'){
      goto_url(G5_SHOP_URL."/cart_sub.php");
    }else if($action == 'goto'){
      alert("제품이 담겼어요.");
    }else {
          goto_url($url_from.'&check_exist='.$check_exist.'#cart');
      }
  }else{
    if ( $act == 'optionmod' || $act == 'seldelete' || $act == 'alldelete' || $act == 'currentdelete' ) {
        goto_url(G5_SHOP_URL.'/cart.php');
        //header("Refresh:0");
    } else if($action == 'all'){
    goto_url(G5_SHOP_URL."/cart.php");
  }else if($action == 'goto'){
    alert("제품이 담겼어요.");
  }else {
        //alert($sql);
        //alert($tmp_cart_id);
        //goto_url(G5_SHOP_URL.'/item.php?it_id='.$it_id.'#cart');
        goto_url($url_from.'&check_exist='.$check_exist.'#cart');
        //goto_url(G5_SHOP_URL.'/item.php?it_id='.$it_id);
    }}
}
?>
 

더 좋은 답변을 위해 필요한 추가정보를 요청해 보세요.

추가정보요청

이 질문에 댓글 쓰기 :

답변 1

동일한 옵션은 옵션 개수만 늘어나도록 되어 있습니다.

해당 부분을 테스트 하면서 오류를 잡아야하는거라..

이렇게 소스만 보고 답변을 드리기 어렵습니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 48,399
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIR SOFT