ช่วยเรื่อง AutoComplete หน่อยนะครับ มันมีแต่ช่องว่างๆ

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา ช่วยเรื่อง AutoComplete หน่อยนะครับ มันมีแต่ช่องว่างๆ

ช่วยเรื่อง AutoComplete หน่อยนะครับ มันมีแต่ช่องว่างๆ

คือผมทำตามตัวอย่างแล้ว แต่เวลาพิมพ์ไป มันจะมีแต่ช่องว่างๆขึ้นมา กดไปก็หายเพราะมันเป็นช่องว่างๆอ่าครับ แต่มันก็queryได้ถูกต้องนะครับ

// นี่ส่วนโค้ดครับ ในdatabaseผมก็เป็น utf-8 แล้ว

//search.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Search module</title>
    <script type="text/javascript" src="autocomplete.js"></script>
    <link rel="stylesheet" href="autocomplete.css"  type="text/css"/>
</head>

<body>
<form id="form1" name="form1" method="post" action="">
<input name="arti_topic" type="text" id="arti_topic" size="50" />
<input name="arti_id" type="hidden" id="arti_id" value="" />
</form>

<script type="text/javascript"> 
function make_autocom(autoObj,showObj){ 
    var mkAutoObj=autoObj;  
    var mkSerValObj=showObj;  
    new Autocomplete(mkAutoObj, function() { 
        this.setValue = function(id) {       
            document.getElementById(mkSerValObj).value = id; 
        } 
        if ( this.isModified ) 
            this.setValue(""); 
        if ( this.value.length < 1 && this.isNotClick )  
            return ;     
        return "gdata.php?q=" + this.value; 
    });  
}    

make_autocom("arti_topic","arti_id");
</script>

</body>
</html>

 

 

//gdata.php

<?php 
header("Content-type:text/html; charset=utf-8");
$link=mysql_connect("localhost","root","1234") or die("error".mysql_error()); 
mysql_select_db("db_pxr",$link);
mysql_query("set character set utf8");

$q = $_GET["q"];
$pagesize = 50;
$table_db="tb_dealer";
$find_field="dealerName";

$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();

?>
 

ช่วยหน่อยนะครับ ผมไม่รู้จะแก้ตรงไหนแล้วจริงๆ ขอบคุณครับ



Dc_mon 08-06-2010 12:10:44

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 1

ตามรูป คิดว่าน่าจะ query ได้ปกติ แต่ข้อมูลไม่แสดง ลองแก้ไขตามนี้ดูก่อน

จากบทความ

https://www.ninenik.com/สร้างฟังก์ชัน_autocomplete_ให้ใช้งานแบบง่าย_ด้วย_ajax-209.html

จะมีตัวอย่าง และผลจากการค้นหา เมื่อมีการส่งค่า a เข้าไป ข้อมูลจะแสดง ตาม url นี้

https://www.ninenik.com/demo/gdata.php?q=a

ทีนี้ให้ลองเปลี่บน url เป็นตามรูปแบบข้าง (ขึ้นอยู่กับ path ที่ทดสอบ)

http://localhost/gdata.php?q=a

หรือ

http://www.example.com/gdata.php?q=a

ถ้าไม่มีปํญหา ข้อมูลก็จะแสดงในลักษณะเช่นเดียวกับตัวอย่าง แต่ถ้าข้อมูลไม่แสดงให้ตรวจสอบว่า การ query หรือ การกำหนดให้แสดงข้อมูลถูกต้องหรือไม่

 



ninenik 08-06-2010
 ความคิดเห็นที่ 2

ไม่ขึ้นตามตัวอย่างอ่ะครับ ทดสอบแล้ว มันขึ้นเป็นจุดดำๆกลมๆอ่ะครับ

การ query หรือ การกำหนดให้แสดงข้อมูลถูกต้องหรือไม่

