선택옵션을 4개로 늘리고 저장하면 데이터가 삭제되는 현상
본문
선택옵션(필수)을 기존 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
저장되는 시점을 echo로 찍어서 확인해보셔야할거같은데요
값을 못받아오는건지 아니면 사라지는건지 일일히 찾아봐야겠네요
목록을 하드코딩해둔게 아니라 코드로 불러오는건가요?
소스를 보여주셔야 정확히 알거같네요
/shop_admin/itemform.php
<!-- 상품선택옵션 테이블 옵션4 추가 -->
<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>
<!-- 옵션항목설정 스크립트 옵션4 추가 -->
<script>
<?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;
$(".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 관련 추가
if(opt1 && $.inArray(opt1, arr_opt1) == -1)
arr_opt1.push(opt1);
if(opt2 && $.inArray(opt2, arr_opt2) == -1)
arr_opt2.push(opt2);
if(opt3 && $.inArray(opt3, arr_opt3) == -1)
arr_opt3.push(opt3);
if(opt4 && $.inArray(opt4, arr_opt4) == -1) // 옵션4 관련 추가
arr_opt4.push(opt4);
});
$("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");
if(!opt1_subject || !opt1) {
alert("옵션명과 옵션항목을 입력해 주십시오.");
return false;
}
$.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);
}
);
});
</script>
/shop_admin/itemformupdate.php
// 선택옵션
sql_query(" delete from {$g5['g5_shop_item_option_table']} where io_type = '0' and it_id = '$it_id' "); // 기존선택옵션삭제
$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]);
$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++;
}
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;
}
}
/shop_admin/itemoption.php
<!-- 상단 개발 부분 -->
<?php
$po_run = false;
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 관련 추가
$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 관련 추가
$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 관련 추가
if(!$opt1_subject || !$opt1_val) {
echo '옵션1과 옵션1 항목을 입력해 주십시오.';
exit;
}
$po_run = true;
$opt1_count = $opt2_count = $opt3_count = $opt4_count = 0;
if($opt1_val) {
$opt1 = explode(',', $opt1_val);
$opt1_count = count($opt1);
}
if($opt2_val) {
$opt2 = explode(',', $opt2_val);
$opt2_count = count($opt2);
}
if($opt3_val) {
$opt3 = explode(',', $opt3_val);
$opt3_count = count($opt3);
}
if($opt4_val) { // 옵션4 관련 추가
$opt4 = explode(',', $opt4_val);
$opt4_count = count($opt4);
}
}
if($po_run) {
?>
<!-- tbody 내 if($it['it_id']) 부분 -->
<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 관련 추가
$opt_2_len = strlen($opt_2);
$opt_3_len = strlen($opt_3);
$opt_4_len = strlen($opt_4); // 옵션4 관련 추가
$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>
<!-- tbody 내 else 부분 -->
<?php
} 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 관련 추가
$opt_2_len = strlen($opt_2);
$opt_3_len = strlen($opt_3);
$opt_4_len = strlen($opt_4); // 옵션4 관련 추가
$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;
$opt_price = 0;
$opt_stock_qty = 9999;
$opt_noti_qty = 100;
$opt_use = 1;
// 기존에 설정된 값이 있는지 체크
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);
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>
이렇게 추가해놓은 상태 입니다ㅠ
!-->!-->!-->짤리는 옵션1,옵션2가 혹시 내용이 길지않나요?
옵션3,옵션4는 출력된다는거보니
저장될때 데이터유형에 맞는 허용치를 넘긴것같아서 짤리는것같아요
제가 기억이안나는데 영카트의 옵션부분에 데이터유형이 어떻게 되는지 모르겠네요
아마 DB확인하셔서 보시면 데이터값이 짤려있으면 데이터유형을 변경해주셔야 할것같아요