10/10/2018, 09:26

Hỏi về shopping cart trong PHP

Mình có một thắc mắc muốn nhờ các bạn giúp đỡ.
Mình đang làm 1 shopping cart nhưng không biết làm thế nào để có thể update để tính giá trị của giỏ hàng. Quy trinhg của mình như sau.
mỗi khi guest click vào link "add to cart" thì mình kiểm tra xem session(cart) đã tồn tại chưa,nếu chưa thì tạo session(cart) mới và gán giá trị của nó=mã SP, nếu rồi thì thêm mã sản phẩm đó vào giá trị biến session(cart). Sau đó đọc trong cơ sở DL các SP có mã như trong biến sesion(cart) đó và đưa ra tên SP kèm theo một ô textbox để cho guest nhập số lượng sản phẩm họ muốn mua vào. Tuy nhiện mình không biết làm cách nào để có thể cập nhập được số sản phẩm đó. Ví dụ như khi người dùng chọn mua 3SP thì sẽ tính tiền =cách lấy giá SP*3. Vấn đề là không biết cách nào lấy được số 3 đó vì cứ mỗi sản phẩm lại đưa ra 1 ô textbox có tên khác nhau và mình thì ko thể sử dụng $_POST với các ô textbox đó vì tên của chúng không cố định.
Mình đã tìm thử các mã nguồn trên hotscript nhưng hoặc là chúng sử dụng các template hoặc các class rất khó hiểu, hoặc đưa cả nội dung của trang web nên mình không thể nào tìm hiểu được. Bạn nào có thể giúp mình với ko? Mình mới đang nghiện cứu PHP nên chưa hiểu lắm về OOP, các bạn có thể chỉ giúp về PHP một cách đơn giản nhất được không?
Dctran viết 11:35 ngày 10/10/2018
Ko ai trả lời bạn à, bạn xem 1 cách này có nhiều người hay dùng nhé.

- Mỗi Item của bạn có 1 mã đúng ko, ko biết database bạn thiết thế thế nào, tôi lấy ví dụ mã của nó là ItemID và đã là Key thì nó phải khác nhau rồi.

- Cái bạn khó khăn là lấy số lượng đúng ko, vì nếu đặt các ô text-box cùng tên thì ko biết lấy thế nào, ko biết phân biệt thế nào. Giả sử tên của các textbox là so_luong vậy bạn đặt thuộc tính name cho textbox là so_luongItemID đi.

Ví dụ bạn chọn được 2 SP có ItemID là 001 và 002 thế thì 2 ô textbox sẽ có tên là so_luong001so_luong002 và khi lấy giá trị thì rõ ràng lấy được vì Key là xác định rồi. Chúc bạn thành công.
bachhaiduonghn viết 11:36 ngày 10/10/2018
Rất cảm ơn bạn đã trả lời mình. Cuối cùng thì ít nhất cũng có người trả lời. thực ra cách mà bạn chỉ mình đã làm nhưng cũng chỉ làm được đến mức đó còn tiếp theo thì ko biết làm thế nào cả. Bạn có thể chỉ cụ thể hơn các bước tiếp theo được ko?
Trong CSDL của mình bảng SP thì có mã SP(ItemID) và các thông tin của sản phẩm. Bảng Hóa Đơn có Mã Số Hóa Đơn(OrderID), Mã Sản phẩm(ItemID), và số lượng SP(qtty) trong đó ItemID và OrderID hợp thành khóa chính.Đó là CSDL của mình.
Bạn có thể chỉ tiếp cho mình được không ??
bachhaiduonghn viết 11:30 ngày 10/10/2018
ai giúp được tui khao 1 chầu cafe Năng nè, nhanh hộ cái nào ...
jiSh@n viết 11:28 ngày 10/10/2018
Thông thường thì mỗi ô textbox nằm trong 1 form riêng, trong form có hidden field chứa product id. Nếu bạn muốn tất cả các textbox nằm chỉ trong 1 form thì bạn phải đặt tên form theo 1 quy cách nào đó, đảm bảo sao cho trong tên của textbox phải có chứa cả product id. Thiết nghĩ bạn Dctran đã trả lời rồi. Còn công việc sau đó thì bạn chỉ cần dùng vòng lặp để lấy giá trị của các textbox thôi.
Dctran viết 11:27 ngày 10/10/2018
- Thế này bạn nhé, tôi ko biết bạn dùng sesssion hay cookies hay bảng (table) để lưu dữ liệu mua hàng. Trường hợp này tôi dùng seesion và biến session tôi lưu dạng là 1 String, tôi lấy ví dụ biến đó là $str_items. Khởi tạo ban đầu giá trị của $str_items = "";

