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

Phần 49 - Làm phần quản lý sản phẩm

- Tiếp theo là làm phần quản lý sản phẩm , bạn tạo file 'quan_ly_san_pham.php' trong thư mục 'san_pham' với nội dung sau :


<?php
    if(!isset($bien_bao_mat)){exit();}
?>
<?php
    if(!isset($_GET['id_menu']))
    {
        $id_menu="toan_bo_san_pham";
    }
    else
    {
        if($_GET['id_menu']!="" and $_GET['id_menu']!="toan_bo_san_pham")
        {
            $id_menu=$_GET['id_menu'];
        }
        else
        {
            $id_menu="toan_bo_san_pham";
        }
    }
?>
<br>
<div style="width:990px;text-align:left" >
    Chọn : <select name="danh_muc" onchange="window.location='?thamso=quan_ly_san_pham&id_menu='+this.value" >
    <option value="" >Toàn bộ sản phẩm</option>
    <?php
        $tv="select * from menu_doc order by id ";
        $tv_1=mysql_query($tv);
        $a="";
        while($tv_2=mysql_fetch_array($tv_1))
        {
            $ten=$tv_2['ten'];
            $id=$tv_2['id'];
            if($id_menu==$id)
            {
                $a="selected";
            }
            echo "<option value='$id' $a >";
                echo $ten;
            echo "</option>";
            $a="";
        }
    ?>
    </select>
</div>
<br>
<?php
    $so_dong_tren_mot_trang=10;
    if(!isset($_GET['trang'])){$_GET['trang']=1;}
   
    if($id_menu=="toan_bo_san_pham")
    {
        $tv="select count(*) from san_pham";
    }
    else
    {
        $tv="select count(*) from san_pham where thuoc_menu='$id_menu' ";
    }
    $tv_1=mysql_query($tv);
    $tv_2=mysql_fetch_array($tv_1);
    $so_trang=ceil($tv_2[0]/$so_dong_tren_mot_trang);
   
    $vtbd=($_GET['trang']-1)*$so_dong_tren_mot_trang;
    if($id_menu=="toan_bo_san_pham")
    {
        $tv="select id,ten,gia,hinh_anh from san_pham order by id desc limit $vtbd,$so_dong_tren_mot_trang";
    }
    else
    {
        $tv="select id,ten,gia,hinh_anh from san_pham where thuoc_menu='$id_menu' order by id desc limit $vtbd,$so_dong_tren_mot_trang";
    }
    $tv_1=mysql_query($tv);
?>

<table width="990px" class="tb_a1" >
    <tr style="background:#CCFFFF;height:40px;" >
        <td width="120px" ><b>Hình ảnh</b></td>
        <td width="450px" ><b>Tên</b></td>
        <td align="center" width="140px" ><b>Giá</b></td>
        <td align="center" width="140px" ><b>Sửa</b></td>
        <td align="center" width="140px" ><b>Xóa</b></td>
    </tr>
    <?php
        while($tv_2=mysql_fetch_array($tv_1))
        {
            $id=$tv_2['id'];
            $ten=$tv_2['ten'];
            $gia=$tv_2['gia'];
            $gia=number_format($gia,0,",",".");
            $link_hinh="../hinh_anh/san_pham/".$tv_2['hinh_anh'];
            $link_sua="?thamso=sua_san_pham&id_menu=".$id_menu."&id=".$id."&trang=".$_GET['trang'];
            $link_xoa="?xoa_san_pham=co&id=".$id;
            ?>
                <tr class="a_1" >
                    <td align="center" >
                        <a href="<?php echo $link_sua; ?>" >
                            <img src="<?php echo $link_hinh; ?>" style="width:100px;margin-top:10px;margin-bottom:10px;" border="0" >
                        </a>
                    </td>
                    <td>
                        <a href="<?php echo $link_sua; ?>" class="lk_a1" style="margin-left:10px" ><?php echo $ten; ?></a>
                    </td>
                    <td align="center" >
                        <?php echo $gia; ?>
                    </td>
                    <td align="center" >
                        <a href="<?php echo $link_sua; ?>" class="lk_a1" >Sửa</a>
                    </td>
                    <td align="center" >
                        <a href="<?php echo $link_xoa; ?>" class="lk_a1" >Xóa</a>
                    </td>
                </tr>
            <?php
        }
    ?>
    <tr>
        <td colspan="5" align="center" >
            <br>
            <?php
                for($i=1;$i<=$so_trang;$i++)
                {
                    $link_phan_trang="?thamso=quan_ly_san_pham&id_menu=".$id_menu."&trang=".$i;
                    echo "<a href='$link_phan_trang' class='phan_trang' >";
                        echo $i;
                    echo "</a> ";
                }
            ?>
            <br><br>
        </td>
    </tr>
