2017-02-09 7 views
-1

私はPHPを学んでいて、簡単なカート/処理スクリプトを作成しようとしています。PHP POST配列データを使ってレシートを作成する

私はアイテムカートを細かく作成しましたが、ユーザーがカート内のアイテムを購入する際に領収書に情報を表示するのに問題があります。

私は自分のアイテムリストとカートの生成を省いたので、必要に応じてhereを見つけることができます。ここで

は、PHPは(変更を反映するために更新)私のcheckout.phpスクリプト cart.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ループでアイテムのID、タイトル、価格を読み取ることができないようです。配列がprint_r($ _ POST)を使って渡されているのがわかります。

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年齢の勧告を反映するために更新し、あなたの項目はすべてHTMLで同じname属性持っている今

+1

IDに基づいてどこかから価格とタイトルを取得する必要があります。 –

答えて

2

パースエラーを取得:

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

をあなたがための3つの異なるという名前の変数が必要になりますそのうちの1つは特定の取引の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

@オクシディアン時代のクイックフィードをお寄せいただきありがとうございます!私は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

修正済み - 新しいダイレクト出力メソッドが機能するはずです - 私のお詫び: –

関連する問題