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

Phần 20 - Cập nhật giỏ hàng

- Bây giờ làm phần cập nhật giỏ hàng.Bạn thêm dòng code này trước dòng code echo "<table>"; :


echo "<form action='' method='post' >";
echo "<input type='hidden' name='cap_nhat_gio_hang' value='co' > ";

- Bạn thêm dòng code này sau dòng code echo "</table>"; :

echo "</form>";

- Sau đó bạn sửa đoạn code sau :

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>";

thành :

$name_id="id_".$i;
$name_sl="sl_".$i;
echo "<tr>";
    echo "<td>".$tv_2['ten']."</td>";
    echo "<td>";
    echo "<input type='hidden' name='".$name_id."' value='".$_SESSION['id_them_vao_gio'][$i]."' >";
    echo "<input type='text' style='width:50px' name='".$name_sl."' value='". $_SESSION['sl_them_vao_gio'][$i]."' > ";
    echo "</td>";
    echo "<td>".$tv_2['gia']."</td>";
    echo "<td>".$tien."</td>";
echo "</tr>";

- Sau đó bạn thêm đoạn code này trước dòng code echo "</table>"; :

echo "<tr>";
    echo "<td>&nbsp;</td>";
    echo "<td><input type='submit' value='Cập nhật' > </td>";
    echo "<td>&nbsp;</td>";
    echo "<td>&nbsp;</td>";
echo "</tr>";

- Sau đó bạn thử mua vài món hàng thì sẽ nhận được kết quả tương tự như sau :




+ Các lần sửa code trên nhằm mục đích thêm biểu mẫu vào form vào.Biểu mẫu form sẽ có phương thức là 'post'.Các khung văn bản (thẻ 'input') sẽ để số lượng sản phẩm vào

+ Khi phương thức biểu mẫu 'form' là 'post' thì khi lấy dữ liệu từ biểu mẫu 'form' thì dùng cách viết : $_POST[tên của các thẻ trong biểu form (như thẻ 'input','select') ]

+ Ở đây phần số lượng được gán vào 1 hoặc nhiều thẻ 'input' (kiểu 'text') có tên là 'sl_0','sl_1','sl_2','sl_3' ...($name_id="id_".$i;) (tên của thẻ input chứa số lượng có tên tương ứng theo vòng lặp).Giá trị của 1 hoặc nhiều thẻ 'input' này là $_SESSION['sl_them_vao_gio'][$i]

+ Còn phần id sản phẩm được gán vào 1 hoặc nhiều thẻ thẻ 'input' (kiểu 'hidden') có tên là 'id_0','id_1','id_2','id_3' ... ($name_sl="sl_".$i;)(tên của thẻ input chứa id cũng có tên tương ứng theo vòng lặp).Giá trị của 1 hoặc nhiều thẻ 'input' này là $_SESSION['id_them_vao_gio'][$i]

+ Kế tiếp bạn tạo nút gửi biểu mẫu form , chính là thẻ 'input' nhưng kiểu là 'submit' (bạn lưu ý các ô 'td' trống thì bạn để ký tự khoảng trắng vào , ký tự khoảng trắng là '&nbsp;' )

+ Bạn lưu ý là trong biểu mẫu này có 1 thẻ 'input' (kiểu 'hidden') với tên là 'cap_nhat_gio_hang' , mục đích thẻ này là nhằm xác định 'biểu mẫu' này được gửi.Nghĩa là trong code sẽ có chỗ dùng thẻ này để xác định xem biểu mẫu này có được gửi hay không

- Tại file 'index.php' , bạn thêm đoạn code sau nằm phía sau dòng code include("ket_noi.php"); :

function trang_truoc(){
        ?>
            <html><head>
              <meta charset="UTF-8">
              <title>Đang chuyển về trang trước</title></head>
            <body>
                <script type="text/javascript">
                    window.history.back();
                </script>   
            </body>
            </html>
        <?php
}
if(isset($_POST['cap_nhat_gio_hang']))
{
    include("chuc_nang/gio_hang/cap_nhat_gio_hang.php");
    trang_truoc();
}

- Đoạn code trên tạo ra hàm 'trang_truoc' nhằm mục đích quay về trang trước mỗi khi dùng (hoặc gọi) lại hàm 'trang_truoc' (function trang_truoc)

- Sau đó web sẽ gọi file 'cap_nhat_gio_hang.php' (trong thư mục 'gio_hang') vào file 'index.php' với điều kiện là có tồn tại biến form 'cap_nhat_gio_hang' ($_POST['cap_nhat_gio_hang']).Điều này cũng có nghĩa là sau khi người dùng cập nhật giỏ hàng thì web sẽ gọi file 'cap_nhat_gio_hang.php' để sử dụng (vì chỉ khi gửi biểu mẫu thì mới tồn tại biến form 'cap_nhat_gio_hang' ($_POST['cap_nhat_gio_hang'])).Và sau khi xử lý cập nhật giỏ hàng rồi thì web sẽ trở về trang trước (file 'cap_nhat_gio_hang.php') , tức là trang giỏ hàng (trang_truoc();)