</table>


- Bạn xem giải thích code (phần chữ xanh)  của file 'quan_ly_san_pham.php' ở phần bên dưới :



<?php
    if(!isset($bien_bao_mat)){exit();} // xuất ra trang trắng nếu truy cập trực tiếp vào file này
?>
<?php
    // tìm id menu thông qua biến 'id_menu' trên url , id menu sẽ được gán vào biến $id_menu
    // biến $id_menu dùng để phân loại sản phẩm xuất ra theo danh mục
    // (nếu có giá trị là 'toan_bo_san_pham' thì xuất toàn bộ sản phẩm)
    if(!isset($_GET['id_menu'])) // nếu chưa tồn tại biến 'id_menu' trên url
    {
        $id_menu="toan_bo_san_pham";
        // thì biến $id_menu có giá trị là 'toan_bo_san_pham' (trường hợp này thì xuất toàn bộ sản phẩm)
    }
    else
    {
        if($_GET['id_menu']!="" and $_GET['id_menu']!="toan_bo_san_pham" )
        // nếu biến 'id_menu' trên url khác rỗng và khác 'toan_bo_san_pham'
        {
            $id_menu=$_GET['id_menu'];
            // thì biến $id_menu có giá trị là biến 'id_menu' trên url
            // trường hợp này sẽ xuất sản phẩm theo danh mục
        }
        else
        {
            $id_menu="toan_bo_san_pham";
            // nếu biến 'id_menu' trên url bằng rỗng
            // biến $id_menu sẽ được gán giá trị là 'toan_bo_san_pham' (trường hợp này thì xuất toàn bộ sản phẩm)
        }
    }
?>
<br>
<div style="width:990px;text-align:left" >
// xuất vùng chứa hộp chọn xuất sản phẩm , hộp chọn này rộng 990px và canh trái
    Chọn : <select name="danh_muc" onchange="window.location='?thamso=quan_ly_san_pham&id_menu='+this.value" >
    // xuất hộp chọn xuất sản phẩm và khi thay đổi tùy chọn ( sự kiện onchange )
    // thì chuyển trang với biến 'thamso' trên url 
là 'quan_ly_san_pham' cùng với biến 'id_menu' trên url
    // là id trong bảng 'menu_doc'

    <option value="" >Toàn bộ sản phẩm</option> // xuất ra tùy chọn 'Toàn bộ sản phẩm' 
    <?php
        $tv="select * from menu_doc order by id "; // chọn các menu trong bảng 'menu_doc' để xuất vào thẻ 'select'
        $tv_1=mysql_query($tv);
        $a="";
        while($tv_2=mysql_fetch_array($tv_1))
        // lấy dữ liệu của các dòng dữ liệu trong bảng 'menu_doc' rồi gán vào mảng $tv_2

        {
            $ten=$tv_2['ten']; // cột 'ten' trong bảng 'menu_doc' được gán vào biến $ten
            $id=$tv_2['id']; // cột 'id' trong bảng 'menu_doc' được gán vào biến $id
            if($id_menu==$id)
            // nếu biến id của dòng dữ liệu (lấy trong bảng 'menu_doc') bằng với biến 'id_menu' trên url
            // thì biến $a có giá trị là 'selected' (nghĩa là sẽ hiển thị tùy chọn menu này trước trong hộp chọn select )
            {
                $a="selected";
                // khi xảy ra trùng khớp thì sẽ cho biến $a có giá trị là 'selected' rồi xuất vào thẻ 'option'
                // thẻ 'option' nào có 'selected' thì sẽ được chọn và hiển thị ra trước
            }
            echo "<option value='$id' $a >";
                // xuất giá trị của thẻ 'option' (thuộc tính 'value' ,  giá trị là id menu tương ứng )
                // và biến $a (nhằm chọn tùy chọn nào hiển thị trước)

                echo $ten;
            echo "</option>";
                // hiển thị tên menu ra ngoài màn hình (nằm trong thẻ 'option' )
            $a="";
        }
    ?>
    </select>
