我是编程的绝对菜鸟,过去10天左右我一直在建立一个“买卖交易”网站。
无论如何,我已经到了能够让人们注册,发布广告并回复它们的地方......但是现在我想要一个可以搜索广告的页面。
搜索表单适用于3个字段,“制作”,“模型”和“口径”(网站用于枪支)
<form action="" method="get" autocomplete="off">
I'm looking for a
<input type="text" name="make" class="autosuggestmake" placeholder="Manufacturer"/>
<div class="dropdown">
<ul class="resultmake"></ul>
</div>
<input type="text" name="model" class="autosuggestmodel" placeholder="Model"/>
<div class="dropdown">
<ul class="resultmodel"></ul>
</div>
in
<select name="caliber" >
<option value="*">(Caliber) Any</option>
<option value=".177">.177</option>
<option value=".20">.20</option>
<option value=".22">.22</option>
<option value=".25">.25</option>
</select>
<input type="submit" value="Search" />
这是我用这段代码发现的GET数据:
$advert = new Advert;
if (empty($_GET) === true){
$adverts = $advert->fetch_all();
} else {
$search_make = $_GET['make'];
$search_model = $_GET['model'];
$search_caliber = $_GET['caliber'];
$adverts = $advert->fetch_results($search_make, $search_model, $search_caliber);
}
我的fetch_results查询是这样的:
class Advert {
public function fetch_results($search_make, $search_model, $search_caliber) {
global $pdo;
$search_caliber = mysql_real_escape_string($search_caliber);
$search_make = mysql_real_escape_string($search_make);
$search_model = mysql_real_escape_string($search_model);
if (empty($search_make) === true){
$search_make = "*";
}
if (empty($search_model) === true){
$search_model = "*";
}
$query = $pdo -> prepare("SELECT * FROM `adverts` WHERE make = '$search_make' AND model = '$search_model' AND caliber = '$search_caliber'");
$query -> execute();
return $query -> fetchAll();
}
关于我的最后一个问题,有人告诉我开始使用PDO,所以我做了:)
我的问题是当某人填写我的表单上的make字段时,没有别的东西它什么都不会返回。我想如果获取变量是空白的我会追加一个*它会返回任何东西,但事实并非如此:(我一直在搜索,但我认为我的问题是我不知道正确的单词搜索找到治愈我的问题...
非常感谢任何帮助。
答案 0 :(得分:2)
我自己实施了一个网站,强烈推荐Sphinx。这就是craigslist使用的。它足够简单,满足您的需求,但又足以与您共同成长。
另一种选择是ElasticSearch,我被告知也非常好。
答案 1 :(得分:0)
您可以采取两种方法。一种是根据搜索条件在php中重写查询。
另一个是SQL解决方案:
SELECT *
FROM `adverts`
WHERE ('$search_make' = '' or make = '$search_make') AND
('$search_model' or model = '$search_model') AND
('$search_caliber' or caliber = '$search_caliber');
但是,如果表中的列上有索引,则此查询可能不会使用索引。编写php以仅包含带有值的子句可以创建更有效的查询。
答案 2 :(得分:0)
要么让你的用户浏览“全部” - 使用案例=某些收藏家寻找奇怪的物品。
或者您有一个“搜索依据”下拉菜单,让您的用户至少选择一个搜索类别。
如果所有搜索条件都为空白,您可以发送错误消息 - 但这会让用户感到烦恼,而不是通过一组搜索选项屏幕引导他们。