Devdit
 

PHP ค้นหา และแบ่งหน้า MySQL MariaDB

767

PHP ค้นหา และแบ่งหน้า MySQL MariaDB บทความนี้สอนเขียนโค้ดแสดงข้อมูลจากฐานข้อมูล พร้อมคุณสมบัติค้นหาด้วยคำสั่ง LIKE และแบ่งหน้าด้วยคำสั่ง LIMIT ฐานข้อมูล MySQL MariaDB สามารถเขียนโปรแกรมได้ดังนี้

 

ตัวอย่าง คำสั่ง SQL สร้างตารางชื่อ words พร้อมข้อมูล

CREATE TABLE `words` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4
INSERT INTO
words
VALUES
( NULL, 'Java' ),
( NULL, 'SQL' ),
( NULL, 'MySQL' ),
( NULL, 'PHP' ),
( NULL, 'HTML' ),
( NULL, 'MS SQL Server' )

 

ตัวอย่าง PHP ค้นหา และแบ่งหน้า MySQL MariaDB

<form action="<?=$_SERVER['PHP_SELF'];?>" method="POST">
  ค้นหา <input type="text" name="search"> <input type="submit" value="ค้นหา">
</form>
<?php
  $pre_page = 2;
  isset( $_REQUEST['search'] ) ? $search = $_REQUEST['search'] : $search = "";
  isset( $_GET['page'] ) ? $page = $_GET['page'] : $page = 1;

  echo "<h4>ข้อมูลหน้าที่ ".$page."</h4>";

  $c = mysqli_connect("localhost", "root", "", "example");
  mysqli_query( $c, "SET NAMES UTF8" );

  $sql = " SELECT * FROM words ";
  if( !empty( $search ) ) {
    $sql .= " WHERE ( name LIKE '%{$search}%' ) ";
  }

  $q = mysqli_query( $c, $sql );
  $num = mysqli_num_rows( $q );
  $page_break = ceil( $num/$pre_page );

  $start_page = ( $page * $pre_page ) - $pre_page;
  $sql .= " LIMIT {$start_page}, {$pre_page} ";
  $q = mysqli_query( $c, $sql );

  while( $f = mysqli_fetch_assoc( $q ) ) {
    echo $f['name']."<br/>";
  }

  if( $page_break > 1 ) {
    echo "<div style='margin-top:1rem;'>หน้าที่ ";
    for( $i=1; $i<=$page_break; $i++ ) {
      echo "<a href='".$_SERVER['PHP_SELF']."?page={$i}&search={$search}'>".$i."</a> ";
    }
    echo "</div>";
  }

  mysqli_close( $c );
?>

คำอธิบาย

PHP ค้นหา และแบ่งหน้า MySQL MariaDB มีรายละเอียดคำสั่งที่สำคัญดังนี้

1. สร้างฟอร์มสำหรับค้นหาข้อมูล ตัวแปรชื่อ search ด้วยภาษา HTML

2. กรณีมีการค้นหา เพิ่มคำสั่ง WHERE ร่วมกับ LIKE ใน SQL เพื่อค้นหาข้อมูลในตาราง words

3. นับจำนวนข้อมูลด้วย mysqli_num_rows และใช้คำสั่ง LIMIT เพื่อกำหนดการแสดงข้อมูลต่อ 1 หน้า

4. กรณีตัวแปร page_break มีค่ามากกว่า 1 แปลว่าต้องสร้างลิงก์เปลี่ยนหน้าให้ผู้ใช้งานที่หน้าเว็บไซต์

แก้ไข 1 ปีที่แล้ว
ชอบ
ลิ้งก์
แชร์
Devdit มีช่อง YouTube แล้ว
เราสร้างวิดีโอเกี่ยวกับเทคโนโลยี ทำตามง่ายๆ