1

誰かが私を正しい方向に向けてくれることを願っています。私は円を描いて回っているように感じます。

簡単なショッピングアプリケーションをまとめています。現時点では、テクニックを示すための非常に基本的なものだけです。

シナリオでは、アイテムを含むデータベーステーブルが1つあります。これらは、青と赤の範囲のアイテムに分割されています。

インデックスページでは、ユーザーは青または赤のアイテムに移動するオプションがあります。

赤(または青)のアイテムページが表示されると、アイテムが表示され、現在の価格と在庫レベルがデータベース(MySQL)から取得されます。次に、ユーザーは1つのアイテムを選択し、購入ボタンをクリックしてカートに追加します。

次に、ページはショッピングカートページにリダイレクトされ、ユーザーはアイテムの数量を更新するか、チェックアウトページに進むか、「赤」または「青」の範囲に戻ることができます。

私の問題はこれです.....

1)購入の「クリック」で追加されたアイテムをキャプチャするようにセッション配列を設定するにはどうすればよいですか?

これまでのところ、これはすべてのページの上部にあります...

<?php session_start();
?>

ただし、「カート」に追加できるアイテムは1つだけのようです。

これは、私のDBからアイテムをプルする方法です。

<?php
$result = mysql_query ('SELECT * FROM items WHERE colour="red"');
// fetch the resulting row as an associative array
while ($row = mysql_fetch_assoc ($result)){
  echo '£', number_format( $row ['price'] / 100, 2, '.', ' ' );
  }
?></p>

2)これは、赤または青のページの各項目の下にあるフォームアクションのコードです。

<form method="post" action="cart.php">
                    <p>
<input type="submit" name="submit" value="Buy" />
<input type="hidden" name="cart" value="add" />
<input type="hidden" name="item" value="redplate" />
                    </p>
                </form>

3)ショッピングカートページで数量が更新された後、チェックアウトページに「注文済み」アイテムを表示するにはどうすればよいですか?

これまでのところ、これはショッピングカートページの内容です。チェックアウトページでこれを繰り返して、更新された数量を取得しますか??...。

<?php
$submit = $_POST["submit"];

//Call the function and save all data into the array $_SESSION['form'] 
if($submit == "Buy"){setSessionVars();} 

function setSessionVars() {

    $item = array();
    foreach($_POST as $fieldname => $fieldvalue) {
        $item[$fieldname] = $fieldvalue;
    }  
    $_SESSION['cart'] = $item;

          echo "            <table> 
          <tr> 
            <td> 
                <img src=\"images/{$item['item']}.jpg\" />
                    <td/> 
            <td>
                {$item['item']} =
                    </td>
            <td> 
            <input type=\"text(5)\" name=\"value\" value=\"1\" />

            <input type=\"submit\" name=\"puchasedquan\" value=\"Click to update\" /> 

             </td> 
            </tr> 
                            </table>";
}
?>

どんな助けでも大歓迎です!! まるで輪になって旅をしているような気分です!

4

4 に答える 4

1

ここでの大きな間違いは、すべてのデータを1つのセッション変数にまとめて配置していることです$_SESSION['cart']

セッションに複数のアイテムを挿入したいので、$_SESSION['cart'][]アイテムを挿入するために使用する必要があります。

値を保存しようとするときはいつでも、forループを使用して読み取りを行ってください。

foreach($_SESSION['cart'] as $cartItem) {
  $cartItem; // will have all the item individually on each pass
}
于 2012-04-20T22:35:56.373 に答える
1

PHP セッション変数に何かを保存する際の問題は、それらが Cookie に保存されることです。つまり、Cookie を有効にする必要があります。さて、最近ではほとんどのブラウザに Cookie が設定されています。

しかし、クライアント ファイルから直接値を読み取り、それをデータベースに入れる場合はどうでしょうか。"subtotal=10000" と書かれた Cookie ファイルを誰かがハッキングして値を "subtotal=1" に変更し、それをシステムにプッシュするのを止めるにはどうすればよいでしょうか?

実際にショッピング セッションをデータベースに保存すると、システムはより堅牢になります。

CREATE TABLE tbl_shopping_session(
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY(id),
    php_session_key VARCHAR(32),
    coupon_id INT,
    FOREIGN KEY(coupon_id) REFERENCES tbl_coupons(id),
    updated TIMESTAMP /* a timestamp is added to find & del old sessions */
) ENGINE = InnoDB;

CREATE TABLE tbl_shopping_cart(
    shopping_session_id INT,
    FOREIGN KEY(shopping_session_id) REFERENCES tbl_shopping_session(id) ON DELETE CASCADE,
    product_id INT,
    FOREIGN KEY(product_id) REFERENCES tbl_products(id),
    cart_qty INT /* or DECIMAL(9,3) or something */,
    subtotal DECIMAL(18,4)
) ENGINE = InnoDB;

そこから画像を取得できます...php_session_keyは現在のショッピングセッションを識別するために使用され、現在のセッションIDはカートアイテムを見つけて別のテーブルに保存するために使用されます。

于 2012-04-20T22:22:53.690 に答える
0

これを試して

$item = array();
foreach($_POST as $fieldname => $fieldvalue) {
    $item[$fieldname][] = $fieldvalue;
} 
于 2012-04-20T22:23:00.297 に答える
0

さらに追加すると $_SESSION キーが置き換えられるため、実際には既存の値を上書きするだけです。これを追加できます。

foreach($_POST as $fieldname => $fieldvalue) {
    // Now the array will be enumerated
    $item[$fieldname][] = $fieldvalue;
}  

print_r($item);
于 2012-04-20T22:23:04.613 に答える