08 width:400px; 09 } 10a{ 11 color:#666666; 12 text-decoration:none; 13font-weight:900; 14 } 15 #cart{ 16 border:1px solid #999999; 17 margin:5px; 18padding:5px; 19 width:400px; 20 text-align:center; 21}
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).
1 <?php
2$connect=mysql_connect("localhost","root","root")3 or die("Can not connect database"); 3 or die("Can not connect database");
4 mysql_select_db("shop",$connect); 5?> 5?>
Lúc này, ta có thể liệt kê các quyển sách bằng cú pháp sau:
01 <?php
02 $sql="select * from books order by id desc"; 03 $query=mysql_query($sql); 03 $query=mysql_query($sql);
04 if(mysql_num_rows($query) > 0) 05{ 05{
06 while($row=mysql_fetch_array($query)) 07 { 07 {
09 echo "<h3>$row[title]</h3>";
10 echo "Tac Gia: $row[author] - Gia: ".number_format($row[price],3)." VND<br />"; 11 echo "<p align='right'><a href='addcart.php?item=$row[id]'>Mua Sach Nay</a></p>"; 11 echo "<p align='right'><a href='addcart.php?item=$row[id]'>Mua Sach Nay</a></p>"; 12 echo"</div>";
13 } 14 } 14 } 15 ?>
Đ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).
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 tố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.php này sẽ như sau:
01 <?php 02 session_start(); 02 session_start(); 03 $id=$_GET['item']; 04 if(isset($_SESSION['cart'][$id])) 05{ 06 $qty = $_SESSION['cart'][$id] + 1; 07 } 08 else 09 { 10 $qty=1; 11 } 12 $_SESSION['cart'][$id]=$qty; 13header("location:cart.php"); 14 exit(); 15 ?>
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.
01 <?php 02 $ok=1; 02 $ok=1;