php - 将购物车的值存储在数据库中
问题描述
我正在 Codeigniter 中开发一个电子商务项目。我希望任何用户都可以在购物车中添加产品,但是当他想结账时,他必须登录网站,然后才能结账。但是当我在用户登录后尝试这个时,购物车数据丢失了。如何在结帐前存储数据,以免购物车中的数据丢失。为了解决这个问题,我尝试了另一种将购物车数据存储在数据库中的方法。为了将购物车数据存储到数据库中,我使用了以下代码:- 控制器代码
class Shopping_Cart extends CI_Controller {
public $cart_id = "";
function add_to_cart()
{$data = array(
'id' => $this->input->post('product_id'),
'name' => $this->input->post('product_name'),
'price' => $this->input->post('product_price'),
'qty' => 1,
"image" =>$this->input->post('product_image'),
);
$this->cart->insert($data);
if($this->cart_id)
{
$this->updatecarttodb($this->cart->contents());
}
else
{
$this->addcarttodb($this->cart->contents());
}
echo $this->view_cart();
}
private function addcarttodb($cartdata)
{
$cart_id = $this->Cart_model->addtoCart($cartdata);
$cookie = array(
'name' => 'cart_id',
'value' => $cart_id,
'expire' => (365*60*60*24),
'domain' => '',
'path' => '/',
'prefix' => '',
'secure' => FALSE
);
$this->input->set_cookie($cookie);
}
private function updatecarttodb($cartdata)
{
$this->Cart_model->updateCart($this->cart_id,$cartdata);
}
型号代码
function addtoCart($cartData)
{
$cartData = array("cart_data"=>serialize($cartData));
$this->db->insert('tbltmpcart',$cartData);
return $this->db->insert_id();
}
function updateCart($cart_id,$cartData)
{
if($cart_id == "")return;
if($cartData != "")
{
$cartData = serialize($cartData);
}
$updateData = array("cart_data"=>$cartData);
$this->db->where("cart_id",$cart_id);
$this->db->update('tbltmpcart',$updateData);
}
function getCartContents($cart_id)
{
$this->db->where("cart_id",$cart_id);
$result = $this->db->get('tbltmpcart');
if($result && $result->num_rows())
{
$retdata = $result->result_array();
if($retdata[0]['cart_data'] != "1" && $retdata[0]['cart_data'] != "")
{
return @unserialize($retdata[0]["cart_data"]);
}
}
return "";
}
我的问题是 $cart_id 值不保留它丢失了,所以我不能进一步使用。如果代码中有任何问题,请尝试更正我的代码。
解决方案
推荐阅读
- python - 使用 Django ORM 进行多重连接
- sql - 分配计数到最大值
- flutter - 暂停或暂停时 Flutter 应用程序上的 Dart 计时器
- javascript - Firebase 存储下载 url 未接收/不工作
- three.js - Three.js 改变顶点位置最高效的方法是什么?
- python - python:创建校验位函数
- sql-server - 如何在 SQL Graph 表中创建递归边?
- laravel - Laravel 的工作失败了,正在开发中
- python-3.x - GitHub Actions:如何在 Docker 操作中使用来自 GitHub 注册表的 Docker 映像?
- stata - 如何执行 Koyck 滞后变换