ตัวอย่างโค้ดต่อไปนี้ เป็นการประยุกต์เพิ่มเติม การใช้งาน jQuery UI Autocomplete
ร่วมกับฐานข้อมุล โดยเป็นเนื้อหาต่อ ดัดแปลงจาก
เริ่มต้นใช้งาน jquery ui autocomplete อย่างง่าย
โดยในตัวอย่างจะประกอบไปด้วยไฟล์ 2 ไฟล์คือ
autocomplete_test.php -- ไฟล์หลักสำหรับทดสอบ
get_suggest.php -- ไฟล์สำหรับติดต่อฐานข้อมูลและดึงรายการค้นหามาใช้งาน
ในที่นี้จะใช้ข้อมูล จากฐานข้อมูล รายชื่อจังหวัดในประเทศไทย (ภาษาไทย)
ตัวอย่าง
ข้อมูล ฐานข้อมูล สำหรับทดสอบ
--
-- Table structure for table `province_th`
--
CREATE TABLE `province_th` (
`province_id` varchar(255) NOT NULL default '',
`province_name` varchar(255) default NULL,
`province_region` varchar(255) default NULL,
PRIMARY KEY (`province_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- Dumping data for table `province_th`
--
INSERT INTO `province_th` VALUES ('1', 'กระบี่', '0');
INSERT INTO `province_th` VALUES ('2', 'กรุงเทพมหานคร', '0');
INSERT INTO `province_th` VALUES ('3', 'กาญจนบุรี', '0');
INSERT INTO `province_th` VALUES ('4', 'กาฬสินธุ์', '0');
INSERT INTO `province_th` VALUES ('5', 'กำแพงเพชร', '0');
INSERT INTO `province_th` VALUES ('6', 'ขอนแก่น', '0');
INSERT INTO `province_th` VALUES ('7', 'จันทบุรี', '0');
INSERT INTO `province_th` VALUES ('8', 'ฉะเชิงเทรา', '0');
INSERT INTO `province_th` VALUES ('9', 'ชลบุรี', '0');
INSERT INTO `province_th` VALUES ('10', 'ชัยนาท', '0');
INSERT INTO `province_th` VALUES ('11', 'ชัยภูมิ', '0');
INSERT INTO `province_th` VALUES ('12', 'ชุมพร', '0');
INSERT INTO `province_th` VALUES ('13', 'เชียงราย', '0');
INSERT INTO `province_th` VALUES ('14', 'เชียงใหม่', '0');
INSERT INTO `province_th` VALUES ('15', 'ตรัง', '0');
INSERT INTO `province_th` VALUES ('16', 'ตราด', '0');
INSERT INTO `province_th` VALUES ('17', 'ตาก', '0');
INSERT INTO `province_th` VALUES ('18', 'นครนายก', '0');
INSERT INTO `province_th` VALUES ('19', 'นครปฐม', '0');
INSERT INTO `province_th` VALUES ('20', 'นครพนม', '0');
INSERT INTO `province_th` VALUES ('21', 'นครราชสีมา', '0');
INSERT INTO `province_th` VALUES ('22', 'นครศรีธรรมราช', '0');
INSERT INTO `province_th` VALUES ('23', 'นครสวรรค์', '0');
INSERT INTO `province_th` VALUES ('24', 'นนทบุรี', '0');
INSERT INTO `province_th` VALUES ('25', 'นราธิวาส', '0');
INSERT INTO `province_th` VALUES ('26', 'น่าน', '0');
INSERT INTO `province_th` VALUES ('27', 'บุรีรัมย์', '0');
INSERT INTO `province_th` VALUES ('28', 'ปทุมธานี', '0');
INSERT INTO `province_th` VALUES ('29', 'ประจวบคีรีขันธ์', '0');
INSERT INTO `province_th` VALUES ('30', 'ปราจีนบุรี', '0');
INSERT INTO `province_th` VALUES ('31', 'ปัตตานี', '0');
INSERT INTO `province_th` VALUES ('32', 'พระนครศรีอยุธยา', '0');
INSERT INTO `province_th` VALUES ('33', 'พะเยา', '0');
INSERT INTO `province_th` VALUES ('34', 'พังงา', '0');
INSERT INTO `province_th` VALUES ('35', 'พัทลุง', '0');
INSERT INTO `province_th` VALUES ('36', 'พิจิตร', '0');
INSERT INTO `province_th` VALUES ('37', 'พิษณุโลก', '0');
INSERT INTO `province_th` VALUES ('38', 'เพชรบุรี', '0');
INSERT INTO `province_th` VALUES ('39', ' เพชรบูรณ์', '0');
INSERT INTO `province_th` VALUES ('40', 'แพร่', '0');
INSERT INTO `province_th` VALUES ('41', 'ภูเก็ต', '0');
INSERT INTO `province_th` VALUES ('42', 'มหาสารคาม', '0');
INSERT INTO `province_th` VALUES ('43', 'มุกดาหาร', '0');
INSERT INTO `province_th` VALUES ('44', 'แม่ฮ่องสอน', '0');
INSERT INTO `province_th` VALUES ('45', 'ยโสธร', '0');
INSERT INTO `province_th` VALUES ('46', 'ยะลา', '0');
INSERT INTO `province_th` VALUES ('47', 'ร้อยเอ็ด', '0');
INSERT INTO `province_th` VALUES ('48', 'ระนอง', '0');
INSERT INTO `province_th` VALUES ('49', 'ระยอง', '0');
INSERT INTO `province_th` VALUES ('50', 'ราชบุรี', '0');
INSERT INTO `province_th` VALUES ('51', 'ลพบุรี', '0');
INSERT INTO `province_th` VALUES ('52', 'ลำปาง', '0');
INSERT INTO `province_th` VALUES ('53', 'ลำพูน', '0');
INSERT INTO `province_th` VALUES ('54', 'เลย', '0');
INSERT INTO `province_th` VALUES ('55', 'ศรีสะเกษ', '0');
INSERT INTO `province_th` VALUES ('56', 'สกลนคร', '0');
INSERT INTO `province_th` VALUES ('57', 'สงขลา', '0');
INSERT INTO `province_th` VALUES ('58', 'สตูล', '0');
INSERT INTO `province_th` VALUES ('59', 'สมุทรปราการ', '0');
INSERT INTO `province_th` VALUES ('60', 'สมุทรสงคราม', '0');
INSERT INTO `province_th` VALUES ('61', 'สมุทรสาคร', '0');
INSERT INTO `province_th` VALUES ('62', 'สระแก้ว', '0');
INSERT INTO `province_th` VALUES ('63', 'สระบุรี', '0');
INSERT INTO `province_th` VALUES ('64', 'สิงห์บุรี', '0');
INSERT INTO `province_th` VALUES ('65', 'สุโขทัย', '0');
INSERT INTO `province_th` VALUES ('66', 'สุพรรณบุรี', '0');
INSERT INTO `province_th` VALUES ('67', 'สุราษฎร์ธานี', '0');
INSERT INTO `province_th` VALUES ('68', 'สุรินทร์', '0');
INSERT INTO `province_th` VALUES ('69', 'หนองคาย', '0');
INSERT INTO `province_th` VALUES ('70', 'หนองบัวลำภู', '0');
INSERT INTO `province_th` VALUES ('71', 'อ่างทอง', '0');
INSERT INTO `province_th` VALUES ('72', 'อำนาจเจริญ', '0');
INSERT INTO `province_th` VALUES ('73', 'อุดรธานี', '0');
INSERT INTO `province_th` VALUES ('74', 'อุตรดิตถ์', '0');
INSERT INTO `province_th` VALUES ('75', 'อุทัยธานี', '0');
INSERT INTO `province_th` VALUES ('76', 'อุบลราชธานี', '0');
โค้ดไฟล์ autocomplete_test.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link type="text/css" rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/themes/pepper-grinder/jquery-ui.css" />
<style type="text/css">
body {
font-family:tahoma, "Microsoft Sans Serif", sans-serif, Verdana;
font-size:12px;
}
#input_q{
width:150px;
}
/* css ส่วนของรายการที่แสดง */
.ui-autocomplete {
padding-right: 5px;
max-height:200px !important;
overflow: auto !important;
}
/* css ส่วนปุ่มคลิกเลือกแสดงรายการทั้งหมด*/
.showAll_btn{
position: relative;
top: -2px;
border:0px solid;
font-size: 10px;
height: 23px;
width: 25px;
}
</style>
</head>
<body>
<div style="margin:auto;width:80%;">
<br><br>
<form id="form001" name="form001" method="post" action="">
<div>Tags:
<input name="input_q" id="input_q" size="50" />
<button type="button" class="showAll_btn">V</button>
<!-- ส่วนสำหรับกำหนดค่า id ของรายการที่เลือก เพื่อไปใช้งาน-->
<input name="h_input_q" type="hidden" id="h_input_q" value="" />
</div>
</form>
<pre>
<?php
// ส่วนทดสอบแสดงค่า เมื่อกดปุ่มส่งข้อมูล
if(count($_POST)>0){
print_r($_POST);
}
?>
</pre>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
<script type="text/javascript">
$(function() {
$( "#input_q" ).autocomplete({ // ใช้งาน autocomplete กับ input text id=tags
minLength: 0, // กำหนดค่าสำหรับค้นหาอย่างน้อยเป็น 0 สำหรับใช้กับปุ่ใแสดงทั้งหมด
source: "get_suggest.php", // กำหนดให้ใช้ค่าจากการค้นหาในฐานข้อมูล
open:function(){ // เมื่อมีการแสดงรายการ autocomplete
var valInput=$(this).val(); // ดึงค่าจาก text box id=tags มาเก็บที่ตัวแปร
if(valInput!=""){ // ถ้าไม่ใช่ค่าว่าง
$(".ui-menu-item a").each(function(){ // วนลูปเรียกดูค่าทั้งหมดใน รายการ autocomplete
var matcher = new RegExp("("+valInput+")", "ig" ); // ตรวจสอบค่าที่ตรงกันในแต่ละรายการ กับคำค้นหา
var s=$(this).text();
var newText=s.replace(matcher, "<b>$1</b>"); // แทนค่าที่ตรงกันเป็นตัวหนา
$(this).html(newText); // แสดงรายการ autocomplete หลังจากปรับรูปแบบแล้ว
});
}
},
select: function( event, ui ) {
// สำหรับทดสอบแสดงค่า เมื่อเลือกรายการ
// console.log( ui.item ?
// "Selected: " + ui.item.label :
// "Nothing selected, input was " + this.value);
$("#h_input_q").val(ui.item.id); // เก็บ id ไว้ใน hiden element ไว้นำค่าไปใช้งาน
// setTimeout(function(){
// $("#h_input_q").parents("form").submit(); // เมื่อเลือกรายการแล้วให้ส่งค่าฟอร์ม ทันที
// },500);
}
});
$(".showAll_btn").click(function(){
// ตรวจสอบถ้ามีการแสดงรายการทั้งหมดอยู่แล้ว
if ($( "#input_q" ).autocomplete( "widget" ).is( ":visible" ) ) {
$( "#input_q" ).autocomplete( "close" ); // ปิดการแสดงรายการทั้งหมด
return;
}
// ส่งค่าว่างปล่าวไปทำการค้นหา จะได้ผลลัพธ์เป็นรายการทั้งหมด
$( "#input_q" ).autocomplete( "search", "" );
$( "#input_q" ).focus(); //ให้ cursor ไปอยู่ที่ input text id=tags
});
});
</script>
</body>
</html>
โค้ดไฟล์ get_suggest.php
<?php
header("Content-type:application/json; charset=UTF-8");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
// ส่วนของการเชิ่อมต่อกับฐานข้อมูล
mysql_connect("localhost","root","test") or die("Cannot connect the Server");
mysql_select_db("test") or die("Cannot select database");
mysql_query("set character set utf8");
?>
<?php
$pagesize = 50; // จำนวนรายการที่ต้องการแสดง
$table_db="province_th"; // ตารางที่ต้องการค้นหา
$find_field="province_name"; // ฟิลที่ต้องการค้นหา
if($_GET['term']!=""){
$q = $_GET["term"];
$sql = "select * from $table_db
where locate('$q', $find_field) > 0
order by locate('$q', $find_field), $find_field limit $pagesize";
}else{
$sql = "select * from $table_db where 1 limit $pagesize";
}
$qr=mysql_query($sql);
$total=mysql_num_rows($qr);
while($rs=mysql_fetch_array($qr)) {
$json_data[]=array(
"id"=>$rs['province_id'],
"label"=>$rs['province_name'],
"value"=>$rs['province_name'],
);
}
$json= json_encode($json_data);
echo $json;
mysql_close();
exit;
?>