2012-04-13 38 views
3

更新我不知道如何做到以下几点最好的PHP/MySQL和jQuery:搜索使用PHP/MySQL和动态使用jQuery

还有就是你进入一个城市和一个从-TO-一个基本的搜索屏蔽日期。您处理到搜索结果页面,然后您可以使用特定参数(复选框,jQuery滑块,文本输入...)缩小您的搜索结果。然后搜索结果应该即时更新,整个页面不会被重新加载...

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

此外,已经有结果的详细信息页面上,所以我并不需要添加更多的结果,但“删除”不适合了,结果......

的事情是,每个参数来缩小搜索连接到数据库中的另一个表。我必须如何添加连接到原始查询...?还是我在错误的方向思考?

回答

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

}); 
+0

是的,我明白了......谢谢您Helmut的详细解答,并附带一个实际的例子!加载文档也是一个好主意!万分感谢! – Chris 2012-04-15 20:02:01

1

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

任何时候你想过滤你重写html的数据并检查过滤条件,例如,不要从结构中写出不符合过滤条件的元组。

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

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

+0

所以,我需要每次都重写html?这是我想知道的......谢谢巴斯蒂,链接很好! :) 你做了这个了吗? – Chris 2012-04-13 16:48:34

+0

不,这不是我的网站。 ;-)在每次更改时重写html可能听起来效率很低,但这并不是问题,因为重写发生在用户的浏览器中。你只需要一次服务孔数据包。你甚至可以使用压缩。 – Basti 2012-04-13 20:42:12

0

您可以随时编写一些代码来生成基于传递参数的SQL查询。

您可以根据用户选择的内容,使用除了基本城市以外的一系列参数查询页面。如果您的页面保留了之前选择的搜索选项,它应该能够让用户添加更多选项并以相同的方式继续处理它们。然后你的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端只想给你同样的事情通过将所有以前的结果替换为您返回的结果来执行之前的操作。