- Bạn tạo file 'cap_nhat_gio_hang.php' trong thư mục 'gio_hang' rồi sao chép nội dung này vào :

<?php
    for($i=0;$i<count($_SESSION['id_them_vao_gio']);$i++)
    {
        $name_id="id_".$i;
        $name_sl="sl_".$i;
        if(isset($_POST[$name_id]))
        {
        $_SESSION['id_them_vao_gio'][$i]=$_POST[$name_id];
        $_SESSION['sl_them_vao_gio'][$i]=$_POST[$name_sl];
        }
    }
?>

- Đoạn code này chạy lại mảng session 'id_them_vao_gio' rồi gán lại giá trị cho 2 mảng session 'id_them_vao_gio' và session 'sl_them_vao_gio'.Giá trị gán lại chính là giá trị nhập vào của 1 hoặc nhiều khung văn bản (thẻ 'input') số lượng , id của trang giỏ hàng.Khi lấy giá trị của 1 hoặc nhiều thẻ 'input' này thì dùng cách viết : $_POST['tên của các thẻ trong biểu form (như thẻ 'input','select') ']

- Tên của 1 hoặc nhiều thẻ 'input' sẽ tương ứng với vòng lặp 'for' (và cũng tương ứng với tên của 1 hoặc nhiều thẻ 'input' số lượng , id của trang giỏ hàng ).Sau đó chỉ việc gán giá trị của $_POST vào $_SESSION (gán giá trị từ biểu mẫu form vào session)

- Lưu ý là chỉ khi khung nhập liệu 'id' của sản phẩm có tồn tại thì mới gán lại session ( để ý chỗ if(isset($_POST[$name_id])) ).Vì nếu như có sản phẩm nào đó cập nhật số lượng là 0 thì tại vị trí session tương ứng đó không có xuất ra hộp nhập liệu cập nhật sản phẩm

- Sau đó mình thử mua hàng và cập nhật giỏ hàng thì đã thấy cập nhật thành công

- Kết thúc phần này thì nội dung file 'gio_hang.php' 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 "<form action='' method='post' >";
        echo "<input type='hidden' name='cap_nhat_gio_hang' value='co' > ";
        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;
                $name_id="id_".$i;
                $name_sl="sl_".$i;
                if($_SESSION['sl_them_vao_gio'][$i]!=0)
                {
                echo "<tr>";
                    echo "<td>".$tv_2['ten']."</td>";
                    echo "<td>";
                    echo "<input type='hidden' name='".$name_id."' value='".$_SESSION['id_them_vao_gio'][$i]."' >";
                    echo "<input type='text' style='width:50px' name='".$name_sl."' value='". $_SESSION['sl_them_vao_gio'][$i]."' > ";
                    echo "</td>";
                    echo "<td>".$tv_2['gia']."</td>";
                    echo "<td>".$tien."</td>";
                echo "</tr>";
                }
            }  
            echo "<tr>";
                echo "<td>&nbsp;</td>";
                echo "<td><input type='submit' value='Cập nhật' > </td>";
                echo "<td>&nbsp;</td>";
                echo "<td>&nbsp;</td>";
            echo "</tr>";  
        echo "</table>";
        echo "</form>";
        echo "<br>";
        echo "Tổng giá trị đơn hàng là : ".$tong_cong." VNĐ";
    }
?>

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

<?php
    session_start();
    include("ket_noi.php");
    function trang_truoc(){
        ?>
            <html><head>
              <meta charset="UTF-8">
              <title>Đang chuyển về trang trước</title></head>
            <body>
                <script type="text/javascript">
                    window.history.back();
                </script>   
            </body>
            </html>
        <?php
    }
    if(isset($_POST['cap_nhat_gio_hang']))
    {
        include("chuc_nang/gio_hang/cap_nhat_gio_hang.php");
        trang_truoc();
    }
?>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Web bán hàng</title>
        <link rel="stylesheet" type="text/css" href="giao_dien/giao_dien.css">
    </head>
    <body>
        <center>
            <table width="990px">
                <tr>
                    <td colspan="3"><img src="hinh_anh/banner.JPG" ></td>
                </tr>
                <tr>
                    <td colspan="3" height="50px" >
                        <?php
                            include("chuc_nang/menu_ngang/menu_ngang.php");
                        ?>
                    </td>
                </tr>
                <tr>
                    <td width="170px" valign="top" >
                    <?php
                        include("chuc_nang/menu_doc/menu_doc.php");
                    ?>
                    </td>
                    <td width="650px" valign="top" >
                        <?php
                            include("chuc_nang/dieu_huong.php");
                        ?>
                    </td>
                    <td width="170px" valign="top" >
                    <?php
                        include("chuc_nang/tim_kiem/vung_tim_kiem.php");
                    ?>
                    </td>
                </tr>
                <tr>
                    <td colspan="3">Footer</td>
                </tr>
            </table>
        </center>
    </body>
</html>