3

我想知道如何用 PHP/MySQL 和 jQuery 做到以下几点:

有一个基本的搜索掩码,您可以在其中输入城市和最新日期。您处理到搜索结果页面,然后您可以使用某些参数(复选框、jQuery 滑块、文本输入...)缩小搜索结果的范围。然后搜索结果应该即时更新,而不需要重新加载整个页面......

我设法使用 jQuery ajax 并加载将信息发送到另一个 php 文件,执行例如 SELECT 并将结果返回到搜索详细信息页面,但我不知道如何组合缩小搜索结果的不同更改。

此外,详细页面上已经有结果,所以我不需要添加更多结果,而是“删除”不再适合的结果......

问题是缩小搜索范围的每个参数都连接到数据库中的另一个表。我是否必须以及如何将连接添加到原始查询......?还是我想错了方向?

4

3 回答 3

2

是的,这绝对是正确的方向。采用

$(document).ready(function() {  

    $('#ID_OF_YOUR_ELEMENT_TO_LOAD_INTO').load("load.php?parameter1=<?php echo $parameter1; ?>&parameter2=<?php echo $parameter2; ?>");

});

在用户第一次进入页面时获取结果,根据您的城市和日期获取结果。

检查 load.php 设置了哪些参数并使用设置的参数来构建查询。然后,当表单(或表单,取决于)更新时,您必须再次使用 .load ,如下所示:

$('#ID_OF_YOUR_FORM_BEING_UPDATED').change(function() {

    $('#ID_OF_YOUR_ELEMENT_TO_LOAD_INTO').load("load.php?parameter1=<?php echo $parameter1; ?>&parameter2=<?php echo $parameter2; ?>&parameter3=<?php echo $parameter3; ?>");

});
于 2012-04-15T19:51:45.023 回答
1

通过 PHP/MySQL 获取初始元组,将它们保存到一些 Javascript 结构中并创建所需的 html,以使用该结构中的 javascript 显示数据。

任何时候你想过滤你重写html的数据并动态检查过滤条件,例如不要从不匹配你的过滤条件的结构中写入元组。

您可以在http://www.wowhead.com上查看是谁完成的

这当然只是一种方式。;-)

于 2012-04-13T15:47:41.530 回答
0

您总是可以编写一些代码来根据传递的参数生成 SQL 查询。

除了您的基本城市和从用户选择的日期之外,您的 ajax 还可以使用一堆参数查询页面。如果您的页面保留了之前选择的搜索选项,它应该能够让用户添加更多选项并继续以相同的方式处理它们。然后,您的 php 将测试是否在 $_POST 或 $_GET 变量中设置了参数($_POST 通常对于 ajax 更安全,但为了简单起见,我的示例将使用 $_GET)并构建这样的查询。

例子:

Javascript 生成一个查询,如searchAjaxHandler.php?city=Chicago&from=2012-03-01&to=2012-03-05&someColumnLowerRange=500&someColumnUpperRange=700

然后您的 php 脚本按如下方式处理:

$query = "SELECT * FROM Data WHERE City=? AND Date > ? AND Date < ?";
$arguments = array($_GET['city'], $_GET['from'], $_GET['to']);
if (isset($_GET['someColumnLowerRange'])) {
    $query .= " AND someColumn > ?";
    $arguments[] = $_GET['someColumnLowerRange'];
}
if (isset($_GET['someColumnUpperRange'])) {
    $query .= " AND someColumn < ?";
    $arguments[] = $_GET['someColumnUpperRange'];
}
//execute the query
//using PDOs (google them...they are a good way to prevent sql injection and
//support multiple database types without modifying code too much), create a
//statement with the above query in put the statement in $statement

$statement->execute($arguments); //this uses the $arguments array to fill in the prepared statement's ?'s

//then do the stuff to get the retrieved rows out of the result returned

毕竟,javascript 端将通过将所有先前的结果替换为您返回的结果来完成与您之前所做的相同的事情。

于 2012-04-13T15:47:55.430 回答