Bài 21: Thực hành truy xuất cơ sở dữ liệu hiển thị ra bảng bằng PHP

Bài 21: Thực hành truy xuất cơ sở dữ liệu hiển thị ra bảng bằng PHP

Bài hôm nay chúng ta sẽ thực hành truy xuất từ cơ sở dữ liệu để hiển thị bảng danh sách học sinh bằng PHP kết nối với cơ sở dữ liệu MySQL

Chuẩn bị cơ sở dữ liệu

Như bài trước chúng ta đã tạo 1 database có tên là “duan_test“, hôm nay chúng ta sẽ tạo 1 bảng danh sách học sinh và điểm số các môn học trong database đó có tên là “danhsachhocsinh“:

<?php
	require 'connect.php';
	// Câu lệnh truy vấn tạo database table
    $sql = "CREATE TABLE `duan_test`.`danhsachhocsinh` (
	`id` INT NOT NULL AUTO_INCREMENT , 
	`hoten` VARCHAR(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL , 
	`ngaysinh` DATE NULL DEFAULT NULL , 
	`diemtoan` FLOAT(5) NULL DEFAULT NULL , 
	`diemly` FLOAT(5) NULL DEFAULT NULL , `diemhoa` FLOAT(5) NULL DEFAULT NULL , 
	`diemngoaingu` FLOAT(5) NULL DEFAULT NULL , 
	PRIMARY KEY (`id`)) ENGINE = InnoDB;
	";
 
    // Thực thi câu lệnh truy vấn
    $con->exec($sql);
     
    echo "Tạo table thành công";
?>

Bảng danhsachhocsinh đã tạo thành công bạn có thể kiểm tra trên phpMyadmin:

tao-table-danhsachhocsinh-trong-phpMyadmin

Để sử dụng được tiếng Việt trong trường “hoten” thì ta chọn bảng mã: “utf8_general_ci” nhé.

Nhập danh sách học sinh và điểm số

Tạo form nhập dữ liệu

Để trực quan ta tạo 1 trang PHP sử dụng form html để nhập danh sách học sinh bao gồm:

  • Họ tên
  • Ngày sinh
  • Điểm toán
  • Điểm lý
  • Điểm hóa
  • Điểm ngoại ngữ

Bây giờ ta tạo file nhapdanhsach.php có nội dung form nhập liệu như sau:

<h2>Nhập danh sách bảng điểm học sinh</h2>
<form method="post">
<p>Họ và tên:</p><p>
<input type="text" name="hoten">
</p>

<p>Ngày sinh:</p><p>
<input type="date" name="ngaysinh">
</p>
<p>Môn toán:</p><p>
<input type="text" name="diemtoan">
</p>
<p>Môn lý:</p><p>
<input type="text" name="diemly">
</p>
<p>Môn hóa:</p><p>
<input type="text" name="diemhoa">
</p>
<p>Môn ngoại ngữ:</p><p>
<input type="text" name="diemngoaingu">
</p>
<button type="submit" name="btn_nhap">Nhập</button>
</form>

Kết quả hiển thị khi chạy:

tao-form-nhap-bang-diem-hoc-sinh

Xử lý bằng PHP để insert thông tin

Tiếp tục để nhập được bảng điểm cho từng học sinh ta bổ sung thêm code PHP vào phía dưới

Bước đầu tiên ta kiểm tra sự kiện submit form qua nút nhập, nếu tồn tại thực hiện kết nối với cơ sở dữ liệu:

if(isset($_POST['btn_nhap'])){
require 'connect.php';	
}

Tiếp theo lấy các giá trị được gửi bằng phương thức POST:

$hoten= isset($_POST['hoten'])? ($_POST['hoten']) : '';
$ngaysinh= isset($_POST['ngaysinh'])? ($_POST['ngaysinh']) : '';
$diemtoan= isset($_POST['diemtoan'])? ($_POST['diemtoan']) : '';
$diemly= isset($_POST['diemly'])? ($_POST['diemly']) : '';
$diemhoa= isset($_POST['diemhoa'])? ($_POST['diemhoa']) : '';
$diemngoaingu= isset($_POST['diemngoaingu'])? ($_POST['diemngoaingu']) : '';

Bước tiếp theo, cần kiểm tra dữ liệu đầu vào xem có nhập đúng hay không bằng lệnh rẽ nhánh if, else:

if(empty($hoten) || empty($diemtoan) || empty($diemly) || empty($diemhoa) || empty($diemngoaingu)){
	echo 'Nhập vào không hợp lệ';
}
else{
//xử lý nhập dữ liệu	
}

Tiếp tục, nếu dữ liệu đầu vào thỏa mãn điều kiện không được nhập trống thì ta bắt đầu viết code để insert vào table danhsachhocsinh trong database

$sql = "INSERT INTO `danhsachhocsinh` (`id`, `hoten`, `ngaysinh`, `diemtoan`, `diemly`, `diemhoa`, `diemngoaingu`) 
	VALUES (NULL, '$hoten', '$ngaysinh' , '$diemtoan', '$diemly', '$diemhoa', '$diemngoaingu');";
