PHP关键字搜索不使用多个单词

时间:2014-11-24 15:12:54

标签: php html forms search keyword

我是PHP的新手,并创建了一个基本的HTML表单;

<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;

$gameTitle = $_GET['gameTitle'];
$gameTitle = preg_replace("#[^0-9a-z]#i", "", $gameTitle);

$sql = "SELECT games.gameTitle FROM games WHERE gameTitle LIKE '%$gameTitle%'";

$Games = mysqli_query($conn, $sql) 
or die(mysqli_error($conn));

while ($row = mysqli_fetch_assoc($Games)) {
    $gameTitle = $row['gameTitle'];

echo "<div>$gameTitle</div>\n";
}

mysqli_free_result($Games); 
mysqli_close($conn);

?>

现在,例如,如果我要搜索一款名为“孤岛惊魂”的游戏,我只是搜索“远”,它会返回记录。但是,如果我要搜索“Far C”等(两个单词),它将不会返回记录。即使我搜索全名“孤岛惊魂”,这似乎也无效。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

您使用的preg_replace函数替换$gameTitle中不是0-9或a-z的所有字符。因此,如果您搜索“孤岛惊魂”,则preg_replace会生成“FarCry”,而SQL语句将为WHERE gameTitle LIKE '%FarCry%' ..如果此单词没有标题,则不返回任何内容

答案 1 :(得分:0)

查看变量$ gameTitle。你认为你正在寻找“孤岛惊魂”,但代码,preg_replace部分,将变量设置为“FarCry”,我猜你在数据库中存储了一个名为“孤岛惊魂”的游戏,而不是“FarCry”。

答案 2 :(得分: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

  3. 中的示例

    所以简单的查询看起来像:

    "SELECT games.gameTitle FROM games WHERE gameTitle LIKE '%".mysql_real_escape_string($gameTitle)."%'";
    
相关问题