我正在为我的用户制作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);
}
答案 0 :(得分:2)
在这一行:
$get = mysql_fetch_array($qur);
你已经取了你的第一个名字而没有将它附加到$ name数组,所以在这一行:
while($get = mysql_fetch_array($qur)) {
第一个不会再次从DB中获取。
答案 1 :(得分:0)
对于您的空间问题,您可以要求在建议结果之前输入一定数量的非空格字符。
如果只有少数用户,您还可以尝试根据Levenshtein distance提出建议,以纠正拼写错误。