테스트 사이트 - 개발 중인 베타 버전입니다

선택옵션을 4개로 늘리고 저장하면 데이터가 삭제되는 현상 채택완료

coDribble 4년 전 조회 2,730

선택옵션(필수)을 기존 3개 고정에서 1개 추가해서 4개로 늘려놓은 상태입니다.

 

옵션1에 8개( ex. a,b,c,d,e,f,g,h )

옵션2에 8개( ex. a,b,c,d,e,f,g,h )

옵션3에 8개( ex. a,b,c,d,e,f,g,h )

옵션4에 8개( ex. ㄱ,ㄴ,ㄷ,ㄹ,ㅁ,ㅂ,ㅅ,ㅇ ).... 라고 가정해도 경우의 수가 너무 많아지기는 하는데

 

일단 이슈가...

 

옵션목록생성하면 리스트는 잘 뜨는데

 

옵션 목록 잘 뜨는거 확인한 후에 저장하고 보면

 

옵션1에 a~h까지 남아있어야하는데 a만 남고 나머지는 다 지워진채로 뜨고,

옵션2도 a~h까지 남아있어야하는데 h만 지워진채로 a~g까지 뜨고,

옵션3, 옵션4만 원래대로 남아있습니다. 출력된 목록은 다행히 틀어지진 않습니다...;;

 

근데 상품 상세페이지 가보면... 옵션1 에 선택할 수 있는게 a만 뜨고,

옵션2는 a~g까지 뜨고.... 옵션목록생성 했을때 나온 리스트대로 뜨질 않습니다.

 

너무 경우의 수가 많아져서 이러는 걸까요...??

댓글을 작성하려면 로그인이 필요합니다.

답변 4개

채택된 답변
+20 포인트

저장되는 시점을 echo로 찍어서 확인해보셔야할거같은데요

값을 못받아오는건지 아니면 사라지는건지 일일히 찾아봐야겠네요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

병원에서일해요
4년 전
저장이 잘된상태면 출력하는부분을 하나씩 나눠서 찍어보면서 찾아야겠네요
c
coDribble
4년 전
경우의 수가 너무 많아서일까요...??ㅠ

일단 옵션은... 경우의수를 따져서 700개가 넘어가면 옵션1 만 데이터가 한개 날아가네요;;

옵션1~3 4개
옵션4 12개

4*4*4*12 하면 768의 경우의 수인데 옵션으로 만들 수 있는 경우의 수는 500 미만으로 생성해야 그나마 옵션이 다 살거 같습니다.


db에 저장도 안되고 있던거였어요;;

db에 저장된건 393개정도 였고...

8*8*8*12 하면 4096 이라는 경우의 수가 나오는데;;

393개만 저장된거면 맥시멈이 393 이라고 봐도 될 것 같네요;;ㅠ

답변 감사드립니다~!

댓글을 작성하려면 로그인이 필요합니다.

Policia
4년 전

짤리는 옵션1,옵션2가 혹시 내용이 길지않나요?

옵션3,옵션4는 출력된다는거보니

저장될때 데이터유형에 맞는 허용치를 넘긴것같아서 짤리는것같아요

제가 기억이안나는데 영카트의 옵션부분에 데이터유형이 어떻게 되는지 모르겠네요

아마 DB확인하셔서 보시면 데이터값이 짤려있으면 데이터유형을 변경해주셔야 할것같아요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

c
coDribble
4년 전
옵션1~3에 들어가는 옵션명+옵션개수(?)가 동일합니다...

1~3 은 컬러값들이 들어갈 예정이구요;;

Red,Orange,Yellow,Green,Blue,Black,White,Darkgray

이런식으로 컬러값들이 옵션1~3 모두 동일하게 들어갈 예정입니다.

옵션명은 바뀔수도 있어서 예시고, 지금 저 옵션명들로 생성해놓았는데...

옵션명출력까지는 잘 뜨는데 저장하면 데이터가 날라가고 있는 상태입니다ㅠㅠㅠ
c
coDribble
4년 전
그런데 영카트로 만든 다른 쇼핑몰에서는 위에 달아놓은 댓글에서 컬러값보다 훨씬 긴 내용의 옵션들을 추가해봤었는데 잘린적이 없어서요;;ㅠㅠㅠ
c
coDribble
4년 전
말씀해주신거 보고 혹시나해서 마이어드민에서 item_option 테이블을 보니깐 옵션들은 제대로 db에 저장이 잘 되어있네요;;ㅠㅠ

