2014-11-24 84 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)."%'";