</div>
<br>
<?php
    $so_dong_tren_mot_trang=10; // số sản phẩm xuất ra trong 1 trang , ở đây là 10 sản phẩm
    if(!isset($_GET['trang'])){$_GET['trang']=1;}
    // nếu không tồn tại biến 'trang' trên url thì biến này có giá trị là 1 , làm như vậy là để tính biến $vtbd
    // biến $vtbd là vị trí bắt đầu giới hạn menu trong câu truy vấn select , limit phía dưới
    // 
giá trị biến $vtbd tùy theo biến 'trang' trên url
    // (nghĩa là giá trị của biến $vtbd tùy vào trang đang hiện hành)
   
    if($id_menu=="toan_bo_san_pham") // trường hợp xuất toàn bộ sản phẩm
    {
        $tv="select count(*) from san_pham"; // đếm số dòng trong bảng 'san_pham'
    }
    else
    {
        // trường hợp xuất sản phẩm theo danh mục
        $tv="select count(*) from san_pham where thuoc_menu='$id_menu' ";
        // đếm số dòng trong bảng 'san_pham' theo danh mục (để ý chỗ thuoc_menu )
    }
    $tv_1=mysql_query($tv);
    $tv_2=mysql_fetch_array($tv_1);
    $so_trang=ceil($tv_2[0]/$so_dong_tren_mot_trang);
    // tính số trang xuất ra của phần quản lý sản phẩm (nếu lớn hơn 10 thì số trang lớn hơn 1 )
    // số trang bằng tổng dữ liệu của câu truy vấn trên chia cho số dòng (số sản phẩm) trong 1 trang rồi làm tròn số
    
    $vtbd=($_GET['trang']-1)*$so_dong_tren_mot_trang;
    // tính vị trí bắt đầu giới hạn của bảng 'san_pham' tùy theo trang hiện hành
    // ở đây , nếu là trang 1 thì $vtbd=0 , nếu là trang 2 thì $vtbd=10 , nếu là trang 3 thì $vtbd=20 ...
    if($id_menu=="toan_bo_san_pham") // trường hợp xuất toàn bộ sản phẩm
    {
        $tv="select id,ten,gia,hinh_anh from san_pham order by id desc limit $vtbd,$so_dong_tren_mot_trang";
        // lệnh truy cập vào bảng 'san_pham' sắp xếp theo 'id' giảm dần với giới hạn là tùy theo trang hiện tại
        // ban đầu thì vị trí bắt đầu giới hạn là 0
    }
    else
    {
        // trường hợp xuất sản phẩm theo danh mục
        $tv="select id,ten,gia,hinh_anh from san_pham where thuoc_menu='$id_menu' order by id desc limit $vtbd,$so_dong_tren_mot_trang";
        // lệnh truy cập vào bảng 'san_pham' theo danh mục menu ( để ý chỗ thuoc_menu )
        // sắp xếp theo 'id' giảm dần với giới hạn là tùy theo trang hiện tại

        // ban đầu thì vị trí bắt đầu giới hạn là 0
    }
    $tv_1=mysql_query($tv);
?>