댓글을 작성하려면 로그인이 필요합니다.

c
4년 전

/shop_admin/itemform.php

</p>

<p><!-- 상품선택옵션 테이블 <span style="font-size: 0.9em;">옵션4 추가 --></span></p>

<p><tr>

    <th scope="row">

        <label for="opt4_subject">옵션4</label>

        <input type="text" name="opt4_subject" value="<?php echo $opt_subject[3]; ?>" id="opt4_subject" class="frm_input" size="15">

    </th>

    <td>

        <label for="opt4"><b>옵션4 항목</b></label>

        <input type="text" name="opt4" value="" id="opt4" class="frm_input" size="50">

    </td>

</tr></p>

<p> </p>

<p> </p>

<p><!-- 옵션항목설정 스크립트 옵션4 추가 --></p>

<p><script></p>

<p><?php if($it['it_id'] && $po_run) { ?>

//옵션항목설정

var arr_opt1 = new Array();

var arr_opt2 = new Array();

var arr_opt3 = new Array();

var arr_opt4 = new Array(); // 옵션4 관련 추가

var opt1 = opt2 = opt3 = opt4 = ''; // 옵션4 관련 추가

var opt_val;</p>

<p>$(".opt-cell").each(function() {

    opt_val = $(this).text().split(" > ");

    opt1 = opt_val[0];

    opt2 = opt_val[1];

    opt3 = opt_val[2];

    opt4 = opt_val[3]; // 옵션4 관련 추가</p>

<p>    if(opt1 && $.inArray(opt1, arr_opt1) == -1)

        arr_opt1.push(opt1);</p>

<p>    if(opt2 && $.inArray(opt2, arr_opt2) == -1)

        arr_opt2.push(opt2);</p>

<p>    if(opt3 && $.inArray(opt3, arr_opt3) == -1)

        arr_opt3.push(opt3);</p>

<p>    if(opt4 && $.inArray(opt4, arr_opt4) == -1) // 옵션4 관련 추가

        arr_opt4.push(opt4);

});</p>

<p>

$("input[name=opt1]").val(arr_opt1.join());

$("input[name=opt2]").val(arr_opt2.join());

$("input[name=opt3]").val(arr_opt3.join());

$("input[name=opt4]").val(arr_opt4.join()); // 옵션4 관련 추가

<?php } ?>

// 옵션목록생성

$("#option_table_create").click(function() {

    var it_id = $.trim($("input[name=it_id]").val());

    var opt1_subject = $.trim($("#opt1_subject").val());

    var opt2_subject = $.trim($("#opt2_subject").val());

    var opt3_subject = $.trim($("#opt3_subject").val());

    var opt4_subject = $.trim($("#opt4_subject").val()); // 옵션4 관련 추가

    var opt1 = $.trim($("#opt1").val());

    var opt2 = $.trim($("#opt2").val());

    var opt3 = $.trim($("#opt3").val());

    var opt4 = $.trim($("#opt4").val()); // 옵션4 관련 추가

    var $option_table = $("#sit_option_frm");</p>

<p>    if(!opt1_subject || !opt1) {

        alert("옵션명과 옵션항목을 입력해 주십시오.");

        return false;

    }</p>

<p>    $.post(

        "<?php echo G5_ADMIN_URL; ?>/shop_admin/itemoption.php",

        { it_id: it_id, w: "<?php echo $w; ?>", opt1_subject: opt1_subject, opt2_subject: opt2_subject, opt3_subject: opt3_subject, opt4_subject: opt4_subject, opt1: opt1, opt2: opt2, opt3: opt3, opt4: opt4 }, // 옵션4 관련 추가

        function(data) {

            $option_table.empty().html(data);

        }

    );

});</p>

<p></script></p>

<p>

 

 

/shop_admin/itemformupdate.php

</p>

<p>// 선택옵션

sql_query(" delete from {$g5['g5_shop_item_option_table']} where io_type = '0' and it_id = '$it_id' "); // 기존선택옵션삭제</p>

<p>$option_count = (isset($_POST['opt_id']) && is_array($_POST['opt_id'])) ? count($_POST['opt_id']) : array();

