2012-04-13 37 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端只想給你同樣的事情通過將所有以前的結果替換爲您返回的結果來執行之前的操作。