Thứ Năm, 23 tháng 6, 2016

Phần 19 - Làm giỏ hàng ( tiếp theo )

- Bây giờ xuất các sản phẩm người dùng thêm vào giỏ.Bạn thêm đoạn code sau vào trước ký tự ?> trong file 'gio_hang.php' :


$gio_hang="khong";
if(isset($_SESSION['id_them_vao_gio']))
{
    $so_luong=0;
    for($i=0;$i<count($_SESSION['id_them_vao_gio']);$i++)
    {
        $so_luong=$so_luong+$_SESSION['sl_them_vao_gio'][$i];
    }
    if($so_luong!=0)
    {
        $gio_hang="co";
    }
}

echo "Giỏ hàng";
echo "<br>";
echo "<br>";
if($gio_hang=="khong")
{
    echo "Không có sản phẩm trong giỏ hàng";
}
else
{
    echo "<table>";
        echo "<tr>";
            echo "<td width='200px' >Tên</td>";
            echo "<td width='150px' >Số lượng</td>";
            echo "<td width='150px' >Đơn giá</td>";
            echo "<td width='170px' >Thành tiền</td>";
        echo "</tr>";
        $tong_cong=0;
        for($i=0;$i<count($_SESSION['id_them_vao_gio']);$i++)
        {
      
            $tv="select id,ten,gia from san_pham where id='".$_SESSION['id_them_vao_gio'][$i]."'";
            $tv_1=mysql_query($tv);
            $tv_2=mysql_fetch_array($tv_1);
            $tien=$tv_2['gia']*$_SESSION['sl_them_vao_gio'][$i];
            $tong_cong=$tong_cong+$tien;
            if($_SESSION['sl_them_vao_gio'][$i]!=0)
            {
            echo "<tr>";
                echo "<td>".$tv_2['ten']."</td>";
                echo "<td>".$_SESSION['sl_them_vao_gio'][$i]."</td>";
                echo "<td>".$tv_2['gia']."</td>";
                echo "<td>".$tien."</td>";
            echo "</tr>";
             }
        }          
    echo "</table>";
    echo "<br>";
    echo "Tổng giá trị đơn hàng là : ".$tong_cong." VNĐ";
}

- Bạn xem đoạn code này (ở phần code trên) :

$gio_hang="khong";
if(isset($_SESSION['id_them_vao_gio']))
{
    $so_luong=0;
    for($i=0;$i<count($_SESSION['id_them_vao_gio']);$i++)
    {
        $so_luong=$so_luong+$_SESSION['sl_them_vao_gio'][$i];
    }
    if($so_luong!=0)
    {
        $gio_hang="co";
    }
}


- Đây là đoạn code xác định giỏ hàng có hay là không có sản phẩm.Ban đầu là không có.Để giỏ hàng có sản phẩm thì phải có 2 điều kiện.Điều kiện 1 là tồn tại mảng session 'id_them_vao_gio' (if(isset($_SESSION['id_them_vao_gio']))) , khi có sản phẩm trong giỏ hàng thì mảng này sẽ tồn tại (do web được lập trình như vậy) .Điều kiện 2 là số lượng trong giỏ hàng lớn hơn không , bạn cho vòng lặp 'for' chạy qua mảng session 'id_them_vao_gio' rồi cộng số lượng lại thì sẽ kiểm tra được.Biến 'gio_hang' được gán giá trị 'co' hoặc 'khong' để nói lên hiện trạng của giỏ hàng

- Nếu biến 'gio_hang' bằng 'khong' thì xuất ra dòng chữ 'Không có sản phẩm trong giỏ hàng' (trường hợp giỏ hàng không có sản phẩm) , ngược lại thì xuất sản phẩm trong giỏ hàng ra

- Các sản phẩm xuất ra trong giỏ hàng sẽ được xuất trong thẻ 'table' với 4 ô 'td' : 'Tên','Số lượng','Đơn giá','Thành tiền'.Bạn chạy vòng lặp 'for' qua mảng session 'id_them_vao_gio' , cứ mỗi lần chạy thì bạn lấy 'id sản phẩm' truy vấn vào bảng 'san_pham' để lấy thông tin sản phẩm ($tv="select id,ten,gia from san_pham where id=".$_SESSION['id_them_vao_gio'][$i];)