<table width="990px" class="tb_a1" >
// xuất ra bảng chứa danh sách các sản phẩm với class là 'tb_a1' , class này sẽ được dùng trong file 'giao_dien.css'
    <tr style="background:#CCFFFF;height:40px;" >
    // hàng đầu tiên có chiều cao 40px và có màu nền là 1 mã màu (#CCFFFF)
        <td width="120px" ><b>Hình ảnh</b></td>
        <td width="450px" ><b>Tên</b></td>
        <td align="center" width="140px" ><b>Giá</b></td>
        <td align="center" width="140px" ><b>Sửa</b></td>
        <td align="center" width="140px" ><b>Xóa</b></td>
    </tr>
    <?php
        while($tv_2=mysql_fetch_array($tv_1))
        // xuất dòng dữ liệu từ bảng 'san_pham' ra , dữ liệu được gán vào mảng $tv_2
        {
            $id=$tv_2['id']; // gán cột 'id' của dòng dữ liệu đang được lấy dữ liệu vào biến $id
            $ten=$tv_2['ten']; // gán cột 'ten' của dòng dữ liệu đang được lấy dữ liệu vào biến $ten
            $gia=$tv_2['gia']; // gán cột 'gia' của dòng dữ liệu đang được lấy dữ liệu vào biến $gia
            $gia=number_format($gia,0,",","."); // định dạng lại giá tiền cho dễ xem
            $link_hinh="../hinh_anh/san_pham/".$tv_2['hinh_anh'];
            // tạo ra liên kết hình , hình ảnh trong thư mục 'hinh_anh/san_pham' (cách viết ../ là lùi về 1 thư mục)
            $link_sua="?thamso=sua_san_pham&id_menu=".$id_menu."&id=".$id."&trang=".$_GET['trang'];
            // tạo link sửa sản phẩm với biến 'thamso' trên url có giá trị là 'sua_san_pham'
            // link sửa cũng có biến 'id' trên url là cột 'id' của dòng dữ liệu đang được lấy

            // ở đây truyền thêm biến 'trang' trên url để tạo liên kết "Đóng" từ trang sửa sản phẩm
            // (phải có biến này để biết vị trí trang trước đó mà trở về sau khi bấm nút "Đóng" )
            // ngoài ra còn truyền thêm biến 'id_menu' trên url để khi bấm
liên kết "Đóng" từ trang sửa sản phẩm
            // thì biết trang trước đó xuất sản phẩm theo danh mục nào hay xuất toàn bộ sản phẩm
            $link_xoa="?xoa_san_pham=co&id=".$id;
            // tạo link xóa sản phẩm với biến 'xoa_san_pham' trên url có giá trị là 'co'
            //  link xóa cũng có biến 'id' trên url là cột 'id' của dòng dữ liệu đang được lấy

            ?>
                <tr class="a_1" >
                // xuất hàng chứa sản phẩm xuất ra từ bảng 'san_pham' , hàng này có class là 'a_1'
                    <td align="center" >
                        <a href="<?php echo $link_sua; ?>" >
                         // xuất ra liên kết sửa sản phẩm , liên kết này có chứa ảnh sản phẩm
                         <img src="<?php echo $link_hinh; ?>" style="width:100px;margin-top:10px;margin-bottom:10px;" border="0" >
                         // xuất hình ảnh với độ rộng 100px , cách trên cách dưới 10px  
                        </a>
                    </td>
                    <td>
                        <a href="<?php echo $link_sua; ?>" class="lk_a1" style="margin-left:10px" ><?php echo $ten; ?></a>
                        // xuất tên sản phẩm , đồng thời xuất ra liên kết sửa sản phẩm với class là 'lk_a1'
                        // (class này được định dạng css trong file 'giao_dien.css')

                    </td>
                    <td align="center" >
                        <?php echo $gia; ?> // xuất giá của sản phẩm
                    </td>
                    <td align="center" >
                        <a href="<?php echo $link_sua; ?>" class="lk_a1" >Sửa</a>
                        // xuất liên kết sửa sản phẩm với class là 'lk_a1'
                        // (class này được định dạng css trong file 'giao_dien.css')
                    </td>
                    <td align="center" >
                        <a href="<?php echo $link_xoa; ?>" class="lk_a1" >Xóa</a>
                        // xuất liên kết xóa sản phẩm với class là 'lk_a1'
                        // (class này được định dạng css trong file 'giao_dien.css')
                    </td>
                </tr>
            <?php
        }
    ?>
    <tr>
        <td colspan="5" align="center" >
            <br>
            <?php
                for($i=1;$i<=$so_trang;$i++)
                {
                    $link_phan_trang="?thamso=quan_ly_san_pham&id_menu=".$id_menu."&trang=".$i;
                    // tạo liên kết phân trang , liên kết phân trang đến trang nào thì biến 'trang' trên url có giá trị là trang đó
                    // liên kết này chứa biến 'id_menu' trên url , ngoài lúc phải xuất toàn bộ sản phẩm
                    // thì biến này chứa giá trị id của menu được chọn trong hộp chọn select hiện tại
                    echo "<a href='$link_phan_trang' class='phan_trang' >";
                    // xuất liên kết phân trang với class là 'phan_trang'
                        echo $i;
                    echo "</a> ";
                }
            ?>
            <br><br>
        </td>
    </tr>
</table>


- Mình bấm vào liên kết 'Quản lý sản phẩm' tại trang chủ của trang quản trị thì nhận được kết quả sau :






 - Sau đó mình chọn "Menu 1" và "Menu 3" thì đã thấy sản phẩm xuất theo danh mục menu

- Khi mình bấm vào liên kết quản lý sản phẩm (ở file 'trang_chu_2.php' ) => web sẽ đến trang ?thamso=quan_ly_san_pham , web sẽ tải file 'dieu_huong.php' và  gọi file 'quan_ly_san_pham.php' bằng đoạn code sau :



case "quan_ly_san_pham":
    include("chuc_nang/san_pham/quan_ly_san_pham.php");
break;

- Từ đó sẽ xuất ra trang quản lý sản phẩm