2010-11-04 80 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