0

通过阅读和搜索网络,我设法构建了一个 HTML 表单和 PHP 脚本,它将在我拥有的 MySQL 数据库上进行文本搜索。我可以让它从输入到表单中的 1 个字段的文本中成功搜索。我想知道如何扩展它,以便我可以给用户 2 个字段,他们可以在 1 个或两个字段中输入数据以优化他们的结果,即搜索所有名为“John”的条目,或所有名为“John”的条目 & in “都柏林”之城。我尝试了许多对 MySQL 查询的操作,但未能成功使其令人满意地工作。如何编写下面的代码以使其正常工作?

我的 HTML 表单代码是:

<form method="POST" action="search.php" name="formid">
   Name: <input type="text" name="query" /><br>
   City: <input type="text" name="city" /><br>
   <input type="submit" name="submit" value="Start Search" />
</form>

&PHP代码是:

<?php

include 'db_details.php';

$connection = mysql_connect($server, $user, $password);

mysql_select_db($db, $connection);

$query=mysql_real_escape_string($_POST['query']);

$query = htmlspecialchars($query);

$result=mysql_query("SELECT * FROM colour WHERE (firstname LIKE '%".$query."%') ", $connection) or die ("Cannot run query");

echo "<h2>Search Results</h2>";

while ($row = mysql_fetch_assoc($result))
{
    foreach ($row as $attribute)
    echo "{$attribute} ";
    echo "<br>";
}

mysql_close();
?>
4

1 回答 1

0

只需将 city 字段的值放入变量中$city

$city = mysql_real_escape_string($_POST['city']);

$city = htmlspecialchars($city);

然后像这样查询它:

$result = mysql_query("SELECT * FROM colour WHERE (firstname LIKE '%".$query."%' OR city LIKE '%".$city."%') ", $connection) or die ("Cannot run query");

它将查询colour名字所在的地方$query或城市所在的所有结果$city

注意:这种方法没有优先级,匹配两个条件的颜色行的优先级不会高于只有 1 个匹配的行

对于更高级的搜索方法,我建议您也查看全文搜索

于 2013-03-13T14:51:43.713 回答