Bài 32: Xây dựng chức năng tìm kiếm với lệnh Like trong PHP

Ngày đăng: 2024-04-14 07:09:18

Mục lục:

       1. Xây dựng cơ sở dữ liệu để tìm kiếm

       2. Xây dựng form để tìm kiếm

       3. Yêu cầu đặt ra

       4. Xử lý tìm kiếm với lệnh Like

 

1. Xây dựng Cơ sở dữ liệu để tìm kiếm

Trước tiên bạn cần tạo một database tên là basic, sau đó sử dụng đoạn code dưới đây để tạo table và thêm một số dòng dữ liệu.

/*

SQLyog Ultimate - MySQL GUI v8.21

MySQL - 5.5.20 : Database - basic

*********************************************************************

*/

 

 

/*!40101 SET NAMES utf8 */;

 

/*!40101 SET SQL_MODE=''*/;

 

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

CREATE DATABASE /*!32312 IF NOT EXISTS*/`basic` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;

 

USE `basic`;

 

/*Table structure for table `users` */

 

DROP TABLE IF EXISTS `users`;

 

CREATE TABLE `users` (

  `user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,

  `username` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,

  `password` char(32) COLLATE utf8_unicode_ci DEFAULT NULL,

  `email` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,

  `address` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,

  PRIMARY KEY (`user_id`)

) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

 

/*Data for the table `users` */

 

insert  into `users`(`user_id`,`username`,`password`,`email`,`address`) values (1,'kaito','456','kaito@freetuts.net','House USA'),(2,'thehaftheart','456','thehaftheart@freetuts.net','House USA'),(3,'superkaito','456','superkaito@gmail.com','House Viet Nam'),(4,'kaitosolo','1789','kaito@yahô.com','abc/fdc'),(5,'van canh','798','vancanh@freetuts.net','Bien hoa'),(6,'yongc','789','yongc@freetuts.net','Bien Hoa'),(7,'haftheart789','789','haftheart789@yahoo.com','Ha tinh'),(8,'yongc456','56465','yongc789@gmail.com','Bien Hoa 2'),(9,'van canh456','564564','vancanh@gmail.com','Bien Hoa 3'),(10,'kaitocode','87897','kaitocode@yahoo.com','TPHCM');

 

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

2. Xây dựng Form tìm kiếm

Bạn tạo file search.php và xây dựng cấu trúc HTML cho form tìm kiếm như sau:

  • Gồm một input và một nút submit là đủ cho bài học này rồi, do chúng ta phải truyền đối số vào url nên chúng ta đặt method của form bằng phương thức GET.
  • Action của Form tôi trỏ đến file hiện tại luôn nên tất cả code PHP xử lý tìm kiếm tôi sẽ đặt trong file này luôn.

 

<html>

    <head>

        <title>Demo Search Basic by titoe.net</title>

    </head>

    <body>

        <div align="center">

            <form action="search.php" method="get">

                Search: <input type="text" name="search" />

                <input type="submit" name="ok" value="search" />

            </form>

        </div>

        <?php

         

        // Phần code PHP xử lý tìm kiếm

         

        ?>

    </body>

</html>

Trong đoạn code trên mình có khai báo một vị trí dùng để code PHP, như vậy ta sẽ code PHP xử lý tìm kiếm tại vị trí đó. Khâu chuẩn bị xem như hoàn tất, bây giờ đến phần sử dụng php kết nối với mysql để xử và show dữ liệu từ database ra ngoài.

3. Yêu cầu đặt ra

Trước tiên chúng ta cần kiểm tra người dùng có nhấn vào button tìm kiếm hay không? Bắt buộc chúng ta phải thực hiện bước này tại vì khi submit mới cần xử lý truy vấn database để lấy thông tin tìm kiếm.

Bình thường việc check submit form ta sẽ dùng biến $_POST nhưng vì chúng ta sử dụng phương thức GET nên ta phải sử dụng biến $_GET để kiểm tra. Nhưng trong bài này tôi sẽ thay thế $_GET bằng một biến môi trường khác chính là $_REQUEST có tác dụng là nhận request từ cả 2 phương thức trên.

if (isset($_REQUEST['ok'])) {

    $search = addslashes($_GET['search']);

    if (empty($search)) {

        echo "Yeu cau nhap du lieu vao o trong";

    } else {

        // Phan dung vong lap while show du lieu

    }

}


$_REQUEST['ok'] chính là tên của button tìm kiếm. Như vậy để kiểm tra người dùng click hay chưa thì ta chỉ cần kiểm tra tên của button đó có tồn tại hay không.

4. Xử lý tìm kiếm với lệnh Like

Mình sẽ đưa ra full code luôn nhé vì trong code mình có giải thích rất kỹ rồi.

<html>

    <head>

        <title>Demo Search Basic by titoe.net</title>

    </head>

    <body>

        <div align="center">

            <form action="search.php" method="get">

                Search: <input type="text" name="search" />

                <input type="submit" name="ok" value="search" />

            </form>

        </div>

        <?php

        // Nếu người dùng submit form thì thực hiện

        if (isset($_REQUEST['ok']))

        {

            // Gán hàm addslashes để chống sql injection

            $search = addslashes($_GET['search']);

 

            // Nếu $search rỗng thì báo lỗi, tức là người dùng chưa nhập liệu mà đã nhấn submit.

            if (empty($search)) {

                echo "Yeu cau nhap du lieu vao o trong";

            }

            else

            {

                // Dùng câu lênh like trong sql và sứ dụng toán tử % của php để tìm kiếm dữ liệu chính xác hơn.

                $query = "select * from users where username like '%$search%'";

 

                // Kết nối sql

                mysql_connect("localhost", "root", "vertrigo", "basic");

 

                // Thực thi câu truy vấn

                $sql = mysql_query($query);

 

                // Đếm số đong trả về trong sql.

                $num = mysql_num_rows($sql);

 

                // Nếu có kết quả thì hiển thị, ngược lại thì thông báo không tìm thấy kết quả

                if ($num > 0 && $search != "")

                {

                    // Dùng $num để đếm số dòng trả về.

                    echo "$num ket qua tra ve voi tu khoa <b>$search</b>";

 

                    // Vòng lặp while & mysql_fetch_assoc dùng để lấy toàn bộ dữ liệu có trong table và trả về dữ liệu ở dạng array.

                    echo '<table border="1" cellspacing="0" cellpadding="10">';

                    while ($row = mysql_fetch_assoc($sql)) {

                        echo '<tr>';

                            echo "<td>{$row['user_id']}</td>";

                            echo "<td>{$row['username']}</td>";

                            echo "<td>{$row['password']}</td>";

                            echo "<td>{$row['email']}</td>";

                            echo "<td>{$row['address']}</td>";

                        echo '</tr>';

                    }

                    echo '</table>';

                }

                else {

                    echo "Khong tim thay ket qua!";

                }

            }

        }

        ?>  

    </body>

</html>

 

Về bài trước...

                                 Bài tiếp theo...

 

 


Tài liệu lập trình PHP

Bài viết trong cùng chuyên mục

Góc games giải trí



Cờ caro


Butterfly


Lật hình (luyện trí nhớ)

Cờ tướng ONLINE

Xếp hình

Ghép hình

15_PUZZLE

Kill ghosts

Banchim

Planet Defense

Tower game

Tower game

Plapy Bird (NH.Đông)

Vượt chướng ngại vật



0379136392

Thông tin liên hệ: Lê Văn Thuyên - ĐT: 0379136392 ; Gmail: lethuyen0379136392@gmail.com

Comment

 +   Lê Văn Thuyên-0379136392:Cảm ơn quý vị và các bạn đã vào Website của Lê Thuyên! Lê thuyên rất mong nhận được sự góp ý của quý vị và các bạn cho sự phát triển của website này. Xin chân thành cảm ơn!

Trả lời

 *   Dũng Trung-090567448:Lê Văn Thuyên0379136392--->Ok.Anh!

Trả lời

 *   Bé Nguyễn-benguyen@gmail,com:Lê Văn Thuyên0379136392--->Good job!

Trả lời

 +   -:

Trả lời

 +   -:

Trả lời

12789