2017-11-25 206 views
0

我有这个问题与PHP。我想做的事情是建立一个包含三个过滤器的搜索引擎:按标题,描述和价格搜索。 这是我的索引html。如何在php中创建搜索过滤器

<form style="text-align:center;" method="get" action="search.php"> 
    <label> 
    Search 
    <input type="text"name="keywords" autocomplete="off"> 
    </label> 
    <input type="submit" value="Search"><br> 
</form> 

通过使用操作方法,我打电话给search.php文件。

if(isset($_GET['keywords'])) { 
    $keywords = $db->escape_string($_GET['keywords']); 

    $query = $db->query("SELECT title, description, price FROM products WHERE title LIKE '%{$keywords}%' OR description LIKE '%{$keywords}%' OR price LIKE '%{$keywords}%'"); 
} 

不是它结合了所有的结果之一,因为我使用的是同一个变量的关键字。 现在的问题是我没有过滤器,因为我不知道如何创建它。也许我希望有一个下拉选择与这三个选项:标题,描述,价格。但我不知道如何让我的PHP代码看看哪一个被选中。或者,也许我的想法有更好的解决方案? 我应该使用不同的变量,如关键字是或什么?

回答

1

这是简单的..添加一个选择标签。这里是一个例子。

<!doctype html> 
<html> 
<head> 
    <title>filter</title> 
</head> 
<body> 
<form method="post" action="test1.php"> 
    <select name="keywords" > 
    <option value="title">title</option> 
    <option value="description">description</option> 
    <option value="price">price</option> 
    </select> 
    <input type="submit"> 
</form> 

<?php print_r($_POST); 
if(isset($_GET['keywords'])) { 
    $keywords = $db->escape_string($_GET['keywords']); 

    $query = $db->query("SELECT title, description, price FROM products WHERE '%{$keywords}%' LIKE '%{$keywords}%' "); 
} 

?> 
<br> 


</body> 
</html> 
1

是的。除了你必须保护你的代码注入

if(isset($_GET['keywords']) && isset($_GET['field'])) { 
     $keywords = $db->escape_string($_GET['keywords']); 
     $sql="SELECT title, description, price FROM products WHERE ". $_GET['field'] ." like '%{$keywords}%'" ; 
     $query = $db->query($sql); 
    } 

:您必须添加一个选择,以限制搜索的领域:

<form style="text-align:center;" method="get" action="search.php"> 
    <label> 
    Search 
    <input type="text"name="keywords" autocomplete="off"> 
    </label> 
<select name="field"> 
    <option value="title">title</option> 
    <option value="description">description</option> 
    <option value="prcie">price</option> 
</select> 

    <input type="submit" value="Search"><br> 
</form> 

和PHP。

+0

感谢解决方案!我该如何保护我的注入代码?你能给我一些关于它的信息吗? – CaL17

+1

@ CaL17 [我怎样才能防止SQL注入在PHP?](https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) – FirstOne

+0

我猜有些东西是错误的这个“。$ _GET ['field']。”。这是一个语法问题或quatation标记问题。它不适合我,我的编辑表明这是不正确的 – CaL17

1

拆分输入字符串以单一关键字explode功能

$keywords = "world word2"; 
$keywords_arr = explode(" ",$keywords); 
echo $keywords_arr[0];