![](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で質問しましょう!
似たような質問が見つかりました
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セッションにIDを振って値を代入
-
チェックボックスによる検索
-
複数のラジオボタングループを...
-
<input type="hidden" >で配列...
-
ゼロ除算
-
受け渡した変数が、プログラム...
-
チェックボックスを使った複数...
-
同じページでフォームデータを...
-
チェックボックスのうちひとつ...
-
phpでのボタン押下の活性・非活...
-
table を配列で取得
-
phpやmysqlで作る簡易掲示板作...
-
PHP ボタンが押されたら処理を...
-
フォームに入力された値を計算...
-
PHPでフォームデータをサンクス...
-
POSTデータのNAME属性をVALUEに...
-
PHPで画像の渡しが上手く行きま...
-
PHPとHTML+Xamppの掲示板で画像...
-
画面が更新されてもチェックボ...
-
フォームでのリセットを使う方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
HTMLで前の画面に戻る時、入力...
-
<input type="hidden" >で配列...
-
PHP ボタンが押されたら処理を...
-
検索時の選択内容を保持する方法
-
DBの値をチェックボックスに反...
-
ラジオボタンをsessionで使いたい
-
パラメーターを隠す
-
PHPで画像の渡しが上手く行きま...
-
フォームへの前回入力値をクリ...
-
フォームボタンを押すたびに数...
-
フォームでのリセットを使う方法
-
syntax error, unexpected '}' ...
-
PHPの関数実行
-
入力した部分を表示させたまま...
-
テキストボックスに初期値を入れる
-
phpで分からないエラーが出てし...
-
入力フォーム→確認画面→送信画...
-
画面が更新されてもチェックボ...
-
Javascript→PHPに...
-
配列をhiddenで
おすすめ情報