01 Apr

Viết giỏ hàng bằng PHP 5.00/5 (100.00%) 1 vote

Đối với các website thương mại điện tử thì kỹ thuật xử lý giỏ hàng là rất quan trọng, nếu một trang website bán hàng không có giỏ hàng thì không được gọi là website thương mại điện tử .

1. Ý tưởng làm giỏ hàng

Bước 1: Tạo ra biến $_SESSION[‘giohang’] khi khách hàng chọn giỏ hàng.

Bước 2: Mỗi lần  khách hàng thêm sản phẩm vào giỏ hàng thì có 2 trường hợp

  • Nếu sản phẩm chưa có trong $_SESSION[“giohang”]=> tạo ra một phần tử mới thêm vào biến $_SESSION[“giohang”] với cấu trúc (“mã sản phẩm”=>”số lượng”).
  • Nếu sản  phẩm có rồi => ta chỉ update số lượng của sản phẩm lên một đơn vị(giả sử mỗi lần chọn là một sản phẩm)

Bước 3: Sau khi chọn sản phẩm xong khách hàng sẽ chọn vào button chi tiết giỏ hàng => sẽ được submit qua form chi tiết giỏ hàng để khách hàng xem các mặt hàng đã chọn và có thể update lại số lượng mỗi sản phẩm hoặt xóa

Bước 4: Khách hàng chọn vào button đặt hàng =>sẽ được submit aqaua form đặt hàng để khách hàng điền những thông tin cần thiết.

Bước 5: Khi khách hàng bấm nút đồng ý đặt hàng thì khi đó ta mới lưu vào Database, khi đó ta sẽ có 2 bảng cho biệc xử lý giỏ hàng.

  • tb_giohang dùng để lưu thông tin khách hàng (mã giỏ hàng, họ tên, địa chỉ, số điện thoại, tình trạng(đã giao hay chưa giao) …)
  • tb_chitet_giohang dùng để lưu chi tiết từng giỏ hàng (mã giỏ hàng, mã sản phẩm, số lượng… )

2. Hướng dẫn viết giỏ hàng

Bước 1: Bạn tạo một folder tên là sanpham với các file

folder1

 

Trong đó

folder images: chứa cacasa ảnh sản phẩm

chitietgiohang: viết code show ra những sản phẩm đã chọn

connect.php: viết kết nối với mysql

sanpham.php: show sản phẩm

xoasp.php: dùng để xóa giỏ hàng, và xóa một sản phẩm bất kì ra giỏ hàng

Trước hết bạn tạo một cơ sở dữ liệu với database demogiohang và tạo một bản sản phẩm

csdlsp

Bước 2: Chúng ta sẽ tạo giao diện show sản phẩm

giohang

Đầu tiên bạn mở file sanpham.php và viết code show sản phẩm từ cơ sở dữ liệu lên gồm có hình ảnh, tên sản phẩm, giá,và nút thêm giỏ hàng

Chú ý: 

Đường link của thẻ a gọi về chính nó và thêm một biến themgiohang và gán giá trị idSP khi click vào, cái dòng này rất quan trọng để lấy idSP đó.

Bước 3: Chúng ta sẽ viết xử lý giỏ hàng trong sanpham.php

Chú ý:

$_SESSION[“giohang”] các bạn coi nó giống  một biến bình thường dùng như là $ten hay gì đó nhưng đặt biệt của $_SESSION thì mình đã giới thiệu ở bài trước.

Chúng ta cần kiểm tra đã có biến $_SESSION[“giohang”] chưa, và có tồn tại mảng $_SESSION chưa, tại vì $_SESSION lưu trữ dưới dạng mảng. Nếu không có thì ta cần tạo mảng mới để chứa các giá trị giỏ hàng .

Thứ nhất ta viết code cho đã có giỏ hàng

    • Ta đếm trong giỏ hàng có bao nhiêu sản phẩm ta dùng count($_SESSION[“giohang”]);
    • Ta khai báo một biến cờ có giá trị là flag=false mục đích là ta dùng để kiểm tra sản phẩm đó có trong giỏ hàng nếu có thì flag=true;
    • Ta cần phải duyệt giỏ hàng đã kiểm tra có trùng không nếu trùng ta tăng sản phẩm lên một đơn vị

Giải thích:  $_SESSION[“giohang”][$i][“idSP”] 

Trong đó

$_SESSION[“giohang”]: là một biến mảng;

[$i]: là chỉ số index hay còn gọi là key;

[“idSP”]: i là giá trị của biến đó gọi là value ;

Để hiểu rõ hơn bạn xem lại mảng đa chiều mình đã giải thích trước đây

