Suchergebnisse direkt anzeigen

In einem kleinen Verwaltungsprogramm werden dutzende Einzeltitel erfasst. Bei der Ausgabe steht man vor der Qual der Wahl: Soll man die Einträge auf einzelne Seiten gruppieren oder als Index anzeigen? Warum nicht einfach mal über ein Suchfeld: Während der Eingabe wird live das Suchergebnis dargestellt und kann so schnell immer besser verfeinert werden.

Beispiel: So soll der Filter aussehen.
Beispiel: So soll der Filter aussehen.

Nach Einbindung einer aktuellen jquery-Version wird im HTML-Code das Formular mit dem Suchfeld eingefügt sowie ein div-Element für das anzuzeigende Ergebnis:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>">
<fieldset>
     <label for="filter">Filtern nach: </label>
     <input type="text" name="search" id="search" />
     <div>Um alle Mitarbeiter anzuzeigen, geben Sie das Zeichen * ein.</div>
     </fieldset>
</form>
<div id="results"></div>

Außerdem benötigen wir den jQuery-Teil, vorzugsweise am Ende der Seite:

<script type="text/javascript">
$(function() {    
     $('#search').keyup(function() {
          if($(this).val().length > 0) {
               $.get("mysqlabfrage.php", {search: $(this).val()}, function(data) {
                    $("#results").html(data);
               });
          }
     });
});
</script>

Bei Eingabe eines Zeichens wird die php-Datei „mysqlabfrage.php“, in der das entsprechende Select-Statement sowie die Ausgabe abgespeichert sind, aufgerufen und das Ergebnis in das DIV mit der ID „results“ zurückgeschrieben.

Die zugehörige php-Abfrage für den Datenbank-Zugriff sieht dabei so ähnlich wie hier aus:

<?php
$dbconnect = mysql_connect("host", "benutzername", "passwort");
mysql_set_charset("utf8");
$query = "use datenbankname";
if ( !mysql_query($query, $dbconnect) )
     die("Die Datenbank existiert nicht."); 
if($_GET['search'] == "*")
    $sql = mysql_query("SELECT * FROM tabelle ORDER BY name ASC;", $dbconnect);
else
    $sql = mysql_query("SELECT * FROM tabelle WHERE name LIKE '%" . $_GET['search'] . "%'
ORDER BY name ASC;", $dbconnect);
while($row = mysql_fetch_object($sql)) {
     echo "<br />".$row->name;
}
?>

Bei der Suche selbst wird unterschieden, ob ein Stern-Symbol eingegeben wurde oder nicht. Falls ja, wird der gesamte Inhalt der Tabelle dargestellt.

Schwerpunkt: , ,

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.