1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Viết ứng dụng tạo giỏ hàng - Shopping cart - Phần 1

Discussion in 'PHP & Mysql' started by shesshou, Nov 9, 2014.

  1. Chào các bạn, mình đang học IT và đam mê code website, PHP và Mysql là niềm đam mê của mình, nay mình chia sẻ cho các bạn một bài về cách tạo giỏ hàng cho các website bán hàng trực tuyến phần đầu tiên, nếu các bạn ủng hộ mình sẽ làm bài 2 :D


    Đi vào bài chỉ dẫn :

    Ở những bài trước, chúng ta đã đề cập tới các ứng dụng cơ bản, gần gũi với môi trường làm việc của chúng ta. Trong bài này, tôi sẽ tiếp tục hưỡng dẫn các bạn xây dựng hệ thống giỏ hàng (shopping cart) một ứng dụng phổ biến rất thường gặp trên các website cung cấp sản phẩm hiện nay. Nó gần như được thay thế cho việc mua sắm, việc lựa chọn thủ công mà chúng ta vẫn thường làm.

    Do nội dung và kiến thức của bài này khá dài, nên tôi sẽ trình bày bài viết này ở 2 phần, để giúp các bạn dễ theo dõi và dễ nắm bắt các kiến thức mà tôi đề cập về ứng dụng.

    Phần 1: Xây dựng trang hiển thị sản phẩm.

    Đầu tiên, ta khởi tạo bảng CSDL đơn giản như sau (xem lại bài 9: cơ bản về ngôn ngữ sql và mysql)

    CREATE TABLE `books` (
    `id` int(10) unsigned NOT NULL auto_increment,`title` varchar(255) NOT NULL,`author` varchar(100) NOT NULL,
    `price` int(30) NOT NULL,
    PRIMARY KEY (`id`)
    );



    Ở trên là một bảng lưu thông tin của các quyển sách với tên, tác giả, giá tiền của các quyển sách.

    INSERT INTO `books` VALUES (1, 'PHP Can Ban', 'Kenny', 115);
    INSERT INTO `books` VALUES (2, 'PHP Nang Cao', 'Kenny', 150);
    INSERT INTO `books` VALUES (3, 'PHP Framework', 'Kenny', 300);
    INSERT INTO `books` VALUES (4, 'Joomla Can Ban', 'Kenny', 100);


    Tiếp tục ta tạo file style.css để trình bày dữ liệu đẹp mắt

    body{
    font:12px verdana;
    }
    .pro{
    border:1px solid #999999;
    margin:5px;
    padding:5px;
    width:400px;
    }
    a{
    color:#666666;
    text-decoration:none;
    font-weight:900;
    }
    #cart{
    border:1px solid #999999;
    margin:5px;
    padding:5px;
    width:400px;
    text-align:center;
    }

    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).

    <?php
    $connect=mysql_connect("localhost","root","root")
    or die("Can not connect database");
    mysql_select_db("shop",$connect);
    ?>



    Lúc này, ta có thể liệt kê các quyển sách bằng cú pháp sau:


    <?php
    $sql="select * from books 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[title]</h3>";
    echo "Tac Gia: $row[author] - Gia: ".number_format($row[price],3)." VND<br />";
    echo "<p align='right'><a href='addcart.php?item=$row[id]'>Mua Sach Nay</a></p>";
    echo "</div>";
    }
    }
    ?>


    Đ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).


    19_01.gif




    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 toá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:


    <?php
    session_start();
    $id=$_GET['item'];
    if(isset($_SESSION['cart'][$id]))
    {
    $qty = $_SESSION['cart'][$id] + 1;
    }
    else
    {
    $qty=1;
    }
    $_SESSION['cart'][$id]=$qty;
    header("location:cart.php");
    exit();
    ?>


    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.


    <?php
    $ok=1;
    if(isset($_SESSION['cart'])){foreach($_SESSION['cart'] as $k=>$v){if(isset($k)){$ok=2;}
    }
    }
    if ($ok != 2)
    {
    echo '<p>Ban khong co mon hang nao trong gio hang</p>';
    } else {
    $items = $_SESSION['cart'];
    echo '<p>Ban dang co <a href="cart.php">'.count($items).' mon hang trong gio hang</a></p>';
    }
    ?>


    Trong đoạn code trên ta sử dụng hàm count nhắm đềm xem trong mảng hiện tại (giỏ hàng) hiện đang có bao nhiêu quyển sách. Và thực thi việc báo cho người dùng biết họ đang có bao nhiều quyển sách trong giỏ hàng.

    Toàn bộ code xử lý của trang mua sách (index.php) này như sau:


    <?php
    session_start();
    ?>
    <html>
    <head>
    <title>Demo Shopping Cart - Created By My Kenny</title><link rel="stylesheet" href="style.css" />
    </head>
    <body>
    <h1>Demo Shopping Cart</h1>
    <div id='cart'>
    <?php
    $ok=1;
    if(isset($_SESSION['cart'])){foreach($_SESSION['cart'] as $k=>$v){if(isset($v)){$ok=2;}}}if ($ok != 2){echo '<p>Ban khong co mon hang nao trong gio hang</p>';} else {$items = $_SESSION['cart'];echo '<p>Ban dang co <a href="cart.php">'.count($items).' mon hang trong gio hang</a></p>';
    }
    ?>
    </div>
    <?php
    $connect=mysql_connect("localhost","root","root")
    or die("Can not connect database");
    mysql_select_db("shop",$connect);
    $sql="select * from books 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[title]</h3>";
    echo "Tac Gia: $row[author] - Gia: ".number_format($row[price],3)." VND<br />";
    echo "<p align='right'><a href='addcart.php?item=$row[id]'>Mua Sach Nay</a></p>";
    echo "</div>";
    }
    }
    ?>
    </body>
    </html>


    Như vậy, trong bài này chúng ta đã hoàn tất trang xem sách và trang xử lý việc thêm sản phẩm mới vào giỏ hàng như thế nào. Mời các bạn đọc tiếp bài sau với tính năng quản lý, sửa, xóa từng món hàng hoặc cả giỏ hàng trong hệ thống.
     
    me0ome0oxuxu likes this.
  2. BLĐ Man City đang lên một kế hoạch vô cùng chi tiết để đưa Diego Simeone về sân Etihad thay cho HLV hiện bị mất tín nhiệm Manuel Pellegrini. Thậm chí, đội bóng Anh còn sẵn sàng “câu” cả học trò cưng của Simeone là Koke về Manchester...




    [​IMG]
    HLV Diego Simeone
    MAN CITY MUỐN SIMEONE THAY PELLEGRINI

    HLV Manuel Pellegrini đã giúp Man City vô địch Premier League mùa trước. Tuy nhiên, thành tích đó không đủ để đảm bảo vững chắc chiếc ghế của ông ở Etihad. Bởi tham vọng của giới chủ Ả-rập không chỉ muốn Man City làm mưa làm gió ở xứ sương mù, mà mục tiêu của họ là vươn tới đỉnh cao châu Âu.

    Pellegrini có vẻ như không thể giúp được BLĐ Man City thỏa giấc mơ tung hoành ở châu Âu. Bằng chứng là nhà ĐKVĐ Premier League đang có nguy cơ bị loại tại Champions League năm nay, khi đang đứng cuối bảng E sau cả AS Roma và CSKA Moscow. Đó là lý do giải thích tại sao giới chủ Ả-rập muốn thay tướng.

    Lãnh đạo Man City đang có ý định chiêu mộ HLV Diego Simeone thay thế ông Pellegrini. Việc chiến lược gia người Argentina đã đưa một Atletico Madrid với đội hình không quá mạnh vào đến trận chung kết Champions League mùa trước là một trong những nguyên nhân khiến ông lọt vào “mắt xanh” của những người Ả-rập đang không tiếc tiền đầu tư vào Etihad.

    Một số nguồn tin cho biết, Man City có thể sa thải HLV Pellegrini ngay lập tức nếu đội nhà không vượt qua vòng bảng Champions League mùa này. Nếu trường hợp đó xảy ra, họ sẽ chỉ định một HLV tạm quyền dẫn dắt Man xanh đến cuối mùa giải, trước khi đưa Simeone về Etihad. Tất nhiên, từ nay đến thời gian đó, họ cần phải thuyết phục được chiến lược gia người Argentina đồng ý rời Atletico. Bởi theo một tuyên bố gần đây, HLV Simeone khẳng định, ông đang cảm thấy hạnh phúc ở Vicente Calderon và chưa hề có ý nghĩ sẽ chuyển sang dẫn dắt một đội bóng khác ở mùa Hè 2015.


    [​IMG]
    DÙNG KOKE DỤ SIMEONE

    Tuy nhiên, lãnh đạo Man City đã tỏ ra chuẩn bị rất kỹ lưỡng kế hoạch đưa Simeone về Etihad. Theo những tiết lộ gần đây nhất, giới chủ của Man xanh sẵn sàng chiều lòng HLV người Argentina bằng cách lôi cả cậu học trò cưng của Simeone ở Atletico Madrid là Koke về Man City trong mùa Hè tới. Đồng thời, nhà ĐKVĐ Anh không ngần ngại ngỏ ý sẽ ký hợp đồng dài hạn với Simeone kèm theo mức lương biến ông thành một trong những HLV có thu nhập cao nhất thế giới.

    Có thể khẳng định, BLĐ Man City đã chuẩn bị sẵn tất cả chỉ để chờ Simeone cập bến Etihad. Nếu đồng ý đến Man City, HLV người Argentina sẽ vẫn được cộng tác với những người Tây Ban Nha vốn quá quen thuộc với La Liga gồm bộ đôi quyền lực là GĐĐH Ferran Soriano và GĐTT Txiki Begiristain. Đây đều là những người đã gặt hái thành công ở La Liga khi còn làm việc ở Barca, nên có thể sẽ giúp Simeone sớm thích nghi.

    Được biết, lãnh đạo Man City đang có ý định xây dựng một lối chơi mới cho đội nhà xoay quanh cậu học trò cưng của Simeone ở Atletico Madrid là tiền vệ kiến tạo Koke. Một số nguồn tin từ giới truyền thông Anh khẳng định, nhà ĐKVĐ Premier League thậm chí đã chuẩn bị sẵn 60 triệu euro để giải phóng Koke khỏi sự ràng buộc với Atletico Madrid trong mùa Hè này.
     

Share This Page