Ngu ngơ học làm web (93) - PDO – fetch_assoc

Tiếp theo của: Ngu ngơ học làm web (92) - PDO - thêm thực đơn
-----

Phần 93. PDO – fetch_assoc


Xem và làm theo clip số 19 của thầy Nguyễn Anh Tuấn:

Ở các bài trước sử dụng hàm fetchAll() với kiểu là FETCH_OBJ, khi đó kết quả trả về của hàm là một mảng các đối tượng. Ví dụ: $mon_an = $stmt->fetchAll(PDO::FETCH_OBJ);

Phần này sẽ sử dụng hàm fetchAll() với kiểu là FETCH_ASSOC, khi đó kết quả trả về của hàm là một mảng các mẩu tin. Khi đó sẽ truy cập tới các trường theo kiểu sau:  <?php echo $mon_an[$i][ten_mon]; ?> thay vì trước đây là <?php echo $mon_an[$i] -> ten_mon; ?>

Dùng một biến chẵn lẻ kết hợp với CSS để định dạng màu nền xen kẽ giữa các đối tượng. Ví dụ:

[PHP]
for($i = 0; $i < count($mon_an); $i++) {
                        $bg = $i % 2 != 0 ? "le":"";
            ?>

[HTML]
<div class="khung <?php echo $bg; ?>" >

Lưu lại đoạn mã để tham khảo:

[connection.php]

<?php
try
{
            //Khai báo đối tượng PDO
            $pdo = new PDO("mysql:host=localhost;dbname=ql_nha_hang","root","");
            //Xuất tiếng Việt
            $pdo->query("SET NAMES UTF8");
}
catch (PDOException $ex)
{
            die($ex->getMessage());
}
?>

[default.css]

body {  text-align: center;}
h1 { text-align: center; color: #F00;}
#main { width: 750px; border: #f00 solid 1px; background: #fff; display: inline-lock; margin: 0 auto;}
.khung { width: 200px; height: 300px; border: #999 solid 1px; padding: 10px; margin: 10px; float: left;
}
img.cangiua {  display: block; margin-left: auto; margin-right: auto; }
.khung img { width: 150px;}
.tenmon { text-align: center; font-weight: bold;}
.gia {    color: #D98A17;}
.le { background: #ccc; }

[danh_sach_mon_an.php]

<!DOCTYPE html>
<html lang="en">
<head>
            <meta charset="UTF-8">
            <title>Danh sách món ăn</title>
            <link rel="stylesheet" href="default.css">
</head>
<?php
            include("connection.php");
            $sql = "SELECT ma_mon,ten_mon,noi_dung_tom_tat,don_gia,hinh FROM mon_an";
            $stmt = $pdo->prepare($sql);
            $stmt->execute();
            if($stmt->rowcount() > 0){
                        $mon_an = $stmt->fetchAll(PDO::FETCH_ASSOC);
            }
?>
<body>
<div id="main">
            <h1>Danh sách món ăn  </h1>
            <?php
            for($i = 0; $i < count($mon_an); $i++) {
                        $bg = $i % 2 != 0 ? "le":"";
            ?>
            <div class="khung <?php echo $bg; ?>" >
                        <img class="cangiua" src="<?php echo $mon_an[$i][hinh]; ?>" alt="Hình">
                        <p class="tenmon"><?php echo $mon_an[$i][ten_mon]; ?></p>
                        <p><?php echo $mon_an[$i][noi_dung_tom_tat]; ?></p>
                        <p class="gia">Giá:<?php echo number_format($mon_an[$i][don_gia]); ?> VNĐ</p>
            </div>
            <?php
            }
            ?>
</div>
<?php
            $pdo->NULL;
?>
</body>
</html>

Xem và làm theo clip số 20 của thầy Nguyễn Anh Tuấn:

Vì lúc thiết kế CSDL, trong bảng khach_hang chưa có cột giới tính (gioi_tinh), nên sẽ thêm vào để làm bài tập này.

Ghi lại đoạn mã để tham khảo.

[connection.php]

Giống các bài tập trước.

[default.css]

body {  text-align: center;}
h1 { text-align: center; color: #F00;}
#main { width: 750px; border: #f00 solid 1px; background: #fff; display: inline-lock; margin: 0 auto;}
.le { background: #ccc; }
.tieude { background: #FFA31B; font-weight: bold; }
tr:hover { background: #3879D9; }

[danh_sach_khach_hang.php]

<!DOCTYPE html>
<html lang="en">
<head>
            <meta charset="UTF-8">
            <title>Danh sách món ăn</title>
            <link rel="stylesheet" href="default.css">
</head>
<?php
            include("connection.php");
            $sql = "SELECT * FROM khach_hang";
            $stmt = $pdo->prepare($sql);
            $stmt -> execute();
            if($stmt -> rowcount() > 0) {
                        $khach_hang = $stmt -> fetchAll(PDO::FETCH_ASSOC);
            }
?>
<body>
<div id="main">
<table width="700" border="0" cellspacing="5" align="center" style="border-collapse: collapse">
<caption>
            <h1>THÔNG TIN KHÁCH HÀNG</h1>
</caption>
<tr  class="tieude" height = "40px">
            <td>Mã khách</td>
            <td>Họ tên</td>
            <td>Phái</td>
            <td>Địa chỉ</td>
            <td>Điện thoại</td>
            <td>Email</td>
</tr>
<?php
            for($i = 0; $i < count($khach_hang); $i++)
            {
                        $hinh = $khach_hang[$i][gioi_tinh] == 1 ? "nam.png" : "nu.png";
                        $le = $i%2 != 1 ? "le" : "";
?>
            <tr class=<?php echo $le; ?> >
                        <td><?php echo $khach_hang[$i][ma_khach_hang]; ?></td>
                        <td><?php echo $khach_hang[$i][ten_khach_hang]; ?></td>
                        <td><img src="images/<?php echo $hinh; ?> " width="45" height="45"></td>
                        <td><?php echo $khach_hang[$i][dia_chi]; ?></td>
                        <td><?php echo $khach_hang[$i][dien_thoai]; ?></td>
                        <td><?php echo $khach_hang[$i][email]; ?></td>
            </tr>
<?php
}
?>
</table>
<?php
            $pdo->NULL;
?>
</body>

</html>
-----------
Cập nhật 3/3/2017
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web