2014-11-24 126 views
1

我是PHP新手,已經創建了一個基本的HTML表單;PHP關鍵字搜索不能用於多個詞

<form id="game" method="get" action="results.php"> 
    <label> Book Name 
     <input type="text" name="gameTitle" /> 
    </label> 
     <input type="submit" name="search" value="Search"> 
</form> 

這是我的PHP;現在,例如,如果我要搜索名爲「孤島驚魂」的遊戲,並且只搜索「遠」,則它會返回記錄。但是,如果我搜索'遠C'等(兩個字)它不會返回記錄。即使我搜索全名「孤島驚魂」,這種情況也會發生,但似乎不起作用。

感謝您的任何幫助。

+5

採取更好看看你的preg_replace函數... – Naruto 2014-11-24 15:16:44

+0

@Naruto - 謝謝,沒有意識到函數導致它存儲不同。現在就開始工作吧。 – RonaIdo 2014-11-24 15:33:04

+0

沒問題,檢查並標記Giwwel的答案爲接受:) – Naruto 2014-11-24 15:34:13

回答

2

您使用的preg_replace函數將替換所有不是0-9的字符或$gameTitle中的a-z。因此,如果搜索「孤島驚魂」,則preg_replace製作「FarCry」,並且SQL註釋將爲WHERE gameTitle LIKE '%FarCry%'。如果此字沒有標題,則不會返回任何內容

+1

不僅是空白.. – Naruto 2014-11-24 15:21:55

+0

你是對的。我已經更新了答案.. – Giwwel 2014-11-24 15:24:23

+0

這樣比較好,我從+1得到:) – Naruto 2014-11-24 15:25:21

0

查看變量$ gameTitle。你認爲你正在尋找「孤島驚魂」,但代碼preg_replace部分將變量設置爲「FarCry」,我想你在數據庫中存儲了一個名爲「孤島驚魂」而不是「FarCry」的遊戲。

+0

謝謝,你說得對。沒有意識到它會以不同的方式存儲。所有工作現在!再次感謝。 – RonaIdo 2014-11-24 15:34:11

+0

請注意,您不應只信任這些輸入值。你應該清理它們,你至少應該使用PDO和參數綁定。 – DerKlops 2014-11-24 15:36:46

0
  1. 要允許查詢字符串空間試試這個:

    $ gameTitle =的preg_replace( 「#[^ \ s0-9a-Z]#I」, 「」,$ gameTitle);

  2. 不要忘記mysql_real_escape_string功能,避免SQL注入,甚至更好 使用PDO,見例子在http://php.net/manual/en/pdo.prepared-statements.php

所以簡單的查詢將看起來像:

"SELECT games.gameTitle FROM games WHERE gameTitle LIKE '%".mysql_real_escape_string($gameTitle)."%'";