$con->exec($sql);

Đây là đoạn code đầy đủ các bạn có thể copy về chạy thử:

<h2>Nhập danh sách bảng điểm học sinh</h2>
<form method="post">
<p>Họ và tên:</p><p>
<input type="text" name="hoten">
</p>
<p>Ngày sinh:</p><p>
<input type="date" name="ngaysinh">
</p>
<p>Môn toán:</p><p>
<input type="text" name="diemtoan">
</p>
<p>Môn lý:</p><p>
<input type="text" name="diemly">
</p>
<p>Môn hóa:</p><p>
<input type="text" name="diemhoa">
</p>
<p>Môn ngoại ngữ:</p><p>
<input type="text" name="diemngoaingu">
</p>
<button type="submit" name="btn_nhap">Nhập</button>
</form>
<?php
if(isset($_POST['btn_nhap'])){
require 'connect.php';	
$hoten= isset($_POST['hoten'])? ($_POST['hoten']) : '';
$ngaysinh= isset($_POST['ngaysinh'])? ($_POST['ngaysinh']) : '';
$diemtoan= isset($_POST['diemtoan'])? ($_POST['diemtoan']) : '';
$diemly= isset($_POST['diemly'])? ($_POST['diemly']) : '';
$diemhoa= isset($_POST['diemhoa'])? ($_POST['diemhoa']) : '';
$diemngoaingu= isset($_POST['diemngoaingu'])? ($_POST['diemngoaingu']) : '';
if(empty($hoten) || empty($diemtoan) || empty($diemly) || empty($diemhoa) || empty($diemngoaingu)){
	echo 'Nhập vào không hợp lệ';
}
else{
	$sql = "INSERT INTO `danhsachhocsinh` (`id`, `hoten`, `ngaysinh`, `diemtoan`, `diemly`, `diemhoa`, `diemngoaingu`) 
	VALUES (NULL, '$hoten', '$ngaysinh' , '$diemtoan', '$diemly', '$diemhoa', '$diemngoaingu');";
	$con->exec($sql);
}
}
?>

Hiển thị ra bảng danh sách mỗi lần nhập vào bằng PHP

Ở trên thì chúng ta đã bắt đầu nhập được danh sách bảng điểm của các học sinh.

Bây giờ qua mỗi lần nhập ta sẽ cho hiển thị danh sách ra table phía bên dưới

Trước tiên ta tạo một bảng bằng table trong html như sau:

<table>
<thead>
<tr>
<th colspan="8">Danh sách bảng điểm học sinh</th>
</tr>
<tr>
<th>STT</th>
<th>Họ tên</th>
<th>Ngày sinh</th>
<th>Điểm toán</th>
<th>Điểm lý</th>
<th>Điểm hóa</th>
<th>Điểm ngoại ngữ</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>

View lên có vẻ hơi xấu, nên mình cho thêm 1 tý style css nữa cho đẹp:

<style>
table {
  border-collapse: collapse;
  border: 1px solid;
}
th, td {
  border: 1px solid black;
}
th{
  background-color:#007eff2e;
}
</style>

Kết quả thu được:

tao-table-de-hien-thi-du-lieu-danh-sach-hoc-sinh

Bây giờ nhiệm vụ còn lại là đưa danh sách học sinh đã nhập vào cơ sở dữ liệu ra bảng đã lập trên

Để lấy danh sách ta sử dụng truy vấn select:

<?php
//truy vấn lấy danh sách học sinh từ trong CSDL
$sql = "SELECT * FROM danhsachhocsinh";   
$stmt = $con->prepare($sql); 
$stmt->execute();
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
$result = $stmt->fetchAll();
?>

Ta thu được một mảng array $result chứa các thông tin danh sách học sinh trong cơ sở dữ liệu(ở đây mình đã nhập dữ liệu mẫu rồi nhé):

Array
(
    [0] => Array
        (
            [id] => 1
            [hoten] => Nguyễn Ngọc Sơn
            [ngaysinh] => 1999-07-18
            [diemtoan] => 7.4
            [diemly] => 5.6
            [diemhoa] => 8.9
            [diemngoaingu] => 10
        )

    [1] => Array
        (
            [id] => 4
            [hoten] => Hà Duy Linh
            [ngaysinh] => 1999-07-12
            [diemtoan] => 7
            [diemly] => 8
            [diemhoa] => 4
            [diemngoaingu] => 5.5
        )

    [2] => Array
        (
            [id] => 5
            [hoten] => Đặng Nguyên Hà
            [ngaysinh] => 1999-09-14
            [diemtoan] => 8
            [diemly] => 8.5
            [diemhoa] => 7.9
            [diemngoaingu] => 6.75
        )

    [3] => Array
        (
            [id] => 6
            [hoten] => Lê Huy Khải
            [ngaysinh] => 1999-11-29
            [diemtoan] => 7
            [diemly] => 9
            [diemhoa] => 5.25
            [diemngoaingu] => 10
        )

    [4] => Array
        (
            [id] => 7
            [hoten] => Hoàng Mạnh Hưng
            [ngaysinh] => 1999-04-27
            [diemtoan] => 9
            [diemly] => 10
            [diemhoa] => 9
            [diemngoaingu] => 10
        )

)