Mục đích$i để mình duyệt từng dòng còn [“idSP”] nhầm mục đích để giúp phân biệt các sản phẩm với nhau, nếu cùng bằng idSP thì tăng lên còn ngược lại thì gán =1;

Khi duyệt có phần tử trùng rồi thì chúng ta break; luôn nha, vì  trong giỏ hàng thì không có 2 hoặc nhiều sản phẩm giống nhau mình in ra nhiều dòng nên khi tìm thấy trùng thì ta break; luôn khỏi tốn thời gian duyệt tới cuối

Tiếp đó ta kiểm tra nếu biến cờ flag cũng bằng false thì ta gán idSP và số lượng lúc này là 1 vì sản phẩm này chưa có trong giỏ hàng

Một chú ý tiếp theo: đó là mình cần chuyển hướng trang khi thêm sản phẩm vào giỏ hàng vì lý do là nếu ta không chuyển hướng trang thì thành url vẫn còn giá trị idSP khi chúng ta refresh thì số lượng sẽ tăng lên 1 đơn vị.

Thứ 2 ta viết code cho chưa có giỏ hàng

Ta cần tạo một mảng  $_SESSION[“giohang”] và lưu trữ idSP và số lượng khi giỏ hàng được tạo là 1

Bước 4: Chúng ta include file sanpham.php vào file index để có một trang show sản phẩm hoàn chỉnh, và tiếp đó chúng ta sẽ show số lượng sản phẩm và tổng tiền mà khách hàng đã chọn sản phẩm.

Ghi chú: Khi bạn có sử dụng biến session thì lưu ý phải khởi động session_start() lên nha, trong bài này vì lý do mình include file sanpham.php vào trang index.php nên mình chỉ khởi động session_start() một lần trang index.php

Giải thích:

  • Show số lượng sản phẩm bạn phải kiểm tra có biến $_SESSION[“giohang”] không ?Nếu không có thì  mình echo bằng 0, nếu có thì mình  duyệt trong giỏ hàng và tạo một biến $dem=0 nếu kiểm tra có tồn tại idSP không thì mình tăng biến đếm lên một đơn vị
  • Show tổng tiền: Trước tiên bạn kiểm tra có giỏ hàng thì sau đó bạn cần phải tạo biến tổng tiền ban đầu bằng 0 để tí mình cộng dồn tiền của sản phẩm. Mình duyệt giỏ hàng để show các sản phẩm trong cơ sở dữ liệu ra nhưng phải có điều kiện idSP trong bảng sanpham bằng các idSP trong giỏ hàng, sau khi lấy được hết giá từng  loại và số lượng từng loại nhân với nhau và cộng dồn lại sẽ ra tổng tiền, nếu không có giỏ hàng thì in ra tổng tiền bằng 0
  • Trong trang index.php có link xem chi tiết giỏ hàng chitietgiohang.php

Bước 5 : Bước này ta sẽ show chi tiết các sản phẩm trong giỏ hàng, có thể thêm và xóa số lượng sản phẩm viết trong file chitietgiohang.php

 

 

Giải thích

Nút cộng thêm sản phẩm:

 

Ta kiểm tra nếu click và nút cộng sẽ có biến themsp chứa idSP sau đó ta duyệt trong giỏ hàng nếu idSP trong giỏ hàng bằng  idSP mình lấy khi click thì ta tăng sản phẩm đó lên, nút trừ cũng tương tự.

Lưu ý: Bạn phải chuyển hướng trang để trang khi refresh trang nhé.chitietgio

 Bước 6 Ta xử lý khi khách hàng muốn hủy giỏ hàng hoặc xóa một sản phẩm nào đó 

Giải thích

Hủy toàn bộ giỏ hàng chúng ta sẽ hủy biến session đó dùng hàm unset($_SESSION[“giohang”]) còn xóa bất kì thì thì mình cần biết idSP của từng loại sản phầm.

Lưu ý: Toàn bộ bài chúng ta phải kiểm tra biến $_SESSION[“giohang”] có tồn tại không, thứ 2 ta cần kiểm tra isset($_SESSION[“giohang”][$i][“idSP”] có tồn tại không để in ra hay xóa. 

Toàn bộ code giỏ hàng: tại dây

3. Lời kết

Bài giỏ hàng khá dài mình chia làm 2 phần, phần sau chúng ta sẽ  xử lý nút đặt hàng và update xuống bảng giỏ hàng và chi tiết giỏ hàng. Qua bài này mình đã hướng dẫn các bạn lưu và show  và xóa dữ liệu từ Session. Chúc các bạn học tốt và vui vẻ!