if($option_count) {

    // 옵션명

    $opt1_cnt = $opt2_cnt = $opt3_cnt = $opt4_cnt = 0; // 옵션4 관련 추가

    for($i=0; $i<$option_count; $i++) {

        $_POST['opt_id'][$i] = preg_replace(G5_OPTION_ID_FILTER, '', $_POST['opt_id'][$i]);</p>

<p>        $opt_val = explode(chr(30), $_POST['opt_id'][$i]);

        if($opt_val[0])

            $opt1_cnt++;

        if($opt_val[1])

            $opt2_cnt++;

        if($opt_val[2])

            $opt3_cnt++;

        if($opt_val[3]) // 옵션4 관련 추가

            $opt4_cnt++;

    }</p>

<p>    if($opt1_subject && $opt1_cnt) {

        $it_option_subject = $opt1_subject;

        if($opt2_subject && $opt2_cnt)

            $it_option_subject .= ','.$opt2_subject;

        if($opt3_subject && $opt3_cnt)

            $it_option_subject .= ','.$opt3_subject;

        if($opt4_subject && $opt4_cnt) // 옵션4 관련 추가

            $it_option_subject .= ','.$opt4_subject;

    }

}</p>

<p>

 

/shop_admin/itemoption.php

</p>

<p><!-- 상단 개발 부분 --></p>

<p><?php</p>

<p>$po_run = false;</p>

<p>if($it['it_id']) {

    $opt_subject = explode(',', $it['it_option_subject']);

    $opt1_subject = $opt_subject[0];

    $opt2_subject = $opt_subject[1];

    $opt3_subject = $opt_subject[2];

    $opt4_subject = $opt_subject[3]; // 옵션4 관련 추가</p>

<p> </p>

<p>    $sql = " select * from {$g5['g5_shop_item_option_table']} where io_type = '0' and it_id = '{$it['it_id']}' order by io_no asc ";

    $result = sql_query($sql);

    if(sql_num_rows($result))

        $po_run = true;

} else if(!empty($_POST)) {

    $opt1_subject = preg_replace(G5_OPTION_ID_FILTER, '', trim(stripslashes($_POST['opt1_subject'])));

    $opt2_subject = preg_replace(G5_OPTION_ID_FILTER, '', trim(stripslashes($_POST['opt2_subject'])));

    $opt3_subject = preg_replace(G5_OPTION_ID_FILTER, '', trim(stripslashes($_POST['opt3_subject'])));

    $opt4_subject = preg_replace(G5_OPTION_ID_FILTER, '', trim(stripslashes($_POST['opt4_subject']))); // 옵션4 관련 추가</p>

<p> </p>

<p>    $opt1_val = preg_replace(G5_OPTION_ID_FILTER, '', trim(stripslashes($_POST['opt1'])));

    $opt2_val = preg_replace(G5_OPTION_ID_FILTER, '', trim(stripslashes($_POST['opt2'])));

    $opt3_val = preg_replace(G5_OPTION_ID_FILTER, '', trim(stripslashes($_POST['opt3'])));

    $opt4_val = preg_replace(G5_OPTION_ID_FILTER, '', trim(stripslashes($_POST['opt4']))); // 옵션4 관련 추가</p>

<p> </p>

<p>    if(!$opt1_subject || !$opt1_val) {

        echo '옵션1과 옵션1 항목을 입력해 주십시오.';

        exit;

    }</p>

<p>    $po_run = true;</p>

<p>    $opt1_count = $opt2_count = $opt3_count = $opt4_count = 0;</p>

<p>    if($opt1_val) {

        $opt1 = explode(',', $opt1_val);

        $opt1_count = count($opt1);

    }</p>

<p>    if($opt2_val) {

        $opt2 = explode(',', $opt2_val);

        $opt2_count = count($opt2);

    }</p>

<p>    if($opt3_val) {

        $opt3 = explode(',', $opt3_val);

        $opt3_count = count($opt3);

    }</p>

<p>    if($opt4_val) { // 옵션4 관련 추가

        $opt4 = explode(',', $opt4_val);

        $opt4_count = count($opt4);

    }

}</p>

