本文目錄一覽:
php購物車怎麼實現
可以使用 session 或者 redis 來保存購物車信息。
具體代碼這裡不可能貼出來的。建議你下載一個開源的商城系統,看看別人是怎麼寫的。
PHP怎麼做購物車?
購物車有兩種實現方式,一種是保存在數據庫,另外一種是session
保存在數據庫的不會以為關閉瀏覽器而消失,session會因為關閉瀏覽器就沒有了。
原理是把每個商品的信息存到一個數組裡面,然後以這個商品的id作為鍵值,然後吧數組存到session裡面就行,
如果是存入數據庫的話,就用關聯數據存一下就行的
php怎麼用session做購物車
class cart
{
/**
* 函數名稱: addItem
* 函數功能: 添加商品
* 輸入參數: $data ————- 商品數組
* 函數返回值: none
* 其它說明: 因為數據是記錄在session中,所以不用返回
*/
function addItem($data){
global $config_kezhi;
if(is_array($data)!empty($data)){
foreach($data as $key=$val){
// 如果商品存在就加數量和價格
if($this-_isExists($key)){
$_SESSION[‘cart’][$key][“paddy_count”] += $val[‘paddy_count’];
$_SESSION[‘cart’][$key][“market_count”] += $val[‘market_count’];
$_SESSION[‘cart’][$key][“goodsnum”] += intval($val[‘goodsnum’]);
$arr = $this-getItems($key);
// $_SESSION[‘cart’][$key][“count”] += $_SESSION[‘cart’][$key][“price”];
/* if(strlen($_SESSION[‘cart’][$key][“kezhi”])0){//沒有刻字,加入刻字
$_SESSION[‘cart’][$key][“eng_price”]=0;
$_SESSION[‘cart’][$key][“eng_price”]=(int)$config_kezhi*intval($arr[‘num’]);
}else{
//die(“dd”);
$_SESSION[‘cart’][$key][“eng_price”]=0;
}*/
//echo $arr[‘num’];
//die();
}
// 否則直接加入
else
{
$_SESSION[‘cart’][$key] = $data[$key];
// $_SESSION[‘cart’][$key][“name”] = $val[‘name’];
// $_SESSION[‘cart’][$key][“price”] = $val[‘price’];
// $_SESSION[‘cart’][$key][“count”] = round($val[‘price’]*intval($val[‘num’]),2);
// $_SESSION[‘cart’][$key][“num”] = intval($val[‘num’]);
}
}
}
}
/**
* 函數名稱: _isExists
* 函數功能: 判斷此商品是否存在
* 輸入參數: $id ———- 商品ID
* 函數返回值: bool
* 其他說明: 2004-8-19
*/
function _isExists($id)
{
if(isset($_SESSION[‘cart’][$id])!empty($_SESSION[‘cart’][$id])array_key_exists($id,$_SESSION[‘cart’]))
{
Return true;
}
else
{
Return false;
}
}
/**
* 函數名稱: modItem
* 函數功能: 修改商品數量
* 輸入參數: $id ————– 商品ID
* $num ————- 商品數量
* 函數返回值: 返回值說明
* 其他說明: 說明
*/
function modItem($id,$num)
{
$arr = $this-getItems($id);
// 如果商品存在就加數量和價格
if($this-_isExists($id))
{
$_SESSION[‘cart’][$id][“goodsnum”] = intval($num);
if($arr[‘paddy_price_special’] “0”){
$_SESSION[‘cart’][$id][“paddy_count”] = round($arr[‘paddy_price_special’]*intval($num),2);
}elseif($arr[‘paddy_userprice’] “0”){
$_SESSION[‘cart’][$id][“paddy_count”] = round($arr[‘paddy_userprice’]*intval($num),2);
}elseif($arr[‘paddy_spreadprice’] “0”){
$_SESSION[‘cart’][$id][“paddy_count”] = round($arr[‘paddy_spreadprice’]*intval($num),2);
}else{
$_SESSION[‘cart’][$id][“paddy_count”] = round($arr[‘paddy_price’]*intval($num),2);
}
$_SESSION[‘cart’][$id][“market_count”] = round($arr[‘market_price’]*intval($num),2);
}
}
/**
* 函數名稱: modItem_wanwei
* 函數功能: 修改商品腕圍
* 輸入參數: $id ————– 商品ID
* $num ————- 商品腕圍
* 函數返回值: 返回值說明
* 其他說明: 說明
*/
function modItem_wanwei($id,$wanwei)
{
$arr = $this-getItems($id);
// 如果商品存在就加數量和價格
if($this-_isExists($id))
{
$_SESSION[‘cart’][$id][“wanwei”] = intval($wanwei);
///$_SESSION[‘cart’][$id][“count”] = round($arr[‘price’]*intval($num),2);
}
}
// function modItem_kezhi($id,$kezhi)
// {
// global $config_kezhi;
// $arr = $this-getItems($id);
// // 如果商品存在就加數量和價格
// if($this-_isExists($id))
// {
// $_SESSION[‘cart’][$id][“kezhi”] = $kezhi;
// $_SESSION[‘cart’][$id][‘price’] = $arr[‘price’] + $config_kezhi;
// $_SESSION[‘cart’][$id][‘count’] = round($_SESSION[‘cart’][$id][‘price’]*intval($arr[‘num’]),2);
// }
// }
function modItem_kezhi($id,$kezhi,$kezhi1=””,$kezhi2=””)
{
global $config_kezhi;
$arr = $this-getItems($id);
// 如果商品存在就加數量和價格
//var_dump($_SESSION[‘cart’]);
// die();
if($this-_isExists($id))
{
if(strlen($_SESSION[‘cart’][$id][“kezhi”]) == 0 strlen($kezhi) != 0){//沒有刻字,加入刻字
//$arr[‘price’] += $config_kezhi;
$_SESSION[‘cart’][$id][“eng_price”]=0;
$_SESSION[‘cart’][$id][“eng_price”]=(int)$config_kezhi*intval($arr[‘num’]);
//$_SESSION[‘cart’][$id][“price”] = $arr[‘price’];
// $_SESSION[‘cart’][$id][“count”] = round($arr[‘price’]*intval($arr[‘num’]),2);
$_SESSION[‘cart’][$id][“kezhi”] = $kezhi;
$_SESSION[‘cart’][$id][“kezhi1”] = $kezhi1;
$_SESSION[‘cart’][$id][“kezhi2”] = $kezhi2;
///$_SESSION[‘cart’][$id][“count”] = round($arr[‘price’]*intval($num),2);
}elseif(strlen($_SESSION[‘cart’][$id][“kezhi”]) != 0 strlen($kezhi) == 0){//有刻字,去除刻字
$_SESSION[‘cart’][$id][“eng_price”]=0;
//$_SESSION[‘cart’][$id][“eng_price”]-=(int)$config_kezhi*intval($arr[‘num’]);
// $_SESSION[‘cart’][$id][“eng_price”]-=$config_kezhi;
//$_SESSION[‘cart’][$id][“price”] = $arr[‘price’];
//$_SESSION[‘cart’][$id][“count”] = round($arr[‘price’]*intval($arr[‘num’]),2);
$_SESSION[‘cart’][$id][“kezhi”] = $kezhi;
$_SESSION[‘cart’][$id][“kezhi1”] = $kezhi1;
$_SESSION[‘cart’][$id][“kezhi2”] = $kezhi2;
}elseif(strlen($_SESSION[‘cart’][$id][“kezhi”]) != 0 strlen($kezhi) != 0){//有刻字,更改刻字
//$_SESSION[‘cart’][$id][“count”] = round($arr[‘price’]*intval($arr[‘num’]),2);
//$_SESSION[‘cart’][$id][“eng_price”]=0;
$_SESSION[‘cart’][$id][“eng_price”]=(int)$config_kezhi*intval($arr[‘num’]);
$_SESSION[‘cart’][$id][“kezhi”] = $kezhi;
$_SESSION[‘cart’][$id][“kezhi1”] = $kezhi1;
$_SESSION[‘cart’][$id][“kezhi2”] = $kezhi2;
}
}
}
/**
* 函數名稱: getItems
* 函數功能: 取得商品數組
* 輸入參數: $id ————— 某商品的ID
* 函數返回值: array
* 其它說明: 2004-8-19
*/
function getItems($id=null)
{
if(isset($_SESSION[‘cart’]))
{
if($id==null)
{
//print_r($_SESSION[‘cart’]);exit;
Return $_SESSION[‘cart’];
}
else
{
Return $_SESSION[‘cart’][$id];
}
}
}
/**
* 函數名稱: emptyItem
* 函數功能: 刪除商品
* 輸入參數: $id ———– 商品ID
* 函數返回值: bool
* 其它說明: 2004-8-19
*/
function emptyItem($id=null)
{
if($id==null)
{
unset($_SESSION[‘cart’]);
}
else
{
unset($_SESSION[‘cart’][$id]);
}
}
/**
* 函數名稱: sum
* 函數功能: 統計總價
* 輸入參數: none
* 函數返回值: int
* 其它說明: 2004-8-19
*/
function sum()
{
$total = 0;
if(isset($_SESSION[‘cart’])!empty($_SESSION[‘cart’]))
{
foreach($_SESSION[‘cart’] as $key=$val)
{
$total += $val[‘count’];
}
}
Return $total;
}
}
我用PHP做的購物車,為什麼每次往購物車中添加不同商品 ,購物車中確顯示的同一件商品啊
這個需要看你的購物車結構。
一般一個屬性的商品是在一條數據裡面,多次加入只是更改數量
不同屬性的商品應該分多條數據保存。最後購物車統計的是總的數量
原創文章,作者:GLUN,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/141647.html