Chào các bạn. Mấy hôm nay bận quá không tham gia diễn đàn thường xuyên. Hôm nay mình tranh thủ time lên diễn đàn với các bạn. Hôm nay mình sẽ nói tiếp phần 5: Tạo và quản lí giỏ hàng. Đây chỉ là code để các bạn tham khảo nên Các bạn xem, "bình loạn" và có thể code lại tốt hơn. Ví dụ như: giao diện đẹp hơn, bố cục lại code hợp lý hơn, viết thêm một số thành phần khác, thêm một số phần, hoặc chỉnh sửa CSDL,.. để có thể áp dụng vào đồ án của mình. Chúc các bạn thành công.
Bây giờ mình xin bắt đầu:
Để tạo và quản lý giỏ hàng chúng ta có thể tạm chia ra các bước như sau:
Bước 1: Xây dựng một trang hiển thị sản phẩm và thông tin các sản phẩm. Ở đây mình xây dựng một trang đơn giản để hiển thị sản phẩm. Khi các bạn làm thì có thể làm đẹp hơn, phong phú hơn. Trang này là trang chủ nên mình đặt tên là index.php. Trang này có chứa nút chọn mua ở từng sản phẩm để cho phép người mua chọn một cách dễ dàng.
Code đơn giản như sau:
PHP:
<?php
include("../mysql.php");
$sql="select * from products 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>" . $row[name] . "</h3><br/>";
echo "Nhà sản xuất: <b>". $row[manufacturer]. "</b></br>Giá: <b>".number_format($row[price],3)."</b> VND<br />";
echo "Thông tin về Sản phẩm: " . $row[infor] ."<br />";
echo "<p align=right><a href=addcart.php?id_sp=$row[id]>Chọn mua</a></p>";
echo "</div>";
}
}
?>
Như vậy là xong trang index.php
Bước 2: Tạo trang xử lý việc thêm vào giỏ hàng:
+ Kiểm tra xem chúng sản phẩm này có tồn tại trong CSDL không.
- Nếu tồn tại thì tiến hành thêm Sản phẩm này vào giỏ hàng và cập nhật lại một số thông tin của giỏ hàng và chuyển khách hàng tới trang hiển thị giỏ hàng.
- Nếu không tồn tại thì báo lỗi và chuyển tới trang hiển thị giỏ hàng
Chúng ta có thể đặt tên cho trang này là addcart.php.
Đoạn code đơn giản như sau:
PHP:
<?php
session_start();
ob_start();
include("../mysql.php");
?>
<?php
$id_sp = $_GET['id_sp'];
if($id_sp != "") // Nếu có ID truyền vào
{
// Kiểm tra xem id này có trong CSDL hay k?
$query = mysql_query("SELECT id FROM products WHERE id in ('$id_sp')");
$num_q = mysql_num_rows($query);
// Nếu tồn tại
if($num_q == 1)
{
//session_register("giohang");
// nếu id này có trong giỏ hàng rồi
if(isset($_SESSION['giohang'][$id_sp]))
{
// Tăng số lượng nó lên
$_SESSION['giohang'][$id_sp] ++;
}
else // Chưa có trong giỏ hàng (mới chọn)
{
$_SESSION['giohang'][$id_sp] = 1; // Số lượng mặc định là 1
}
// Chuyển tức khắc qua trang giỏ hàng
header("location: showcart.php");
}
else
{
echo "<p align='center' style='font-size:18;color:red'>Không tồn tại sản phẩm này!</p>";
header("refresh:3; showcart.php");
}
}
else // Nếu không có id truyền vào
{
echo "<p align='center' style='font-size:18;color:red'>Truy cập không hợp lệ!</p>";
}
?>
Để tùy biến thì các bạn có thể chỉnh sửa thêm một số thông tin cho phù hợp với website của các bạn.
òa! Mỏi tay, mỏi mắt, đau lưng quá. nghỉ chút đã! rồi làm tiếp bước 3: Hiển thị giỏ hàng.
--- Nhập chung bài viết,
8 Tháng mười một 2012 ---
--- Nhập chung bài viết,
8 Tháng mười một 2012 ---
--- Nhập chung bài viết,
8 Tháng mười một 2012 ---
Bước 3: Tạo trang hiện thị giỏ hàng.
Mình đặt tên nó là showcart.php.
Ở trang này mình thực hiện các công việc:
+ Hiển thị các sản phẩm có trọng giỏ hàng: thông tin SP, giá,...
+ Hiển thị tổng tiền của từng sản phẩm
+ Hiển thị tổng tiền, số lượng từng loại sản phẩm
+ Hiển thị tổng tiền của giỏ hàng
đoạn code dơn giản như sau:
PHP:
<?php
session_start();
ob_start();
?>
<br/>
<?php
// kết nối CSDL
include("../mysql.php");
$giohang = $_SESSION['giohang'];
// Nếu người dùng cập nhật lại giỏ hàng (ấn nút cập nhật)
if(isset($_POST['capnhat']) && count($giohang) != "")
{
$soluong_cn = $_POST['soluong'];
foreach($soluong_cn as $id_sp => $sl)
{
// Nếu như người dùng đặt lại số lượng = 0 ==> thì ta hủy luôn sản phẩm đó ($id_sp) trong giỏ hàng ($_SESSION['giohang'])
if($sl == 0)
{
unset($_SESSION['giohang'][$id_sp]);
}
// Nguoc lại số lượng sp phải là số ta cập nhật lại số lượng giỏ hàng
else if($sl > 0 && is_numeric($sl))
{
$_SESSION['giohang'][$id_sp] = $sl;
}
// Nguoc lai co the xuat thong bao so luong khong hop le (so luong = char)
// refresh lại giỏ hàng
header("location: ".$_SERVER['REQUEST_URI']."");
}
}
// nếu giỏ hàng có sản phẩm
if(count($giohang))
{
?>
<form action="" method="post">
<?php
// Duyệt hết giỏ hàng
$tongcong =0;
foreach($giohang as $id_sp => $sl)
{
// truy van lay thong tin san pham
$truyvan_gh = mysql_query("SELECT id,name,manufacturer,price,infor FROM products WHERE id in ('$id_sp')");
$row = mysql_fetch_row($truyvan_gh);
?>
<div id="cart">
Tên Sản phẩm: <b><?php echo $row[1]; ?></b><br>
Nhà sản xuất: <b><?php echo $row[2]; ?></b><br>
Giá: <b><?php echo $row[3]; ?></b> VND<br>
<?php echo $row[4]; ?><br>
<?php
// name của text field bây giờ đóng vai trò là mảng chứa value là sl của từng quyển sách
?>
<input name="soluong[<?php echo $id_sp; ?>]" type="text" size="4" value="<?php echo $sl; ?>" />Sản phẩm. Tổng tiền: <b><?php echo $sl*$row[3]; ?></b> VND<br>
<a href="delcart.php?id_sp=<?php echo $row[0]; ?>"> Bỏ chọn </a>
</div>
<?php
// Tổng tiền
$tongcong += $sl*$row[3];
}
?>
<div id="cart">
<a href="index.php"> Chọn thêm </a> <a href="delcart.php?del_all=true"> Xóa tất cả </a> <br>
<?php echo "Tổng tiền giỏ hàng: <b>" . $tongcong; ?></b> VND <br>
<input type="submit" name="capnhat" value="Cập nhật" />
</div>
</form>
<?php
}
else
{
?>
<div id="giohang">
Bạn chưa có sản phẩm nào trong giỏ hàng. Hãy về <a href="index.php">Trang chủ</a> và chọn mua sản phẩm!
</div>
<?php
}
?>
Như vậy là xong trang hiển thị giỏ hàng. Còn cái gì liên quan tới giỏ hàng nữa không nhỉ?
--- Nhập chung bài viết,
8 Tháng mười một 2012 ---
Còn một bước cuối cùng nữa đó là Xóa giỏ hàng
Bước 4: Xóa giỏ hàng
Trong bước này chúng ta thực hiện các công việc:
+ Xóa từng sản phẩm
+ Xóa tất cả giỏ hàng
chúng ta đặt tên cho trang này là delcart.php.
Đoạn code đơn giản như sau:
PHP:
<?php
session_start();
ob_start();// tạo bộ đệm cho hàm header
// Nếu xóa 1 sản phẩm
if(isset($_GET['id_sp']))
{
unset($_SESSION['giohang'][$_GET['id_sp']]);
header("location: showcart.php");
}
// Xóa tất cả (với dk giỏ hàng phải có)
//Chú ý: $id_sp: là key của mảng $_SESSION['giohang'] còn $sl: là giá trị tương ứng với key $id_sp của mảng $_SESSION['giohang']
if($_GET['del_all'] == "true" && count($_SESSION['giohang']))
{
foreach($_SESSION['giohang'] as $id_sp => $sl)
{
unset($_SESSION['giohang'][$id_sp]);
}
header("location: showcart.php");
}
?>
Như vậy là chúng ta đã xong phần giỏ hàng bao gồm các chức năng:
+ Hiển thị các sản phẩm (trang index.php): cho phép người mua lựa chọn sản phẩm
+ Thêm sản phẩm vào giỏ hàng (trang addcart.php)
+ Hiển thị các sản phẩm trong giỏ hàng (trang showcart.php): cho phép người mua cập nhật giỏ hàng
+ Xóa giỏ hàng.
Dưới đây là toàn bộ code của phần giỏ hàng và CSDL của nó (bảng products).
CSDL bao gồm cả phần đăng kí, đăng nhập, logout (bảng members).
code đính kèm: