• ベストアンサー

ショッピングカートで$_SESSIONへデータを格納する方法

$syohin_code = $_POST['syohin_code']; $syohin_name = $_POST['syohin_name']; $sale_price = $_POST['sale_price']; $kazu = $_POST['kazu']; $_SESSION['cart']['$syohin_code'] = array ("syohin_code" => $syohin_code , "syohin_name" => $syohin_name, "sale_price" => $sale_price , "kazu" => $kazu ); foreach ($_SESSION['cart']['$syohin_code'] as $key => $value){ echo $key . $value;} データベースより一覧表示した商品を「カートに入れる」ボタンを使いPOSTした値を上記のcart.phpへ飛ばし、配列としてセッション変数に格納しました。ひとつの値は上記より取得できるのですが、複数の商品を格納する方法がどうしても分かりません。それともどこかに保存されているのでしょうか? この取得したデータを元に、購入商品全てを一覧表示させたいのですが、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • la_pure
  • ベストアンサー率72% (18/25)
回答No.3

こんにちわ。 >プラス、$syohin_codeに変更すれば >$_SESSION['cart'][1] => なまえ1 >$_SESSION['cart'][2] => なまえ2 >が、どうしても理解できません。自分なりに考えたのは、 説明不足ですみません。 $syohin_codeは商品ごとにユニークは値がふられていてその値はS001、S002ということですね。 ['cart'][1]とか['cart'][2]とかこちらで勝手につけてました。 余計分かりづらくなってましたね。 結果的に print_r($_SESSION['cart']) で Array ( [1] => なまえ1 [2] => なまえ2 ) になるということが言いたかったのです。 さて本題ですが >$_SESSION['cart'] = array($syohin_code => $kazu); >$_SESSION['cart']["$syohin_code"] = "$kazu"; この部分のプログラムですが、このまま書いているのでしょうか?同じことやっているのであまり意味がないですね。 >$_SESSION['cart']["$syohin_code"] = "$kazu"; の1行だけで、よいと思いますよ。 簡単にテストしてみました。 ============================================ $array = array(); //配列初期化 $array['cart'] = array("S001"=>1); //S001追加 var_dump($array['cart']); $array['cart']["S002"]=1; //S002追加 var_dump($array['cart']); ============================================ とやったら下記のようになりました。 ========================================= 最初のvar_dump array 'S001' => 1 2つ目のvar_dump array 'S001' => 1 'S002' => 1 プログラムはそれでよいと思うので、$_POST値の確認からですかね。

mmddrryy
質問者

お礼

la_pure様 ご丁寧な解説ありがとうございました。 悩みましたが、無事配列へ格納することができました。少し配列の理解が深まりました。

その他の回答 (2)

  • la_pure
  • ベストアンサー率72% (18/25)
回答No.2

こんにちわ。 >$_SESSION['cart']['$syohin_code'] = これは $_SESSION['cart'][$syohin_code] でないと、$syohin_codeという文字列として認識されてしまいます。 プラス、$syohin_codeに変更すれば $_SESSION['cart'][1] => なまえ1 $_SESSION['cart'][2] => なまえ2 のようになって、複数商品入れられると思いますが、これでは駄目ですかね? あと別件ですが >$syohin_code = $_POST['syohin_code']; >$syohin_name = $_POST['syohin_name']; >$sale_price = $_POST['sale_price']; >$kazu = $_POST['kazu']; このあたりですが、addslashesとかintval,preg_matchなど使って、入力チェックしたほうがよいですよ。(すでにやっていたらすみません。)

mmddrryy
質問者

お礼

la_pure様 ご指摘ありがとうございます。['$syohin_code']修正しました。確かに文字列になってしまいますね。 以下の部分 プラス、$syohin_codeに変更すれば $_SESSION['cart'][1] => なまえ1 $_SESSION['cart'][2] => なまえ2 が、どうしても理解できません。自分なりに考えたのは、 ---------------------------------------------------------- $syohin = array("S001" => "2"); -----(2は個数) $syohin["S002"] = "3"; print_r($syohin);→結果 Array ( [S001] => 2 [S002] => 3 ) ---------------------------------------------------------- 商品コードと個数をセットで配列にセットできれば、あとはSQLでDBより引き出せると考えました。 しかし実際 「カゴに入れる」でPOSTしても $_SESSION['cart'] = array($syohin_code => $kazu); $_SESSION['cart']["$syohin_code"] = "$kazu"; print_r($_SESSION['cart'] ); →結果 Array ( [S001] => 5 ) になってしまいます。 Array ( [S001] => 5 , [S002] => 3) のようにカートにどんどん商品を追加していくにはどのようなコードを書いたら良いでしょうか? よろしくお願いします。 入力チェック件、ありがとうございました。テキストボックスからの取得ではないので省いていました。早速追加したいと思います。 -----------------------------------------------------------

mmddrryy
質問者

補足

すみません補足です。上記変数は $syohin_code = $_POST['syohin_code']; $kazu = $_POST['kazu']; で取得しています。よろしくお願い致します。

  • yossy-55
  • ベストアンサー率55% (5/9)
回答No.1

3次元配列にすれば解決しそうな気がします。 $_SESSION['cart']['$syohin_code'][]

mmddrryy
質問者

お礼

ありがとうございます。3次元配列は使ったことがないですが、勉強してみようと思います。考えたのですが、$syohin_codeだけをarray_pushで追加して、SQLで$syohin_nameなどを取得するのはどうでしょうか?