【问题标题】:Search with PHP/MySQL and dynamically update with jQuery使用 PHP/MySQL 搜索并使用 jQuery 动态更新
【发布时间】:2012-04-25 23:11:07
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: php mysql search jquery


    【解决方案1】:

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

    $(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; ?>");
    
    });
    

    【讨论】:

    • 是的,我明白了...谢谢 Helmut 也提供了一个实际示例的详细答案!加载准备好的文档也是一个好主意!非常感谢!
    【解决方案2】:

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

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

    你可以在http://www.wowhead.com看到这是谁做的

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

    【讨论】:

    • 那么,我每次都需要重写html吗?这就是我想知道的……谢谢巴斯蒂,链接很好! :) 你这样做了吗?
    • 不,这不是我的网站。 ;-) 在每次更改时重写 html 可能听起来效率低下,但这没问题,因为重写发生在用户的浏览器中。您只需要提供一次孔数据包。你甚至可以使用压缩。
    【解决方案3】:

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

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

    例子:

    Javascript 生成类似searchAjaxHandler.php?city=Chicago&amp;from=2012-03-01&amp;to=2012-03-05&amp;someColumnLowerRange=500&amp;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 端将通过将所有先前的结果替换为您返回的结果来完成与您之前所做的相同的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-31
      • 2014-10-04
      • 1970-01-01
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多