Chào các bạn trong bài viết hôm nay mình xin giới thiệu tới các bạn phương pháp xây dựng một hệ thống shopping cart (giỏ hàng) trong lập trình PHP. Đây là một ứng dụng vô cùng phổ biến mà ta vẫn hay gặp trên những website thương mại điện tử hiện nay. Ứng dụng này có thể thay thế tốt cho việc mua sắm hay lựa chọn sản phẩm thủ công ta vẫn hay làm.
Phần 1: Cách tạo trang để hiển thị sản phẩm
Trước tiên bạn cần phải khởi tạo một bảng cơ sở dữ liệu đơn giản:
Phía trên là bảng lưu trữ thông tin của những cuốn sách với tên, tác giả cũng như giá tiền của nó.
Sau đó bạn cần tạo tệp tin style.css để có thể trình bày những dữ liệu bắt mắt
Sau khi đã hoàn thành công việc chuẩn bị về database và giao diện thì bạn và tôi sẽ cùng đến phần xây dựng page hiển thị hàng hóa trên web, cho phép người dùng có thể chọn lựa khi truy cập vào.
Để có thể liệt kê được danh sách những cuốn sách đã có trong database rồi thì bạn sẽ phải kết nối với CSDL bằng thao tác sau:
Đến giờ bạn hoàn toàn có thể liệt kê những cuốn sách bằng cú pháp này:
Code phía trên sẽ giúp thực thi hiển thị sách nếu như ở trong cơ sở dữ liệu có ít nhất 1 bản ghi. Và sau đây mình sẽ liệt kê ra tiêu đề cuốn sách, tác gải cuốn sách và giá của nó. Ở đây mình đã dùng number_format() để có thể lấy ra 3 số 000 ở cuối, tương ứng với đơn vị tiền tệ là VNĐ.
Cuối cùng mình tạo ra 1 liên kết cho phép người dùng có thể thêm cuốn sách đấy vào shopping cart nếu họ muốn mua. (trang thêm vào giỏ hàng là addcart.php với tham số là mã cuốn sách).
Nhắc tới ứng dụng giỏ hàng thì bạn sẽ thấy ngay nó có rất nhiều cách để code. Bạn có thể dùng chuỗi để lưu trữ giỏ hàng hay cũng có lưu nó vào Cơ sở dữ liệu nháp giỏ hàng của người dùng và ngoài ra bạn cũng hoàn toàn có thể dùng mảng hay session để lưu lại thông tin giỏ hàng. Ở khuôn khổ bài viết này mình sẽ dùng phiên và mảng để lưu trữ những thông tin của giỏ hàng.
Ở file addcart.php mình sẽ khởi tạo 1 session rồi lưu mã của sách vào trong một mảng. Nói một cách cụ thể: $_SESSION[‘cart’][$id] với $id chính là mã cuốn sách mà bạn đã chọn ở trang xem hàng hóa (index.php). Mục đích của nó chính là việc lưu trữ hay tính toán tất cả số lượng của sản phẩm mà họ đã chọn lựa (lưu ý số lượng của những món hàng).
Một vấn đề mà mình đặt ra đó là làm sao để có thể nhận biết được những món hàng mà người dùng đã chọn hay chưa chọn. Ví dụ như lần đầu tiên mình mua cuốn sách A lần sau mình lại đến và mua quyển A lần nữa vì thế trong giỏ hàng cần phải lưu số lượng quyển A là 2 chứ không phải là 1.
Vì thế lúc này mình sẽ cần kiểm tra lại xem cuốn sách chúng ta vừa chọn liệu đã tồn tại ở giỏ hàng chưa. Nếu àm có rồi thì bạn sẽ phải tiến hành lấy số lượng nó đang có và tăng lên 1 đơn vị Nếu không thì hãy gán số lượng là 1.
Đoạn code xử lý hoàn toàn trang addcart.php sẽ như sau:
Nói một cách nôm na bạn có thể hiểu rằng addcart cũng đơn giản chỉ là xử lý lượng hàng hóa rồi lưu chúng lại ở dạng mảng thôi.
Như vậy khi mua sách bạn cũng cần cho người dung biết trong giỏ hàng của họ đang có bao nhiêu quyển sách. Hay nếu như chưa có quyền nào thì bạn cũng cần phải báo cho họ biết.
Nếu thế thì giỏ hàng sẽ rỗng lúc nào? Đó là lúc mà phiên của giỏ hàng không tồn tại bất kì ID của cuốn sách nào. Nói một cách cụ thể $_SESSION[‘cart’][id]. Khi mà ID đã không tồn tại ở trong session thì cũng chính là lúc mà giỏ hàng không còn tồn tại.
Vì vậy trước khi hiển thị giỏ hàng bạn cần phải kiểm tra lại xem ID giỏ hàng có tồn tại hay không. Và chẳng hạn như bởi ID được lưu trữ dưới dạng mảng đa chiều vì thế bạn cần sử dụng vòng lặp để duyệt mảng foreach.
Với $k mang ý nghĩa tương đương với $id của cuốn sách và $v thì chính là số lượng sách ở trong giỏ hàng. Vì thế nếu như tồn tại biến $k thì có nghĩa là trong giỏ hàng có sách. Lúc này ta sẽ dùng 1 biến để có thể báo hiệu rằng cuốn sách tồn tại trong giỏ hay không.
<?php
$ok
=1;
if
(isset(
$_SESSION
[
'cart'
]))
{
foreach
(
$_SESSION
[
'cart'
]
as
$k
=>
$v
)
{
if
(isset(
$k
))
{
$ok
=2;
}
}
}
if
(
$ok
!= 2)
{
echo
'<p>Ban khong co mon hang nao trong gio hang</p>'
;
}
else
{
$items
=
$_SESSION
[
'cart'
];
echo
'<p>Ban dang co <a href="cart.php">'
.
count
(
$items
).
' mon hang trong gio hang</a></p>'
;
}
?>
Ở đoạn code phía trên ta sẽ dùng hàm count để đếm trong mảng hiện tại có bao nhiêu cuốn sách sau đó thực thi việc báo cho khách hàng biết được họ có bao nhiêu cuốn sách trong cart.
Toàn bộ đoạn code của trang index.php sẽ như sau:
<?php
session_start();
?>
<html>
<head>
<title>Demo Shopping Cart - Created By My Kenny</title>
<link rel=
"stylesheet"
href=
"style.css"
/>
</head>
<body>
<h1>Demo Shopping Cart</h1>
<div id=
'cart'
>
<?php
$ok
=1;
if
(isset(
$_SESSION
[
'cart'
]))
{
foreach
(
$_SESSION
[
'cart'
]
as
$k
=>
$v
)
{
if
(isset(
$v
))
{
$ok
=2;
}
}
}
if
(
$ok
!= 2)
{
echo
'<p>Ban khong co mon hang nao trong gio hang</p>'
;
}
else
{
$items
=
$_SESSION
[
'cart'
];
echo
'<p>Ban dang co <a href="cart.php">'
.
count
(
$items
).
' mon hang trong gio hang</a></p>'
;
}
?>
</div>
<?php
$connect
=mysql_connect(
"localhost"
,
"root"
,
"root"
)
or
die
(
"Can not connect database"
);
mysql_select_db(
"shop"
,
$connect
);
$sql
=
"select * from books order by id desc"
;
$query
=mysql_query(
$sql
);
if
(mysql_num_rows(
$query
) > 0)
{
while
(
$row
=mysql_fetch_array(
$query
))
{
echo
"<div class=pro>"
;
echo
"<h3>$rowLorem ipsum dolor sit amet...
</h3>"
;
echo
"Tac Gia: $row[author]- Gia: "
.number_format(
$row
[price],3).
" VND<br />"
;
echo
"<p align='right'><a href='addcart.php?item=$row[id]'>Mua Sach Nay</a></p>"
;
echo
"</div>"
;
}
}
?>
</body>
</html>