Invalid argument supplied for foreach() in 에러
본문
foreach($DATA['cart'] as $key=>$val) {
$this_price = ($val['ct_price']+$val['io_price']) * $val['ct_qty'];
$total_price += $this_price;
이 구문에서
Warning: Invalid argument supplied for foreach() in /www_root/shop/cartprint.php on line 196
라는 메세지가 뜨는데 무슨 에러일까요 ㅠㅠ?
답변 4
php 버전과 영카트 버전이 어떻게 되지요?
<?php
$total_price = 0;
$this_price = 0;
if (isset($DATA['cart']) && is_array($DATA['cart'])) {
foreach($DATA['cart'] as $key=>$val) {
$this_price = ($val['ct_price']+$val['io_price']) * $val['ct_qty'];
$total_price += $this_price;
?>
<tr>
<td class="td-body"><?php $val['io_id']?></td>
<td class="td-body"><?php $val['it_name']?></td>
<td class="td-body"><?php $DATA['opt'][$key]['io_misc01']?></td>
<td class="td-body"><?php $DATA['opt'][$key]['io_misc02']?></td>
<td class="td-body td-right"><?=number_format($val['ct_price']+$val['io_price'])?></td>
<td class="td-body td-center"><?=number_format($val['ct_qty'])?></td>
<td class="td-body td-right"><?=number_format($this_price)?></td>
</tr>
<?
} # end of if
} # end foreach;
?>
$DATA['cart'] 가 null 인 것 같네요.
if 문을 추가해야할 듯요
if (isset($DATA['cart']) && is_array($DATA['cart'])) {
}
<?php
include_once('./_common.php');
include_once(G5_PATH.'/head.sub.php');
print_r($_GET);
print_r($_POST);
# 세션데이터에서 장바구니 전송값을 가져온다. ---------------------------------------------------
# [cart.php -> ajax.cartprint.php 세션저장한 값]
$tmp_data = get_session("cartprint");
if($tmp_data) {
$array = unserialize($tmp_data);
}
//print_r($array);
# 장바구니 데이터 검사 --------------------------------------------------------------------------
if(is_array($array) && is_array($array['it_id']) && is_array($array['ct_chk'])) {
# 장바구니 전송됨
} else {
# 장바구니 전송안됨
echo "<h2>견적서를 출력할 제품이 없습니다.</h2>";
include_once(G5_PATH.'/tail.sub.php');
exit;
}
# 장바구니 no 가공 ---------------------------------------------------------------------------
/* 장바구니 상품번호와 체크여부(ct_chk)를 비교하여 견적할 제품번호만 남긴다. */
if (isset($DATA['cart']) && is_array($DATA['cart'])) {
foreach($array['it_id'] as $key=>$val) {
if(isset($array['ct_chk'][$key]) && $array['ct_chk'][$key]=="1") {
$TMP['it'][] = $val;
} else {
continue;
}
}
}
//print_r($TMP['it']);
if(is_array($TMP['it']) && is_array($TMP['it'])) {
# 견적할 제품이 있음
} else {
# 견적할 제품이 없음
echo "<h2>견적서를 출력할 제품이 없습니다.</h2>";
include_once(G5_PATH.'/tail.sub.php');
exit;
}
# 장바구니 DB 가져오기 ---------------------------------------------------------------------------
$s_cart_id = get_session('ss_cart_id');
// $s_cart_id 로 현재 장바구니 자료 쿼리
$qry = " SELECT * FROM {$g5['g5_shop_cart_table']} WHERE od_id = '$s_cart_id' AND it_id IN ( ". implode(",", $TMP['it']) ." ) ORDER BY it_id ";
$res = sql_query($qry);
if(sql_num_rows($res)>0) {
$idx = 0;
while($row = sql_fetch_array($res)) {
$DATA['cart'][$idx] = $row;
# 옵션DB 가져오기
$qry2 = " SELECT * FROM {$g5['g5_shop_item_option_table']} WHERE it_id = '{$row['it_id']}' AND io_id='{$row['io_id']}' AND io_type='0' ";
$res2 = sql_query($qry2);
if(sql_num_rows($res2)>0) {
$DATA['opt'][$idx] = sql_fetch_array($res2);
}
$idx++;
}
}
//print_r($DATA);
# 출력화면 그리기 ---------------------------------------------------------------------------
?>
<style type="text/css">
.print-wrap { width:600px; box-sizing:border-box; margin:5px auto; }
/* 표제부 */
.table-info { border-collapse:collapse; width:100%; }
.table-info * { font-size: 12px;}
.table-info td { border:1px solid #09a4b6; height:20px; }
.table-info .td-row-6 { background:#06899f; color:#ffffff; text-align:center; }
.table-info .td-head { background:#67b9c2; text-align:center; color:#ffffff; }
/* 제품리스트 */
.table-list { border-collapse:collapse; width:100%; margin:20px 0 0 0; }
.table-list * { font-size:12px;}
.table-list td { border:1px solid #09a4b6; height:20px; }
.table-list .td-head { background:#67b9c2; text-align:center; color:#ffffff; }
.table-list .td-body { font-size:11px !important; }
/* 공통 */
.input-1 { width:174px; }
.td-right { text-align:right; }
.td-center { text-align:center; }
/* 기타 */
.div-help { margin:10px 0; color:#2861c8; }
.print-button { width:600px; margin:10px auto; text-align:right; }
.print-button button { padding:4px 10px; background:#2548a5; color:#ffffff; border:0; }
@media print {
.print-button { display:none; }
}
</style>
<div class="print-wrap">
<table class="table-info">
<col width="20">
<col width="60">
<col width="180">
<col width="20">
<col width="60">
<col width="">
<col width="60">
<col width="">
<tr>
<td class="td-row-6" rowspan="6">의<br>뢰<br>자</td>
<td class="td-head">견적일</td>
<td class="td-body"><input type="text" class="input-1" value="<?=date("Y-m-d")?>"></td>
<td class="td-row-6" rowspan="6">공<br>급<br>자</td>
<td class="td-head">등록번호</td>
<td class="td-body" colspan="3"><?=$default['de_admin_company_saupja_no']?></td>
</tr>
<tr>
<td class="td-head">업체명</td>
<td class="td-body"><input type="text" class="input-1"></td>
<td class="td-head">회사명</td>
<td class="td-body"><?=$default['de_admin_company_name']?></td>
<td class="td-head">성명</td>
<td class="td-body"><?=$default['de_admin_company_owner']?></td>
</tr>
<tr>
<td class="td-head">담당자</td>
<td class="td-body"><input type="text" class="input-1"></td>
<td class="td-head">주소</td>
<td class="td-body" colspan="3"><?=$default['de_admin_company_addr']?></td>
</tr>
<tr>
<td class="td-head">전화</td>
<td class="td-body"><input type="text" class="input-1"></td>
<td class="td-head">업태</td>
<td class="td-body"><?=$default['de_biztype_a']?></td>
<td class="td-head">종목</td>
<td class="td-body"><?=$default['de_biztype_b']?></td>
</tr>
<tr>
<td class="td-head">팩스</td>
<td class="td-body"><input type="text" class="input-1"></td>
<td class="td-head">전화</td>
<td class="td-body"><?=$default['de_admin_company_tel']?></td>
<td class="td-head">팩스</td>
<td class="td-body"><?=$default['de_admin_company_fax']?></td>
</tr>
<tr>
<td class="td-head">E-mail</td>
<td class="td-body"><input type="text" class="input-1"></td>
<td class="td-head">담당자</td>
<td class="td-body" colspan="3"></td>
</tr>
</table>
<table class="table-list">
<col width="80">
<col width="80">
<col width="80">
<col width="">
<col width="60">
<col width="40">
<col width="70">
<tr>
<td class="td-head">제품번호</td>
<td class="td-head">제품명</td>
<td class="td-head">형식번호</td>
<td class="td-head">제품사양</td>
<td class="td-head">단가</td>
<td class="td-head">수량</td>
<td class="td-head">가격</td>
</tr>
<?
$total_price = 0;
$this_price = 0;
foreach($DATA['cart'] as $key=>$val) {
$this_price = ($val['ct_price']+$val['io_price']) * $val['ct_qty'];
$total_price += $this_price;
?>
<tr>
<td class="td-body"><?php $val['io_id']?></td>
<td class="td-body"><?php $val['it_name']?></td>
<td class="td-body"><?php $DATA['opt'][$key]['io_misc01']?></td>
<td class="td-body"><?php $DATA['opt'][$key]['io_misc02']?></td>
<td class="td-body td-right"><?=number_format($val['ct_price']+$val['io_price'])?></td>
<td class="td-body td-center"><?=number_format($val['ct_qty'])?></td>
<td class="td-body td-right"><?=number_format($this_price)?></td>
</tr>
<?
} # end foreach;
?>
<tr>
<td class="td-body td-center" colspan="6"><strong>합계금액</strong></td>
<td class="td-body td-right"><strong><?=number_format($total_price)?></strong></td>
</tr>
</table>
<div class="div-help">
상기 견적내용은 환율에 따라 가격이 변동될 수 있으니 참고용으로만 활용하시기 바랍니다.<br>
(견적내용 및 입력사항은 서버로 전송되지 않습니다)<br>
자세한 견적상담을 원하시면 <?=$default['de_admin_company_tel']?>로 전화바랍니다.
</div>
</div>
<div class="print-button">
<button type="button" onClick="print();">인쇄</button>
<button type="button" onClick="window.close();">닫기</button>
</div>
<?
include_once(G5_PATH.'/tail.sub.php');
?>
5.4.4.x 에서 해봤는데 오류는 없었어요.
$TMP = array();
$TMP['it'] = array();
$DATA = array();
$DATA['cart'] = array();
미리 변수 초기화를 해둔 코드
이 코드로도 오류가 난다면
lib/common.lib.php 업데이트를 해당 부분만이라도 해보시고요
(sql_ 로 시작하는 함수)
$array 변수는 (session: cartprint)
이런 식으로 되어야 정상적으로 출력될 것 같습니다.
$array = array(
'it_id' => array('1490690285','1490690301'),
'ct_chk' => array('1','1')
);
<?php
include_once('./_common.php');
include_once(G5_PATH.'/head.sub.php');
//print_r($_GET);
//print_r($_POST);
# 세션데이터에서 장바구니 전송값을 가져온다. ---------------------------------------------------
# [cart.php -> ajax.cartprint.php 세션저장한 값]
$tmp_data = get_session("cartprint");
if($tmp_data) {
$array = unserialize($tmp_data);
}
//print_r($array);
# 장바구니 데이터 검사 --------------------------------------------------------------------------
if(is_array($array) && is_array($array['it_id']) && is_array($array['ct_chk'])) {
# 장바구니 전송됨
} else {
# 장바구니 전송안됨
echo "<h2>견적서를 출력할 제품이 없습니다.</h2>";
include_once(G5_PATH.'/tail.sub.php');
exit;
}
# 장바구니 no 가공 ---------------------------------------------------------------------------
/* 장바구니 상품번호와 체크여부(ct_chk)를 비교하여 견적할 제품번호만 남긴다. */
$TMP = array();
$TMP['it'] = array();
$DATA = array();
$DATA['cart'] = array();
if (isset($array['it_id']) && is_array($array['it_id'])) {
foreach($array['it_id'] as $key=>$val) {
if(isset($array['ct_chk'][$key]) && $array['ct_chk'][$key]=="1") {
$TMP['it'][] = $val;
} else {
continue;
}
}
}
//print_r($TMP['it']);
if(is_array($TMP['it']) && is_array($TMP['it'])) {
# 견적할 제품이 있음
} else {
# 견적할 제품이 없음
echo "<h2>견적서를 출력할 제품이 없습니다.</h2>";
include_once(G5_PATH.'/tail.sub.php');
exit;
}
# 장바구니 DB 가져오기 ---------------------------------------------------------------------------
$s_cart_id = get_session('ss_cart_id');
// $s_cart_id 로 현재 장바구니 자료 쿼리
$qry = " SELECT * FROM {$g5['g5_shop_cart_table']} WHERE od_id = '$s_cart_id' AND it_id IN ( ". implode(",", $TMP['it']) ." ) ORDER BY it_id ";
$res = sql_query($qry) or die(sql_error_info());
if(sql_num_rows($res)>0) {
$idx = 0;
while($row = sql_fetch_array($res)) {
$DATA['cart'][$idx] = $row;
# 옵션DB 가져오기
$qry2 = " SELECT * FROM {$g5['g5_shop_item_option_table']} WHERE it_id = '{$row['it_id']}' AND io_id='{$row['io_id']}' AND io_type='0' ";
$res2 = sql_query($qry2);
if(sql_num_rows($res2)>0) {
$DATA['opt'][$idx] = sql_fetch_array($res2);
}
$idx++;
}
}
//print_r($DATA);
# 출력화면 그리기 ---------------------------------------------------------------------------
?>
<style type="text/css">
.print-wrap { width:600px; box-sizing:border-box; margin:5px auto; }
/* 표제부 */
.table-info { border-collapse:collapse; width:100%; }
.table-info * { font-size: 12px;}
.table-info td { border:1px solid #09a4b6; height:20px; }
.table-info .td-row-6 { background:#06899f; color:#ffffff; text-align:center; }
.table-info .td-head { background:#67b9c2; text-align:center; color:#ffffff; }
/* 제품리스트 */
.table-list { border-collapse:collapse; width:100%; margin:20px 0 0 0; }
.table-list * { font-size:12px;}
.table-list td { border:1px solid #09a4b6; height:20px; }
.table-list .td-head { background:#67b9c2; text-align:center; color:#ffffff; }
.table-list .td-body { font-size:11px !important; }
/* 공통 */
.input-1 { width:174px; }
.td-right { text-align:right; }
.td-center { text-align:center; }
/* 기타 */
.div-help { margin:10px 0; color:#2861c8; }
.print-button { width:600px; margin:10px auto; text-align:right; }
.print-button button { padding:4px 10px; background:#2548a5; color:#ffffff; border:0; }
@media print {
.print-button { display:none; }
}
</style>
<div class="print-wrap">
<table class="table-info">
<col width="20">
<col width="60">
<col width="180">
<col width="20">
<col width="60">
<col width="">
<col width="60">
<col width="">
<tr>
<td class="td-row-6" rowspan="6">의<br>뢰<br>자</td>
<td class="td-head">견적일</td>
<td class="td-body"><input type="text" class="input-1" value="<?php echo date("Y-m-d")?>"></td>
<td class="td-row-6" rowspan="6">공<br>급<br>자</td>
<td class="td-head">등록번호</td>
<td class="td-body" colspan="3"><?php echo $default['de_admin_company_saupja_no']?></td>
</tr>
<tr>
<td class="td-head">업체명</td>
<td class="td-body"><input type="text" class="input-1"></td>
<td class="td-head">회사명</td>
<td class="td-body"><?php echo $default['de_admin_company_name']?></td>
<td class="td-head">성명</td>
<td class="td-body"><?php echo $default['de_admin_company_owner']?></td>
</tr>
<tr>
<td class="td-head">담당자</td>
<td class="td-body"><input type="text" class="input-1"></td>
<td class="td-head">주소</td>
<td class="td-body" colspan="3"><?php echo $default['de_admin_company_addr']?></td>
</tr>
<tr>
<td class="td-head">전화</td>
<td class="td-body"><input type="text" class="input-1"></td>
<td class="td-head">업태</td>
<td class="td-body"><?php echo $default['de_biztype_a']?></td>
<td class="td-head">종목</td>
<td class="td-body"><?php echo $default['de_biztype_b']?></td>
</tr>
<tr>
<td class="td-head">팩스</td>
<td class="td-body"><input type="text" class="input-1"></td>
<td class="td-head">전화</td>
<td class="td-body"><?php echo $default['de_admin_company_tel']?></td>
<td class="td-head">팩스</td>
<td class="td-body"><?php echo $default['de_admin_company_fax']?></td>
</tr>
<tr>
<td class="td-head">E-mail</td>
<td class="td-body"><input type="text" class="input-1"></td>
<td class="td-head">담당자</td>
<td class="td-body" colspan="3"></td>
</tr>
</table>
<table class="table-list">
<col width="80">
<col width="80">
<col width="80">
<col width="">
<col width="60">
<col width="40">
<col width="70">
<tr>
<td class="td-head">제품번호</td>
<td class="td-head">제품명</td>
<td class="td-head">형식번호</td>
<td class="td-head">제품사양</td>
<td class="td-head">단가</td>
<td class="td-head">수량</td>
<td class="td-head">가격</td>
</tr>
<?php
$total_price = 0;
$this_price = 0;
if (isset($DATA['cart']) && is_array($DATA['cart'])) {
foreach($DATA['cart'] as $key=>$val) {
$this_price = ($val['ct_price']+$val['io_price']) * $val['ct_qty'];
$total_price += $this_price;
?>
<tr>
<td class="td-body"><?php echo $val['io_id']?></td>
<td class="td-body"><?php echo $val['it_name']?></td>
<td class="td-body"><?php echo $DATA['opt'][$key]['io_misc01']?></td>
<td class="td-body"><?php echo $DATA['opt'][$key]['io_misc02']?></td>
<td class="td-body td-right"><?php echo number_format($val['ct_price']+$val['io_price'])?></td>
<td class="td-body td-center"><?php echo number_format($val['ct_qty'])?></td>
<td class="td-body td-right"><?php echo number_format($this_price)?></td>
</tr>
<?php
} # end foreach;
} # end of if
?>
<tr>
<td class="td-body td-center" colspan="6"><strong>합계금액</strong></td>
<td class="td-body td-right"><strong><?php echo number_format($total_price)?></strong></td>
</tr>
</table>
<div class="div-help">
상기 견적내용은 환율에 따라 가격이 변동될 수 있으니 참고용으로만 활용하시기 바랍니다.<br>
(견적내용 및 입력사항은 서버로 전송되지 않습니다)<br>
자세한 견적상담을 원하시면 <?php echo $default['de_admin_company_tel']?>로 전화바랍니다.
</div>
</div>
<div class="print-button">
<button type="button" onClick="print();">인쇄</button>
<button type="button" onClick="window.close();">닫기</button>
</div>
<?php
include_once(G5_PATH.'/tail.sub.php');
답변을 작성하시기 전에 로그인 해주세요.