<p>if($po_run) {

?></p>

<p> </p>

<p> </p>

<p><!-- tbody 내 if($it['it_id']) 부분 --></p>

<p><tbody>

<?php

if($it['it_id']) {

    for($i=0; $row=sql_fetch_array($result); $i++) {

        $opt_id = $row['io_id'];

        $opt_val = explode(chr(30), $opt_id);

        $opt_1 = $opt_val[0];

        $opt_2 = $opt_val[1];

        $opt_3 = $opt_val[2];

        $opt_4 = $opt_val[3]; // 옵션4 관련 추가</p>

<p>

        $opt_2_len = strlen($opt_2);

        $opt_3_len = strlen($opt_3);

        $opt_4_len = strlen($opt_4); // 옵션4 관련 추가</p>

<p>

        $opt_price = $row['io_price'];

        $opt_stock_qty = $row['io_stock_qty'];

        $opt_noti_qty = $row['io_noti_qty'];

        $opt_use = $row['io_use'];

?>

<tr>

    <td class="td_chk">

        <input type="hidden" name="opt_id[]" value="<?php echo $opt_id; ?>">

        <label for="opt_chk_<?php echo $i; ?>" class="sound_only"></label>

        <input type="checkbox" name="opt_chk[]" id="opt_chk_<?php echo $i; ?>" value="1">

    </td>

    <td class="opt-cell"><?php echo $opt_1; if ($opt_2_len) echo ' <small>></small> '.$opt_2; if ($opt_3_len) echo ' <small>></small> '.$opt_3; if ($opt_4_len) echo ' <small>></small> '.$opt_4; // 옵션4 관련 추가 ?></td></p>

<p> </p>

<p> </p>

<p><!-- tbody 내 else 부분 --> </p>

<p><?php</p>

<p>} else {

    for($i=0; $i<$opt1_count; $i++) {

        $j = 0;

        do {

            $k = 0;

            do {

                $l = 0; // 옵션4 관련 추가

                do{ // 옵션4 관련 추가

                    $opt_1 = strip_tags(trim($opt1[$i]));

                    $opt_2 = strip_tags(trim($opt2[$j]));

                    $opt_3 = strip_tags(trim($opt3[$k]));

                    $opt_4 = strip_tags(trim($opt4[$l])); // 옵션4 관련 추가</p>

<p> </p>

<p>                    $opt_2_len = strlen($opt_2);

                    $opt_3_len = strlen($opt_3);

                    $opt_4_len = strlen($opt_4); // 옵션4 관련 추가</p>

<p> </p>

<p>                    $opt_id = $opt_1;

                    if($opt_2_len)

                        $opt_id .= chr(30).$opt_2;

                    if($opt_3_len)

                        $opt_id .= chr(30).$opt_3;

                    if($opt_4_len) // 옵션4 관련 추가

                        $opt_id .= chr(30).$opt_4;</p>

<p>

                    $opt_price = 0;

                    $opt_stock_qty = 9999;

                    $opt_noti_qty = 100;

                    $opt_use = 1;</p>

<p>                    // 기존에 설정된 값이 있는지 체크

                    if($_POST['w'] == 'u') {

                        $sql = " select io_price, io_stock_qty, io_noti_qty, io_use

                                    from {$g5['g5_shop_item_option_table']}

                                    where it_id = '{$_POST['it_id']}'

                                      and io_id = '$opt_id'

                                      and io_type = '0' ";

                        $row = sql_fetch($sql);</p>

<p>                        if($row) {

                            $opt_price = (int)$row['io_price'];

                            $opt_stock_qty = (int)$row['io_stock_qty'];

                            $opt_noti_qty = (int)$row['io_noti_qty'];

                            $opt_use = (int)$row['io_use'];

                        }

                    }

?>

<tr>

    <td class="td_chk">

        <input type="hidden" name="opt_id[]" value="<?php echo $opt_id; ?>">

        <label for="opt_chk_<?php echo $i; ?>" class="sound_only"></label>

        <input type="checkbox" name="opt_chk[]" id="opt_chk_<?php echo $i; ?>" value="1">

    </td>

    <td class="opt1-cell"><?php echo $opt_1; if ($opt_2_len) echo ' <small>></small> '.$opt_2; if ($opt_3_len) echo ' <small>></small> '.$opt_3; if ($opt_4_len) echo ' <small>></small> '.$opt_4; // 옵션4 관련 추가 ?></td></p>

<p>

 

 

 

이렇게 추가해놓은 상태 입니다ㅠ

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

목록을 하드코딩해둔게 아니라 코드로 불러오는건가요?

소스를 보여주셔야 정확히 알거같네요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

c
coDribble
4년 전
본문에 올리려고 하니... 답변이 달린상태여서... 답변으로 달아놓겠습니다ㅠㅠ
c
coDribble
4년 전
추가해놓은 부분들 소스 추가해놓았습니다. 주석으로 '옵션4 관련 추가' 라고 적힌 부분이 추가해놓은 소스입니다ㅠㅠㅠ

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인