- Sau đó bạn xuất tên , giá sản phẩm ra (echo ra trong ô 'td').Số lượng sản phẩm thì bạn lấy từ biến session 'sl_them_vao_gio' (tương ứng với mỗi session 'id_them_vao_gio' khi chạy vòng lặp 'for').Cột thành tiền thì đơn giản là 1 phép nhân tính tiền số lượng * đơn giá ($tien=$tv_2['gia']*$_SESSION['sl_them_vao_gio'][$i]) , sau đó gán giá trị vào biến 'tien' rồi xuất (echo) ra

- Lưu ý là chỉ xuất sản phẩm ra khi số lượng của sản phẩm đó khác không (để ý chỗ if($_SESSION['sl_them_vao_gio'][$i]!=0) )

- Ở đây còn phải tính tổng tiền mua hàng nên khi chạy vòng lặp 'for' , bạn cộng dồn tiền ($tong_cong=$tong_cong+$tien;) của mỗi sản phẩm lại , sau khi chạy hết vòng lặp 'for' thì sẽ tính được tổng tiền mua hàng.Tổng tiền mua hàng được gán giá trị vào biến 'tong_cong' rồi sau đó xuất ra ( echo "Tổng giá trị đơn hàng là : ".$tong_cong." VNĐ";)

- Bạn thử mua hàng thì sẽ nhận được kết quả tương tự như sau :


- Ở đây giỏ hàng còn lỗi là ở chỗ khi bạn nhấn 'F5' thì lại tự thêm sản phẩm vào giỏ hàng.Để sửa lỗi này thì tại file 'chi_tiet_san_pham.php' , bạn thêm dòng code này sau ký tự '<?php' :


$_SESSION['trang_chi_tiet_gio_hang']="co";

- Dòng code này để xác định là bạn có truy cập vào trang chi tiết sản phẩm.Trong file 'gio_hang.php' bạn sửa dòng code if(isset($_GET['id'])) thành :

if(isset($_GET['id']) and $_SESSION['trang_chi_tiet_gio_hang']=="co")

- Và thêm dòng code này trước dòng code if(isset($_SESSION['id_them_vao_gio'])) (lưu ý là có 2 dòng code giống nhau , bạn chọn dòng code đầu (đầu file 'gio_hang.php')) :

$_SESSION['trang_chi_tiet_gio_hang']="huy_bo";

- Có thể hiểu thế này : khi mà người dùng truy cập vào trang chi tiết sản phẩm thì sẽ tiến hành đánh dấu là có vào trang chi tiết sản phẩm ($_SESSION['trang_chi_tiet_gio_hang']="co"; tại file 'chi_tiet_san_pham.php') , sau đó nếu người dùng mua hàng thì web sẽ cho truy cập lần đầu để khởi tạo session (if(isset($_GET['id']) and $_SESSION['trang_chi_tiet_gio_hang']=="co")) (do lần đầu biến session 'trang_chi_tiet_gio_hang' có giá trị 'co' nếu trang trước đó là trang chi tiết sản phẩm).Sau đó bạn đổi giá trị biến session 'trang_chi_tiet_gio_hang' thành giá trị 'huy_bo'.Như vậy nếu nhấn 'F5' thì giá trị của biến session 'trang_chi_tiet_gio_hang' sẽ thành 'huy_bo' => không chạy đoạn code tạo session khi vào trang giỏ hàng

- Kết thúc phần này thì file 'chi_tiet_san_pham.php' có nội dung tương tự như sau :

