2013-10-17 69 views
0

您好,我是第一次發佈海報。我試着尋找答案,但是從已發佈的材料中我沒有發現任何明顯的問題。我需要另一雙眼睛,因爲我無法弄清楚爲什麼我的表單數據沒有發佈。表單數據不會發送以後PHP處理

我正在使用會話變量來存儲短期購物車。最終,在結賬時,這個訂單數據將被最終確定到數據庫。當我提供我的購物車內容進行審查時,我需要爲我的客戶提供更新數量(或刪除)的自由。保持這是整潔越好,這裏的車內容的HTML渲染(無標題,總計等):

<form action="mas_cart.php" method="post"> 
    <table id="shCart" border="1" width="800px" cellspacing="0"> 
     <tr> 
      <td align="left">DSC0679</td> 
      <td align="left">7.2H x 11W Glossy Paper </td> 
      <td align="center">No</td><td align="center">$55</td> 
      <td align="center"> 
       <input id="inp_qty" type="text" name="DSC0679_unsigned_7.2H x 11W Glossy Paper $55" value="1" size="3"> 
      </td> 
      <td align="right">55.00</td> 
     </tr> 

     <tr> 
      <td align="left">MRS5293</td> 
      <td align="left">7.3H x 11W Glossy Paper </td> 
      <td align="center">Yes</td> 
      <td align="center">$55</td> 
      <td align="center"> 
       <input id="inp_qty" type="text" name="MRS5293_signed_7.3H x 11W Glossy Paper $55" value="1" size="3"> 
      </td> 
      <td align="right">55.00</td> 
     </tr> 

     <tr> 
      <td align="left">MRS5293</td> 
      <td align="left">7.3H x 11W Glossy Paper </td> 
      <td align="center">No</td> 
      <td align="center">$55</td> 
      <td align="center"> 
       <input id="inp_qty" type="text" name="MRS5293_unsigned_7.3H x 11W Glossy Paper $55" value="2" size="3"> 
      </td> 
      <td align="right">110.00</td> 
     </tr> 
    </table> 

    <input type="hidden" name="save" value="true"/> 
    <input type="image" src="images/save-changes.png" style="border:1px solid rgb(50,50,50)" alt="Save Changes"/> 
</form> 

,這裏是這是應該處理更新的PHP代碼:

//update section 
if(isset($_POST['save'])) { 
    foreach ($_SESSION['cart'] as $item => $qty) { 
    if($_POST[$item]==0 || $_POST[$item]=="") { 
     unset($_SESSION['cart'][$item]); } 
    else { 
     $_SESSION['cart'][$item] = $_POST[$item];} } 

在執行中,$_POST['save']設置正確,但$_POST[$item]回報未定義指數:

注意:未定義指數:DSC0679_unsigned_7.2H X 11W光面紙$ 55 C:\ XAMPP \ HTDO在線CS \ AAA \ mas_cart.php 57

注意:未定義指數:MRS5293_signed_7.3H X 11W光面紙$ 55 C:\ XAMPP \ htdocs中\ AAA \ mas_cart.php上線57

注意:未定義指數:MRS5293_unsigned_7.3H X 11W光面紙$ 55 C:\ XAMPP \ htdocs中\ AAA \ mas_cart.php上線57

基本上,在後處理的條件總是呈現爲真,因爲該指數是不確定的,所以更新吐出錯誤並清除購物車。我知道這是可恨的,要求別人來看看我的代碼,但是我有最糟糕的時間搞清楚了。任何建議將不勝感激!幫幫我?

+2

使用print_r($ _ POST);檢查腳本實際提交的內容 –

+4

您的輸入名稱無效,並且未定義。有空格,點,美元符號等,這不會洗。因此'注意:未定義的索引';-) –

+0

另外,在輸入名稱中有一個在其左右兩側帶有空格的'x',PHP試圖做數學運算,但它不知道如何正確計數。 *咳嗽* –

回答

0

以下是我建議你改變你的HTML的結構:

<form action="mas_cart.php" method="post"> 
    <table id="shCart" border="1" width="800px" cellspacing="0"> 
     <tr> 
      <td align="left"> 
       <input readonly type="text" name="id[]" value="DSC0679"/> 
      </td> 
      <td align="left"> 
       <input readonly type="text" name="desc[]" value="7.2H x 11W Glossy Paper"/> 
      </td> 
      <td align="center"> 
       <input readonly type="text" name="something[]" value="No"/> 
      </td> 
      <td align="center"> 
       <input readonly type="text" id="price0" name="price[]" value="55.00"/> 
      </td> 
      <td align="center"> 
       <input type="number" id="quantity0" name="quantity[]" min="0" size="3"/> 
      </td> 
      <td align="right"> 
       <input readonly type="text" id="text0" name="ext[]"/> 
      </td> 
     </tr> 

     ... 

    <input type="hidden" id="count" name="count" value="3"/> 
    <input type="hidden" name="save" value="true"/> 
    <input type="image" src="images/save-changes.png" style="border:1px solid rgb(50,50,50)" alt="Save Changes"/> 
</form> 

如果結束name[]它把該值作爲一個數組,而不僅僅是一個單一的價值。此外,我還向您提供了價格,數量和分機字段的ID以及產品數量,以便您可以在Javascript中進行即時計算。那麼你可以做你的PHP什麼(我沒有測試過):

$products = array(); 

if(isset($_POST['save']) && is_array($_POST['id'])) { 
    for($i=0,$l=count($_POST['id']);$i<$l;$i++) { 
     $products[$i] = array(); 

     $fields = array('id','desc','something','price','quantity','ext'); 

     foreach($fields as $field) 
      { $products[$i][$field] = $_POST[$field][$i]; } 
    } 
} 

然後比如,你可以爲得到的第一個產品數量:$products[0]['quantity']

在實際的應用中使用類似這你只需要每個產品的ID和數量。計算將在後端完成(不要信任用戶),產品信息也不會真的需要。

+0

感謝您的輸入。我只是登錄發佈更新,並發現一些發佈的響應也指出了這個方向。事實證明,HTML/PHP對形式爲'name'的允許字符施加了限制。這兩個空間和'。'不工作,並取代「_」。有趣的是,'$'繼續工作就好了......去圖。幾分鐘前,當我重新格式化我的'項目'字符串時,問題就消失了,我開始跳舞。感謝大家花時間研究我的問題:)!!! –