以前我发布了一篇关于购物车页面调用 shopcart.php 的帖子,但似乎没有人真正能回答它。每当我输入新数量并单击更改数量按钮时,似乎无法获取新数量并且按钮没有任何动作,(我真的非常努力地找到了三周的解决方案,直到现在仍然真的找不到问题出在哪里)希望大家能给我一个温暖的手帮我找到问题或者给我提示
<?php
error_reporting(0);
session_start();
header('Content-type: text/html; charset=utf-8');
include_once('../../xajax_core/xajax.inc.php'); // 引用 xajax
$xajax = new xajax(); // 建立 xajax 物件
// 註冊回應函式
$chaObj=$xajax->registerFunction('change_quantity');
$chaObj->useSingleQuote();
$chaObj->addParameter(XAJAX_FORM_VALUES,'form1');
$xajax->processRequest(); // 處理回應
$xajax->printJavascript();
//---------------------- 自訂函式區 ---------------------
// 負責更改商品數量的回應函式
function change_quantity($form) {
$objResponse = new xajaxResponse(); // 建立回應物件
// 表單中的 Checkbox 屬性為 p_id, 若有勾選, 其值才會傳入
// 所以檢查表單欄位中有 'p_id' 資料, 表示使用者有勾選產品
// 此時才做後續處理
if(isset($form['p_id'])) {
// 逐筆處理每一個被勾選的產品
foreach($form['p_id'] as $p_id) {
// 根據產品的訂購數量決定處理方式
if($form['qua'][$p_id]=='0') {
// 若訂購數量被設為 0, 則將此產品從購物車中移除
unset($_SESSION['cart'][$p_id]);
if(count($_SESSION['cart'])==0) { // 若購物車變成空的
$objResponse-> // 則關閉視窗
script('alert("cart has no items");window.close();');
unset($_SESSION['cart']);
}
else { // 若購物車中還有其它商品
// 將被刪除的產品從網頁中移除
$objResponse->remove($p_id);
// 更新購物車中的金額總計
$objResponse->assign('total','innerHTML',gettotal());
}
}
else if ($form['qua'][$p_id]>0) {
// 若設為大於 0 的值, 則將之設為購物車中的新數量
$_SESSION['cart'][$p_id]['quantity'] = $form['qua'][$p_id];
// 因已修改數量, 所以要更新購物車中的小計及總計金額
$objResponse->assign('sub[' . $p_id . ']', 'innerHTML',
$_SESSION['cart'][$p_id]['quantity'] *
$_SESSION['cart'][$p_id]['price']);
$objResponse->assign('total','innerHTML',gettotal());
}
else {
// 若被設為負值, 則將之回復原本的值
$objResponse->assign('qua[' . $pid . ']', 'innerHTML',
$_SESSION[$pid]['quantity']);
}
}
}
return $objResponse; // 傳回回應物件
} // 回應函式 change_quantity() 結束
// 計算總金額的函式
function getTotal() {
$total = 0;
foreach($_SESSION['cart'] as $p_id => $item)
$total += ($item['quantity'] * $item['price']);
return $total;
}
//---------------------- 購物車 HTML ---------------------
// 目前購物車中有商品, 程式才取出購物車內產品並顯示於網頁
if( !isset($_SESSION['cart']) ) { // 使用者尚未購物
echo "<script>alert(\"you haven't chosen any products\");" .
"window.close();</script>";
exit();
}
?>
<title>購物車內容</title>
<!-- -------------------- 用戶端 JavaScript ------------------ -->
<script type="text/javascript">
// 勾選或取消產品清單中所有產品 checkbox 的函式
function select_all(formName, elementName, selectAllName) {
elem = document.forms[formName].elements[elementName];
if(!elem) // 若找不到元素
return;
else if(elem.length!= null) // 若網頁列出多個產品 (elem 是陣列)
for(var i = 0; i < elem.length; i++)
elem[i].checked =
document.forms[formName].elements[selectAllName].checked;
else
elem.checked =
document.forms[formName].elements[selectAllName].checked;
}
// 將勾選的產品之訂購數量設為0, 再產生非同步要求
function settozero(formName, elementName) {
elem = document.forms[formName].elements[elementName];
if(!elem) // 若找不到元素
return;
else if(elem.length!= null) { // 若網頁列出多個產品 (elem 是陣列)
for(var i = 0; i < elem.length; i++)
if(elem[i].checked) {
var qua =
document.getElementById("qua[" + elem[i].value + "]");
var subtotal = document.getElementById("sub[" + elem[i].value + "]");
qua.value = 0; // 將數量設為 0
subtotal.value = 0;
}
}
else {
var qua = document.getElementById("qua[" + elem.value + "]");
var subtotal = document.getElementById("sub[" + elem.value + "]");
qua.value = 0; // 將數量設為 0
subtotal.value = 0;
}
var total_value = document.getElementById("total");
total_value.value = 0;
<?php $chaObj->printScript(); // 輸出呼叫回應函式的程式碼 ?>
}
</script>
<?php $xajax->printJavaScript('/'); ?>
<!-- ------------------- 購物車表單及表頭 ------------------- -->
<link rel="StyleSheet" type="text/css" href="../module.css" />
<form name="form1" id="form1" method="post" action="checkout.php">
<table width="800" border="0" align="center"
cellspacing="0" cellpadding="2"
style="text-align:center;border:1px solid silver">
<tr><th colspan="7">cart</th></tr>
<tr style="background-color:silver;color:white">
<td height="23" width="80">all
<!----- 呼叫函式選取或取消全部的 checkbox ----->
<input type="checkbox" name="all"
onClick="select_all('form1','p_id[]',this.name);">
</td>
<td height="23" width="460">product name</td>
<td height="23" width="60">unit price</td>
<td width="10" height="23"></td>
<td height="23" width="60">quantity</td>
<td width="10" height="23"></td>
<td width="70" height="23">subtotal</td>
</tr>
<!-- -------------------- 輸出購物車內容 -------------------- -->
<?php
// 呈現購物車表格內容
$total = 0;
foreach($_SESSION['cart'] as $p_id => $item) {
// 將此列的 id 屬性設為 $p_id, 以方便移除產品
echo "<tr id='$p_id'>\n";
echo "<td width='80' height='21'>" .
"<input type='checkbox' name='p_id[]' value='" .
$p_id . "'></td>\n";
echo "<td>" . $item['name'] . "</td>\n";
echo "<td width='60' >" . $item['price'] . "</td>\n";
echo "<td width='10' style='border-width:0'>×</td>\n";
echo "<td width='60'>" .
"<input type='text' name='qua[$p_id]' id='qua[$p_id]'
value='" . $item['quantity'] . "' size='3'></td>";
echo "<td width='10' style='border-width:0'>=</td>\n";
echo "<td width='70' align='right'>" ."<input type='text' size='6' id='sub[$p_id]' value='".($item['quantity'] * $item['price'])."' disabled>"."</td></tr>\n";
}
?>
<tr>
<td align="right" colspan="6">total:</td>
<td align="right" style="border-top:1px solid silver;width:70">
<input type="text" name="total" value="<?php echo gettotal(); // display total amount ?>" id="total">
</td>
</tr>
</table>
<!-- -------------------- cart button -------------------- -->
<table width="800" border="0" align="center">
<tr>
<td height="23" align="center">
<input type="button" name="DEL" value="remove products"
onClick="settozero('form1','p_id[]')">
</td>
<td height="23" align="center">
<input type="button" name="UPD" value="change quantity"
onClick="xajax_change_quantity(xajax.getFormValues('form1'))">
</td>
<td height="23" align="right">
<input type="button" name="CONT" value="continue shopping"
onClick="window.close();">
</td>
<td height="23" align="right">
<input type="button" name="CONT" value="checkout"
onClick="location.href='checkout.php';">
</td>
</tr>
</table>
</form>