By GokiSoft.com|
21:13 31/01/2024|
Học PHP
[Examination] Kiểm Tra 60 phút - Test nhanh - Khóa học PHP
Thiết kế CSDL đặt tên là DB0512 gồm 1 bảng product gồm các column sau: id tự tăng, tiêu đề, thumbnail, price, content, created_at, updated_at
Yêu cầu:
- Tự add vào bảng product khoảng 35 sản phẩm
- Tạo trang product.php -> Hiển thị danh sách sản phẩm -> thực hiện phân trang 10 sản phẩm/1 trang.
- Tạo 1 bộ lọc trên tang product -> cho phép tìm kiếm theo tiêu đề và nội dung (sử dụng like trong tìm kiếm)
Tags:
Phản hồi từ học viên
5
(Dựa trên đánh giá ngày hôm nay)
![GokiSoft.com [Teacher]](https://www.gravatar.com/avatar/fc6ba9324e017d540af3613b3a77dd21.jpg?s=80&d=mm&r=g)
GokiSoft.com
2021-06-07 07:51:38
#utility.php
<?php
function getGet($key) {
if (isset($_GET[$key])) {
return $_GET[$key];
}
return '';
}
#readme.txt
B1. Phân tích database
create table products (
id int primary key auto_increment,
title varchar(350) not null,
thumbnail varchar(500),
price float,
content longtext,
created_at datetime,
updated_at datetime
)
B2. Fake data
B3. Phat trien chuc nang du an
1) Xay dung khung chuong trinh
- db
- config.php => Chua thong tin cau hinh database & server
- dbhelper.php => Chua thu vien thao tac vao database
- utils
- utility.php => chua function hay dung cua du.
2) Phat trien chuc nang
#product.php
<?php
require_once ('db/dbhelper.php');
require_once ('utils/utility.php');
$page = 1;
if (isset($_GET['page'])) {
$page = $_GET['page'];
}
if ($page <= 0) {
$page = 1;
}
$currentIndex = ($page-1)*PAGE_NUMBER_MAX;
$s = getGet('s');
if (!empty($s)) {
$sql = "select * from products where title like '%$s%' or content like '%$s%' limit $currentIndex, " .PAGE_NUMBER_MAX;
$sqlCount = "select count(*) as 'Total' from products where title like '%$s%' or content like '%$s%' ";
} else {
$sql = "select * from products limit $currentIndex, " .PAGE_NUMBER_MAX;
$sqlCount = "select count(*) as 'Total' from products";
}
$results = executeResult($sql);
// echo $sqlCount;
// die();
$data = executeResult($sqlCount);
$total = $data[0]['Total'];
$numPages = ceil($total/PAGE_NUMBER_MAX);
?>
<!DOCTYPE html>
<html>
<head>
<title>Product List</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<!-- Popper JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<!-- Latest compiled JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<div class="panel panel-primary">
<div class="panel-heading">
<h2 class="text-center">Product List</h2>
</div>
<div class="panel-body">
<form method="get">
<input type="text" name="s" placeholder="Enter searching .." class="form-control" style="width: 200px">
</form>
<table class="table table-bordered" style="margin-top: 10px;">
<thead>
<tr>
<th>No</th>
<th>Thumbnail</th>
<th>Title</th>
<th>Updated At</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<?php
$counter = 0;
foreach ($results as $item) {
echo '<tr>
<td>'.(++$counter).'</td>
<td><img src="'.$item['thumbnail'].'" style="width: 120px"/></td>
<td>'.$item['title'].'</td>
<td>'.$item['updated_at'].'</td>
<td></td>
<td></td>
</tr>';
}
?>
</tbody>
</table>
<ul class="pagination">
<?php
if ($page > 1) {
echo '<li class="page-item"><a class="page-link" href="?s='.$s.'&page='.($page-1).'">Previous</a></li>';
}
$pageAvaiable = [1, 2, $page-1, $page, $page+1, $numPages-1, $numPages];
$isFirst = false;
$isBefore = false;
for ($i = 1; $i <= $numPages && $numPages > 1; $i++) {
if (!in_array($i, $pageAvaiable)) {
if ($i < $page && !$isFirst) {
echo '<li class="page-item"><a class="page-link" href="?s='.$s.'&page='.($page-2).'">...</a></li>';
$isFirst = true;
}
if ($i > $page && !$isBefore) {
echo '<li class="page-item"><a class="page-link" href="?s='.$s.'&page='.($page+2).'">...</a></li>';
$isBefore = true;
}
continue;
}
if ($i == $page) {
echo '<li class="page-item active"><a class="page-link" href="?s='.$s.'&page='.$i.'">'.$i.'</a></li>';
} else {
echo '<li class="page-item"><a class="page-link" href="?s='.$s.'&page='.$i.'">'.$i.'</a></li>';
}
}
if ($page < $numPages) {
echo '<li class="page-item"><a class="page-link" href="?s='.$s.'&page='.($page+1).'">Next</a></li>';
}
?>
</ul>
</div>
</div>
</div>
</body>
</html>
#dbhelper.php
<?php
require_once ('config.php');
/**
* Su dung voi cau lenh query: insert, update, delete -> ko tra ve ket qua.
*/
function execute($sql) {
//Mo ket noi toi database
$conn = mysqli_connect(HOST, USERNAME, PASSWORD, DATABASE);
mysqli_set_charset($conn, 'utf8');
//Xu ly cau query
mysqli_query($conn, $sql);
//Dong ket noi database
mysqli_close($conn);
}
/**
* Su dung voi cau lenh query: select.
*/
function executeResult($sql) {
//Mo ket noi toi database
$conn = mysqli_connect(HOST, USERNAME, PASSWORD, DATABASE);
mysqli_set_charset($conn, 'utf8');
// echo $sql;
//Xu ly cau query
$resultset = mysqli_query($conn, $sql);
// var_dump($resultset);
// die();
$data = [];
while (($row = mysqli_fetch_array($resultset, 1)) != null) {
$data[] = $row;
}
/**
* TH: param2 = 1
* $row = [
* 'id' => 1,
* 'title' => '1 - Android Tivi Sony 4K 55 inch KD-55X8000H',
* 'thumbnail' => '12321',
* ...
* ];
*
* TH: param2 = 2
* $row = [1, '1 - Android Tivi Sony 4K 55 inch KD-55X8000H', '12321', ...];
*/
//Dong ket noi database
mysqli_close($conn);
return $data;
}
#config.php
<?php
define('HOST', 'localhost');
define('USERNAME', 'root');
define('PASSWORD', '');
define('DATABASE', 'BT2289');
define('PAGE_NUMBER_MAX', 5);
![Đào Mạnh Dũng [C2010L]](https://www.gravatar.com/avatar/6a111fa53fd75dc87034660a8857df16.jpg?s=80&d=mm&r=g)
Đào Mạnh Dũng
2021-05-22 15:07:17
#product.php
<!DOCTYPE html>
<html>
<head>
<title>product</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<style type="text/css">
.linkA {
font-size: 20px;
color: gray;
text-underline-position: none;
padding: 10px;
}
</style>
</head>
<body>
<div class="container">
<table class="table table-bordered">
<thead>
<tr>
<th>NO</th>
<th>thumbnail</th>
<th>title</th>
<th>price</th>
<th>updated_at</th>
</tr>
</thead>
<tbody>
<tr>
<?php
include_once 'db/dbhelper.php';
$count = 1;
$sql = "select * from product";
$right = $left = $Page = '';
if(!empty($_GET))
{
$Page = $_GET['Page'];
$right = ($Page-1)*10;
$left = $right+10;
$sql = $sql." where id >= $right and id <=$left";
}
else
$sql = $sql." where id >= 0 and id <=10";
$product=executeResult($sql);
foreach ($product as $item) {
echo " <tr>
<td>".$count++."</td>
<td><img style=\"width: 100px\" src='".$item['thumbnail']." '></td>
<td>".$item['id']."</td>
<td>".$item['price']."</td>
<td>".$item['updated_at']."</td>
</tr>
";
}
?>
</tr>
</tbody>
</table>
</div>
<?php
if(!empty($_GET))
{
$Page = $_GET['Page'];
echo "<div class='container'>
<div style='width: 100%'>
<a href='product.php' class='linkA'>Đầu</a>
<a href='product.php?Page=".(string)($Page-1)."' class='linkA'>".(string)($Page-1)."</a>
<a href='product.php?Page=".(string)($Page)."' class='linkA'>".(string)($Page)."</a>
<a href='product.php?Page=".(string)($Page+1)."' class='linkA'>".(string)($Page+1)."</a>
<a class='linkA'>...</a>
<a href='' class='linkA'>Cuối</a>
</div>
</div>";
}
else
echo "<div class='container'>
<div style='width: 100%'>
<a href='product.php' class='linkA'>Đầu</a>
<a href='product.php?Page=1' class='linkA'>1</a>
<a href='product.php?Page=2' class='linkA'>2</a>
<a href='product.php?Page=3' class='linkA'>3</a>
<a class='linkA'>...</a>
<a href='' class='linkA'>Cuối</a>
</div>
</div>";
?>
</body>
</html>
#config.php
<?php
define('HOST', 'localhost');
define('USERNAME', 'root');
define('PASSWORD', '');
define('DATABASE', 'bt 2289');
#dbhelper.php
<?php
require_once ('config.php');
/**
* Su dung cho lenh: insert/update/delete
*/
function execute($sql) {
// Them du lieu vao database
//B1. Mo ket noi toi database
$conn = mysqli_connect(HOST, USERNAME, PASSWORD, DATABASE);
mysqli_set_charset($conn, 'utf8');
//B2. Thuc hien truy van insert
mysqli_query($conn, $sql);
//B3. Dong ket noi database
mysqli_close($conn);
}
/**
* Su dung cho lenh: select
*/
function executeResult($sql, $isSingle = false) {
// Them du lieu vao database
//B1. Mo ket noi toi database
$conn = mysqli_connect(HOST, USERNAME, PASSWORD, DATABASE);
mysqli_set_charset($conn, 'utf8');
//B2. Thuc hien truy van insert
$resultset = mysqli_query($conn, $sql);
$data = [];
if($isSingle) {
$data = mysqli_fetch_array($resultset, 1);
} else {
while (($row = mysqli_fetch_array($resultset, 1)) != null) {
$data[] = $row;
}
}
//B3. Dong ket noi database
mysqli_close($conn);
return $data;
}
![Do Trung Duc [T2008A]](https://www.gravatar.com/avatar/2973ac07124f066b4605c535e8d39a99.jpg?s=80&d=mm&r=g)
Do Trung Duc
2021-05-12 08:50:53
<?php
define('HOST', 'localhost');
define('USERNAME', 'root');
define('PASSWORD', '');
define('DATABASE', 'phpexam');
![Do Trung Duc [T2008A]](https://www.gravatar.com/avatar/2973ac07124f066b4605c535e8d39a99.jpg?s=80&d=mm&r=g)
Do Trung Duc
2021-05-12 08:50:39
<?php
require_once('config.php');
function create_edit_delete_Product($sql){
// Mo ket noi DB
$conn = mysqli_connect(HOST,USERNAME,PASSWORD,DATABASE);
mysqli_set_charset($conn, 'utf8');
//Thuc hien querry
mysqli_query($conn,$sql);
//Dong ket noi
mysqli_close($conn);
}
function select_Product ($sql){
// Mo ket noi DB
$conn = mysqli_connect(HOST,USERNAME,PASSWORD,DATABASE);
mysqli_set_charset($conn,'utf8');
//Thuc hien querry
$data = [];
$resultset = mysqli_query($conn,$sql);
while (($row = mysqli_fetch_array($resultset,1)) != null ) {
$data[] = $row;
}
//Dong ket noi
mysqli_close($conn);
return $data;
}
![Do Trung Duc [T2008A]](https://www.gravatar.com/avatar/2973ac07124f066b4605c535e8d39a99.jpg?s=80&d=mm&r=g)
Do Trung Duc
2021-05-12 08:50:16
<?php
require_once('DBhelper.php');
$sql = 'select count(id) as quantity from product ';
$data = select_Product($sql);
$product_quantity = 0;
if ($data != null && count($data)>0) {
$product_quantity = $data[0]['quantity'];
}
$page_quantity = ceil($product_quantity/10);
$id_page = 1;
if(isset($_GET['id_page'])){
$id_page = $_GET['id_page'];
}
$displayposition = ($id_page - 1) * 10;
$sql = "select * from product limit $displayposition, 10";
$productList = select_Product($sql);
if (!empty($_GET)) {
if (isset($_GET['search'])) {
$search = $_GET['search'];
$sql = "select * from product where title like '%".$search."%'";
// $sql = "select * from product where title like '%".$search."%' limit $displayposition,10";
$productList = select_Product($sql);
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Manager Product List</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</head>
<body>
<form method="get">
<input placeholder="Enter to search" style="width: 50%" type="" name="search">
<button>Click to search</button>
</form>
<table class="table table-bordereda">
<thead>
<tr>
<th>No</th>
<th>Title</th>
<th>Thumnail</th>
<th>Price</th>
<th>Updated_at</th>
</tr>
</thead>
<tbody>
<?php
$count = 0;
foreach ($productList as $product) {
echo'
<tr>
<td>'.(++$count).'</td>
<td>'.$product['title'].'</td>
<td><img src="'.$product['thumnail'].'" style="width: 160px"/></td>
<td>'.$product['price'].'</td>
<td>'.$product['updated_at'].'</td>
';
}
?>
</tbody>
</table>
<ul class="pagination">
<li class="page-item"><a class="page-link" href="#">Previous</a></li>
<?php
for($i = 1; $i <= $page_quantity; $i++){
echo '<li class="page-item"><a class="page-link" href="index.php?id_page='.$i.'">'.$i.'</a></li>';
}
?>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</ul>
</body>
</html>
![Nguyễn Anh Vũ [T2008A]](https://www.gravatar.com/avatar/8863d24ed74b396082becbc4db8331fd.jpg?s=80&d=mm&r=g)
Nguyễn Anh Vũ
2021-05-12 08:46:59
#product.php
<colgroup>
<col width="50" span="2">
<col width="500" span="1">
<col width=auto span="2">
<col width="auto" span="1">
</colgroup>
<!DOCTYPE html>
<html>
<head>
<title>News Page</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<!-- Popper JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<!-- Latest compiled JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<div class="card">
<div class="card-header bg-info text-light text-uppercase">
Tesla-Roadster 2020
</div>
</div>
<input type="text" class="form-control" style="margin-top: 10px; margin-bottom: 10px; float: right;" placeholder="Tìm kiếm ..." onkeyup="funcSeaching(this)">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>No</th>
<th>Thumbnail</th>
<th>Title</th>
<th>Price</th>
<th>Updated at</th>
</tr>
</thead>
<tbody id="result">
<?php
$limit = 10;
$page = 1;
function executeResult($sql) {
$con = mysqli_connect('localhost', 'root', '', 'ddb0512');
$result = mysqli_query($con, $sql);
$data = [];
while ($row = mysqli_fetch_array($result, 1)) {
$data[] = $row;
}
mysqli_close($con);
return $data;
}
function executeSingleResult($sql) {
$con = mysqli_connect('localhost', 'root', '', 'ddb0512');
$result = mysqli_query($con, $sql);
$row = mysqli_fetch_array($result, 1);
mysqli_close($con);
return $row;
}
if(isset($_GET['page'])){
$page = $_GET['page'];
}
if($page <= 0 ){
$page = 1;
}
$firstIndex = ($page-1)*$limit;
$sql = 'select * from product where 1 limit '.$firstIndex.','.$limit;
$list = executeResult($sql);
$db = 'select count(id) as total from product';
$countRe = executeSingleResult($db);
$countPage = $countRe['total'];
$number = ceil($countPage/$limit);
foreach ($list as $row) {
echo '<tr>
<th>'.( ++$firstIndex).'</th>
<th><img src="'.$row['thumbnail'].'" style="width: 10%"></th>
<th>'.$row['title'].'</th>
<th>'.$row['price'].'</th>
<th>'.$row['updated_at'].'</th>
</tr>';
}
?>
</tbody>
</table>
<ul class="pagination">
<li class="page-item"><a class="page-link" href="#">Previous</a></li>
<?php
for($i=0; $i < $number ; $i++){
echo '<li class="page-item"><a class="page-link" href="?page='.($i+1).'">'.($i+1).'</a></li>';
};
?>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</ul>
</div>
</body>
</html>
![Nguyễn đình quân [T2008A]](https://www.gravatar.com/avatar/46aca6afcfe99fdb28357afb847d8a0c.jpg?s=80&d=mm&r=g)
Nguyễn đình quân
2021-05-12 08:43:39
<?php
const HOST = 'localhost';
const USERNAME = 'root';
const PASSWORD = '';
const DATABASE = 'students';
<?php
require_once ('database.php');
if (!empty($_POST)) {
$Thumbnail = $_POST['Thumbnail'];
$Title = $_POST['Title'];
$Price = $_POST['Price'];
$UpdateAt = $_POST['Update At'];
if ($name != "" && $address != "") {
$query = 'insert into students(Thumbnail,Title , Price, Update At) values("'.$Thumbnail.'", "'.$Title.'", "'.$Price.'", "'.$UpdateAt.'",)';
query($query);
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>DB0512</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container-fluid">
<div class="panel panel-primary">
<div class="panel-heading">
Student List
</div>
<div class="panel-body">
<table class="table table-hover table-bordered">
<tr>
<th>No</th>
<th>Thumbnail</th>
<th>Title</th>
<th>Price</th>
<th>Update At</th>
</tr>
<?php
$query = 'select * from students';
$result = select($query);
for ($i = 0; $i < count($result); $i++) {
echo '<tr>
<td>'.($i+1).'</td>
<td>'.$result[$i]['Thumbnail'].'</td>
<td>'.$result[$i]['Title'].'</td>
<td>'.$result[$i]['Price'].'</td>
<td>'.$result[$i]['Update At'].'</td>
</tr>';
}
?>
</table>
</div>
</div>
</div>
<div class="container-fluid">
<div class="panel panel-primary">
<div class="panel-body">
<form method="post">
<div class="form-group">
<label> Name</label>
<input type="text" name="name" class="form-control">
</div>
<div class="form-group">
<label>Price</label>
<input type="text" name="Price" class="form-control">
</div>
<div class="form-group">
<label>Title</label>
<input type="text" name="Title" class="form-control">
</div>
<button class="btn btn-success">Register</button>
</form>
</div>
</div>
</div>
</body>
</html>
#database.php
<?php
require_once ('config.php');
function query($query) {
//tao ket noi toi database
$conn = new mysqli(HOST, USERNAME, PASSWORD, DATABASE);
mysqli_set_charset($conn, 'utf-8');
//thuc hien cac cau truy van
//insert, update, delete
// $conn->query($query);
mysqli_query($conn, $query);
//dong ket noi
$conn->close();
}
function select($query) {
//tao ket noi toi database
$conn = new mysqli('localhost', 'root', '', 'students');
mysqli_set_charset($conn, 'utf-8');
//thuc hien cac cau truy van
//select
// $cusor = $conn->query($query);
$cusor = mysqli_query($conn, $query);
$result = [];
while ($row = mysqli_fetch_array($cusor, 1)) {
$result[] = $row;
}
//dong ket noi
$conn->close();
return $result;
}
<!DOCTYPE html>
<html lang="en">
<head>
<title>DB5012</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</head>
<body>
<nav class="navbar navbar-expand-sm bg-dark navbar-dark">
<form class="form-inline" action="/action_page.php">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">@</span>
</div>
<input type="text" class="form-control" placeholder="Enter to seach" >
</div>
</form>
</nav>
<body>
<style>
table {
width:100%;
}
table, th, td {
border: 1px solid black;
border-collapse: collapse;
}
th, td {
padding: 5px;
text-align: left;
}
table#table1 tr:nth-child(even) {
background-color: #eee;
}
table#table1 tr:nth-child(odd) {
background-color:#fff;
}
table#table1 th {
background-color: black;
color: white;
}
</style>
</head>
<body>
<table>
<tr>
<th>No</th>
<th>Thumbnail</th>
<th>Title</th>
<th>Price</th>
<th>Update At</th>
</tr>
<tr>
<td>1</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>2</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>3</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>4</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>5</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>6</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>7</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>8</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>9</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>10</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>11</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>12</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>13</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>14</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>15</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>16</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>17</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>18</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>19</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>20</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>21</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>22</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>23</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>24</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>25</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>26</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>27</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>28</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>29</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>30</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>31</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>32</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>33</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>34</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
<tr>
<td>35</td>
<td><img src="https://tse4.mm.bing.net/th?id=OIP.-35SVsQtw2FfpOaepIFw-wHaEK&pid=Api&P=0&w=281&h=159"></td>
<td>Focus2movel Icelandic cars market - Facts & Data 2020</td>
<td>$20.000</td>
<td>12/05/2021</td>
</tr>
</table>
</body>
</html>
</body>
</div>
</body>
</html>
![Nguyễn Tiến Đạt [T2008A]](https://www.gravatar.com/avatar/b5819cd0adc95c727c7ad0c2bcf6098b.jpg?s=80&d=mm&r=g)
Nguyễn Tiến Đạt
2021-05-12 08:42:46
Mặc dù em nộp muộn nhưng chất lượng đáp ứng full ạ
#config.php
<?php
define('HOST', 'localhost');
define('USERNAME', 'root');
define('PASSWORD', '');
define('DATABASE', 'db0512');
#database-helper.php
<?php
require_once ('config.php');
function removeSpecialCharacter($str) {
$str = str_replace('\\', '\\\\', $str);
$str = str_replace('\'', '\\\'', $str);
return $str;
}
function getPOST($key) {
$value = '';
if (isset($_POST[$key])) {
$value = $_POST[$key];
}
return removeSpecialCharacter($value);
}
function getGET($key) {
$value = '';
if (isset($_GET[$key])) {
$value = $_GET[$key];
}
return removeSpecialCharacter($value);
}
#form-main.php
<?php
$searchTitle = "";
if(!empty($_POST)){
$searchTitle = getPOST('searchTitle');
if(!empty($searchTitle)){
header('Location: main.php?searchTitle='.$searchTitle);
}else{
header('Location: main.php');
}
}
#main.php
<?php
require_once('database-helper.php');
require_once('form-main.php');
$searchTitle = getGET('searchTitle');
if (!empty($searchTitle)) {
$conn = mysqli_connect(HOST, USERNAME, PASSWORD, DATABASE);
$result = mysqli_query($conn, "select count(id) as total from product where title like '%$searchTitle%'");
$row = mysqli_fetch_assoc($result);
$total_records = $row['total'];
$current_page = isset($_GET['page']) ? $_GET['page'] : 1;
$limit = 10;
$total_page = ceil($total_records / $limit);
if ($current_page > $total_page) {
$current_page = $total_page;
} else if ($current_page < 1) {
$current_page = 1;
}
$start = ($current_page - 1) * $limit;
$result = mysqli_query($conn, "SELECT * FROM product where title like '%$searchTitle%' LIMIT $start, $limit");
} else {
$conn = mysqli_connect(HOST, USERNAME, PASSWORD, DATABASE);
$result = mysqli_query($conn, 'select count(id) as total from product');
$row = mysqli_fetch_assoc($result);
$total_records = $row['total'];
$current_page = isset($_GET['page']) ? $_GET['page'] : 1;
$limit = 10;
$total_page = ceil($total_records / $limit);
if ($current_page > $total_page) {
$current_page = $total_page;
} else if ($current_page < 1) {
$current_page = 1;
}
$start = ($current_page - 1) * $limit;
$result = mysqli_query($conn, "SELECT * FROM product LIMIT $start, $limit");
}
?>
<!doctype html>
<html lang="en">
<head>
<title>Product List</title>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<!-- Popper JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<!-- Latest compiled JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="form-group has-search" style="width: 400px;text-align:right;margin-left: auto;margin-right: 20px;margin-top:20px">
<form method="post">
<input name="searchTitle" type="text" class="form-control" placeholder="Enter to search...">
</form>
</div>
<div class="container">
<table class="table table-bordered">
<thead>
<tr>
<td>No</td>
<td>Thumbnail</td>
<td>Title</td>
<td>Price</td>
<td>Udpated At</td>
</tr>
</thead>
<tbody>
<?php
$count = getGET('count');
while ($row = mysqli_fetch_assoc($result)) {
if ($count < 9) {
echo '<tr>
<td>0' . (++$count) . '</td>
<td><img src="' . $row['thumbnail'] . '" style="max-width:160px"></td>
<td>' . $row['title'] . '</td>
<td>' . $row['price'] . '</td>
<td>' . $row['updated_at'] . '</td>
</tr>';
} else {
echo '<tr>
<td>' . (++$count) . '</td>
<td><img src="' . $row['thumbnail'] . '" style="max-width:160px"></td>
<td>' . $row['title'] . '</td>
<td>' . $row['price'] . '</td>
<td>' . $row['updated_at'] . '</td>
</tr>';
}
}
?>
</tbody>
</table>
<div class="pagination" style="margin-bottom: 20px;">
<?php
// PHẦN HIỂN THỊ PHÂN TRANG
// BƯỚC 7: HIỂN THỊ PHÂN TRANG
$count1 = getGET('count');
// nếu current_page > 1 và total_page > 1 mới hiển thị nút prev
if (!empty($count1)) {
if ($current_page > 1 && $total_page > 1) {
$count1 -= 10;
echo '<a href="main.php?page=' . ($current_page - 1) . '&count=' . $count1 . '">Prev</a> | ';
}
}
// Lặp khoảng giữa
$dem = 0;
for ($i = 1; $i <= $total_page; $i++) {
// Nếu là trang hiện tại thì hiển thị thẻ span
// ngược lại hiển thị thẻ a
if ($i == $current_page) {
echo '<span>' . $i . '</span> | ';
} else {
echo '<a href="main.php?page=' . $i . '&count=' . $dem . '">' . $i . '</a> | ';
}
$dem += 10;
}
$count2 = getGET('count');
// nếu current_page < $total_page và total_page > 1 mới hiển thị nút prev
if (!empty($count2)) {
if ($current_page < $total_page && $total_page > 1) {
$count2 += 10;
echo '<a href="main.php?page=' . ($current_page + 1) . '&count=' . $count2 . '">Next</a> | ';
}
}
?>
</div>
</div>
<!-- Optional JavaScript -->
<script>
</script>
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<!-- <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> -->
</body>
</html>
![Vũ Đình Khôi [community,T2008A]](https://www.gravatar.com/avatar/522a3ab049e7409705e97b96dbbc327b.jpg?s=80&d=mm&r=g)
Vũ Đình Khôi
2021-05-12 08:42:37
<!DOCTYPE html>
<html>
<head>
<title>News Page</title>
<meta charset="utf-8">
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<!-- Popper JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<!-- Latest compiled JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<div>
<nav class="navbar navbar-expand-sm bg-dark navbar-dark">
<form class="form-inline" action="/action_page.php">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">@</span>
</div>
<input type="text" class="form-control" placeholder="Enter to seach" >
</div>
</form>
</nav>
</div>
<div class="container">
<div class="card">
<div class="card-header bg-info text-light text-uppercase">
Ô Tô
</div>
</div>
<input type="text" class="form-control" style="margin-top: 10px; margin-bottom: 10px; float: right;" placeholder="Tìm kiếm ..." onkeyup="funcSeaching(this)">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>No</th>
<th>Thumbnail</th>
<th>Title</th>
<th>Price</th>
<th>Updated at</th>
</tr>
</thead>
<tbody id="result">
<?php
$con = mysqli_connect('localhost', 'root', '', 'DB0512');
$sql = 'select * from product';
$result = mysqli_query($con, $sql);
$count = 0;
while ($row = mysqli_fetch_array($result, 1)) {
echo '<tr>
<th>'.(++$count).'</th>
<th><img src="'.$row['thumbnail'].'" style="width: 20%"></th>
<th>'.$row['title'].'</th>
<th>'.$row['price'].'</th>
<th>'.$row['updated_at'].'</th>
</tr>';
}
//Dang ket noi.
mysqli_close($con);
?>
</tbody>
</table>
</div>
</body>
</html>
![Nguyên Phấn Đông [T2008A]](https://www.gravatar.com/avatar/c9c4f8f79ce35b9224637b6cc5fbe5c4.jpg?s=80&d=mm&r=g)
Nguyên Phấn Đông
2021-05-12 08:39:55
#product.php
<!DOCTYPE html>
<html>
<head>
<title>News Page</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<!-- Popper JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<!-- Latest compiled JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<div class="card">
<div class="card-header bg-info text-light text-uppercase">
Ô Tô
</div>
</div>
<input type="text" class="form-control" style="margin-top: 10px; margin-bottom: 10px; float: right;" placeholder="Tìm kiếm ..." onkeyup="funcSeaching(this)">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>No</th>
<th>Thumbnail</th>
<th>Title</th>
<th>Price</th>
<th>Updated at</th>
</tr>
</thead>
<colgroup>
<col width="50" span="2">
<col width="500" span="1">
<col width=auto span="2">
<col width="auto" span="1">
</colgroup>
<tbody id="result">
<?php
$limit = 10;
$page = 1;
function executeResult($sql) {
//save data into table
// open connection to database
$con = mysqli_connect('localhost', 'root', '', 'DB0512');
//insert, update, delete
$result = mysqli_query($con, $sql);
$data = [];
while ($row = mysqli_fetch_array($result, 1)) {
$data[] = $row;
}
//close connection
mysqli_close($con);
return $data;
}
function executeSingleResult($sql) {
//save data into table
// open connection to database
$con = mysqli_connect('localhost', 'root', '', 'DB0512');
//insert, update, delete
$result = mysqli_query($con, $sql);
$row = mysqli_fetch_array($result, 1);
//close connection
mysqli_close($con);
return $row;
}
if(isset($_GET['page'])){
$page = $_GET['page'];
}
if($page <= 0 ){
$page = 1;
}
$firstIndex = ($page-1)*$limit;
$sql = 'select * from product where 1 limit '.$firstIndex.','.$limit;
$list = executeResult($sql);
$db = 'select count(id) as total from product';
$countRe = executeSingleResult($db);
$countPage = $countRe['total'];
$number = ceil($countPage/$limit);
foreach ($list as $row) {
echo '<tr>
<th>'.( ++$firstIndex).'</th>
<th><img src="'.$row['thumbnail'].'" style="width: 100%"></th>
<th>'.$row['title'].'</th>
<th>'.$row['price'].'</th>
<th>'.$row['updated_at'].'</th>
</tr>';
}
?>
</tbody>
</table>
<ul class="pagination">
<li class="page-item"><a class="page-link" href="#">Previous</a></li>
<?php
for($i=0; $i < $number ; $i++){
echo '<li class="page-item"><a class="page-link" href="?page='.($i+1).'">'.($i+1).'</a></li>';
};
?>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</ul>
</div>
</body>
</html>