2011-01-21 6 views
0

これは「正しい方向に私を向けることができますか」という質問のタイプです。長期セッションストレージ(PHPショッピングカート)

基本的に私は顧客にショッピングカートを「保存」する方法を提供しています。おそらく後で親戚(写真家の顧客にとっては「写真バスケット」)と一緒に見ることができます。

「フォトバスケット」を使用すると、arrayという単一のバスケットが作成され、その中にアイテムarraysが入っています。

私の考えは--- $_SESSION['basket']stringに各アレイimplode各配列を作成し、この文字列をDBの行に追加しました。ユーザーがログインし直すと、保存されたバスケットをデータベースから展開して、新しいバスケットを作成することができます。

これは私の考えのチェーンです(このセクションはまだ開始していません)。私が遭遇する可能性のある明らかな欠陥や誤りを誰かに見つけられるかどうかだけは疑問です。

ありがとうございます。

シェーン

+0

私はこのように私のことをやっていることも考えていました。あなたが考える必要がある問題は、行がいつ更新されるかです。ユーザーが決めるもの(つまり保存ボタン)ですか、それともページごとに行う必要がありますか?また、最終的には消えるように、何らかの有効期限があることを確認してください。 –

+0

セッションから配列をシリアル化するのではなく、バスケットをデータベーステーブルに直接保存することもできます(作業が簡単で、既に永続ストレージに保存されているので、保存/復元について心配する必要はありません)。 – Piskvor

+0

良い点。私の考えは、ユーザーが実際に 'save to view later'をクリックするまで、' save to database'アイデア全体を無視して、データを保存して保存することでした。ログインし直すと、ユーザーは最初から始めたり、「最後のバスケットをロードする」ことができます。 – shane

答えて

2

ユーザーごとにテーブルを作成しないでください。ユーザーIDとデータ値の列を持つ1つのテーブルを作成し、すべてのユーザーのバスケットを1つのテーブルに保存できます。また、$ _SESSION ['basket']でserializeを使用してデータベースに保存し、データベースからそれを読み取るときにシリアル化を解除します。

+0

健全な助言。ありがとう、なぜ私は各ユーザーのために新しいテーブルを考えていたのかわからない... *一般的な疲れに関連した言い訳をここに挿入する* :) 'serialize'のヘッドアップに感謝します。 – shane

+0

私は 'serialize'が配列をとり、それをDB行に挿入できる文字列に自動的に変換すると思っていますか? – shane

+0

正しい、serializeはPHPデータ型(配列だけでなく)を取り、それをデータベースに格納できるテキスト形式に変換します。unserializeはその文字列から元のデータ型を再作成します。唯一の例外は、直列化できないリソースデータ型と、オブジェクト内のリソース属性です。 –

1

前述のように、テーブルを作成しないでください。行を作成します。それを行うPHPカートはほとんどありません(cs-cart)。 しかし、しばらくしてから古いバスケットをテーブルから削除してください...

関連する問題