Trong bài này tôi sẽ hướng dẫn các bạn cách xây dựng một chức năng tìm kiếm kì đơn giản, đây được xem là một chức năng mà đa số website nào cũng cần phải có. Bài viết này sẽ hướng dẫn các bạn cách thao tác với database dùng để truy vấn và lọc dữ liệu ở mức độ đơn giản nhất. Để có thể tiếp thu tốt các bạn cần phải có một số kiến thức cố định về php như jquery, php căn bản…vv. Tất cả kiến thức tôi vừa nêu ra nếu bạn nào chưa nắm vững có thể vào serie php căn bản để xem nhé.

Nội dung chính

  • 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. Cần phải hiểu trước khi làm bài
  • 4. Xử lý tìm kiếm với lệnh Like trong MySql
  • 5. Lời kết


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.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*
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,'mỉnhtham','456','minhtham@tinhoccuaem.com','House USA'),(2,'minhtham1','456','minhtham1@tinhoccuaem.com','House USA'),(3,'minhtham2','456','minhtham2@tinhoccuaem.com','House Viet Nam'),(4,'minhtham3','1789','minhtham3@tinhoccuaem.com','abc/fdc'),(5,'minhtham4','798','minhtham4@tinhoccuaem.com','Bien hoa'),(6,'mninhtham5','789','minhtham5@tinhoccuaem.com','Bien Hoa'),(7,'minhtham6','789','minhtham6@tinhoccuaem.com','Ha tinh'),(8,'mnihtham7','56465','minhtham7@tinhoccuaem.com','Bien Hoa 2'),(9,'minhtham8','564564','minhtham8@tinhoccuaem.com','Bien Hoa 3'),(10,'minhtham9','87897','minhtham9@tinhoccuaem.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.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<html>
    <head>
        <title>Demo Search Basic by tinhoccuaem.com</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. Cần phải hiểu trước khi làm bài

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.

 

1
2
3
4
5
6
7
8
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 trong MySql

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.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<html>
    <head>
        <title>Demo Search Basic by tinhoccuaem.com</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>

 

Như vậy là xong rồi đấy 🙂

 

5. Lời kết

Hy vọng qua bài viết đơn giản này sẽ giúp các bạn có cái nhìn toàn diện hơn về cách xây dựng một chức năng tìm kiếm với lệnh LIKE trong php và MYSQL, từ đó đào sâu và phát triển hơn nửa để có thể đáp ứng được một số yêu cầu tìm kiếm dữ liệu chuyên sâu hơn. Hẹn gặp các bạn ở các bài tiếp theo .

246 BÌNH LUẬN

  1. I don’t know if it’s just me or if everyone else encountering issues with your website.
    It looks like some of the text in your content are running off
    the screen. Can someone else please provide feedback and let
    me know if this is happening to them as well? This could be a problem with my
    internet browser because I’ve had this happen previously.
    Kudos

  2. Sweet blog! I found it while browsing on Yahoo News. Do you have any suggestions on how to get listed in Yahoo News? I ave been trying for a while but I never seem to get there! Cheers

  3. You can definitely see your expertise within the work you write. The sector hopes for even more passionate writers like you who aren at afraid to say how they believe. All the time follow your heart.

  4. This is a good tip particularly to those new to the blogosphere. Short but very accurate info Thank you for sharing this one. A must read article!

  5. Have you ever thought about publishing an e-book or guest authoring on other websites?

    I have a blog based upon on the same topics you discuss and would love to have you share some stories/information. I
    know my visitors would enjoy your work. If you’re even remotely interested, feel free to send me
    an e-mail.

  6. Websites we recommend Wow, superb blog layout! How long have you been blogging for? you make blogging look easy. The overall look of your site is excellent, as well as the content!

  7. Keep up the wonderful work , I read few blog posts on this web site and I think that your blog is very interesting and holds circles of excellent info.

  8. Usually I do not learn post on blogs, however I wish to say that this write-up very forced me to check out and do it! Your writing style has been surprised me. Thanks, quite nice post.

  9. Great items from you, man. I have be mindful your stuff previous to
    and you’re simply extremely wonderful. I actually like what you have got right here, really like what you’re
    stating and the way in which through which you assert it.
    You’re making it enjoyable and you continue to take care of to keep it sensible.
    I can not wait to read far more from you. That is really a wonderful website.

  10. La combinación puede disminuir la presión arterial a niveles peligrosos. Las bajas concentraciones de testosterona, por ejemplo, pueden provocar impotencia. Consiste en dos cilindros que se colocan en el interior del cuerpo cavernoso.

  11. Hey! This is my first visit to your blog! We
    are a collection of volunteers and starting a new initiative in a community
    in the same niche. Your blog provided us valuable information to
    work on. You have done a outstanding job!

  12. Fine way of explaining, and pleasant post to take data on the
    topic of my presentation focus, which i am going to convey in institution of
    higher education.

  13. Thank you, I have just been searching for info about this subject for ages and yours is the greatest I have discovered so far. But, what about the conclusion? Are you sure about the source?

  14. It’s a shame you don’t have a donate button! I’d without a doubt
    donate to this excellent blog! I suppose for now i’ll settle for book-marking and adding your
    RSS feed to my Google account. I look forward to fresh updates and will talk about
    this site with my Facebook group. Chat soon!

  15. Woman of Alien Best get the job done you have got performed, this website is admittedly interesting with wonderful facts. Time is God as way of retaining every thing from taking place at once.

  16. You completed a number of first rate points near. I appeared by the internet for the problem and found the majority folks will go along with along with your website.

  17. My brother suggested I might like this website. He was totally right. This post actually made my day. You can not imagine just how much time I had spent for this info! Thanks!

  18. Wow! This could be one particular of the most useful blogs We ave ever arrive across on this subject. Basically Fantastic. I am also a specialist in this topic therefore I can understand your effort.

  19. You obtained a really useful blog I ave been here reading for about an hour. I am a newbie as well as your achievement is really considerably an inspiration for me.

  20. This blog is obviously entertaining additionally factual. I have picked a bunch of interesting tips out of this amazing blog. I ad love to return again soon. Thanks a bunch!

  21. Wow, fantastic weblog structure! How long have you been running a blog for? you made blogging glance easy. The entire look of your website is excellent, let alone the content!

  22. What the amazing post you ave made. I merely stopped into inform you I truly enjoyed the actual read and shall be dropping by from time to time from right now on.

  23. I have been exploring for a bit for any high-quality articles or blog posts on this sort of space .
    Exploring in Yahoo I finally stumbled upon this web site.

    Reading this information So i am glad to exhibit that
    I have a very good uncanny feeling I discovered exactly what I needed.
    I most indisputably will make sure to do not put out of your
    mind this website and provides it a glance regularly.

  24. Wonderful blog! I found it while searching on Yahoo News.
    Do you have any tips on how to get listed in Yahoo News?
    I’ve been trying for a while but I never seem to get there!

    Thanks

THOÁT KHỎI BÌNH LUẬN

Please enter your comment!
Please enter your name here