2012-04-13 16 views
3

Ich frage mich, wie die folgenden am besten zu tun mit PHP/MySQL und jQuery:Suche mit PHP/MySQL und aktualisiert dynamisch mit jQuery

Es ist eine grundlegende Suchmaske, wo Sie eine Stadt und eine aus-zu betreten Datum. Sie bearbeiten auf der Suchergebnisseite, wo Sie Ihre Suchergebnisse mit bestimmten Parametern (Kontrollkästchen, jQuery-Schieberegler, Texteingabe, ...) eingrenzen können. Die Suchergebnisse sollten dann im laufenden Betrieb aktualisiert werden, ohne dass die ganze Seite neu geladen wird ...

Ich verwalte jQuery ajax und lade, um Informationen an eine andere php-Datei zu senden, z. a SELECT und gibt die Ergebnisse an die Suchdetailseite zurück, aber ich weiß nicht, wie man verschiedene Änderungen kombiniert, die die Suchergebnisse eingrenzen.

Darüber hinaus gibt es bereits Ergebnisse auf der Detailseite, so brauche ich nicht mehr Ergebnisse hinzufügen, aber „löschen“, um die Ergebnisse, die nicht passen mehr ...

Die Sache ist die, dass jeder Parameter zu eng Die Suche ist mit einer anderen Tabelle in der Datenbank verbunden. Muss ich und wie füge ich Joins zur ursprünglichen Abfrage hinzu ...? Oder denke ich in die falsche Richtung?

Antwort

2

Ja, das ist absolut die richtige Richtung. Verwenden

$(document).ready(function() { 

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

}); 

die Ergebnisse zu erhalten, wenn der Benutzer auf der Seite zum ersten Mal bekommt, um die Ergebnisse zu erhalten nach Ihrer Stadt und Ihren Reisedaten ein.

Überprüfen Sie in der load.php, welche Parameter gesetzt sind und verwenden Sie diejenigen, die zum Erstellen Ihrer Abfrage gesetzt sind.Dann, wenn das Formular (oder die Formulare, abhängig) aktualisiert werden, müssen Sie .load erneut verwenden, wie folgt:

$('#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

ja, ich sehe ... danke Helmut für die ausführliche Antwort mit einem praktischen Beispiel auch! Es ist eine gute Idee, das Dokument auch bereit zu laden! Danke vielmals! – Chris

1

Holen Sie sich die ersten Tupel über PHP/MySQL, speichern Sie sie in einer Javascript-Struktur und erstellen Sie den HTML-Code, der benötigt wird, um die Daten mit Javascript aus dieser Struktur anzuzeigen.

Immer wenn Sie die Daten filtern möchten, schreiben Sie den HTML-Code neu und überprüfen den Filterzustand im laufenden Betrieb, z. Schreiben Sie keine Tupel aus der Struktur, die nicht zu Ihrer Filterbedingung passen.

können Sie sehen, wer dies bei http://www.wowhead.com

nur ein Weg, Das ist natürlich getan. ;-)

+0

so muss ich das HTML jedes Mal neu schreiben? das war was ich mich gefragt habe ... danke Basti, der Link ist nett! :) Hast du das gemacht? – Chris

+0

Nein, das ist nicht meine Seite. ;-) Das Umschreiben des HTML bei jeder Änderung mag ineffizient klingen, aber es ist kein Problem, da das Umschreiben im Browser des Benutzers geschieht. Sie müssen das Lochdatenpaket nur einmal serversichern. Sie können sogar Komprimierung verwenden. – Basti

0

Sie könnten immer Code schreiben, um eine SQL-Abfrage basierend auf übergebenen Argumenten zu generieren.

Sie Ajax könnte die Seite mit einer Reihe von Argumenten zusätzlich zu Ihrer Basisstadt und Von-zu-Datum abfragen, basierend auf dem, was der Benutzer ausgewählt hat. Wenn Ihre Seite die zuvor ausgewählten Suchoptionen beibehält, sollte es möglich sein, dass der Benutzer einfach weitere Optionen hinzufügen und sie auf die gleiche Weise weiterverarbeiten kann. Ihr PHP würde dann testen, ob die Argumente in der Variablen $ _POST oder $ _GET gesetzt sind ($ _POST ist generell sicherer für AJAX, aber mein Beispiel verwendet einfach $ _GET) und erstellt die Abfrage so.

Beispiel:

Javascript eine Abfrage wie searchAjaxHandler.php?city=Chicago&from=2012-03-01&to=2012-03-05&someColumnLowerRange=500&someColumnUpperRange=700 verarbeitet dann

Ihr PHP-Skript erzeugt wie folgt:

$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 

Nach all dem ist die Javascript-Seite würde nur auf die gleiche Sache waren Sie Tun Sie vorher, indem Sie alle vorherigen Ergebnisse durch die Ergebnisse ersetzen, die Sie erhalten haben.

Verwandte Themen