0

私はこれを行う方法について混乱しています。ユーザーが私のeコマースWebサイトでアカウントを作成し、バスケットに商品を追加し始めたとします。ユーザーのユーザー名とパスワードをデータベーステーブルに保存し、セッション/ Cookieを使用して買い物かごの商品を管理する場合、ユーザーの買い物かごをアカウントに接続して、ユーザーがログインするときに何をする必要がありますか彼らは以前に保存したアイテムを見ることができますか?

最初にユーザーにログインを許可し、ユーザーが正常にログインしたかどうかを照会してから、ユーザー名のセッション/ Cookie変数を作成しますか?または、ユーザーカートアイテムをデータベースに保存して、ユーザーアカウントテーブルに接続する必要がありますか?

買い物かごのアイテムをテーブルに保管する方法がわかりません。それはそれを行う正しい方法でさえありますか?

まだコードはありません。コーディングを開始する前にデータベースを正しく作成したいので、アドバイスが必要です。ありがとうございました

4

2 に答える 2

2

ユーザー用とアイテム用の2つのテーブルがある場合は、次のように実行できます。

item_idsをシリアル化された配列に追加および削除して、現在のバスケットアイテムを管理します。この配列は、ユーザーテーブルとセッションに同時に保存して、同期を維持できます。たとえば、ユーザーが初めてストアにアクセスした場合(ログインしておらず、買い物かごが空の場合)、そのようにセッションを作成できます。

session_start();

セッションを開始します。

if (isset($_SESSION['current_basket']) {
    $current_basket = unserialize($_SESSION['current_basket']);
} else {
    $current_basket = array();
}

訪問者がページにアクセスするのはこれが初めてであるため、セッション変数current_basketは設定されません。つまり、上記のifステートメントは実行されず、代わりにcurrent_basketという変数に空のPHP配列が作成されます。

これで、訪問者がバスケットにアイテムを追加するときに、データベースにアイテムのIDが必要であり、それをcurrent_basket配列に追加するだけです。

$current_basket[] = $item_id;

次に、セッション変数を新しい配列ですぐに更新し、プロセスでシリアル化します。

$_SESSION['current_basket'] = serialize($current_basket);

これで、その人の買い物かごのすべての商品IDを含む適切で使用可能な配列ができました。

ここで、ユーザーがログインしているとしましょう。それを確認し、ステップを1つだけ追加します。

$sql = "UPDATE users SET current_basket=" . serialize($current_basket) . " WHERE id=$user_id"
// Execute that query.

これで、同じ配列がデータベースにあり、ユーザーがログインしたときにプルしてセッション変数として設定できます。

これらの一連の手順は、製品が追加または削除されるたびに実行でき、セッションとデータベースの両方で更新されたままになります。

これは明らかに、説明のために非常に骨の折れる概念です。明らかに、アレイをより適切に管理する必要があります。たとえば、商品がすでにある場合はバスケットに商品を追加せず、配列から商品を削除します...など。

重要なのは、配列をシリアル化し、常にセッションに格納し、ユーザーがログインしている場合はusersテーブルに格納することです。

その後、ユーザーが戻ってきてログインすると、ユーザーがサイトに最後にアクセスしたときのデータベースの配列を使用して、セッションに配列を設定できます。

于 2013-01-25T23:30:56.090 に答える
1

カートテーブルcart_id/user_id / date_time_createdを作成してから、cart_idでインデックス付けされたアイテムテーブルを作成します。

また、非常に多くの時間または日数が経過した後、cart_idとアイテムをテーブルからダンプする方法を追加してください。そうしないと、データベースが巨大になります。

また、x時間後にアイテムがダンプされることをエンドユーザーに知らせます。

于 2013-01-25T23:27:19.883 に答える