10/10/2018, 09:46

Hỏi giải thuật giỏ hàng trong php??

em đang làm 1 trang bán hàng bằng php + SQL server 2005
Em đang kẹt chỗ giỏ hàng, em mún khi người mua vào xem sản phẩm ,
xong rồi bấm "bỏ vào giỏ hàng", thì truyền session đó vào giỏ hàng,
tiếp theo, người mua bấm vào "mua tiếp" thì quay ra trang sản phẩm để chọn tiếp ,
sau đó người mua chọn sản phẩm thứ 2 , thì khi đó làm sao để hiển thị cả 2 sản phẩm 1 và 2 mà khách hàng đã chọn,
em đã dùng cách là tạo 1 table giỏ hàng trong csdl, mỗi khi gọi trang giỏ hàng thì nó add cái session Mã sản phẩm vào table giỏ hàng, và sau đó em select nó ra , thì đúng là nó ra hết mấy cái sp 1 và 2, nhưng mỗi khi gọi thì nó cứ add mãi, ví dụ em có 1 chỗ để xóa sản phẩm trong giỏ hàng, bấm xóa xong, nó gọi lại trang giỏ hàng, thì nó add tiếp cái session hồi nãy, cứ vậy hoài....em hết biết code làm sao lun,
mấy anh có giải thuật nào khác hoặc code để giải chỗ này thì cho em với nha, tks nhìu,
và code nào để insert mấy cái sản phẩm đó vào hóa đơn vậy, ví dụ như em có 2 cái table hóa đơn, là hóa đơn chi tiết để lưu chi tiết mỗi sản phẩm và số lượng, và 1 hóa đơn chính để lưu thông tin người mua , ngày đặt, ngày giao, tổng tiền từ các hóa đơn chi tiết cộng lại. làm
Làm sao để lưu từng sản phẩm vào mỗi hóa đơn chi tiết dc, vd : em mua 5 cái máy tính khác nhau, thì em sẽ có 5 cái hóa đơn chi tiết, và 1 hóa đơn chính có tổng tiền của 5 cái máy , xin giúp em ạh , bí quá rồi mới hỏi đấy TT_TT
mitdacqn viết 11:51 ngày 10/10/2018
Để lưu sản phẩm vào giỏ hàng, bạn không cần lưu trong database mà chỉ cần lưu session bằng hàm này:
PHP Code:

function store($action=null$id=null){
        
$cart $_SESSION***91;'Cart'***93;;
        switch (
$action) {
            case 
'add':
                if (
$cart) {
                    
$cart .= ','.$id;
                } else {
                    
$cart $id;
                }
                break;
            case 
'delete':
                if (
$cart) {
                    
$items explode(',',$cart);
                    
$newcart '';
                    foreach (
$items as $item) {
                        if (
$id != $item) {
                            if (
$newcart != '') {
                                
$newcart .= ','.$item;
                            } else {
                                
$newcart $item;
                            }
                        }
                    }
                    
$cart $newcart;
                }
                break;
            case 
'update':
            if (
$cart) {
                
$newcart '';
                foreach (
$_POST as $key=>$value) {
                    if (
stristr($key,'qty')) {
                        
$id str_replace('qty','',$key);
                        
$items = ($newcart != '') ? explode(',',$newcart) : explode(',',$cart);
                        
$newcart '';
                        foreach (
$items as $item) {
                            if (
$id != $item) {
                                if (
$newcart != '') {
                                    
$newcart .= ','.$item;
                                } else {
                                    
$newcart $item;
                                }
                            }
                        }
                        for (
$i=1;$i<=$value;$i++) {
                            if (
$newcart != '') {
                                
$newcart .= ','.$id;
                            } else {
                                
$newcart $id;
                            }
                        }
                    }
                }
            }
            
$cart $newcart;
            break;
        }
        
        
$_SESSION***91;'Cart'***93; = $cart;
    } 
Để thêm một sản phẩm vào giỏ hàng bạn gọi thế này:
PHP Code:
store('add'1); // 1 là ID của sản phẩm 
Lấy các sản phẩm trong giỏ hàng:
PHP Code:
function getContents()
    {
        
$contents = array();
        
$cart $_SESSION***91;'Cart'***93;;
        
        if(
$cart)
        {
            
$items explode(',',$cart);
            
$contents = array();
            foreach (
$items as $item
            {
                
$contents***91;$item***93; = (isset($contents***91;$item***93;)) ? $contents***91;$item***93; + 1;
            }
        }
        
        return 
$contents;
    } 
Duyệt các sản phẩm trong giỏ hàng như sau:

PHP Code:
$cart getContents();
foreach (
$cart as $product_id=>$qty) { 

// Lấy thông tin sản phẩm dựa vào product_id và hiển thị ra


freshgraduate09 viết 11:48 ngày 10/10/2018
có vẻ đa số sử dụng cách này: phân tích chuỗi. dù sao post này cũng đáng bookmark lắm ^_^, thanks
a1provip002 viết 12:01 ngày 10/10/2018
hx, gà nên vật lộn với cái đồ án bán hàng này mãi, tks anh nhìu nha
có vẻ đa số sử dụng cách này: phân tích chuỗi. dù sao post này cũng đáng bookmark lắm ^_^, thanks
cho em cách phân tích chuỗi lun đi anh
rootkit viết 11:52 ngày 10/10/2018
Được gửi bởi a1provip002
hx, gà nên vật lộn với cái đồ án bán hàng này mãi, tks anh nhìu nha

cho em cách phân tích chuỗi lun đi anh
-Cách bình thường mọi người hay làm như sau :
+chọn một món hàng : $_SESSION[id_mon_hang].="giả sử id là 1";
khi có 3 món hàng chuỗi sẽ như thế này: $_SESSION[id_mon_hang]="1,2,3";
+ viết sql
$sql="select * from hang where id_mon_hang in (".$_SESSION[id_mon_hang].");";

-Cách không bình thường mà tôi hay làm là ....
mitdacqn viết 11:52 ngày 10/10/2018
Bạn rootkit nhầm một chút: đối với chuỗi thì dùng .= chứ không phải +=
Bài liên quan
0