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.

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.