![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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"]に保持されません。
どうすればどんどん商品をカートに追加できますでしょうか?
アドバイスのほどどうぞよろしくお願いします!
No.2ベストアンサー
- 回答日時:
カート処理ということですので、商品を削除したり、数量を変更したりする処理も時には必要になりますよね。
ほかに後工程として受注メールを送信したり、DBに保存したりする処理もありえます。それを前提とした場合であれば、"$_SESSION[$i] = array($num, $size)"ではなく、
多次元配列をもう少し明確にしておいた方がいいと思います。
例えば
$_SESSION[$i]['num']=$num;
$_SESSION[$i]['size']=$size;
商品削除なら
unset($_SESSION[$_POST['id']]);
数量変更なら
$_SESSION[$_POST['id']]['num']=$_POST['num'];
カート表示なら
foreach($_SESSION as $k=>$v){
echo '商品ID:'.$k.'<br />';
echo '数量:'.$v['num'].'<br />';
echo 'サイズ:'.$v['size'].'<br />';
}
と処理がスムーズになります。当然上記の処理は簡単にソースを書いていますので、細かい事までいってしまうと、カートに入った順に上から並べていく場合は、ソート処理も必要になりますので$_SESSIONも持ち方も考慮しなければなりません。
No.1
- 回答日時:
根本的な部分で、商品1のsubmitをクリックすると商品1のみの情報、商品2のsubmitをクリックすると商品2の情報しか送られませんので、両方を同時にカートに入れることができません。
次のような感じですといかがでしょうか。
(検証はしていませんが、参考程度に・・・・)
■goods.php(フォーム部分のみ)
<form action="cart.php" method="POST">
<?php
for($i=1;$i<=2;$i++){//商品1~2のinputフォーム表示のためのループ
?>
<p>商品<?php echo $i; ?><input name="num<?php echo $i; ?>" type="text" value="" /></p>
<?php
}
?>
<p><input type="submit" value="カートに追加" /></p>
</form>
■cart.php
<?php
session_start();
echo "<p>カートに入っている商品</p>\n";
for($i=0;$i<=100;$i++){
$str="num".$i;
if(isset($_POST[$$str])){//商品iに入力があった?
$num=mb_convert_kana(trim($_POST[$$str]),"n","UTF-8");//念のため半角数字に変換
if(is_numeric($num)){//入力値が数字?
$_SESSION[$i]+=$num;//セッション変数に入力値を追加
}
}
echo "<p>商品".$i.":".$_SESSION[$i]."</p>\n";
}
?>
ありがとうございます!
できました。
$_POST[$$str] では動かなかったので
$_POST["$str"] にしましたが、ばっちり動きました!!
本当にありがとうございます!
今回は$_SESSION[$i] = $num
と言う形でしたが、よく考えてみると、数量とサイズを値として保持しないといけない場合が出てきそうなので、その場合配列にしないとけいないですよね・・・?
そのときは
$_SESSION[$i] = array($num, $size)
てなかんじでしょうか?
でそれを表示するときは
echo $_SESSION[$i][0].$_SESSION[$i][1]
とすれば数量とサイズが表示されますか?
お礼ついでに更に質問していますが、どうぞよろしくお願いします!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
input nameで日本語を使うと
-
チェックボックスのvalueに変数...
-
phpの問題でIF文を用いて、成績...
-
DBの値をチェックボックスに反...
-
パラメーターを隠す
-
PHPで郵便番号を検索し、住所を...
-
ラジオボタンをsessionで使いたい
-
複数チェックボックスの入力制...
-
【HTML(PHP?)】複数のフォーム...
-
php ラジオボタンのデータの渡...
-
フォームでのリセットを使う方法
-
アンケートフォームの未記入項...
-
PHPのsubmitボタンが複数ある場合
-
データ検索のエラーについて
-
HTMLで前の画面に戻る時、入力...
-
検索時の選択内容を保持する方法
-
配列をPOSTで受けとる
-
HTMLのリンクをクリックするこ...
-
cookieでチェックボックスの状...
-
PHPで画像の渡しが上手く行きま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
HTMLで前の画面に戻る時、入力...
-
PHP ボタンが押されたら処理を...
-
<input type="hidden" >で配列...
-
検索時の選択内容を保持する方法
-
フォームへの前回入力値をクリ...
-
フォームでのリセットを使う方法
-
PHPで画像の渡しが上手く行きま...
-
画面が更新されてもチェックボ...
-
ラジオボタンをsessionで使いたい
-
フォームボタンを押すたびに数...
-
テキストボックスに初期値を入れる
-
syntax error, unexpected '}' ...
-
【HTML(PHP?)】複数のフォーム...
-
チェックボックスの必須項目指定
-
HTMLのリンクをクリックするこ...
-
複数チェックボックスの入力制...
-
DBの値をチェックボックスに反...
-
input nameで日本語を使うと
-
チェックボックスのvalueに変数...
-
POSTデータのNAME属性をVALUEに...
おすすめ情報