Đào Tạo PHP & Mysql

Học PHP Online - PHP Framework - Tự Học PHP

Lập Trình PHP Căn Bản

Bài 19: Viết ứng dụng tạo giỏ hàng - shopping cart - phần 1

Ở những bài trước, chúng ta đã đề cập tới các ứng dụng cơ bản, gần gũi với môi trường làm việc của chúng ta. Trong bài này, tôi sẽ tiếp tục hưỡng dẫn các bạn xây dựng hệ thống giỏ hàng (shopping cart) một ứng dụng phổ biến rất thường gặp trên các website cung cấp sản phẩm hiện nay. Nó gần như được thay thế cho việc mua sắm, việc lựa chọn thủ công mà chúng ta vẫn thường làm.
 
Do nội dung và kiến thức của bài này khá dài, nên tôi sẽ trình bày bài viết này ở 2 phần, để giúp các bạn dễ theo dõi và dễ nắm bắt các kiến thức mà tôi đề cập về ứng dụng.
 
Phần 1: Xây dựng trang hiển thị sản phẩm.
 
Đầu tiên, ta khởi tạo bảng CSDL đơn giản như sau (xem lại bài 9: cơ bản về ngôn ngữ sql và mysql)
Ở trên là một bảng lưu thông tin của các quyển sách với tên, tác giả, giá tiền của các quyển sách.
Tiếp tục ta tạo file style.css để trình bày dữ liệu đẹp mắt

Sau khi đã hoàn tất việc chuẩn bị cơ sở dữ liệu và giao diện, tiếp theo ta sẽ xây dựng trang hiển thị các món hàng trên website, cho phép người sử dụng lựa chọn sách khi truy cập.

Để liệt kê danh sách các quyển sách đang có trong database, ta cần kết nối CSDL với thao tác code như sau. (xem lại bài 10: kết hợp php & mysql trong ứng dụng website).

Lúc này, ta có thể liệt kê các quyển sách bằng cú pháp sau:

Lúc này, ta có thể liệt kê các quyển sách bằng cú pháp sau:
Đoạn code ở trên thực thi việc hiển thị sách nếu trong CSDL ít nhất 1 record. Và chúng sẽ liệt kê tiêu đề sách, tác giả, giá tiền. Ở đây, tôi sử dụng number_format() để lấy ra 3 số 000 cuối, ứng với đơn vị tiền tệ của Việt Nam là VNĐ.
 
Sau cùng tôi tạo một liên kết cho phép thêm quyển sách đó vào giỏ hàng nếu người mua cảm thấy ưng ý. (addcart.php sẽ là trang thêm vào giỏ hàng với tham số là mã của quyển sách).
Bài 19: Viết ứng dụng tạo giỏ hàng - shopping cart
Nói đến ứng dụng shopping cart thì hiện nay, trên thị trường tồn tại nhiều phương pháp code. Có thể sử dụng chuỗi để lưu giỏ hàng, cũng có thể lưu vào CSDL nháp giỏ hàng của người dùng và cũng có thể sử dụng mảng và session để lưu thông tin giỏ hàng. Trong khuôn khổ bài viết này, tôi sẽ sử dụng session và mảng để lưu thông tin giỏ hàng. (xem lại Bài 7: Khái niệm cơ bản về Cookie và session trong PHP)
 