<?php
    $_SESSION['trang_chi_tiet_gio_hang']="co";
    $id=$_GET['id'];
    $tv="select * from san_pham where id='$id'";
    $tv_1=mysql_query($tv);
    $tv_2=mysql_fetch_array($tv_1);
    $link_anh="hinh_anh/san_pham/".$tv_2['hinh_anh'];
    echo "<table>";
        echo "<tr>";
            echo "<td width='250px' align='center' >";
                echo "<img src='$link_anh' width='150px' >";
            echo "</td>";
            echo "<td valign='top' >";
                echo "<a href='#'>";
                    echo $tv_2['ten'];
                echo "</a>";
                echo "<br>";
                echo "<br>";
                echo $tv_2['gia'];
                echo "<br>";
                echo "<br>";
                echo "<form>";
                    echo "<input type='hidden' name='thamso' value='gio_hang' > ";
                    echo "<input type='hidden' name='id' value='".$_GET['id']."' > ";
                    echo "<input type='text' name='so_luong' value='1' style='width:50px' > ";
                    echo "<input type='submit' value='Thêm vào giỏ' style='margin-left:15px' > ";
                echo "</form>";
            echo "</td>";
        echo "</tr>";
        echo "<tr>";
            echo "<td colspan='2' >";
                echo "<br>";
                echo "<br>";
                echo $tv_2['noi_dung'];
            echo "</td>";
        echo "</tr>";
    echo "</table>";
?>

- Và file 'gio_hang.php' có nội dung tương tự như sau :

<?php
    if(isset($_GET['id']) and $_SESSION['trang_chi_tiet_gio_hang']=="co")
    {
        $_SESSION['trang_chi_tiet_gio_hang']="huy_bo";
        if(isset($_SESSION['id_them_vao_gio']))
        {
            $so=count($_SESSION['id_them_vao_gio']);
            $trung_lap="khong";
            for($i=0;$i<count($_SESSION['id_them_vao_gio']);$i++)
            {
                if($_SESSION['id_them_vao_gio'][$i]==$_GET['id'])
                {
                    $trung_lap="co";
                    $vi_tri_trung_lap=$i;
                    break;
                }
            }
            if($trung_lap=="khong")
            {
                $_SESSION['id_them_vao_gio'][$so]=$_GET['id'];
                $_SESSION['sl_them_vao_gio'][$so]=$_GET['so_luong'];
            }
            if($trung_lap=="co")
            {
                $_SESSION['sl_them_vao_gio'][$vi_tri_trung_lap]=$_SESSION['sl_them_vao_gio'][$vi_tri_trung_lap]+$_GET['so_luong'];
            }
        }
        else
        {
            $_SESSION['id_them_vao_gio'][0]=$_GET['id'];
            $_SESSION['sl_them_vao_gio'][0]=$_GET['so_luong'];
        }
    }

    $gio_hang="khong";
    if(isset($_SESSION['id_them_vao_gio']))
    {
        $so_luong=0;
        for($i=0;$i<count($_SESSION['id_them_vao_gio']);$i++)
        {
            $so_luong=$so_luong+$_SESSION['sl_them_vao_gio'][$i];
        }
        if($so_luong!=0)
        {
            $gio_hang="co";
        }
    }
  
    echo "Giỏ hàng";
    echo "<br>";
    echo "<br>";
    if($gio_hang=="khong")
    {
        echo "Không có sản phẩm trong giỏ hàng";
    }
    else
    {
        echo "<table>";
            echo "<tr>";
                echo "<td width='200px' >Tên</td>";
                echo "<td width='150px' >Số lượng</td>";
                echo "<td width='150px' >Đơn giá</td>";
                echo "<td width='170px' >Thành tiền</td>";
            echo "</tr>";
            $tong_cong=0;
            for($i=0;$i<count($_SESSION['id_them_vao_gio']);$i++)
            {
          
                $tv="select id,ten,gia from san_pham where id='".$_SESSION['id_them_vao_gio'][$i]."'";
                $tv_1=mysql_query($tv);
                $tv_2=mysql_fetch_array($tv_1);
              
                $tien=$tv_2['gia']*$_SESSION['sl_them_vao_gio'][$i];
                $tong_cong=$tong_cong+$tien;
                if($_SESSION['sl_them_vao_gio'][$i]!=0)
                {
                echo "<tr>";
                    echo "<td>".$tv_2['ten']."</td>";
                    echo "<td>".$_SESSION['sl_them_vao_gio'][$i]."</td>";
                    echo "<td>".$tv_2['gia']."</td>";
                    echo "<td>".$tien."</td>";
                echo "</tr>";
                }
            }          
        echo "</table>";
        echo "<br>";
        echo "Tổng giá trị đơn hàng là : ".$tong_cong." VNĐ";
    }
?>