• ベストアンサー

ショッピングカートで$_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へ飛ばし、配列としてセッション変数に格納しました。ひとつの値は上記より取得できるのですが、複数の商品を格納する方法がどうしても分かりません。それともどこかに保存されているのでしょうか? この取得したデータを元に、購入商品全てを一覧表示させたいのですが、よろしくお願いいたします。

  • PHP
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
  • 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などを取得するのはどうでしょうか?

関連するQ&A

  • セッション変数にカンマ区切りでいれていったデータを削除したい

    ショッピングカートを作りたいのですが、セッションのデータから特定の値を削除する方法がわかりません。 $_SESSION['vals']['cart'].="{$_POST['code']},"; $_SESSION['vals']['cart'].="{$_POST['name']},"; $_SESSION['vals']['cart'].="{$_POST['price']},"; $_SESSION['vals']['cart'].="{$_POST['num']},"; たとえば↑みたいに、他のページから飛んできたデータを$_SESSION['vals']['cart']に , 区切りで、どんどんデータを入れていったとしたら、どうやって、特定の値のデータを$_SESSION['vals']['cart']から削除するのでしょうか? よろしくおねがいいたします。

    • 締切済み
    • PHP
  • ショッピングカートのセッション処理について。

    いつも拝見し大変お世話になっております。 現在ショッピングカートを作成しておりますが、商品購入画面から”購入する”のボタンを押したときに、購入する商品ID,注文数量、サイズ、商品価格をセッションとして 格納したいのですがうまくいかず困っております。 使用PHPバージョンは4.4です ソースは以下のとおりです。 //購入するのボタンを押したときの処理 if (isSet($_POST['cart']){ $_SESSION['cart'][$_POST(商品コード)] =+$_POST(商品価格); //↑セッション格納ここまで //(テスト)格納したデータを表示 print_r($_SESSION['cart']); } いろいろと調べて該当する商品コードと値段は 格納することができたのですが、その他の商品購入数などをデータにさらに格納する時どうすればいいかわかりませんでした。 お忙しい中大変申し訳ございませんがお知恵をお貸しいただけますでしょうか?よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ショッピングカートの作成しようと思ってます。

    今ショッピングカートの商品を選んでカートに入れたのち別のページに飛ばして精算させるプログラムを作ってますがプログラムがうまく作動しません。 ショッピングカートのプログラムは <?php if (isset($_POST['cart'])){ $_SESSION['cart'][$_POST('code')] += $_POST('num'); print "<p>カートに入れました。</p>\n"; } else if ($_POST['delete']) { $_SESSION['cart'] = array(); print "<p>カートを空にしました。</p>\n"; } ?> 精算プログラムのエラー箇所は以下の感じです。 foreach ($_SESSION['cart'] as $code => $num) { $rs = mysql_query($con, "select * from member7 where code=$code"); $row = array($rs); $ss = $num * $row['tanka']; print "<tr><td>{$row['name']}</td><td>{$row['tanka']}円</td><td>$num</td><td>{$ss}円</td></tr>\n"; $sum += $ss; } 長ったらしいですが解決策を教えてくださればと思います。 PHPは5.2.0を使用してください。

    • ベストアンサー
    • PHP
  • ショッピングカートの作成

    今ショッピングカートを作成しようとしていて商品サンプルがいくつかあり「カートへ」ボタンを押すと精算ページへ飛び精算を行うというプログラムをつくっているのですがいくつかのサンプルでどれを選んでも一番上のサンプルの精算しか行えません。どうすれば解決できますでしょうか?よろしくお願いします。 ショッピングカートのプログラムの一部です。 while($row = mysql_fetch_row($result)){; $code = $row['0']; print "<form method='post' action='cart_syohin2.php'><tr>"; print "<td rowspan='2'>"; if (file_exists("cart_image/$code.jpg")) print "<img src='cart_image/$code.jpg' border='0'>"; print "</td>"; print "<td rowspan='3'>{$row['3']}</td>"; print "<td nowrap>{$row['2']}円</td></tr>"; print "<tr><td nowrap><input type='text' name='num' size='3'>個</td></tr>"; print "<tr><td>{$row['1']}</td>"; print "<td><input type='hidden' name='code' value='$code'><input type='submit' name='cart' value='カートへ'>"; print "</td>"; print "</tr></form>\n"; }

    • 締切済み
    • PHP
  • セッションにIDを振って値を代入

    PHP初心者です。 PHP4.2.xを使っています。 ショッピングカートで購入した商品データをセッションで維持してカートに追加する機能部分を作っていますがうまくいきません。 コードは以下のとおりです。 【goods.php】 ----------------------------------------------------------- <? session_start(); ?> ■商品1 <form action="cart.php" method="POST"> <input type="hidden" name="id" value="1" /> <input name="num" type="text" /> <INPUT type=submit value="カートに追加"> </form> ■商品1 <form action="cart.php" method="POST"> <input type="hidden" name="id" value="2" /> <input name="num" type="text" /> <INPUT type=submit value="カートに追加"> </form> ----------------------------------------------------------- 【cart.php】 ----------------------------------------------------------- <? session_start(); if($_POST['id'] != ""){ $id = $_POST['id']; $num = $_POST['num']; // セッション名自体をIDで作っています。中身は個数のみです。 $_SESSION["$id"] = $num; } echo "カートに入ってる商品<br />"; for ($i = 0; $i<=100; $i++) { if (!empty($_SESSION["$i"])){ echo $_SESSION["$i"]. "<br>\n"; } } ?> ----------------------------------------------------------- goods.phpのファイルで商品1と商品2を1つずつカートに入れれば cart.phpのページで 1 1 と表示されるはずが、1しか出ません。 $_SESSION["1"] $_SESSION["2"]の中身が表示される予定でしたがそうならず、 そのときPOSTで投げられたIDしか$_SESSION["$id"]に保持されません。 どうすればどんどん商品をカートに追加できますでしょうか? アドバイスのほどどうぞよろしくお願いします!

    • ベストアンサー
    • PHP
  • phpでショッピングカート機能を作りたい。

    PHPで店舗のショッピングカートを作ろうとしています。 data 1 リンゴ 100円     2 ミカン  80円     3 バナナ 50円 PHPコード <form action="" method="post"> <?php $sql = "SELECT * FROM list"; $sth = $dbh->prepare($sql); $sth->execute(); while ($row = $sth->fetch()) { $id = $row["id"]; $name = $row["name"]; $price = $row["price"]; $image = $row["image"]; echo <<<EOT <table cellspacing="0" cellpadding="0" width="605" height="150"> <tr> <td rowspan="5" valign="top"><img src="../kanri/image/goods/$image" border="0" /></td> <form action="" method="post"> <input type="hidden" name="$id" value="$id" /> <input type="hidden" name="$name" value="$name" /> <input type="hidden" name="$price" value="$price" /> <td align="left" bgcolor="#eee8aa" width="400"><b> $id. $name</b></td> </tr> <tr> <td colspan="2" bgcolor="#ccccff"><p><font color="#000088"><b>税込 :$price </b></p></td> </tr> <td colspan="2" bgcolor="#e6e6e6"><p> 個数 : <select name="number"> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> </select> <input type="submit" name="submit_cart" value="カートに入れる" /></p> </td> </tr> </table> </form> <br /> EOT; } ?> <hr></hr> <div align="center">カートの中身</div> <?php if (isset($_POST["submit_cart"])) { if(!isset($name)){ $name = $_POST['name']; } if(!isset($price)){ $price = $_POST['price']; } if(!isset($number)){ $number = $_POST['number']; } $total = $price * $number; echo "<div align='center'><p>$id 番の情報を取得しました。</p></div>"; echo "<div align='center'><p>商品名: $name </p></div><div align='center'><p>単価:$price 円 / 個数:$number 個</p></div>"; echo "<hr></hr>"; echo "<div align='center'><p>合計金額:<b>$total 円</b>です。</p></div>"; } ?> としているのですが、カートに入れるボタンを押しても最後のバナナしかカートに表示出来ません。 全ての商品の注文をカートに入れるにはどうすれば良いでしょうか? ご教授のほど宜しくお願いします。

    • ベストアンサー
    • PHP
  • HTMLのSELECTタグの使い方、JSPのセッション格納について

    HTMLのSELECTタグの使い方、JSPのセッション格納について Jspで開発をしております。IE7以上です。 同一画面内でボックスで選択した値をそのままセッションに格納したいのです。 Javascriptで制御したいのですが、なにかいい方法をご存知ですか? <script type="text/javascript"> function test(obj) { with(obj) { form.text1.value = options[selectedIndex].value; } } </script> <SELECT NAME="select1" onchanged="test(this)"> <OPTION VALUE=1>First <OPTION VALUE=2 selected>Second <OPTION VALUE=3touya">Theard </SELECT> またselectedでは初期の表示のみ選べて値の初期値はscript側で設定するのでしょうか? これだとボックスに変化があれば値が取得できるみたいです。 できればボックスをいじらなければ初期表示の値をセッションに格納。 ボックスをいじれば選択した値をセッションに格納。

  • while文で取得したデータ一覧の一括修正の仕方についてお教え下さい。

    お世話になります。 PHPの勉強中です。質問内容等に頓珍漢なものがあったらおゆるし下さい。 PHP+MYSQLで、ショッピングカートを試作しています。 在庫数を調整する際に1つ1つの商品の在庫数を個別の商品の修正画面か ら修正するよりも商品の一覧表で修正したいと考え、while文を使って商品 の一覧の入力フォームをWhile分で作成しました。 ------------------------------------------------------------------ while($row = mysql_fetch_array($result)){ echo "<form action = \"server_management_remove.php\" method = \"post\">"; echo"<div id='category_name_content'>"; echo"<p>"; echo$row["item_id"]; echo"</p>"; echo"</div>"; //-----価格1の設定----- $array_sale_price1 = array($row["stock1_price"],$row["stock2_price"],$row["stock3_price"]); $sale_price1_max = max($array_sale_price1); $sale_price1_true1 = $sale_price1_max * $row["profit1"]; $sale_price1_true = ceil($sale_price1_true1); echo"<div class='sale_price1_case1'>"; echo "<input type = \"text\" name = \"sale_price1\" value =\""; echo "$sale_price1_true"; echo "\" style='width:25px'>"; echo"</div>"; echo"<div class='sale_price1_case1'>"; echo "<input type = \"text\" name = \"profit1\" value =\""; echo $row["profit1"]; echo "\" style='width:25px'>"; echo"</div>"; echo"<div class='stock_contents_delete'>"; echo "<input type = \"hidden\" name = \"item_id\" value =\""; echo $row["item_id"]; echo "\">"; echo "<input type=\"submit\" value=\"更新\">"; echo "</form>"; echo"</div>"; echo"<div class='space'>"; echo"</div>"; } ?> ------------------------------------------------------------------ 上記のソース(文字数の関係で一部省略しています。)ですと、更新ボタ ンがそれぞれの商品ごとに設置されていて、1つづつ更新する分にはいい のですが、できれば、表の下にでも『一括更新』といったようなボタンを 設置して、一覧表に一気に入力して、最後に『一括更新』ボタンを押すと 修正した内容が一気にPOSTされるようにしたいと思っています。 そのような場合、修正した内容をすべてMySQLに格納するにはどうすれば よいでしょうか? PHPの勉強中ということもあり、どうすればいいのかの検討がついてい ません。ご迷惑かけますがよろしくご教授のほどお願いします。

    • ベストアンサー
    • PHP
  • ショッピングカートの合計金額を求めたい…。

    お世話になります。 ショッピングカートを作っているのですが、購入商品を一覧表示させて その商品数と、合計金額を表示させたいのですが色々試しましたが いい方法が思い浮かびません…。 初心者なのですが、どなたか宜しくご教授お願いします。 ちなみに、ArrayListに購入商品を格納し、それをセッションに セットしてます。 購入商品の各項目には、商品番号・商品名・価格・購入個数があります。 説明不足であればスグに捕捉致します。

    • ベストアンサー
    • Java
  • $_SESSIONに二次元配列を使えるのですか?

    php4.3です。 例えば、 syouhin[12-3][name]='aaa' syouhin[12-3][price]='2000' syouhin[12-3][tani]='箱' syouhin[22-4][name]='bbb' syouhin[22-4][price]='1500' syouhin[22-4][tani]='袋' ・・・ のような二次元配列があった場合、 $_SESSION("s_arry")に syouhin[12-3]の[12-3]のキーと [name][price][tani]の値を を渡したいのですが。 [22-4]も追加することもあります。 また、そのセッションに[12-3]が設定されているか 判断し、されていれば[name]等を参照したいのですが。 意味がお分かりでしょうか? まだセッションのところが良くわからず悪戦苦闘しています。 よろしくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう