0

我是编程的绝对菜鸟,在过去 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 字段而没有其他内容时,它不会返回任何内容。我想如果 get 变量是空白的,我会附加一个 * 并且它会返回任何内容,但事实并非如此 :( 我一直在搜索,但我认为我的问题是我不知道要搜索的正确单词以找到解决我的问题...

任何帮助将不胜感激。

4

3 回答 3

2

我自己用这个实现了一个站点,我强烈推荐Sphinx。这是 craigslist 使用的。它足够简单,可以满足您的需求,但又足够强大,可以与您一起成长。

另一种选择是ElasticSearch,我听说它也非常好。

于 2013-07-26T01:53:49.210 回答
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 以仅包含具有值的子句会创建更有效的查询。

于 2013-07-26T01:53:44.807 回答
0

要么让你的用户浏览“所有”——用例 = 一些寻找奇怪物品的收藏家。

或者您有一个“搜索依据”下拉菜单,让您的用户至少选择一个搜索类别。

如果所有搜索条件都是空白的,您可以只发送一条错误消息——但这比引导他们通过一组搜索选项屏幕更容易惹恼用户。

于 2013-07-26T02:03:19.417 回答