2

最初の質問は、私はオートコンプリートを持っているということです。最初の名前を入力すると完璧にロードされますが、スペースを押して姓を入力し続けると、divが非表示になり、検索結果が続きません。 php ファイルまたは jquery ファイルに記述します。

これは検索バーです

<form method='post' action='index2.php#profile_info.php'>
    <input type="text"  id='inputSearch' placeholder="Search"  autocomplete="off" class="search" />
    <input type='submit' id='Search_Submit' value='' />
</form>
<div id="divResult"</div> 

これは、データベースを照会するための search.php ファイルです。

<?php
include('connect.php');
if($_POST)
{
$q=$_POST['searchword'];
$sql_res=mysql_query("SELECT user_id, firstname, lastname, email, country, gender from users where firstname like '%$q%' OR lastname like '%$q%' order by email_activated='1' LIMIT 5");
while($row=mysql_fetch_array($sql_res))
{

$id = $row['user_id'];  
$firstname=$row['firstname'];
$lastname=$row['lastname'];
$email=$row['email'];
$country=$row['country'];
$Gender=$row['gender'];
$cacheBuster = rand(999999999,9999999999999);

$check_pic = "members/$id/image01.jpg";
    $default_pic = "members/image01.jpg";
    if (file_exists($check_pic)) {
    $users_pic ="$check_pic?$cacheBuster"; // forces picture to be 100px wide and no more
    }else {
    $users_pic = "images/profiles/".$Gender."_small.jpg"; // forces default picture to be 100px wide and no more

}

$b_firstname='<b>' .$q. '</b>';
$b_lastname='<b>'.$q.'</b>';
$final_firstname = str_ireplace( $q, $b_firstname, $firstname);
$final_lastname = str_ireplace( $q, $b_lastname, $lastname);
?>
<div class="display_box" align="left" >
<a href="http://localhost/MyNewSite/index2.php?user_id='<?php echo $id; ?>'#status.php" target="_self"> <img src="<?php echo $users_pic; ?>" style="width:55px; height:50px; float:left; margin-right:6px;" /></a><span class="name"><a href="http://localhost/MyNewSite/index2.php?user_id='<?php echo $id; ?>'#status.php" target="_self" class="friendsLink"><?php echo " $final_firstname $final_lastname"; ?> </a></span>&nbsp;<br/><span style="font-size:10px; margin-left:6px;"><?php echo $email; ?></span><br/>
<span style="font-size:10px; color:#C40000; margin-left:6px;"><?php echo $country; ?></span></div>

<?php
}
}
?>

およびdivをロードするjquery

$(function(){
$(".search").keyup(function() 
{ 
var inputSearch = $(this).val();
var dataString = 'searchword='+ inputSearch;
if(inputSearch!='')
{
    $.ajax({
    type: "POST",
    url: "search.php",
    data: dataString,
    cache: false,
    success: function(html)
    {
    $("#divResult").html(html).show();
    }
    });
}return false;    
});

jQuery("#divResult").live("click",function(e){ 
    var $clicked = $(e.target);
    var $name = $clicked.find('.name').html();
    var decoded = $("<div/>").html($name).text();
});
jQuery(document).live("click", function(e) { 
    var $clicked = $(e.target);
    if (! $clicked.hasClass("search")){
    jQuery("#divResult").fadeOut(); 
    }
});
$('#inputSearch').click(function(){
    jQuery("#divResult").fadeIn();
});
});


jQuery(function($){
   $("#inputSearch").Watermark("Search");
   });
4

2 に答える 2

0

それは where クエリであり、問​​題がどこにあるのかを教えてくれた Michal Klouda に感謝します。

$sql_res=mysql_query("SELECT user_id, firstname, lastname, email, country, gender
FROM users where lower(concat_ws(' ', firstname, lastname)) like '%$q%' ORDER BY email_activated =  '1'
LIMIT 5");
于 2012-10-21T01:56:11.883 に答える
0

名の後にスペースを入力すると、検索フレーズがそのまま渡され、列firstnamelastname列で別々に検索されるため、何も返されません。あなたのクエリを見てください:

SELECT user_id, firstname, lastname, email, country, gender 
from users 
where firstname like '%$q%' OR lastname like '%$q%'  /* <- here's the problem */
order by email_activated='1' LIMIT 5

テーブルに John Smith がいる場合、 は とは異なるため、彼は見つかり"John" ません "%John %"

where句を変更する必要があります。あなたは試すことができます:

where firstname + ' ' + lastname like '%$q%' or
      lastname + ' ' + firstname like '%$q%'
于 2012-10-16T14:15:08.027 に答える