2011-09-04 73 views
1

这是我第一次创建搜索过滤器。我记住了“切换语句”。无论用户输入什么关键字,都应该检查switch语句。该switch语句将检查值是否存在于mysql数据库中。如果它存在,那么它将在一个表中显示信息。如果不是,那么它将重定向到“NoResultsFound.html”。到目前为止,这是我的想法。我对么?如果不是,我应该修改什么?如何在php中创建搜索过滤器?

+1

你不能猜测用户输入,让他们在交换机! 您必须接受用户输入并运行LIKE'%userinput%'查询来查看您是否得到结果。 –

+0

请解释..是'“。$ userinput。”'与%userinput%相同吗? – deepz

+1

猜测您有用于用户输入关键字的POST表单。 <形式方法= “邮报”> \t <输入名称= “关键词” 值= “类型的关键字在这里”/> \t ... 后提交你拿$关键字= mysql_real_escape_string($ _ POST [ '关键字' ]); 然后你做一个查询:“select * from'dbname' where field like'%'。$ keyword。”%'“; –

回答

2

好吧,“关键字”一词有一个特殊的含义,与ArtistName和SongName无关。

因此,从所有字段的子字符串搜索开始。

$search = mysql_real_escape_string($_GET['search']); 
$query = "SELECT * FROM table WHERE ArtistName LIKE '%$search%' OR SongName LIKE '%$search%'"; 

另请注意,在任何地方重定向用户都没有用处。只需保持在同一页面上,在搜索字符串中显示输入值(通过htmlspecialchars()处理),然后让用户编辑它并进行其他搜索

+0

谢谢,你清除了我的疑问:) – deepz

+0

好的解决方案,但我更喜欢addslashes或任何其他PHP函数,不需要打开数据库连接来逃脱字符串 – eric

+0

@eric当你要逃跑但没有任何连接时,不会出现这种情况 –

4

为什么不使用SQL来完成这项工作?

SELECT * FROM wherever WHERE keywords LIKE '%keyword%' 

这将返回该行匹配关键字,如果它返回一个空的记录,你可以将其重定向到NoResultsFound.html

+0

是的,我正在考虑把这个查询放在我的switch语句中,因为我有像ArtistName,SongName这样的列。所以无论用户输入什么,它都应该与这些列匹配。 – deepz

+0

@deepz这个switch语句有什么用? –

+0

switch语句与多个if ... else类似,如果在一个块中。如果第一种情况返回false,那么它将打破下一个情况,依此类推。但是,你为什么问? switch语句不适合在搜索过滤器中使用吗? – deepz

1

您只需将搜索关键字添加到查询中,然后检查查询是否返回任何结果。 我将把我已经建立了一个简单的数据库连接类(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(); 

让我知道,如果这有助于。

+0

这一款也适用:) – deepz

+0

@deepz很乐意帮忙。希望你也能找到这个php类。干杯! –

+0

是的,我做到了。我从你们所有人那里学到了很多东西。我非常感谢每一个评论,我非常感谢。:) – deepz