บทความนี้แนะนำเกี่ยวกับการค้นหาข้อมูล MySQL แล้วดึงข้อมูลออกมาโชว์ไม่ต้อง Refresh โดยใช้เทคนิค AJAX ในการทำงาน โดยตัวอย่าง source code เป็นตัวอย่างแบบง่ายๆ สามารถเข้าใจได้ไม่ยาก และนำไปประยุกต์ใช้ได้ทันที
1. สร้างตารางและ import ข้อมูล
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 |
CREATE TABLE IF NOT EXISTS `items` ( `id` int(11) NOT NULL, `codename` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `itemname` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `detail` text COLLATE utf8_unicode_ci NOT NULL, `unit` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `price` decimal(10,2) NOT NULL, `img` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'noimage.jpg', `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `created_by` int(11) NOT NULL, `modified_by` int(11) NOT NULL, `status` tinyint(1) NOT NULL DEFAULT '1', `item_type_id` int(11) NOT NULL ) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; INSERT INTO `items` (`id`, `codename`, `itemname`, `detail`, `unit`, `price`, `img`, `created`, `modified`, `created_by`, `modified_by`, `status`, `item_type_id`) VALUES (2, 'CM00002', 'iPhone 6 Plus', '', 'เครื่อง', '25000.00', 'ecimage.jpg', '2015-03-30 18:38:43', '2015-03-30 18:38:43', 1, 1, 1, 6), (3, 'CM00003', 'Macbook Pro mini', '', 'เครื่อง', '45000.00', 'ecimage.jpg', '2015-03-30 18:39:53', '2015-03-30 18:39:53', 1, 1, 1, 1), (4, 'CM00004', 'Macbook Pro 4', '', 'เครื่อง', '60400.00', 'ecimage.jpg', '2015-03-30 18:40:33', '2015-03-30 18:40:33', 1, 1, 1, 1), (5, 'CM00005', 'กระดาษ A4', '', 'รีม', '120.00', 'ecimage.jpg', '2015-03-30 18:41:14', '2015-03-30 18:41:14', 1, 1, 1, 2), (6, 'CM00006', 'ปากกา', '', 'แท่ง', '5.00', 'ecimage.jpg', '2015-03-30 18:41:47', '2015-03-30 18:41:47', 1, 1, 1, 2), (7, 'CM00007', 'ดินสอ', '', 'แท่ง', '1.00', 'ecimage.jpg', '2015-03-30 18:42:28', '2015-03-30 18:42:28', 1, 1, 1, 2), (8, 'CM00008', 'ยางลบ', '', 'ก้อน', '2.00', 'ecimage.jpg', '2015-03-30 18:43:04', '2015-03-30 18:43:04', 1, 1, 1, 2), (9, 'CM00009', 'Epson T320 Printer Laser', '', 'เครื่อง', '2300.00', 'ecimage.jpg', '2015-03-30 18:45:48', '2015-03-30 18:45:48', 1, 1, 1, 1), (10, 'CM00001', 'Lenovo ThinkPad E203', '', 'เครื่อง', '21000.00', 'ecimage.jpg', '2015-03-30 18:47:38', '2015-03-30 18:47:38', 1, 1, 1, 1), (11, 'CM00010', 'Microsoft Lumia 1043', '', 'เครื่อง', '23000.00', 'ecimage.jpg', '2015-03-30 18:49:22', '2015-03-30 18:49:22', 1, 1, 1, 6); ALTER TABLE `items` ADD PRIMARY KEY (`id`); ALTER TABLE `items` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=12; |
2. สร้างไฟล์ connect.php แล้วนำ code ด้านล่างนี้ใส่ลงไป
1 2 3 4 5 6 7 8 9 |
<?php $host = 'localhost'; $user = 'root'; $password = ''; $database = 'equipment'; mysql_connect($host, $user, $password); mysql_select_db($database); mysql_query("SET NAMES UTF8"); |
3. สร้างไฟล์ index.php แล้วนำ code? ด้านล่างใส่
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 64 65 66 67 68 69 70 71 72 73 74 75 76 |
<!DOCTYPE html> <?php include 'connect.php'; ?> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>ค้นหาข้อมูล : itoffside.com</title> <link href="css/bootstrap.min.css" rel="stylesheet"> <link href="css/bootstrap-theme.min.css" rel="stylesheet"> <style> body{ margin-top: 20px; } .loading{ background-image: url("ajax-loader.gif"); background-repeat: no-repeat; display: none; height: 100px; width: 100px; } </style> </head> <body> <div class="container"> <div class="row"> <div class="col-md-12"> <form class="form-inline" name="searchform" id="searchform"> <div class="form-group"> <label for="textsearch" >ชื่อสินค้า</label> <input type="text" name="itemname" id="itemname" class="form-control" placeholder="ข้อความ คำค้นหา!" autocomplete="off"> </div> <button type="button" class="btn btn-primary" id="btnSearch"> <span class="glyphicon glyphicon-search"></span> ค้นหา </button> </form> </div> </div> <div class="loading"></div> <div class="row" id="list-data" style="margin-top: 10px;"> </div> </div> <script type="text/javascript" src="jquery-1.11.2.min.js"></script> <script type="text/javascript"> $(function () { $("#btnSearch").click(function () { $.ajax({ url: "search.php", type: "post", data: {itemname: $("#itemname").val()}, beforeSend: function () { $(".loading").show(); }, complete: function () { $(".loading").hide(); }, success: function (data) { $("#list-data").html(data); } }); }); $("#searchform").on("keyup keypress",function(e){ var code = e.keycode || e.which; if(code==13){ $("#btnSearch").click(); return false; } }); }); </script> </body> </html> |
การทำงานของไฟล์ index.php คือแสดงหน้าจอการกรอกคำค้นหา เมื่อมีการใส่ข้อมูลค้นหา ระบบจะดึกข้อมูลจาก serach.php มาแสดงโดยใช้เทคนิคของ AJAX นั้นเอง ซึ่งเมื่อมีการคลิกปุ่มค้นหา javascript ทำงานโดยเรียกไฟล์ search.php ซึ่งไฟล์ search.php เป็นไฟล์ที่ดึงข้อมูลจากฐานข้อมูล เมื่อไฟล์ search.php ดึงข้อมูลมาเรียบร้อยแล้วจะส่งค่าข้อมูลกลับไปให้กับไฟล์ index.php โดยใช้ $.ajax
4. สร้างไฟล์ search.php
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 |
<?php include 'connect.php'; $sql = "select * from items where itemname like '%{$_POST['itemname']}%'"; $query = mysql_query($sql); ?> <div class="col-md-12"> <table class="table table-bordered"> <thead> <tr> <th>ลำดับ</th> <th>รหัสสินค้า</th> <th>ชื่อสินค้า</th> <th>ราคาสินค้า</th> <th>หน่วยนับ</th> </tr> </thead> <tbody> <?php $i=1; while ($result = mysql_fetch_assoc($query)) { ?> <tr> <td><?php echo $i;?></td> <td><?php echo $result['codename'];?></td> <td><?php echo $result['itemname'];?></td> <td><?php echo number_format($result['price']);?></td> <td><?php echo $result['unit'];?></td> </tr> <?php $i++; } ?> </tbody> </table> </div> |
จบแล้วสำหรับบทความนี้หากผู้อ่านมีคำถามสามารถเขียนคำถามไว้ใต้ Comment เลยครับ
ถ้าอยาก search แบบ dropdown list + คำค้นด้วย ต้องแก้ไขอย่างไรค่ะ
javascript ตอน event คลิกเลือก dropdown list เสร็จแล้วให้ดึงข้อมูล ทำลักษณะคล้าย text box เลยครับ
ถ้าอยาก search แบบ radio button check + คำค้นด้วย ต้องแก้ไขเพิ่มเติม code อย่างไรบ้างครับ มีตัวอย่างมั้ยครับ
เพิ่ม radio และเพิ่มคำสั่งในการค้นหาในไฟล์ search.php ไปครับ
ทำแล้วแต่ไม่แสดงผลน่ะค่ะ มันทำในฟังก์ชัน sucess แต่ไม่ยอมโชว์ข้อมูลจากไฟล์ search.php
หมายถึงว่า ทำแล้วไม่แสดงข้อมูลเหรอครับ ลอง F12 เพื่อดีบั๊กดูครับ
ถ้าผมอยาก ให้ ค้นหาได้หลาย ฟิลด์ ต้องทำยังไง ครับ ??
select * from items where itemname1 like ‘%{$_POST[‘itemname’]}%’ or itemname2 like ‘%{$_POST[‘itemname’]}%’
select * from items where itemname1 like ‘%{$_POST[‘itemname’]}%’ or itemname2 like ‘%{$_POST[‘itemname’]}%’
ลองแล้วไม่ได้คับ กรณีต้องการค้นหาหลายๆ ฟิวส์คับ
ถ้าจะแบ่งหน้าต่อทำยังไงครับ
ดูเพิ่มเติมที่ลิงค์นี้ครับ
https://www.itoffside.com/php-pagination-example-using-mysqli-database/
รบกวนหน่อยครับ ถ้าจะคนหาหลายฟิลดิ์อ่ะครับ ต้องเขียนประมาณไหนอ่ะครับ
SELECT tbl_stud.stud_name, tbl_stud.stud_nickname, tbl_timestud.time_wrktime, tbl_timestud.time_outtime, tbl_stud.stud_id FROM tbl_stud, tbl_timestud WHERE tbl_timestud.stud_id=tbl_stud.stud_id and tbl_stud.stud_nickname or tbl_stud.stud_name like ‘%{$_POST[‘itemname’]}%’;
อันนี้ คือที่ผมเขียนไว้อ่ะครับ แต่มันแสดงข้อมูลซ้อนกันไปมา จาก 10 เพิ่มเป็น 30
เป็น ดาต้าเบส ของผมเองนะครับ
ใช้เงื่อนไข or ครับ ตาม ตย. ด้านล่าง
select * from tbname where name like '%{$data}%' or email like '%{$data}%' tel like '%{$data}%'
รบกวนอีกนิดนึงนะครับ ถ้าจะให้มันแสดงตารางข้อมูลไว้ก่อนกดค้นหาได้มั้ยครับ เพราะปกติ จะไม่มีตารางแสดงอยู่ก่อน ผมอยากให้ตารางมันแสดงอยู่ก่อนด้วยอ่ะครับ
รบกวนอีกนิดนึงนะครับ พอดีผมอยากจะให้แสดงตารางก่อนกดค้นกาด้วย ต้องทำยังไงอ่ะครับ
คุณต้อง เขียน
$.ajax({...});
ไว้ในฟังก์ชั่น แล้ว call function ตอนโหลด กับ ตอนคลิกปุ่ม ครับtext ตรวจสอบค่าว่างไม่ได้ครับ ไม่กรอกคำค้นหา กด submit มันแสดงข้อมูลทั้งหมดเลย แก้ยังไงให้ครับให้ text ไม่รับค่าว่าง
ถ้า search หลาย input ต้องทำยังไงอ่ะครับ ? ขอความกรุณาด้วยครับ!
Fatal error: Uncaught Error: Call to undefined function mysql_query() in C:\xampp\htdocs\databind\search.php:4 Stack trace: #0 {main} thrown in C:\xampp\htdocs\databind\search.php on line 4
แก้ยังไง
แสดงรายการมาแล้ว กดเลือกอย่างไรครับ
อย่างไรครับไม่เข้าใจ คำถาม
สามารถแสดงผลตาม “คำ” ที่ต้องการค้นหาได้แล้วครับ แต่หลังจากที่ผมค้นหาได้แล้ว ผมต้องการให้สามารถคลิกที่ข้อความชื่อของคำที่ค้นหาไปหาตามลิ้งที่เราต้องการได้ไหมอ่ะครับ ขอบคุณครับ
คุณต้องทำ คำค้น กับ ลิงค์ ให้มีความสัมพันธ์กันก่อนครับ ถึงจะทำได้
ขอบคุณครับ ราบรื่น ^^
search ตอนนี้ เปลี่ยนเป็น mysqli รันแล้ว error ครับ
ตอน query select ต้องเปลี่ยนฟังก์ชั่นด้วยครับ
รบกวนท่านชี้แนะเพิ่มเติม ครับ ลองทำแล้วครับ มือใหม่สด ๆ
รบกวนชี้แนะเพิ่มเติมครับ
รบกวนชีแนะ search.php แบบ Mysqli ทีครับ ขอบคุณครับ
ผมติดตรง connect.php บรรทัดที่ 7 อ่าครับ
ตรงหน้า
<?php
$host = 'localhost';
$user = 'root';
$password = '';
$database = 'equipment';
mysql_connect($host, $user, $password);
mysql_select_db($database);
mysql_query("SET NAMES UTF8");
เปลี่ยนมาใช้ฟังก์ชั่น mysqli ครับ