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

Phần 9 - Xuất sản phẩm

- Trong file 'xuat.php' , bạn nhập vào đoạn code sau :


<?php
    $id=$_GET['id'];
    $tv="select id,ten,gia,hinh_anh,thuoc_menu from san_pham where thuoc_menu='$id' order by id desc ";
    $tv_1=mysql_query($tv);
    while($tv_2=mysql_fetch_array($tv_1))
    {
        echo $tv_2['ten'];echo "<br>";
        echo $tv_2['gia'];echo "<br>";
        echo $tv_2['hinh_anh'];echo "<hr>";
    }
?>

- Sau đó bạn truy cập lại vào trang chủ , rồi bấm chuột vào "Menu 3" của phần menu dọc thì bạn nhận được kết quả sau :




- $id=$_GET['id']; dùng để lấy biến id trên url

- Chuỗi truy vấn select id,ten,gia,hinh_anh,thuoc_menu from san_pham where thuoc_menu='$id' order by id desc là lấy các cột 'id' , 'ten' , 'gia' , 'hinh_anh' , 'thuoc_menu' từ bảng 'san_pham' mà có cột 'thuoc_menu' giá trị bằng với biến id (biến id trên url , ở đây sẽ có giá trị là 3 , giá trị sẽ khác nhau khi bạn bấm vào các menu dọc khác nhau) , sau đó sắp xếp giảm dần theo thứ tự số của cột 'id' (nhằm mục đích đưa sản phẩm mới lên trước)

- Tiếp theo ta xuất giá trị của các cột 'id' , 'ten' , 'gia' , 'hinh_anh' , 'thuoc_menu' ra bằng lệnh echo.Ở đây nhắc lại thêm một lần nữa là lấy giá trị của cột trong bảng của phần mysql thì dùng cách sau :

$tv_2['Tên cột hoặc trường']

- Lưu ý , sau mỗi lần vòng lặp chạy qua thì xuất thẻ 'hr' ra (xuất gạch ngang)

- Phần hình ảnh thì hiện tại chỉ xuất tên ảnh ra.Bây giờ để xuất ảnh thì trong vòng lặp 'while' bạn gán biến 'link_anh' (có đường dẫn thư mục ảnh là 'hinh_anh/san_pham') vào : $link_anh="hinh_anh/san_pham/".$tv_2['hinh_anh'];

- Sau đó bạn xóa tên ảnh trong vòng lặp 'while' đi rồi xuất thẻ 'img' cùng với liên kết ảnh vào.Tiếp tới bạn thêm thuộc tính 'width' để định chiều rộng của ảnh :

echo "<img src='$link_anh' width='150px' >";echo "<hr>";

- Bạn sẽ nhận được kết quả sau :



- Ở đây khi xuất sản phẩm thì xuất 3 sản phẩm trên 1 dòng nên sẽ chèn bảng table cùng 3 ô td vào.Bạn sửa lại code file 'xuat.php' như sau :


<?php
    $id=$_GET['id'];
    $tv="select id,ten,gia,hinh_anh,thuoc_menu from san_pham where thuoc_menu='$id' order by id desc ";
    $tv_1=mysql_query($tv);
    echo "<table>";
    while($tv_2=mysql_fetch_array($tv_1))
    {
        echo "<tr>";
            for($i=1;$i<=3;$i++)
            {
                echo "<td align='center' width='215px' >";
                    if($tv_2!=false)
                    {
                        $link_anh="hinh_anh/san_pham/".$tv_2['hinh_anh'];
                      
                        echo "<img src='$link_anh' width='150px' >";echo "<br>";
                        echo $tv_2['ten'];echo "<br>";
                        echo $tv_2['gia'];echo "<br>";echo "<br>";
                    }
                    else
                    {
                        echo "&nbsp;";
                    }
                echo "</td>";
                if($i!=3)
                {
                    $tv_2=mysql_fetch_array($tv_1);
                }
            }
        echo "</tr>";
    }
    echo "</table>";
?>

+ Chèn thẻ 'table' trước vòng lặp 'while'

+ Mỗi lần vòng lặp 'while' chạy thì thêm thẻ 'tr' cùng với vòng lặp 'for' (vòng lặp 'for' chạy 3 lần trong 1 lần chạy vòng lặp 'while' , chạy từ lúc biến 'i' bằng 1 tới khi biến 'i' bằng 3)

+ Mục đích của vòng lặp 'for' là xuất ra thẻ 'td' 3 lần (xuất 3 ô td).Cứ mỗi lần vòng lặp 'for' chạy thì lại lấy dữ liệu của dòng kế tiếp trong bảng 'san_pham' bằng lệnh $tv_2=mysql_fetch_array($tv_1); chỉ trừ lúc mà biến 'i' bằng 3. (if($i!=3))

+ Bởi vì vào lúc đó sẽ kết thúc vòng lặp 'for' nhưng cũng kết thúc 1 lần chạy của vòng lặp 'while' , khi đó vòng lặp 'while' sẽ chạy lại , mà vòng lặp 'while' chạy lại thì cũng tiếp tục lấy dữ liệu của dòng kế tiếp bằng lệnh $tv_2=mysql_fetch_array($tv_1) => Lấy dữ liệu 2 lần (1 lần của vòng lặp 'for' và 1 lần của vòng lặp 'while') sẽ dẫn đến mất dữ liệu nên cần viết if($i!=3) (vòng lặp 'for' không lấy dữ liệu khi biến 'i' bằng 3)

+ Trong ô 'td' , bạn canh giữa văn bản bằng thuộc tính align="center" và cho ô 'td' có chiều rộng là '215px' : width='215px'

+ Ngoài ra , câu lệnh if($tv_2!=false) là nhằm nói nếu biến 'tv_2' có giá trị là 1 dòng dữ liệu thì xuất dữ liệu bình thường , còn nếu không (nghĩa là lúc hết dữ liệu và biến 'tv_2' có giá trị là 'false') thì xuất 'khoảng trắng' vào ô 'td' (cách viết '&nbsp;' là để hiển thị 'khoảng trắng')

- Kết thúc phần này , bạn nhận kết quả sau :