PHP Code:
$str_items ""
- Mỗi lần chọn một mặt hàng thực chất là chọn ItemID thì kiểm tra xem ItemID này có nằm trong biến $str_items này không, nếu có rồi thì bỏ qua còn nếu ko có thì đẩy thêm ItemID này vào chuỗi. Ngày trước làm thì chuỗi $str_items của tôi có dạng như

PHP Code:
$str_items "item01,item02,...,itemN"
Tức các ItemID được phân cách bởi dấu "," sau tiện cho việc tách chuỗi này thành mảng. Bạn có thể chọn cấu trúc dữ liệu khác cho phù hợp hơn cũng được.

- Sau đó người mua hàng sẽ vào xem giỏ hàng (Cart) sẽ hiện ra chi tiết các mặt hàng người đó cần mua. Rất dễ dàng vì đã có chuỗi $str_items thực hiện tách thành mảng (tôi lấy VD là mảng $itemID rồi dùng vòng lặp for Select ra các Item có mã là $itemID[$i] kèm theo thông tin tên mặt hàng, giá tiền ... và dĩ nhiên cứ 1 SP có 1 ô text-box mà thuộc tính name bạn đặt là

<input type="text" name="qtty<?$itemID[$i]?>" value="1">

Đồng thời thêm 1 thẻ Hidden để lưu mã SP

<input type="text" name="itemID" value="<?$itemID[$i]?>">

Và hiển nhiên bạn đặt ở trước một sản phẩm 1 ô checkbox chứ, để người ta muốn bỏ đi một mặt hàng thì người ta bỏ check. Lấy ví dụ tôi đặt thuộc tính tên ô checkbox này là

<input type="checkbox" name="itemCheck" checked="checked">

Người mua chọn mặt hàng nào thì họ check vào cái ô checkbox đó, như vậy bạn phải viết 1 hàm bằng javascript để lấy chuỗi các itemID mà họ check lại (vì giả sử họ chọn ban đầu 5 SP nhưng chỉ mua có 2).

Và cuối cùng là 1 thẻ hidden để lưu chuỗi các SP mà khách hàng chọn mua.

<input type="hidden" name="items_ok">

Có thể dùng code javascript sau

PHP Code:
/*
<script>

function setItems_ok()
{
     var str_return = "";
     var itemID = document.getElementsByName("itemID");
     var itemCheck = document.getElementsByName("itemCheck");

     for(var i=0;i<itemID.length;i++)
     {
        if(itemCheck***91;i***93;.checked==true)
        {
            if(i==itemID.legnth-1)
                str_return += itemID***91;i***93;.value;
            else
                str_return += itemID***91;i***93;.value + ",";
        }
     }
     document.forms***91;0***93;.items_ok.value = str_return;
}
</script>
*/ 
Xong, bây giờ xử lý lúc bạn click vào OK để chuyển sang trang hóa đơn. Bạn cần chạy hàm setItems_ok() này khi submit form.

Ở trang hóa đơn bạn cần lấy giá trị của biến items_ok được submit từ form.

PHP Code:
$items_ok $POST***91;"items-ok"***93;; 
Tách cái biến này thành mảng, duyệt vòng for

PHP Code:
$itemID explode($items_ok,",");
for(
$i=0;$i<size($itemID);$i++)
{
    
//Query database để lấy thông tin của từng thằng itemID***91;$i***93; thôi bạn
    //SELECT * FROM tbl_items WHERE itemID = 'itemID***91;$i***93;';
    //Lấy ra thông tin mặt hàng, giá tiền
    
$qtty***91;$i***93; = $POST***91;"qtty".$itemID***91;$i***93;***93;;
    
//Lấy được số lượng rồi ta nhân với giá tiền thôi

Thế là ok nhé, lấy được số lượng ứng với từng thằng SP. Mệt quá đi ăn cơm cái, chúc bạn thành công.
jiSh@n viết 11:28 ngày 10/10/2018
Nói thêm 1 chút là bạn có thể lưu 1 array vào session, cái shopping cart có thể tổ chức dưới dạng 1 array để đỡ mắc công phải tách chuỗi khi xử lý.
bachhaiduonghn viết 11:28 ngày 10/10/2018
Tuyệt quá, cám ơn DCtran rất nhiều. Mặc dù mình đã làm được cái này rồi thông qua việc lưu cả sessionid vào trong CSDL, nhưng mình cũng rất cám ơn bạn đã trả lời mình chi tiết như vậy. tất nhiên là mình sẽ xem xét thêm code của bạn để tìm ra lựa chọn hợp lý nhất. Thanks alot.
webphp viết 11:40 ngày 10/10/2018
Bạn Dctran ơi.
Mình làm giỏ hàng nhưng làm không được.
Bạn có thể chỉ chi tiết không?
bienmaixanh viết 11:35 ngày 10/10/2018
Bạn thu trang nay di haidang.webdoanhnghiep.org neu thay dung y ban minh se chuyen cho ban toan bo code và giai thich mot so diem mau chot cho ban
Bài liên quan
0