2013-06-28 117 views
0

我创建了一个使用php和jquery的自动建议搜索框。用户提示插入名称和姓氏,以查找名为user的表中的数据库中存在的人员。表用户拥有2列,名称和姓氏。当您键入名称但按空格键移动并键入姓氏不会给出任何结果时,我的搜索工作正常。整个问题似乎在按空格键时出现。任何想法如何解决它?搜索引擎的名字和姓氏

这是我的jQuery代码:

$(document).ready(function(){ 


$('#search_form_1').keyup(function(){ 
    var value = $(this).val(); 

    if(value != ''){ 
     $('#search_result').show(); 
     $.post('search_form.php', {value: value}, function(data){ 
      $('#search_result').html(data); 
     }); 

    }else{ 
     $('#search_result').hide(); 
    } 

}); 

}); 

这是我的PHP代码:

<?php 
if(isset($_POST['value'])== true && empty($_POST['value']) == false){ 

$value = mysql_real_escape_string($_POST['value']); 

$query = mysql_query(" SELECT `surname`, `name` FROM `users` WHERE (`surname` LIKE '$value%' OR `name` LIKE '$value%') OR (`name` LIKE '$value%' OR `surname` LIKE '$value%') "); 

    while($run = mysql_fetch_array($query)){ 

    $surname = $run['surname']; 
    $name = $run['name']; 
    echo " $surname $name "; 

    } 
    } 
?> 
+0

是否列'name'包含全名,姓+姓什么? – Niklas

+0

你的2在()中的where子句基本相同,你可以删除一个。它的原因是你不会分裂你的输入以允许“姓氏姓”,所以它寻找姓氏为“dave hin”,显然是永远不会匹配的,因为姓氏字段将不是戴夫,并且同样发生在名字字段上。您需要检查输入的空间,在空间上爆炸并使用分解的部分分别搜索名字,姓氏列。 ofc这会导致三重名称的问题,但首先要做的第一件事 – Dave

+1

尝试更改您的查询以“姓名+”'+姓氏作为全名的用户,其中全名如'%$ value%'“。当你键入空格时,搜索将在其末尾寻找带有空格的人名,我会想象它不存在于数据库中。 – Jerryf

回答

2

你必须拆分搜索:

<?php 
if(isset($_POST['value'])== true && empty($_POST['value']) == false){ 

$value = mysql_real_escape_string($_POST['value']); 

$name_and_surname = explode(" ", $value); 

$name = $name_and_surname[0]; 
$surname = $name_and_surname[1]; 

$q = " SELECT `surname`, `name` FROM `users` WHERE (`surname` LIKE '$name%' OR `name` LIKE '$name%') OR (`name` LIKE '$surname%' OR `surname` LIKE '$surname%') "; 

// check your query one more time 
echo $q; 

$query = mysql_query($q); 

    while($run = mysql_fetch_array($query)){ 

    $surname = $run['surname']; 
    $name = $run['name']; 
    echo " $surname $name "; 

    } 
    } 
+0

它的工作原理,但知道在输入名字时在开头显示我的表格的所有名称和姓氏。当继续输入姓氏时,它开始只显示我想要的人。任何想法如何解决这个问题? – user2491321

+0

把where子句放到:(你的名字LIKE'$ name%'和name LIKE'$ surname%')OR(姓氏LIKE'$姓氏%'和姓名LIKE'$ name%')你的输入字段 –

+0

工作完美,我唯一的问题是,我得到一个消息之上的结果像未定义的抵消...我怎么能摆脱这一点?但是当按空格继续姓氏时,这个消息就消失了。错误消息必须与此行一致:$ name = $ name_and_surname [0]; $ surname = $ name_and_surname [1]; – user2491321

0

如果你只是想修改SQL查询,你应该能够做到这一点。

select name, surname from users where CONCAT(name, ' ', surname) like '%value%' 

这将采取名字和姓氏,并在他们之间放置一个空间,然后搜索。

这意味着当用户点击空格键时,它仍会找到您要查找的用户。

+0

找到我sql使用它时的错误语法,任何想法可能是错误的? – user2491321

+0

你能告诉我你是如何在你的代码中使用它的吗? – Jerryf

+0

将其复制并粘贴到$ query的mysql_query中 – user2491321

0

的编辑不批所以这里是代码:

$value = mysql_real_escape_string($_POST['value']); 
$names = explode(" ", $value); 

if(count($names)>1){ 
$name = $names[0]; 
$surname = $names[1]; 
    $q = "SELECT surname, name FROM users WHERE (name LIKE '$name%' AND surname LIKE '$surname%') OR (name LIKE '$surname%' AND surname LIKE '$name%')"; 
}else{ 
    $q = "SELECT surname, name FROM users WHERE (name LIKE '$value%' OR surname LIKE '$value%')"; 
}