해결을 못해서 다시 발제합니다. (http://sir.kr/qa/127681)
해외 쇼핑몰이여서 통화를 소수점으로 변환해서 사용하고 있구요
( 가격표시부분을 DB에서 필드를 int에서 float로 바꾸었습니다.)
배송비를 쇼핑몰설정에서는 "4.59유로 로 입력을했구요 -> 관리자화면엔 잘 유지가 됩니다.
주문서에는 소수점이 빠진 "459"유로 라고 나오고 있습니다.
화면에 배송비출력은 $send_cost 로 되고 있는데요
아래 첨부한 코드에서
$send_cost = get_sendcost($s_cart_id);
여기부분이 배송비를 가져오는 부분인거 같은데
애라모르겠다
억지로459를 4.59로 맞추기위해서
아래처럼 100을 나누기하면
$send_cost = get_sendcost($s_cart_id)/100;
화면상에서는 4.59로 표시는 되지만
최종 주문하기로 넘어가면
하얀화면에 Error... 라는 메세지가 뜹니다.
왜 관리자화면에 잘있던 소수점이 빠져버리고
어느계산식에서 그런 현상이 생기는지 갈피를 못잡겠습니다.
수동으로 100을 나누기하면 애러가 나는지 모르겠습니다. php 문법이 틀린건지..
아래는 문제가 생기는 주문서 작성(orderform.sub.php)에서
배송비 데이터를 가져오는 부분을 캡쳐했습니다.
<?php $tot_point = 0; $tot_sell_price = 0; $goods = $goods_it_id = ""; $goods_count = -1; // $s_cart_id 로 현재 장바구니 자료 쿼리 $sql = " select a.ct_id, a.it_id, a.it_name, a.ct_price, a.ct_point, a.ct_qty, a.ct_status, a.ct_send_cost, a.it_sc_type, b.ca_id, b.ca_id2, b.ca_id3, b.it_notax from {$g5['g5_shop_cart_table']} a left join {$g5['g5_shop_item_table']} b on ( a.it_id = b.it_id ) where a.od_id = '$s_cart_id' and a.ct_select = '1' "; $sql .= " group by a.it_id "; $sql .= " order by a.ct_id "; $result = sql_query($sql); $good_info = ''; $it_send_cost = 0; $it_cp_count = 0; $comm_tax_mny = 0; // 과세금액 $comm_vat_mny = 0; // 부가세 $comm_free_mny = 0; // 면세금액 $tot_tax_mny = 0; for ($i=0; $row=sql_fetch_array($result); $i++) { // 합계금액 계산 $sql = " select SUM(IF(io_type = 1, (io_price * ct_qty), ((ct_price + io_price) * ct_qty))) as price, SUM(ct_point * ct_qty) as point, SUM(ct_qty) as qty from {$g5['g5_shop_cart_table']} where it_id = '{$row['it_id']}' and od_id = '$s_cart_id' "; $sum = sql_fetch($sql); if (!$goods) { //$goods = addslashes($row[it_name]); //$goods = get_text($row[it_name]); $goods = preg_replace("/\'|\"|\||\,|\&|\;/", "", $row['it_name']); $goods_it_id = $row['it_id']; } $goods_count++; // 에스크로 상품정보 if($default['de_escrow_use']) { if ($i>0) $good_info .= chr(30); $good_info .= "seq=".($i+1).chr(31); $good_info .= "ordr_numb={$od_id}_".sprintf("%04d", $i).chr(31); $good_info .= "good_name=".addslashes($row['it_name']).chr(31); $good_info .= "good_cntx=".$row['ct_qty'].chr(31); $good_info .= "good_amtx=".$row['ct_price'].chr(31); } $image = get_it_image($row['it_id'], 50, 50); $it_name = '<b>' . stripslashes($row['it_name']) . '</b>'; $it_options = print_item_options($row['it_id'], $s_cart_id); if($it_options) { $it_name .= '<div class="sod_opt">'.$it_options.'</div>'; } // 복합과세금액 if($default['de_tax_flag_use']) { if($row['it_notax']) { $comm_free_mny += $sum['price']; } else { $tot_tax_mny += $sum['price']; } } $point = $sum['point']; $sell_price = $sum['price']; // 쿠폰 if($is_member) { $cp_button = ''; $cp_count = 0; $sql = " select cp_id from {$g5['g5_shop_coupon_table']} where mb_id IN ( '{$member['mb_id']}', '전체회원' ) and cp_start <= '".G5_TIME_YMD."' and cp_end >= '".G5_TIME_YMD."' and cp_minimum <= '$sell_price' and ( ( cp_method = '0' and cp_target = '{$row['it_id']}' ) OR ( cp_method = '1' and ( cp_target IN ( '{$row['ca_id']}', '{$row['ca_id2']}', '{$row['ca_id3']}' ) ) ) ) "; $res = sql_query($sql); for($k=0; $cp=sql_fetch_array($res); $k++) { if(is_used_coupon($member['mb_id'], $cp['cp_id'])) continue; $cp_count++; } if($cp_count) { $cp_button = '<button type="button" class="cp_btn btn_frmline">적용</button>'; $it_cp_count++; } } // 배송비 switch($row['ct_send_cost']) { case 1: $ct_send_cost = '착불'; break; case 2: $ct_send_cost = '무료'; break; default: $ct_send_cost = '선불'; break; } // 조건부무료 if($row['it_sc_type'] == 2) { $sendcost = get_item_sendcost($row['it_id'], $sum['price'], $sum['qty'], $s_cart_id); if($sendcost == 0) $ct_send_cost = '무료'; } ?> <tr> <td class="sod_img"><?php echo $image; ?></td> <td> <input type="hidden" name="it_id[<?php echo $i; ?>]" value="<?php echo $row['it_id']; ?>"> <input type="hidden" name="it_name[<?php echo $i; ?>]" value="<?php echo get_text($row['it_name']); ?>"> <input type="hidden" name="it_price[<?php echo $i; ?>]" value="<?php echo $sell_price; ?>"> <input type="hidden" name="cp_id[<?php echo $i; ?>]" value=""> <input type="hidden" name="cp_price[<?php echo $i; ?>]" value="0"> <?php if($default['de_tax_flag_use']) { ?> <input type="hidden" name="it_notax[<?php echo $i; ?>]" value="<?php echo $row['it_notax']; ?>"> <?php } ?> <?php echo $it_name; ?> </td> <td class="td_num"><?php echo number_format($sum['qty']); ?></td> <td class="td_numbig"><?php echo number_format($row['ct_price'],2); ?></td> <td class="td_mngsmall"><?php echo $cp_button; ?></td> <td class="td_numbig"><span class="total_price"><?php echo number_format($sell_price,2); ?></span></td> <td class="td_numbig"><?php echo number_format($point); ?></td> <td class="td_dvr"><?php echo $ct_send_cost; ?></td> </tr> <?php $tot_point += $point; $tot_sell_price += $sell_price; } // for 끝 if ($i == 0) { //echo '<tr><td colspan="7" class="empty_table">장바구니에 담긴 상품이 없습니다.</td></tr>'; alert('장바구니가 비어 있습니다.', G5_SHOP_URL.'/cart.php'); } else { // 배송비 계산 $send_cost = get_sendcost($s_cart_id); } // 복합과세처리 if($default['de_tax_flag_use']) { $comm_tax_mny = round(($tot_tax_mny + $send_cost) / 1.1); $comm_vat_mny = ($tot_tax_mny + $send_cost) - $comm_tax_mny; } ?>
답변 1개 / 댓글 2개
장바구니 배송비 필드도 float로 변경 하셨는지요.
it_sc_price 필드입니다.
장바구니에 해당 필드에 값이 어떻게 입력되어 있는지 살펴 보시면 될 것 같습니다.
답변에 대한 댓글 2개
shop.lib.php에
explode 배열 함수때문에 문제가 있었구요
$send_cost = preg_replace('/[^0-9]/', '', $send_cost_list[$k]);
부분에서 $send_cost_list[$k] 이것만 남기면 되네요.
[code]
$send_cost = 0;
if($default['de_send_cost_case'] == '차등' && $total_price >= 0 && $diff > 0) {
// 금액별차등 : 여러단계의 배송비 적용 가능
$send_cost_limit = explode(";", $default['de_send_cost_limit']);
$send_cost_list = explode(";", $default['de_send_cost_list']);
$send_cost = 0;
for ($k=0; $k<count($send_cost_limit); $k++) {
// 총판매금액이 배송비 상한가 보다 작다면
if ($total_price < preg_replace('/[^0-9]/', '', $send_cost_limit[$k])) {
$send_cost = preg_replace('/[^0-9]/', '', $send_cost_list[$k]);
break;
}
}
}
[/code]
답변을 작성하려면 로그인이 필요합니다.