亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

PHP實現的購物車類實例

2024-05-04 23:36:19
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了PHP實現的購物車類,可實現購物車基本的加入、刪除、統計等相關功能,需要的朋友可以參考下

本文實例講述了PHP實現的購物車類。分享給大家供大家參考。具體分析如下:

該購物車類是基于CodeIgniter的購物車類仿寫實現的。

購物車基本功能如下:

1) 將物品加入購物車

2) 從購物車中刪除物品

3) 更新購物車物品信息 【+1/-1】

4) 對購物車物品進行統計

1. 總項目

2. 總數量

3. 總金額

5) 對購物單項物品的數量及金額進行統計

6) 清空購物車

1. cart.php文件:

 

 
  1. ?<?php 
  2. /** 
  3. * 
  4. * @author quanshuidingdang 
  5. */ 
  6. class Cart { 
  7. //物品id及名稱規則,調試信息控制 
  8. private $product_id_rule = '/.a-z0-9-_'//小寫字母 | 數字 | ._- 
  9. private $product_name_rule = '/./:a-z0-9-_';//小寫字母 | 數字 | ._-: 
  10. private $debug = TRUE; 
  11. //購物車 
  12. private $_cart_contents = array(); 
  13. /** 
  14. * 構造函數 
  15. * 
  16. * @param array 
  17. */ 
  18. public function __construct() { 
  19. //是否第一次使用? 
  20. if(isset($_SESSION['cart_contents'])) { 
  21. $this->_cart_contents = $_SESSION['cart_contents']; 
  22. else { 
  23. $this->_cart_contents['cart_total'] = 0; 
  24. $this->_cart_contents['total_items'] = 0; 
  25. if($this->debug === TRUE) { 
  26. //$this->_log("cart_create_success"); 
  27. /** 
  28. * 將物品加入購物車 
  29. * 
  30. * @access public 
  31. * @param array 一維或多維數組,必須包含鍵值名:  
  32. id -> 物品ID標識,  
  33. qty -> 數量(quantity),  
  34. price -> 單價(price),  
  35. name -> 物品姓名 
  36. * @return bool 
  37. */ 
  38. public function insert($items = array()) { 
  39. //輸入物品參數異常 
  40. if( ! is_array($items) OR count($items) == 0) { 
  41. if($this->debug === TRUE) { 
  42. $this->_log("cart_no_items_insert"); 
  43. return FALSE; 
  44. //物品參數處理 
  45. $save_cart = FALSE; 
  46. if(isset($items['id'])) { 
  47. if($this->_insert($items) === TRUE) { 
  48. $save_cart = TRUE; 
  49. else { 
  50. foreach($items as $val) { 
  51. if(is_array($val) AND isset($val['id'])) { 
  52. if($this->_insert($val) == TRUE) { 
  53. $save_cart = TRUE; 
  54. //當插入成功后保存數據到session 
  55. if($save_cart) { 
  56. $this->_save_cart(); 
  57. return TRUE; 
  58. return FALSE; 
  59. /** 
  60. * 更新購物車物品信息 
  61. * 
  62. * @access public 
  63. * @param array 
  64. * @return bool 
  65. */ 
  66. public function update($items = array()) { 
  67. //輸入物品參數異常 
  68. if( !is_array($items) OR count($items) == 0) { 
  69. if($this->debug === TRUE) { 
  70. $this->_log("cart_no_items_insert"); 
  71. return FALSE; 
  72. //物品參數處理 
  73. $save_cart = FALSE; 
  74. if(isset($items['rowid']) AND isset($items['qty'])) { 
  75. if($this->_update($items) === TRUE) { 
  76. $save_cart = TRUE; 
  77. else { 
  78. foreach($items as $val) { 
  79. if(is_array($val) AND isset($val['rowid']) AND isset($val['qty'])) { 
  80. if($this->_update($val) === TRUE) { 
  81. $save_cart = TRUE; 
  82. //當更新成功后保存數據到session 
  83. if($save_cart) { 
  84. $this->_save_cart(); 
  85. return TRUE; 
  86. return FALSE; 
  87. /** 
  88. * 獲取購物車物品總金額 
  89. * 
  90. * @return int 
  91. */ 
  92. public function total() { 
  93. return $this->_cart_contents['cart_total']; 
  94. /** 
  95. * 獲取購物車物品種類 
  96. * 
  97. * @return int 
  98. */ 
  99. public function total_items() { 
  100. return $this->_cart_contents['total_items']; 
  101. /** 
  102. * 獲取購物車 
  103. * 
  104. * @return array 
  105. */ 
  106. public function contents() { 
  107. return $this->_cart_contents; 
  108. /** 
  109. * 獲取購物車物品options 
  110. * 
  111. * @param string 
  112. * @return array 
  113. */ 
  114. public function options($rowid = '') { 
  115. if($this->has_options($rowid)) { 
  116. return $this->_cart_contents[$rowid]['options']; 
  117. else { 
  118. return array(); 
  119. /** 
  120. * 清空購物車 
  121. * 
  122. */ 
  123. public function destroy() { 
  124. unset($this->_cart_contents); 
  125. $this->_cart_contents['cart_total'] = 0; 
  126. $this->_cart_contents['total_items'] = 0; 
  127. unset($_SESSION['cart_contents']); 
  128. /** 
  129. * 判斷購物車物品是否有options選項 
  130.  
  131. * @param string 
  132. * @return bool 
  133. */ 
  134. private function has_options($rowid = '') { 
  135. if( ! isset($this->_cart_contents[$rowid]['options']) OR count($this->_cart_contents[$rowid]['options']) === 0) { 
  136. return FALSE; 
  137. return TRUE; 
  138. /** 
  139. * 插入數據 
  140. * 
  141. * @access private  
  142. * @param array 
  143. * @return bool 
  144. */ 
  145. private function _insert($items = array()) { 
  146. //輸入物品參數異常 
  147. if( ! is_array($items) OR count($items) == 0) { 
  148. if($this->debug === TRUE) { 
  149. $this->_log("cart_no_data_insert"); 
  150. return FALSE; 
  151. //如果物品參數無效(無id/qty/price/name) 
  152. if( ! isset($items['id']) OR ! isset($items['qty']) OR ! isset($items['price']) OR ! isset($items['name'])) { 
  153. if($this->debug === TRUE) { 
  154. $this->_log("cart_items_data_invalid"); 
  155. return FALSE; 
  156. //去除物品數量左零及非數字字符 
  157. $items['qty'] = trim(preg_replace('/([^0-9])/i'''$items['qty'])); 
  158. $items['qty'] = trim(preg_replace('/^([0]+)/i'''$items['qty'])); 
  159. //如果物品數量為0,或非數字,則我們對購物車不做任何處理! 
  160. if( ! is_numeric($items['qty']) OR $items['qty'] == 0) { 
  161. if($this->debug === TRUE) { 
  162. $this->_log("cart_items_data(qty)_invalid"); 
  163. return FALSE; 
  164. //物品ID正則判斷 
  165. if( ! preg_match('/^['.$this->product_id_rule.']+$/i'$items['id'])) { 
  166. if($this->debug === TRUE) { 
  167. $this->_log("cart_items_data(id)_invalid"); 
  168. return FALSE; 
  169. //物品名稱正則判斷 
  170. if( ! preg_match('/^['.$this->product_name_rule.']+$/i'$items['name'])) { 
  171. if($this->debug === TRUE) { 
  172. $this->_log("cart_items_data(name)_invalid"); 
  173. return FALSE; 
  174. //去除物品單價左零及非數字(帶小數點)字符 
  175. $items['price'] = trim(preg_replace('/([^0-9/.])/i'''$items['price'])); 
  176. $items['price'] = trim(preg_replace('/^([0]+)/i'''$items['price'])); 
  177. //如果物品單價非數字 
  178. if( ! is_numeric($items['price'])) { 
  179. if($this->debug === TRUE) { 
  180. $this->_log("cart_items_data(price)_invalid"); 
  181. return FALSE; 
  182. //生成物品的唯一id 
  183. if(isset($items['options']) AND count($items['options']) >0) { 
  184. $rowid = md5($items['id'].implode(''$items['options'])); 
  185. else { 
  186. $rowid = md5($items['id']); 
  187. //加入物品到購物車 
  188. unset($this->_cart_contents[$rowid]); 
  189. $this->_cart_contents[$rowid]['rowid'] = $rowid
  190. foreach($items as $key => $val) { 
  191. $this->_cart_contents[$rowid][$key] = $val
  192. return TRUE; 
  193. /** 
  194. * 更新購物車物品信息(私有) 
  195. * 
  196. * @access private 
  197. * @param array 
  198. * @return bool 
  199. */ 
  200. private function _update($items = array()) { 
  201. //輸入物品參數異常 
  202. if( ! isset($items['rowid']) OR ! isset($items['qty']) OR ! isset($this->_cart_contents[$items['rowid']])) { 
  203. if($this->debug == TRUE) { 
  204. $this->_log("cart_items_data_invalid"); 
  205. return FALSE; 
  206. //去除物品數量左零及非數字字符 
  207. $items['qty'] = preg_replace('/([^0-9])/i'''$items['qty']); 
  208. $items['qty'] = preg_replace('/^([0]+)/i'''$items['qty']); 
  209. //如果物品數量非數字,對購物車不做任何處理! 
  210. if( ! is_numeric($items['qty'])) { 
  211. if($this->debug === TRUE) { 
  212. $this->_log("cart_items_data(qty)_invalid"); 
  213. return FALSE; 
  214. //如果購物車物品數量與需要更新的物品數量一致,則不需要更新 
  215. if($this->_cart_contents[$items['rowid']]['qty'] == $items['qty']) { 
  216. if($this->debug === TRUE) { 
  217. $this->_log("cart_items_data(qty)_equal"); 
  218. return FALSE; 
  219. //如果需要更新的物品數量等于0,表示不需要這件物品,從購物車種清除 
  220. //否則修改購物車物品數量等于輸入的物品數量 
  221. if($items['qty'] == 0) { 
  222. unset($this->_cart_contents[$items['rowid']]); 
  223. else { 
  224. $this->_cart_contents[$items['rowid']]['qty'] = $items['qty']; 
  225. return TRUE; 
  226. /** 
  227. * 保存購物車數據到session 
  228.  
  229. * @access private 
  230. * @return bool 
  231. */ 
  232. private function _save_cart() { 
  233. //首先清除購物車總物品種類及總金額 
  234. unset($this->_cart_contents['total_items']); 
  235. unset($this->_cart_contents['cart_total']); 
  236. //然后遍歷數組統計物品種類及總金額 
  237. $total = 0; 
  238. foreach($this->_cart_contents as $key => $val) { 
  239. if( ! is_array($val) OR ! isset($val['price']) OR ! isset($val['qty'])) { 
  240. continue
  241. $total += ($val['price'] * $val['qty']); 
  242. //每種物品的總金額 
  243. $this->_cart_contents[$key]['subtotal'] = ($val['price'] * $val['qty']); 
  244. //設置購物車總物品種類及總金額 
  245. $this->_cart_contents['total_items'] = count($this->_cart_contents); 
  246. $this->_cart_contents['cart_total'] = $total
  247. //如果購物車的元素個數少于等于2,說明購物車為空 
  248. if(count($this->_cart_contents) <= 2) { 
  249. unset($_SESSION['cart_contents']); 
  250. return FALSE; 
  251. //保存購物車數據到session 
  252. $_SESSION['cart_contents'] = $this->_cart_contents; 
  253. return TRUE; 
  254. /** 
  255. * 日志記錄 
  256. * 
  257. * @access private 
  258. * @param string 
  259. * @return bool 
  260. */ 
  261. private function _log($msg) { 
  262. return @file_put_contents('cart_err.log'$msg, FILE_APPEND); 
  263. /*End of file cart.php*/ 
  264. /*Location /htdocs/cart.php*/ 

2. cart_demo.php文件如下:

 

 
  1. <?php 
  2. session_start(); 
  3. require_once('cart.php'); 
  4. $items = array
  5. 0 => array
  6. 'id' => 'sp001'
  7. 'qty' => 20, 
  8. 'price' => '10.50'
  9. 'name' => 'a002'
  10. 'options' => array
  11. 'made' => 'china'
  12. 'company' => 'bgi' 
  13. ), 
  14. 1 => array
  15. 'id' => 'sp002'
  16. 'qty' => 1, 
  17. 'price' => '3.50'
  18. 'name' => 'b002' 
  19. ); 
  20. $arr = array
  21. 'rowid' => '86dbb7cb58a667558b4bbb1f60330028'
  22. 'qty' => 21 
  23. ); 
  24. $cart = new Cart(); 
  25. $cart->insert($items); 
  26. //var_dump($cart->contents()); 
  27. $cart->update($arr); 
  28. var_dump($cart->contents()); 
  29. //$cart->destroy(); 
  30. //var_dump($_SESSION['cart_contents']); 
  31. /*end of php*/ 

希望本文所述對大家的php程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品视频在线免费观看| 久久躁狠狠躁夜夜爽| 国产精品久久色| 日韩久久精品电影| 久久男人的天堂| 91精品国产777在线观看| 欧美亚洲一区在线| 久久中文字幕在线视频| 欧美性高潮在线| 欧美视频在线观看免费| 在线国产精品播放| 欧美综合一区第一页| 热久久免费视频精品| 欧美丰满少妇xxxx| 69久久夜色精品国产69| 91视频国产高清| 欧美成aaa人片免费看| 国产精品视频yy9099| 97国产suv精品一区二区62| 2019亚洲日韩新视频| 在线观看国产精品淫| 亚洲男人av电影| 91美女福利视频高清| 日韩高清有码在线| 5566日本婷婷色中文字幕97| 中文字幕日韩免费视频| 国产精品18久久久久久麻辣| 欧美激情亚洲一区| 日韩在线免费视频观看| 成人妇女淫片aaaa视频| 亚洲欧美日韩精品久久奇米色影视| 久久999免费视频| 中文字幕日韩精品有码视频| 成人激情视频小说免费下载| 色诱女教师一区二区三区| 成人在线中文字幕| 91色中文字幕| 欧美有码在线观看视频| 国产欧美精品一区二区三区介绍| 国产欧美日韩精品在线观看| 亚洲在线免费看| 久久久久久久久91| 日韩精品免费在线| 亚洲国产天堂久久国产91| 欧美一区二区三区免费观看| 色综合老司机第九色激情| 国产视频精品一区二区三区| 久久精品一偷一偷国产| 国产美女直播视频一区| 国产精品视频1区| 国产999精品久久久影片官网| 自拍偷拍亚洲欧美| 欧美情侣性视频| 欧美怡红院视频一区二区三区| 日韩经典一区二区三区| 成人黄色免费网站在线观看| 欧洲亚洲免费在线| 欧美日韩国产限制| 国产美女久久精品| 91久久精品日日躁夜夜躁国产| 性日韩欧美在线视频| 久久久久久久爱| 国产91热爆ts人妖在线| 一区二区三区亚洲| 国语自产精品视频在线看抢先版图片| 91麻豆国产语对白在线观看| 欧美激情乱人伦一区| 亚洲日本中文字幕免费在线不卡| 久久国产视频网站| 亚洲精品成人av| 国产精品久久久久久久久免费| 亚洲人成绝费网站色www| 亚洲人成电影网| 国产偷亚洲偷欧美偷精品| 国产成+人+综合+亚洲欧洲| 国产精品国模在线| 一本色道久久88综合亚洲精品ⅰ| 日韩国产欧美精品在线| 国产精品尤物福利片在线观看| 亚洲图片制服诱惑| 国内伊人久久久久久网站视频| 欧美激情aaaa| 久久精品国产亚洲7777| 欧洲亚洲免费视频| 欧美日韩爱爱视频| 欧美丝袜一区二区| 久久人人爽人人爽爽久久| 久久久久久av| 国产精品视频xxx| 欧美日韩成人免费| 91午夜理伦私人影院| 欧美午夜丰满在线18影院| 久久九九全国免费精品观看| 法国裸体一区二区| 欧美激情视频网址| 日本韩国欧美精品大片卡二| 日韩欧美a级成人黄色| 性色av香蕉一区二区| 久久久久久91香蕉国产| 亚洲综合视频1区| 欧美精品18videos性欧美| 亚洲精品自拍第一页| 神马久久久久久| 欧美日韩成人黄色| 国产91精品青草社区| 欧美成人免费观看| 国产91精品高潮白浆喷水| 91丨九色丨国产在线| 国产男女猛烈无遮挡91| 欧美国产日韩免费| 亚洲视频第一页| 亚洲a在线观看| 91国产高清在线| 成人亚洲欧美一区二区三区| 九九精品在线观看| 久久免费国产精品1| 亚洲韩国青草视频| 久久99久久亚洲国产| 国产精品国产三级国产aⅴ浪潮| 国产精品久久久亚洲| 国产日韩欧美91| 成人在线小视频| 日韩有码在线播放| 中文字幕欧美日韩精品| 91系列在线观看| 欧美老女人bb| 日韩欧亚中文在线| 精品国产一区二区三区四区在线观看| 911国产网站尤物在线观看| 亚洲国产天堂久久综合网| 欧美在线一级视频| 91亚洲va在线va天堂va国| 理论片在线不卡免费观看| 国产99久久精品一区二区| zzijzzij亚洲日本成熟少妇| 久久亚洲综合国产精品99麻豆精品福利| 国产精品人成电影| 日韩欧美主播在线| 国产欧美精品日韩精品| 欧美精品在线免费观看| 欧美久久精品午夜青青大伊人| 欧美国产日韩免费| 欧美超级乱淫片喷水| 国产精品久久久久久五月尺| 久久久亚洲精品视频| 不卡av电影在线观看| 成人福利网站在线观看| 久久激情五月丁香伊人| 欧美精品免费在线观看| 成人在线一区二区| 亚洲精品国精品久久99热一| 国产一区二区av| 91精品国产自产在线| 国产成人一区二| 成人信息集中地欧美| 欧美大片免费看| 欧美国产亚洲精品久久久8v| 久久国产天堂福利天堂| 亚洲国产女人aaa毛片在线| 国产成人精品久久二区二区| 欧美激情一区二区三区成人| 亚洲一区二区免费在线| 日韩成人网免费视频| 久久久久久91香蕉国产|