Подключить корзину для покупок пользователей к их учетной записи пользователя? PHP

Я в замешательстве, как это сделать. Скажем, пользователь создает учетную запись на моем веб-сайте электронной коммерции, а затем начинает добавлять товары в свою корзину. Если я сохраняю имя пользователя и пароль пользователя в таблице базы данных и использую сеансы/файлы cookie для управления продуктами в своей корзине покупок, что мне нужно сделать, чтобы подключить корзину покупок пользователей к своей учетной записи, чтобы при входе в систему в они смогут увидеть элементы, которые они ранее сохранили?

Должен ли я сначала разрешить пользователю войти в систему, узнать, успешно ли они вошли в систему, а затем создать переменную сеанса/файла cookie для своего имени пользователя? Или мне нужно хранить элементы корзины пользователей в базе данных и связывать их с таблицей учетных записей пользователей?

Я смущен тем, как хранить предметы корзины для покупок в таблице. Это даже правильный способ сделать это?

Кода еще нет, я хочу правильно создать базы данных, прежде чем начать кодировать, и мне просто нужен совет. Спасибо


person a7omiton    schedule 25.01.2013    source источник


Ответы (2)


Если у вас есть две таблицы, одна для пользователей и одна для элементов, вы можете сделать что-то вроде следующего.

Управляйте текущими элементами корзины, добавляя и удаляя item_id в сериализованный массив, который вы можете хранить в своей таблице пользователей И в сеансе одновременно, сохраняя их синхронизацию. Например, если пользователь впервые посещает ваш магазин (не авторизованный и с пустой корзиной покупок), вы можете создать сеанс следующим образом.

session_start();

Начинаем сеанс.

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

Поскольку это первый раз, когда наш посетитель посещает нашу страницу, переменная сеанса current_basket не будет установлена, что означает, что приведенный выше оператор if не будет выполняться, а вместо этого просто создаст пустой Массив PHP в переменной с именем current_basket.

Теперь, когда посетитель добавляет товар в корзину, нам просто нужен идентификатор товара в вашей базе данных и добавление его в массив current_basket.

$current_basket[] = $item_id;

Затем мы немедленно обновляем переменную сеанса новым массивом, сериализуя его в процессе.

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

Теперь у вас есть правильный, пригодный для использования массив со всеми идентификаторами продуктов для корзины покупок этого человека.

Теперь давайте представим, что пользователь вошел в систему. Мы проверим это и добавим только еще один шаг.

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

Там теперь тот же самый массив находится в базе данных, которую вы затем можете извлечь и установить в качестве переменной сеанса, когда пользователь входит в систему.

Вы можете выполнять эту последовательность шагов каждый раз, когда продукт добавляется или удаляется, поддерживая его обновление как в сеансе, так и в базе данных.

Очевидно, что это очень размытая концепция ради объяснения. Очевидно, вам нужно лучше управлять массивом. Например, не добавлять товар в корзину, если он там уже есть, удалять элементы из массива... и т.д.

Ключ в том, чтобы сериализовать массив и всегда хранить в сеансе и в таблице пользователей, если пользователь вошел в систему.

Затем, когда пользователь возвращается и входит в систему, вы можете установить для него массив в сеансе, используя массив в базе данных, когда они в последний раз были на вашем сайте.

person Sajan Parikh    schedule 25.01.2013
comment
Итак, вы говорите, что в моей таблице пользователей, где я храню имя пользователя и пароли для всех пользователей, я добавляю еще один столбец для хранения массива, содержащего идентификаторы товаров для товаров, которые у них есть в их корзине? - person a7omiton; 26.01.2013
comment
@AZ1 Точно. По сути, ВСЕГДА храните элементы корзины в массиве в сеансе и просто обновляйте базу данных, если они вошли в систему. Опять же, это всего лишь один из способов сделать это, и его можно расширить. Это должно заставить вас начать. - person Sajan Parikh; 26.01.2013
comment
Я надеюсь принять знания, которыми вы любезно поделились, спасибо. - person a7omiton; 26.01.2013

У меня была бы таблица корзины cart_id/user_id/date_time_created, а затем таблица элементов, проиндексированная по cart_id.

Также добавьте способ сбрасывать cart_id и элементы из таблиц через столько часов или дней, иначе ваша база данных станет огромной.

И сообщите вашим конечным пользователям, что элементы будут сброшены через определенное количество времени.

person KiddieScripterKiller    schedule 25.01.2013