1

我正在整理一个使用 PHP 和 MySQL 来复制(或非常相似)该站点的练习站点。截至目前,我的可搜索字段包括:租金(最小-最大)、租赁类型(任何、公寓、房屋)、卧室数量(任何、1+、2+、3+、4+)

到目前为止,我在整理代码方面没有遇到任何问题,我只是担心扩展问题并想知道什么是最佳实践。此外,任何关于如何复制我链接的网站上的“侧边栏过滤器搜索”的建议(eBay 也有非常相似的东西)都会很棒。

这是我遇到岔路的地方:我是单独处理 MySQL 查询中的每个字段过滤器,还是调用表中的所有项目,然后在 PHP 中过滤它们?

    $sql = "SELECT * FROM properties ";

$properties = Property::find_by_sql($sql);
$matched_properties = array();
foreach($properties as $property):
    if ($min_rent <= $property->rent && $property->rent <= $max_rent) {
        $matched_properties[] = $property;
    }
endforeach;

上面的代码从 MySQL 中的“属性”表中提取所有内容,并创建一个属性类(基本 CRUD 类)数组。

抱歉,如果我听起来很混乱,但我的主要问题是如何复制过滤后的搜索,例如在本网站或 eBay.com 上的搜索?我在正确的道路上吗?

谢谢

4

1 回答 1

0

一般而言,您必须从数据库中提取并在 PHP 中处理的数据越少越好。您必须编写的代码更少,产生的错误更少,通过软件堆栈传输的数据更少,等等。您可能需要阅读如何编写更复杂的 SQL 查询。以下将是您提供的代码片段的更有效版本:

$sql = "SELECT * FROM properties WHERE rent >= $min_rent AND rent <= $max_rent";
$matched_properties = Property::find_by_sql($sql);

不过,为了安全起见,您需要确保$min_rent$max_rent验证为实数。(提示:传递输入is_numeric()并在此函数返回时抛出错误false。)否则黑客可以执行所谓的代码注入,输入其他 SQL 查询字符串片段代替“min_rent”或“max_rent”来进行查询做很多不受欢迎的事情。

至于实现像爱荷华大学那样的过滤机制,只需在侧边栏中添加链接或表单,单击时刷新页面即可。您可以通过多种方式做到这一点。最酷的方法可能是使用 AJAX 自动更新主内容窗口。爱荷华大学网站似乎没有这样做,因为当我单击侧边栏中的各种过滤器链接时,整个页面都会刷新,而不仅仅是主要内容区域。

jQuery是一个非常有用的 JavaScript 库,它可以帮助您以最少的代码编写 AJAX。一探究竟。基本上,您需要构建过滤器侧边栏,以便单击的每个链接都会对您的服务器进行 AJAX 查询,该查询会根据用户选择的过滤器提取更新的数据集。当 AJAX 调用返回结果时,您可以使用 JavaScript 和/或 jQuery 方法根据需要将数据注入您的页面。

祝你好运!

于 2011-07-14T07:47:00.743 回答