Khi có mảng danh sách bảng điểm học sinh rồi, thì bây giờ chúng ta chỉ cần giải mảng ra bằng lệnh foreach trong PHP và hiển thị ra bảng là xong thôi:

$stt=0;
foreach($result as $key => $value){
	$stt++;
	echo '
	<tr>
	<td>'.$stt.'</td>
	<td>'.$value['hoten'].'</td>
	<td>'.$value['ngaysinh'].'</td>
	<td>'.$value['diemtoan'].'</td>
	<td>'.$value['diemly'].'</td>
	<td>'.$value['diemhoa'].'</td>
	<td>'.$value['diemngoaingu'].'</td>
	</tr>
	';
}

Dưới đây là đoạn code đầy đủ cho bạn tham khảo:

<h2>Nhập danh sách bảng điểm học sinh</h2>
<form method="post">
<p>Họ và tên:</p><p>
<input type="text" name="hoten">
</p>
<p>Ngày sinh:</p><p>
<input type="date" name="ngaysinh">
</p>
<p>Môn toán:</p><p>
<input type="text" name="diemtoan">
</p>
<p>Môn lý:</p><p>
<input type="text" name="diemly">
</p>
<p>Môn hóa:</p><p>
<input type="text" name="diemhoa">
</p>
<p>Môn ngoại ngữ:</p><p>
<input type="text" name="diemngoaingu">
</p>
<button type="submit" name="btn_nhap">Nhập</button>
</form>
<?php
if(isset($_POST['btn_nhap'])){
require 'connect.php';	
$hoten= isset($_POST['hoten'])? ($_POST['hoten']) : '';
$ngaysinh= isset($_POST['ngaysinh'])? ($_POST['ngaysinh']) : '';
$diemtoan= isset($_POST['diemtoan'])? ($_POST['diemtoan']) : '';
$diemly= isset($_POST['diemly'])? ($_POST['diemly']) : '';
$diemhoa= isset($_POST['diemhoa'])? ($_POST['diemhoa']) : '';
$diemngoaingu= isset($_POST['diemngoaingu'])? ($_POST['diemngoaingu']) : '';
if(empty($hoten) || empty($diemtoan) || empty($diemly) || empty($diemhoa) || empty($diemngoaingu)){
	echo 'Nhập vào không hợp lệ';
}
else{
	$sql = "INSERT INTO `danhsachhocsinh` (`id`, `hoten`, `ngaysinh`, `diemtoan`, `diemly`, `diemhoa`, `diemngoaingu`) 
	VALUES (NULL, '$hoten', '$ngaysinh' , '$diemtoan', '$diemly', '$diemhoa', '$diemngoaingu');";
	$con->exec($sql);
}
}
?>
<style>
table {
  border-collapse: collapse;
  border: 1px solid;
}
th, td {
  border: 1px solid black;
}
th{
	background-color:#007eff2e;
}
</style>
<table>
<thead>
<tr>
<th colspan="8">Danh sách bảng điểm học sinh</th>
</tr>
<tr>
<th>STT</th>
<th>Họ tên</th>
<th>Ngày sinh</th>
<th>Điểm toán</th>
<th>Điểm lý</th>
<th>Điểm hóa</th>
<th>Điểm ngoại ngữ</th>
</tr>
</thead>
<tbody>
<?php
//truy vấn lấy danh sách học sinh từ trong CSDL
require 'connect.php';	
$sql = "SELECT * FROM danhsachhocsinh";   
$stmt = $con->prepare($sql); 
$stmt->execute();
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
$result = $stmt->fetchAll();
//echo '<pre>';
//print_r($result);
$stt=0;
foreach($result as $key => $value){
	$stt++;
	echo '
	<tr>
	<td>'.$stt.'</td>
	<td>'.$value['hoten'].'</td>
	<td>'.$value['ngaysinh'].'</td>
	<td>'.$value['diemtoan'].'</td>
	<td>'.$value['diemly'].'</td>
	<td>'.$value['diemhoa'].'</td>
	<td>'.$value['diemngoaingu'].'</td>
	</tr>
	';
}
?>
</tbody>
</table>

Kết quả thu được:

sau-khi-thuc-hanh-xong-bai-tao-bang-danh-sach-duoc-truy-xuat-tu-csdl

Lời kết

Như vậy mình đã hướng dẫn các bạn làm thử một bài tập thực hành, truy vấn từ database để hiển thị ra bảng bằng ngôn ngữ lập trình PHP rồi.

Bài viết hơi dài vì mình phải đi qua từng bước cho các bạn dễ hiểu, có gì thắc mắc vui lòng bình luận xuống dưới để cùng giải đáp ạ.

Cảm ơn các bạn đã theo dõi bài viết.

Rate this post

sonnguyen

Là một nhân viên IT thích chia sẻ những gì mình biết đến tất cả mọi người. Hi vọng được mọi người ủng hộ, nếu có gì sai sót mong các bạn comment xuống dưới để mình khắc phục. Cảm ơn mọi người!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *