- ベストアンサー
カートに商品を追加する機能を構築する方法とは?
- 自社Winサーバ、OS=WinXP、PHP5+MySQLの環境でカートに商品を追加する機能をいろいろな方法で構築し、一番シンプルに処理できる方法論を模索しながら試しておりましたが、行き詰ってしまいました。
- 購入ボタンを押した際に商品のIDと数量をsessionに格納し、後の処理で必要な情報はDBから参照して表示させる方法を考えています。
- 連想配列を使用して商品のIDと数量をsessionに追加するにはどのようなfunctionが必要となるのか、また他にもシンプルな方法論があるかアドバイスをいただきたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
実装の部分ですが、 $_SESSION[article] = array ($article_no => array ( "no" => $article_no, "amount" => $article_amount) ); は、 $_SESSION['article'][$article_no] = array ( "no" => $article_no, "amount" => $article_amount); と「ほぼ」同じです。 違う点は、上の書き方では、カートに商品を保存した際に、その商品以外の商品の情報が削除されてしまいますが、下の書き方の場合は削除されないということです。下のように書けば、array_pushのような関数は必要ありません。 データ構造として考えると、$article_noを二重で持つのは望ましくありません。 $_SESSION['article'][$article_no] = array ("amount" => $article_amount); のようにした方がすっきりすると思います。 一番シンプルなのは、 $_SESSION['article'][$article_no] = $article_amount; ですが、将来的にamount以外のデータを保存したくなった場合の拡張性に欠けます。 #なお、上記のコードは、カートに既に同じ商品が入っているケースを考慮していません。 >購入するのボタンを押した際にsessionに格納出来れば、 >あとの商品名などはDBから参照し表示させるだけなので、 >シンプルなのではと思い試しておりますが、 難しい問題ですが、ユーザがカートに商品を入れてから、決済するまでの間に、ショップ管理者が価格や商品名・内容を変えてしまうことがありえます。ユーザの知らぬ間に、不利な変更(例えば価格が上がるなど)が行なわれるのは、確認用の画面が存在したとしても望ましくありません。レアケースなので、この辺は無視することもありますが、考慮して設計する場合もあります。
お礼
お返事有難う御座います。 大変的確な解説ですごく解りやすかったです。 そして、最後のアドヴァイスも大変勉強になりました。 これは必ずこの度のシステムに実装したいです。 カートは10以上構築してまいりましたが、どれも満足のいくものでは ありませんでした。 また、インターネットが出来た頃より星の数ほどのサイトを利用してみても今まで満足のいくカートシステムに出会った事がありません。 難しい問題ですが、研究していきたいと思っております。 この度は本当にどうも有難う御座いました。