2017-02-09 54 views
-1

我正在學習PHP並試圖製作一個簡單的購物車/處理腳本。使用PHP POST數組數據創建收據

我已經創建了項目精車,但我有我的收據顯示信息時,用戶承諾在他們的車購買項目(S)的麻煩。

爲了節省空間/時間我已經遺漏了我的項目清單和車的一代,他們可以發現here如果你需要它。

下面是數據發佈到我的checkout.php腳本 cart.php的PHP(更新以反映變化)

<?php 
session_start(); ?> 
<form name="cart" id="cart" action="checkout.php" target='_blank' 
    method='post'> 
    <h1>Your Cart:</h1> 
    <table> 
     <tr> 
      <td><span class='title'>ID</span></td> 
      <td><span class='title'>Product</span></td> 
      <td><span class='title'>Price</span></td> 
     </tr> 
     <?php 
// Set a default total 
$total = 0; 
foreach ($_SESSION['cart'] as $cartid) { 
    ?> 
     <tr> 
      <td width="20%"> 
       <?php echo $cartid; ?> <input type="hidden" name="id[]" 
       value="<?php echo $cartid; ?>"> 
      </td> 
      <td width="100%"> 
       <?php echo $title?> 
       <input type="hidden" name="title[]" value="<?php echo $title; ?>"> 
      </td> 
      <td width="100%">$<?php echo $price;?> 
       <input type="hidden" name="prices[]" value="<?php echo $price; ?>"> 
      </td> 
     </tr> 
     <?php 
    $total += $price; 
} // end foreach 
?> 
     <tr> 
      <td>Total</td> 
      <td></td> 
      <td>$<?php echo $total; ?></td> 
     </tr> 
    </table> 
    <input type="submit" value="Buy" class="submit-button" /> 
</form> 

checkout.php(更新以反映變化)

<table> 
    <tr> 
     <th>ID</th> 
     <th>Product</th> 
     <th>Price</th> 
    </tr> 
    <?php 
foreach($_POST['ids'] as $id) { 
    echo " 
    <tr> 
    <td>$id</td> 
    <td>$_POST['titles'][$id]</td> 
    <td>$_POST['prices'][$id]</td> 
    </tr> 
    "; 
} 

?> 
    <tr> 
     <td>Total</td> 
     <td></td> 
     <td>$</td> 
    </tr> 
</table> 

我似乎無法得到foreach循環讀取項目編號,名稱或價格。我可以看到數組正在使用print_r($ _ POST)傳遞;但每個索引項作爲一個新的數組項e.g:

Array 
(
[checkout] => Array 
    (
     [0] => A123 
     [1] => Item1 
     [2] => 1000 
     [3] => Z999 
     [4] => Item999 
     [5] => 9999 
    ) 
) 

我如何可以張貼在更有意義的方式,即關聯數組的信息。然後使用該關聯的數組在信息格式中顯示錶格?

預計輸出

<table> 
    <tr> 
    <th>ID</th> 
    <th>Product</th> 
    <th>Price</th> 
    </tr> 
    <tr> 
    <td>A123</td> 
    <td>Item1</td> 
    <td>$1000</td> 
    </tr> 
    <tr> 
    <td>Z999</td> 
    <td>Item999</td> 
    <td>$9999</td> 
    </tr> 
    <tr> 
    <td>Total</td> 
    <td></td> 
    <td>$10999</td> 
    </tr> 
</table> 

N.B:這僅僅是一個學習鍛鍊,消毒不是必需的陣列,也沒有SQL。

編輯:更新,以反映@Obsidian年齡的建議,得到解析錯誤,現在

+1

你將不得不從基於ID的地方得到的價格和標題... –

回答

2

你的項目都在HTML相同name屬性:

<input type="hidden" name="checkout[]"> 

,您需要三個不同的命名變量提交,其中之一是特定交易的ID:

<input type="hidden" name="ids[]"> 
<input type="hidden" name="titles[]"> 
<input type="hidden" name="prices[]"> 

然後你可以通過每個項循環,並將其添加到相應的數組:

$titles = []; 
$prices = []; 
foreach($_POST['ids'] as $id) { 
    array_push($titles, $_POST['titles'][$id]); 
    array_push($prices, $_POST['prices'][$id]); 
} 

或者直接將它輸出:

foreach($_POST['ids'] as $id) { 
    $title = $_POST['titles'][$id]; 
    $price = $_POST['prices'][$id]; 
    echo " 
    <tr> 
    <td>$id</td> 
    <td>$title<td> 
    <td>$price</td> 
    </tr> 
    "; 
} 

希望這有助於! :)

+0

感謝您的快速反饋@Obsidian時代!我將cart.php文件更改爲具有唯一名稱,並將checkout.php更改爲直接輸出。雖然我得到一個解析錯誤? 解析錯誤:語法錯誤,意想不到「」(T_ENCAPSED_AND_WHITESPACE),期望標識符(T_STRING)或可變(T_VARIABLE)或數字(T_NUM_STRING) – Ben

+1

嗯,顯然不能用於陣列直接呼應當使用單引號。 'echo'['a']「'是有效的,'echo'$ a [b]」'是有效的,但顯然是'echo'$ a ['b']「'是語法錯誤。我現在更新我的答案,先將它們分配給一個變量。 –

+1

固定 - 新的直接輸出方法應該工作 - 我的道歉:) –