2013-05-02 57 views
0

以前我已經發布了一篇關於購物車頁面的帖子,打電話給shopcart.php,但似乎沒有人真的可以回答它。每當我輸入新的數量,然後點擊更改數量按鈕,似乎新的數額不能得到,按鈕沒有行動,(我真的很努力地找到解決方案的三個星期,upily現在仍然無法找到一個的問題出在哪裏)解決方案,希望大家能夠給我一個溫暖的手找給我的問題,我還是提示php和xajax調用函數來改變數量的動作

<?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> 
+0

很難用非英語評論和大量代碼來回答問題。 – Jared 2013-05-02 04:35:09

+0

嗨你有Skype的名字?這樣我就可以發送你我的源代碼給你看看 – 2013-05-02 04:39:28

+0

如果你有努力,我會使用Pastebin並將註釋翻譯成英文。 – Jared 2013-05-02 07:10:44

回答

0

不是「的innerHTML」 ......因爲標籤ID爲「總」是元素表單輸入, 正確的是 「價值」

$objResponse->assign('total','innerHTML',gettotal()); 

正確...

$objResponse->assign('total','value',gettotal()); 
+0

您能否詳細說明您的答案,並添加關於您提供的解決方案的更多描述? – abarisone 2016-04-15 15:19:08