如何在php中创建搜索过滤器?
问题描述:
这是我第一次创建搜索过滤器。我记住了“切换语句”。无论用户输入什么关键字,都应该检查switch语句。该switch语句将检查值是否存在于mysql数据库中。如果它存在,那么它将在一个表中显示信息。如果不是,那么它将重定向到“NoResultsFound.html”。到目前为止,这是我的想法。我对么?如果不是,我应该修改什么?如何在php中创建搜索过滤器?
答
好吧,“关键字”一词有一个特殊的含义,与ArtistName和SongName无关。
因此,从所有字段的子字符串搜索开始。
$search = mysql_real_escape_string($_GET['search']);
$query = "SELECT * FROM table WHERE ArtistName LIKE '%$search%' OR SongName LIKE '%$search%'";
另请注意,在任何地方重定向用户都没有用处。只需保持在同一页面上,在搜索字符串中显示输入值(通过htmlspecialchars()
处理),然后让用户编辑它并进行其他搜索
答
为什么不使用SQL来完成这项工作?
SELECT * FROM wherever WHERE keywords LIKE '%keyword%'
这将返回该行匹配关键字,如果它返回一个空的记录,你可以将其重定向到NoResultsFound.html
。
答
您只需将搜索关键字添加到查询中,然后检查查询是否返回任何结果。 我将把我已经建立了一个简单的数据库连接类(PHP)(here),因为它可以更容易地解释:
$keyword = mysql_real_escape_string($_POST['keyword']);
$db = new Database();
$db->connect(DB_NAME,DB_HOST,DB_USER,DB_PASS);
$query = "SELECT your_field FROM your_table WHERE target_field LIKE '%".$keyword."%'";
$result = getAssocArray($query);
if (!empty($result)) {
// do something if there is at least a match
}
else {
// do something if there is not match
}
$db->disconnect();
让我知道,如果这有助于。
你不能猜测用户输入,让他们在交换机! 您必须接受用户输入并运行LIKE'%userinput%'查询来查看您是否得到结果。 –
请解释..是'“。$ userinput。”'与%userinput%相同吗? – deepz
猜测您有用于用户输入关键字的POST表单。 \t \t ... 后提交你拿$关键字= mysql_real_escape_string($ _ POST [ '关键字' ]); 然后你做一个查询:“select * from'dbname' where field like'%'。$ keyword。”%'“; –