มันคืออะไรอ่าครับ ผมจะเช็คได้จากตรงช่วงไหนครับ ขอบคุณนะครับ



dc_mon 08-06-2010 14:38
 ความคิดเห็นที่ 3

อีกนิดนึงครับ มันqueryได้ถูกต้องอ่าครับ ผมหมายถึงตัวที่มี a หรือมี 1 ก็แสดงออกตามจำนวนที่มีจริงๆครับ

การกำหนดให้แสดงข้อมูล ผมก็แสดงเป็นutf-8หมดแล้ว แต่มันขึ้นแค่จุดดำๆกลมๆ เหมือนข้างหน้าบรรทัดต่างๆของตัวอย่างอ่ะครับ

มันไม่ขึ้นรายชื่อที่ต้องการอ่ะครับ ขอบคุณอีกครั้งนะครับ



dc_mon 08-06-2010 14:43
 ความคิดเห็นที่ 4

ลองแก้ไขตามนี้ดู
-ให้ตรวจสอบ field ที่ต้องการแสดงว่าชื่อถูกไหม
-ตรวจสอบโค้ด HTML ว่าเพื้ยนไหม โดยคลิกขวา view source
-ตรวจสอบคำสั่ง  sql ให้ echo $sql แล้วเอาไปรันใน phpmyadmin

ถ้าข้อมูลยังไม่แสดง ทั้งที่มีข้อมูล คงต้องพยายามดูหลายๆรอบ ให้ละเอียด
บางที อาจเป็นลักษณะ เส้นผมบังภูเขา

ท้ายสุด ถ้าไม่ได้จริงๆ ให้ส่ง url ของไฟล์ gdata.php ที่ใช้งาน และให้ echo ค่า sql และ num_rows ฝากไว้ จะได้ช่วยมองปํญหาให้..



ninenik 08-06-2010
 ความคิดเห็นที่ 5

เย้วๆ ขอบคุณครับ ออกแล้วครับ ใช้งานได้ปกติแล้ว ผมไปแก้สองบรรทัดนี้ เป็นแบบนี้...

    $id = $row[0];
    $name = ucwords( strtolower( $row[0] ) );

ขอบคุณมากๆเลยนะครับ คุณ ninenik

ผมขอบคุณจริงๆที่เตือนให้ผมไล่codeดู ผมรีบไปหน่อย ขอบคุณมากๆเลยครับ



dc_mon 08-06-2010 19:15
 ความคิดเห็นที่ 6

 ของผม ภาษาไทยมันเพี้ยน อ่าครับ มันขึ้นเป็น สี่เหลี่ยมเปียกปูนสีดำ แล้ว มี ? ข้างใน อ่าครับ แก้ยังไง 

<?php
include "connect_db.php";
header("Content-type:text/html; charset=UTF-8");        
header("Cache-Control: no-store, no-cache, must-revalidate");       
header("Cache-Control: post-check=0, pre-check=0", false);  
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

     

<? 
$q = urldecode($_GET["q"]);
$pagesize = 5; // จำนวนรายการที่ต้องการแสดง
$table_db="member"; // ตารางที่ต้องการค้นหา
$find_field="name"; // ฟิลที่ต้องการค้นหา
$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[0]; // ฟิลที่ต้องการส่งค่ากลับ
	$name = ucwords( strtolower( $row[2] ) ); // ฟิลที่ต้องการแสดงค่า
	// ป้องกันเครื่องหมาย '
	$name = str_replace("'","'",$name);
	//echo $name;
	// กำหนดตัวหนาให้กับคำที่มีการพิมพ์
	$display_name = preg_replace("/(".$q.")/i","<b>$1</b>",$name);
	//$name = iconv('TIS-620', 'UTF-8', $name);
	echo "<li onselect="this.setText('$name').setValue('$id');">$display_name</li>";
}
mysql_close();
?>

</body>
</html>

 



netnarok 01-10-2011 09:54
1






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