Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
ショッピングカートの構造について - PHPプロ!Q&A掲示板
[go: Go Back, main page]

<< $_POSTについて 質問一覧 AND検索 OR検索など・・・ >>
  • キーワードが設定されていません

  • 募集中!! 0P
ショッピングカートの構造について

phpとmysql(MDB2)でショッピングカートを作っております。
カートに商品を入れる際の動作について構造がわからない
箇所があり有識者の方に是非アドバイスを頂きたく思います。

現状は、商品詳細ページをdetails.php?products_id=1のような
URLにしておりphp側で$_GET['products_id']とし商品idを取得し
取得した値を参照しmysqlから商品データを参照しページに表示させております。

  1. $res =& $mdb2->query("SELECT * FROM products_list where id='" . mysql_real_escape_string($_GET['products_id']) . "'");

商品をカートに追加する動作は、formのactionをcart.php?products_id=1
のようにし['products'][$_GET['products_id']]のような配列を作成し
cart.php側でセッションで管理しております。

  1. [products] => Array
  2.     (
  3.         [num] => Array // 数量の配列
  4.             (
  5.                 [1(商品id)] => 1
  6.             )
  7.  
  8.         [class1] => Array // 選択したサイズのvalueの配列
  9.             (
  10.                 [1(商品id)] => 1
  11.             )
  12.  
  13.  
  14.         [class2] => Array // 選択した色のvalueの配列
  15.             (
  16.                 [1(商品id)] => 2
  17.             )
  18.     )
のような配列です。

商品idをindexとした配列を組んでいるので違う商品を選んでカートに
入れた際にはidが重複する事がないので問題ないのですが例えば商品を
Tシャツとした場合、同じ型でサイズ違い、色違いがある場合があります。
商品詳細のページでセレクトボックスにてサイズ,色を以下のようにしております。
セレクトボックスの値はmysqlから動的に生成しています。

  1. <p>サイズ<select name="class1">
  2. <option label="- 選択してください -" value="0">- 選択してください -</option>
  3. <option label="S" value="1">S</option>
  4. <option label="M" value="2">M</option>
  5. <option label="L" value="3">L</option>
  6. </select>
  7. </p>
  8. <p>カラー<select name="class2">
  9. <option label="- 選択してください -" value="0">- 選択してください -</option>
  10. <option label="ブルー" value="1">ブルー</option>
  11. <option label="レッド" value="2">レッド</option>
  12. <option label="ホワイト" value="3">ホワイト</option>
  13. </select>
  14. </p>

例えばブルーのTシャツの商品(details.php?products_id=1)ページを見ていると
想定した場合です。

カラーはブルーでSサイズが1枚とMサイズが1枚とした場合カート確認画面には2つの項目を
表示します。

Tシャツ(ブルー,Sサイズ)1枚
Tシャツ(ブルー,Mサイズ)1枚

しかし現状はidをindexとして配列なので重複してしまい後者に選択したものしか
反映されません。
同じ商品を選らんだ場合に1つしか表示されない原因がわかっているので配列のindexを
idではなくtime()など重複しない値で作成すればいいものか迷いどころです。

また、ブルーではなくレッドのカラーが欲しい場合セレクトボックスにてレッドを
選択します。
このままcart.phpに進むとproducts_id=1をmysqlから参照するのでカートに入れた
商品を表示する際にブルーの商品画像が表示されてしまいます。

ごく普通のことなのですが希望としてはvalue1であればブルーの画像、value2であれば
レッドの画像、value3であればホワイトの画像を表示させるようにしたいのですが
どうやって分岐するのが一般的なのでしょうか?

サイズ,カラーの選択は商品につき異なるのでできれば汎用性のある構造にしたいのですが
どうやっていいものかわかりません。^^;

わかりづらい説明となってしまい申し訳ございませんが宜しくお願い致します。
Qショッピングカートの構造について agupx  [09月12日 15時48分] NEW!
┗Re:ショッピングカートの構造について tezcello  [09月12日 16時39分] NEW!

コメント一覧

並び替え( ツリー順 / 投稿順[降順] / 投稿順[昇順]

Re:ショッピングカートの構造について

手近のカタログを見ると、色やらサイズやらまで含めて製品IDとしているみたいです。

例えば、
ABCDEFG1256-89-P234-W678-R

ABCDEFG:製品の代表ID
12     :左端寸法
56     :右端寸法
89     :全長
(以下はオプション)
P234   :追加形状Pの寸法
W678   :追加形状Wの寸法
R      :特殊仕様Rタイプ

なんて感じになってます。

別に配列のインデックスは日本語でも良い(JIS, SJIS は避けた方が良いでしょう)ので、
Tシャツ青S なんてIDでもOKなのでは?

代表IDがどこまでか分かりやすくするために、例と同じようにハイフンで分けてもいいでしょう。
必要なら処理するスクリプトで、繋げる(単に連結するだけ)のも分ける(explode を利用)のも簡単ですし。
  色はC1~C5、サイズはS1~S8としておいて、123456という代表IDなら、
  123456-C2-S3
  このようにCとかSとかをつけておけば、順序が変わっても対応できるのでは?
$_POSTについて 質問一覧 AND検索 OR検索など・・・