สอบถามเรื่อง auto complete หน่อยครับ สวัสดีครับผมมีเรื่องรบกวนเพื่อนๆ พี่ๆ นิดหน่อยครับพอดี
สวัสดีครับ
ผมมีเรื่องรบกวนเพื่อนๆ พี่ๆ นิดหน่อยครับ
พอดี ผมใช้ code auto completion
Ninenik
คือ ก็สามารถดึงข้อมูลมาโชว์ได้ปกตินะครับ ในตัว suggestion น่ะครับ
แต่ผม อยากจะทราบว่า
ถ้าเรา จะค้นหาในหลายๆ field อ่ะครับ
เช่นในโค้ด นี้ ผมค้นหา แค่
Code
$sql=mysql_query("SELECT * FROM tb_material WHERE locate('$q',m_mid)>0 LIMIT 20");
คือผมอยากจะให้ค้นหา ไม่เฉพาะจากรหัส เช่น พิมพ์ ชื่อ เข้าไป ก็ดึงข้อมูลจาก ชื่อ มาค้นหาด้วยอ่ะครับ
ผมต้องกำหนด ในไฟล์ getdata.php ยังไงครับ
Code getdata.php
<?php
// เชื่อมต่อฐานข้อมูล
$link=mysql_connect("localhost","root","123456") or die("error".mysql_error());
mysql_select_db("database_name",$link);
mysql_query("set character set utf8");
$q = $_GET["q"];
$pagesize = 50; // จำนวนรายการที่ต้องการแสดง
$table_db="article"; // ตารางที่ต้องการค้นหา
$find_field="arti_topic"; // ฟิลที่ต้องการค้นหา
$sql = "select * from $table_db where locate('$q', $find_field) > 0 order by locate('$q', $find_field), $find_field limit $pagesize";
$results = mysql_query($sql);
while ($row = mysql_fetch_array( $results )) {
$id = $row["arti_id"]; // ฟิลที่ต้องการส่งค่ากลับ
$name = ucwords( strtolower( $row["arti_topic"] ) ); // ฟิลที่ต้องการแสดงค่า
// ป้องกันเครื่องหมาย '
$name = str_replace("'", "'", $name);
// กำหนดตัวหนาให้กับคำที่มีการพิมพ์
$display_name = preg_replace("/(" . $q . ")/i", "<b>$1</b>", $name);
echo "<li onselect=\"this.setText('$name').setValue('$id');\">$display_name</li>";
}
mysql_close();
?>
เพราะผมลองใส่ or locate('$q',m_name)>0 ไปแบบนี้แล้ว แต่ก็ไม่รู้ต้องกำหนดในส่วนของ while ยังไง อ่ะครับ
รบกวนแนะนำ ผมหน่อยนะครับ
ขอบคุณมากๆ ครับTag : - - - -
Date :
2010-06-29 20:41:33
By :
yomaster
View :
1511
Reply :
10
ผมทำได้แล้วครับ
ให้มันแสดงทุกอันไปเลยครับ (กำปั้นทุบดินมากๆ ครับ) - -"
ใส่ locate() ตัวอื่นๆ
และใน while ก็ โชว์ ข้อมูลให้หมดเลยครับ - -"
Date :
2010-06-29 21:23:25
By :
yomaster
เอ่อ
ผมพบปัญหาครับ
echo "<li onselect=\"this.setText('$name').setValue('$id');\">$display_name</li>";
ตรงส่วนนี้อ่ะครับ
มันจะดึงค่าเดียวมาตลอดอ่ะครับ
ลองใส่เงื่อนไข ไป ก็ ไม่แสดงข้อมูลอะไรออกมาเลยอ่ะครับ
รบกวนช่วยผมหน่อยครับ
โค้ด getdata ผมนะครับ
getdata.php
<?php
require_once("config.php");
$q=$_GET["q"];
$sql=mysql_query("SELECT * FROM tb_material WHERE locate('$q',m_mid)>0 OR locate('$q',m_name)>0 OR locate('$q',m_brand)>0 LIMIT 20");
while($row=mysql_fetch_array($sql)){
$id=$row['m_id'];
$mid=ucwords(strtolower($row['m_mid']));
//if($q=="$mid"){
$mid=str_replace("'","'",$mid);
$displayMID=preg_replace("/(".$q.")/i","<b>$1</b>",$mid);
//$setT="$mid";
//}
$name=ucwords(strtolower($row['m_name']));
//if($q=="$name"){
$name=str_replace("'","'",$name);
$displayName=preg_replace("/(".$q.")/i","<b>$1</b>",$name);
//$setT="$name";
//}
$brand=ucwords(strtolower($row['m_brand']));
//if($q=="$brand"){
$brand=str_replace("'","'",$brand);
$displayBrand=preg_replace("/(".$q.")/i","<b>$1</b>",$brand);
//$setT="$brand";
//}
echo "<li onselect=\"this.setText('$setT').setValue('$setT');\">รหัส : $displayMID - ชื่อสินค้า : $displayName - ยี่ห้อ : $displayBrand</li>";
}
mysql_close($c);
?>
Date :
2010-06-29 21:40:52
By :
yomaster
ช่วยกระผมหน่อยค้าบบบ T_T
Date :
2010-06-29 23:53:45
By :
yomaster
T_T
ไม่มีเลยเหรอครับ
Date :
2010-06-30 08:27:36
By :
yomaster
Code (PHP)
$sql=mysql_query("SELECT CONCAT(ฟิวที่ต้องการหา1, ฟิวที่ต้องการหา2, ฟิวที่ต้องการหา3) AS ฟิวรวมนะ, mid,name,brand FROM tb_material WHERE ฟิวรวมนะ LIKE '%$q%' LIMIT 20");
concept คือมัดรวมก่อนแล้วค้นหา ส่วนตัวแสดง ส่วน field ที่แสดง tag li ก็ แสดงตามปกติ mid,name,brand
พอจะได้ไอเดียไหมครับ
ไม่เจอกันนาน สวัสดีครับคุณ YoYo
Date :
2010-06-30 10:34:30
By :
peterxp
ขอบคุณ คุณ PeterXP มากๆ ครับ
ได้ไอเดีย แต่ไปต่อไม่ได้ ซะงั้น - -"
ผมทำแบบนี้อ่ะครับ
Code (PHP)
$sql=@mysql_query("SELECT CONCAT(m_mid,m_name,m_brand) AS all_field,mid,name,brand FROM tb_material WHERE all_field LIKE '%$q%' LIMIT 20");
while($row=@mysql_fetch_array($sql)){
แล้วตรงแสดงข้อมูลล่ะครับ ผมทำแบบนี้
Code (PHP)
$text=ucwords(strtolower($row['all_field']));
$text=str_replace("'","'",$text);
$display=preg_replace("/(".$q.")/i","<b>$1</b>",$text);
echo "<li onselect=\"this.setText('$display').setValue('$display');\">$display</li>";
}
ปรากฏว่า ไม่แสดงข้อความใดๆ ทั้งสิ้นครับ - -"
ด้วยความสัตย์จริง
รบกวนคุณ peterXP อีกสักครั้งครับ (หรือจะท่านอื่นๆ ก็ได้ครับ) T_T
ปล. ร่ำรวยไปแล้วใช่ไหมครับ คุณ peterXP ฮ่าๆ
Date :
2010-06-30 20:57:58
By :
yomaster
ผมว่า php น่าจะถูกแล้ว
เหลือแต่ พวก preg_replace พวกนี้ครับ
Code (PHP)
$text=ucwords(strtolower($row['all_field']));
$text=str_replace("'","'",$text);
$display=preg_replace("/(".$q.")/i","<b>$1</b>",$text);
echo "<li onselect=\"this.setText('$display').setValue('$display');\">$display</li>";
}
น่าจะติดเครื่องหมายไรสักอยากใน text $display ผมเดาเอานะ
ลอง echo ทีส่วนๆ ดูสิครับ ใช้ firebug ช่วยหาก็ดีนะครับ
ปัญหาที่อาจตามมา ตอน submit
-ถ้าค้นหาแบบหลายคำ ต้อง ต่อ string ยังไงให้ query ออกมาได้ /search.php?val1=x&va2=y&var3=z
พี่ๆท่านอื่น ช่วยหน่อยครับ
Date :
2010-07-01 11:13:34
By :
peterxp
น่าจะช่วยได้
http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/
Date :
2010-07-02 10:13:30
By :
peterxp
ขอบพระคุณมากๆ ครับ ^-^
Date :
2010-07-05 08:10:01
By :
yomaster
พี่ๆค่ะ แล้วถ้า ต้องการให้ autocomplete แสดงผลจากสองฟิลด์ แต่ฟิลด์หนึ่งเป็นภาษาไทย อีกฟิลด์เป็นภาษาอังกฤษ
ประมาณว่า จะให้ค้นหาคำศัพท์ แล้วให้ suggest แสดงผลตามที่ค้นหา
ตอนนี้ทำให้ข้อมูลโชว์ ได้แล้ว แต่ได้แต่ภาษาเดียว รบกวนด้วยน่ะค่ะ
Date :
2011-06-21 13:54:27
By :
nickname
Load balance : Server 00