Tại trang addcart.php tôi cần khởi tạo một session và lưu mã quyển sách vào một mảng. Cụ thể là: $_SESSION[‘cart'][$id] (xem lại bài 6: tổng quan về mảng về các hàm hỗ trợ). Với $id là mã quyển sách mà người dụng đã chọn ở trang xem hàng hóa (index.php). Mục đích chính của trang addcart này là lưu trữ hoặc tính toán lại số lượng sản phẩm khi mà họ lựa chọn. (lưu ý là số lượng các món hàng).
 
Một vấn đề đặt ra trong trang này, là làm thế nào để nhận biết món hàng người đó đã chọn hay chưa. Chẳng hạn. Lần đầu tôi chọn mua quyển A, sau đó tôi quay lại chọn mua tiếp quyển A. vậy trong giỏ hàng phải ghi nhận số lượng quyền A này là 2. Chứ không thể chỉ lưu là 1 được.
 
Vậy, lúc này ta sẽ kiểm tra xem. Quyển sách mà ta vừa chọn có tồn tại trong giỏ hàng hay chưa. Nếu có, ta phải tiến hàng lấy số lượng đang có tăng lên 1 đơn vị. Còn nếu không, ta phải gán số lượng của chúng là 1.
 
Code xử lý hoàn chỉnh trang addcart này sẽ như sau:
Nôm na, chúng ta có thể hiểu addcart chỉ đơn giản là xử lý số lượng hàng hóa và lưu chúng ở dạng mảng mà thôi.
 
Như vậy tại trang mua sách, ta cũng cần cho khách hàng biết rằng trong giỏ hàng của họ hiện đang có bao nhiêu món hàng. Hoặc nếu chưa có món nào, ta cũng phải báo cho họ biết về việc đó.
 
Vậy khi nào thì giỏ hàng rỗng ?. Đó là khi session của giỏ hàng không tồn tại Id của quyển sách nào. Cụ thể, $_SESSION[‘cart'][id]. Khi id không tồn tại trong session này thì cũng là lúc giỏ hàng không tồn tại.
 
Vậy trước khi cho hiển thị giỏ hàng, ta cần kiểm tra xem có tồn tại id nào trong giỏ hàng hay không. Và vì id lưu ở dạng mảng đa chiều, nên ta cần dùng vòng lặp duyệt mảng foreach.
 
foreach($_SESSION[‘cart'] as $k=>$v)
 
Với $k có ý nghĩa tương đương $id quyển sách và $v tương đương là số lượng của quyển sách trong giỏ hàng. Vậy nếu tồn tại biến $k, thì tức có nghĩa là trong giỏ hàng có sách. Khi đó ta sử dụng một biến đã để báo hiệu rằng sách có tồn tại trong giỏ hàng hay không.
Trong đoạn code trên ta sử dụng hàm count nhắm đềm xem trong mảng hiện tại (giỏ hàng) hiện đang có bao nhiêu quyển sách. Và thực thi việc báo cho người dùng biết họ đang có bao nhiều quyển sách trong giỏ hàng.
 
Toàn bộ code xử lý của trang mua sách (index.php) này như sau:
 
Như vậy, trong bài này chúng ta đã hoàn tất trang xem sách và trang xử lý việc thêm sản phẩm mới vào giỏ hàng như thế nào. Mời các bạn đọc tiếp bài sau với tính năng quản lý, sửa, xóa từng món hàng hoặc cả giỏ hàng trong hệ thống.
 
 

(Bùi Quốc Huy)
48069
Bạn vẫn chưa hiểu rõ vấn đề ?. Bạn vẫn còn nhiều điều thắc mắc ?. Bạn gặp lỗi khi thực hành mã lệnh trên ?. Hãy tham gia diễn đàn QHOnline.Info để nhận được sự giúp đỡ từ phía cộng đồng nhanh nhất. Đồng thời tải những tài liệu giá trị tại diễn đàn. Việc đăng ký là hoàn toàn miễn phí, hãy đăng ký ngay để chúng tôi giúp đỡ bạn nhé.

Ghi rõ nguồn từ website QHOnline.Info - Khi bạn phát hành lại thông tin từ website này

Phản hồi của bạn Tiếng Anh Telex VNI VIQR





Huy Anh (14:40 28/01/2010)

Cám ơn anh, bài viết của anh hay cực. Chi tiết và diễn giải rất dễ hiểu. Nhờ anh mà em đã hiểu rõ được bản chất của ứng dụng này. Trước nay, nói về shopping cart thì em còn rất mơ hồ và sợ nhất là phần giỏ hàng, nay có bài này thì tuyệt quá. Thanks anh một lần nữa, mong sao có nhiều bài hay hơn thế này nữa ra đời.

Reply

Ngọc Diệp (17:02 31/01/2010)

Cám ơn anh về bài viết hưỡng dẫn cực hay về việc tạo giỏ hàng trên hệ thống php. Rất mong anh sẽ có loạt bài tiếp nối hệ thống này như lưu thông tin vào CSDL thế nào và tiến hành thanh toán trực tuyến ra sao để tụi em có thể hiểu tường tận thêm về ứng dụng.

Reply

nonme (00:01 15/03/2010)

bài viết rất hay cảm ơn bạn

Reply

ShangShu (15:37 31/03/2010)

Neu' dinh' kem` hinh` anh nua la` ok.
(hinh` minh hoa, hien thi ket qua)

Reply

lê phương (15:03 16/05/2010)

Bạn cho mình hỏi trang card.php là trang gì trong code ở trên z?

Reply

Bùi Công Đấu (08:02 19/05/2010)

Em ko biết nói gì ngoài từ cảm ơn!
bài này rất hay và bổ ích cho những ai yêu thích php.
ko chỉ riêng bài này mà tất cả các bài viết trong trang này về php đều hay và rất thực tế. Em xem qua nhiều trang giới thiệu về php rồi nhưng trang này là hay nhất.
em cảm ơn nhiều!

Reply

DucTrung (10:07 13/06/2010)


ai có thể giải thích dùm em chi tiết chỗ này đc ko ạh :(

if(isset($_SESSION['cart']))
{
foreach($_SESSION['cart'] as $k=>$v)
{
if(isset($v))
{
$ok=2;
}
}
}

$ok là cái gì rùi cái foreach kia chạy sao dc hem. Em cảm ơn nhiều !

Reply

Phan Duy (20:58 21/07/2010)

Thầy cho em hỏi: nếu trong trang cart.php có phân trang thì hàm headed(location:./cart.php) sẽ không thể quay lại đúng trang mà ta vừa xem. Vậy ta phải xử lí trường hợp này như thế nào?

Reply

tuân kỳ lê (20:24 03/08/2010)

$ok: là một biến để kiểm tra xem trong giỏ hàng có tồn tại mặt hàng hay không
-nếu $ok=2 thì có tồn tại
nếu $ok!2 thì không tồn tại
- trường hợp này có thế làm : nuế tồn tại thì $ok=truee, không thì ok=false
-để hiều dc foreach chạy thế nào thì bạn phải hiểu là $_SESSION['cart'] là một mảng, như là
$_SESSION['cart'] [mã item 1]->số lượng
$_SESSION['cart'] [mã item 2]->số lượng
$_SESSION['cart'] [mã item 2]->số lượng
- dùng foreach không tối ưu, vì phải duyệt tất cả các phần tử trong mảng, nếu mà gặp phần tử trong mảng thỏa mãn thì thoát khỏi vong lặp luôn




Reply

duong (21:44 08/09/2010)

thanks anh nhiều nhé

Reply

Tinh Phong (08:26 30/11/2010)

hay!

Reply

trần quang (07:32 24/12/2010)

Cám ơn bạn, rất hay!

Reply

Vo Thi Phuong Thuy (13:39 24/12/2010)

Anh oi cho em hỏi là trang card.php là đoạn code nào trong những đoạn code anh viết ở phía trên vậy? Mong anh trả lời em sớm. Cám ơn anh nhiều!!!

Reply

pedauheo (07:43 04/01/2011)

thanks!bài viết rất hay,mong anh có nhiều bài viết như vậy nữa!

Reply

Manhuynh (21:13 21/01/2011)

hôm nay em tình cờ vào trang web của thầy bài viết rất hay mong thầy post nhiều bài hay nửa cho tui em tham khao

Reply

nguyen nhan (13:33 27/01/2011)

anh ơi cho em hỏi là khi mà có ng mua hàng thì bắt buộc phải cho đăng nhập , mới mua dc hàng , thì kiểm tra tên xem có ko nếu ko có thì bắt họ đăng nhập ... EMchir hiểu vậy Nhưng ko biết cách làm .. Chỉ dùm em vs

Reply

hang (14:58 03/04/2011)

Em cam on anh em thay rat hay

Reply

hang (15:07 03/04/2011)

rat hay

Reply

Nguyễn Trọng Nhân (09:54 04/04/2011)

Hay quá bác ui

Reply

Pham Van Huynh (12:43 08/05/2011)

co the chi em cai mail server duoc khong?
code em lam dung nhung khong the send mail di dc, mong cac anh giai dum em.

Reply

nguyen van toan (12:15 28/05/2011)

cũng hay

Reply

Hieu (11:22 10/06/2011)

Anh ơi cho e hỏi, theo e cái biến $ok ở:

if($ok != 2) {
.....
}

E kiểm tra thì hình như là nó chưa có khởi tạo nên có thể nó sẽ ko chạy đoạn code này. A xem lại thử xem.

Reply

Hieu (20:13 16/06/2011)

<?php
if(isset($_SESSION['cart']))
{
foreach($_SESSION['cart'] as $k=>$v)
{
if(isset($k))
{
$ok=2;
}
}
}
if ($ok != 2)
{
.....
đã tìm ra lỗi......do ở đầu file chưa gọi $ok. Thêm " $ok = 1; " vào là ổn........

Reply

dragon (02:08 23/06/2011)

Cái hàm session_register("cart") sao mình khai báo rùi xài không được.
nó cứ báo lỗi Fatal error: Call to undefined function session_register() in C:AppServwww...

Ai biết không giúp với....

Reply

Kenny (15:17 28/09/2011)

Chào bạn.

Lỗi này là vì phiên bản bạn đang chạy không còn hỗ trợ hàm session_register() nữa. Do vậy nó không hiểu khi bạn gọi hàm này.

Cách khắc phục là bạn hãy bỏ hàm này đi nhé.

Sorry vì bài viết này, tôi viết ở phiên bản 5.2.2. Ở phiên bản này thì hàm session_register() vẫn được sử dụng bình thường bạn ạ.

Best

dinh thong (09:36 08/10/2011)

anh có thể cho em biết cách chèn php vao the html được ko ak?

Reply

Lê Thanh Tùng (13:23 13/10/2011)

Tự mình dùng cookie cũng tạo đc cart khi chưa hề biết đến bài viết này , đọc bài của bạn thấy đc nhiều cái hay. cảm ơn

Reply

nguyên nguyễn (17:41 27/10/2011)

tôi có thể biết cách chèn hình vào sql để đưa lên website

Reply

lananh (16:00 08/12/2011)

cho e hỏi phần cart và addcart,delcart không thấy chạy vậy

Reply

Mr Hard Rock (13:52 18/12/2011)

Bạn phải nói nó bão lỗ chỗ nào chứ, ko pải cứ bê nguyên code vào là nó chạy dc đâu

huy (11:05 23/12/2011)

Hay đúng cái mình đang cần. Tks very much

Reply

PHP MYSQL Online - Hoc PHP - Dao Tao PHP - Học PHP - CakePHP Framework - Lap Trinh PHP Can Ban - Lap Trinh PHP Nang Cao - PHP Framework - Tài liệu,Thư viện
Copyright 2007-2010 © QHOnline.Info | Powered By QHOnline Version 2.0 - XHTML Valid