显示两个以上的姓名&空间问题

时间:2010-11-05 19:58:53

标签: php

我正在为我的用户制作PM系统。

在收件人字段中输入全名。当你提交我想确保它是他发送给他们的合适用户。

因此,如果他输入“Megan Fox”,那就是用户的完全匹配。但如果他输入梅格或梅根,福克斯将返回“你的意思是梅根福克斯吗?”

因此...

现在我已经想过如果有多个名称为“Megan”或姓氏“Fox”的话。我做了一段时间(),如果超过1,它会回来,“你的意思是谁:马特福克斯,梅根福克斯?”

现在我找到了它出错的地方,我得到3行的姓氏“狐狸”,它只显示其中的两个“你的意思是谁?”

我该如何解决这个问题?

如果我只在收件人字段中输入一个空格,它将返回表格中的所有用户。我该如何防止这种情况?

以下是我的代码:

$mot = mysql_real_escape_string($_POST['mottagare']);
list($firstname, $lastname) = array_map('ucfirst', explode(' ', $mot, 2));
$qur = mysql_query("
 SELECT id, firstname, lastname, 
 (firstname = '$firstname' AND lastname = '$lastname') AS full FROM users 
 WHERE (firstname = '$firstname' AND lastname='$lastname') 
 OR (firstname LIKE '$firstname%' AND lastname LIKE '$lastname%')
 OR firstname LIKE '$firstname%' OR lastname LIKE '$firstname%'
 ORDER BY (firstname = '$firstname' AND lastname='$lastname') DESC");

 $get = mysql_fetch_array($qur);

 if(mysql_num_rows($qur) == 1){
    if($get["full"] == 1){
    echo $get["id"];
    }else{
     echo "Did you mean ".$get["firstname"]." ".$get["lastname"]." ?";
    }
 }elseif(mysql_num_rows($qur) > 1){
    while($get = mysql_fetch_array($qur)) {
       $name[] = $get["firstname"]." ".$get["lastname"];
   }

   if(count($name) > 1) {
       echo 'Who did you mean?<br>';
   } else {
       echo 'Did you mean: ';
   }
   echo implode('<br>', $name);

 }

2 个答案:

答案 0 :(得分:2)

在这一行:

$get = mysql_fetch_array($qur);

你已经取了你的第一个名字而没有将它附加到$ name数组,所以在这一行:

while($get = mysql_fetch_array($qur)) {

第一个不会再次从DB中获取。

答案 1 :(得分:0)

对于您的空间问题,您可以要求在建议结果之前输入一定数量的非空格字符。

如果只有少数用户,您还可以尝试根据Levenshtein distance提出建议,以纠正拼写错误。