2010-11-04 83 views
0

嘿,所以我的表单中有一个收件人字段,您可以输入用户的全名,例如“john derek”。PHP:获取收件人ID

现在,如果有任何全场比赛,取ID我已经爆炸这为$名字和姓氏$

list($firstname, $lastname) = array_map('ucfirst', explode(' ', $recipient, 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%") 
ORDER BY (firstname = "$firstname" AND lastname="$lastname") DESC'); 
$get = mysql_fetch_array($qur); 
echo $get["full"] ."<br>"; 

我不是在这家任何东西,甚至是$名字是“约翰”和$姓氏是“德里克”

也试过:

echo $get["id"]; 
echo $get["lastname"] 
echo $get["firstname"] 

好像它不发现什么了吗?哪里不对?

+0

如果您有三个或更多名字的收件人,该怎么办?无论哪种方式,我认为你应该添加更多的细节。是否有一个用户只能查找的现成收件人列表?或者“你的意思”机制如何发挥作用?你的数据库表是什么样的?如果用户输入“John D”时发现“John Derek”的LIKE搜索也可行,还是需要分别匹配firstname和lastname? – 2010-11-04 22:11:15

+0

可以说收件人不。 – Johnson 2010-11-04 22:11:51

+0

@Jonson我编辑我的评论 – 2010-11-04 22:12:13

回答

0

最简单的方法是做一个LIKE查询:

SELECT id, firstname, lastname FROM users 
WHERE firstname LIKE "$firstname%" 
AND lastname LIKE "$lastname%" 

(不要忘记消毒的变量,当然)

用户的输入,这将匹配:

Jo De 
J Derek 
John D 

它会给你一个结果回来。如果搜索John Der,但有John DerekJohn Der虽然,但不能保证John Der会先到达。为了达到这个目的,你必须首先检查字面匹配:

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%") 
ORDER BY (firstname = "$firstname" AND lastname="$lastname") DESC 

这将首先给出完整匹配,部分匹配第二。

它可能需要进一步调整,但它应该是一个开始。

+0

感谢您的回答。我如何回应如果完全匹配你写的内容,如果不是那么“你的意思是约翰德里克” – Johnson 2010-11-04 22:29:13

+0

@约翰逊我更新了第二个大查询。它会给你一个名为“full”的结果中的第四个虚拟列。如果是完全匹配,它将是“1”或“TRUE”(现在不确定,你必须测试它)。 – 2010-11-04 22:30:29

+0

@约翰逊指出,尽管完全匹配只有匹配时才匹配(“John Derek”而不是“jon derek”)。如果你想让它更宽松,你需要在PHP语句中'strtolower()'这个词,并且在SQL语句 – 2010-11-04 22:34:06