template

Index :: PHP/MySQL :: Suche nach Datensätzen (1 Suchfeld)

Die allgemeinste Form der Suche bietet dem Benutzer ein Formular mit einem einzeiligen Textfeld zur Eingabe des Suchbegriffs sowie einer Schaltfläche (meist ein Button) zum Starten der Aktion. Sollte es mehrere recherchierbare Datenbankfelder geben, kann man zusätzlich noch eine ComboBox zur Verfügung stellen, in der alle relevanten Feldnamen aufgelistet sind.
Der HTML-Code (hier in suche.php) könnte so aussehen:
<form action='liste.php' method='post'>
Feld: <select name='fnr' size='1'>
<option value='1'>Vorname</option>
<option value='2'>Nachname</option>
<option value='3'>Personalnummer</option>
</select><br>
Begriff: <input type='text' name='search' size='16' maxlength='24'><br>
<input type='submit' value='Suche'><br>
</form>
Man könnte in option.value zwar den jeweiligen DB-Feldnamen direkt hinterlegen, aber aus Sicherheitsgründen verwenden wir nur eine Nummer: es geht den Benutzer nichts an, wie die Feldnamen in der Datenbank wirklich heißen!

Das empfangende Skript (hier: liste.php) wertet dann die Eingaben aus:
Php Einleitung
$fshow = array("", "Vorname", "Nachname", "Personalnummer"); // Anzeigenamen d. Felder if ($fnr = intval($_POST['fnr'])) { $search = str_replace("'", "", trim($_POST['search'])); switch ($fnr) { //---- DB-Feldname u. Operator bestimmen case 1: $fnam = "Vorname"; $op = 1; break; case 2: $fnam = "Nachname"; $op = 1; break; case 3: $fnam = "PersNr"; $op = 2; break; default: "Ung&uuml;ltige FeldNr"; exit; // Fehler } switch ($op) { //---- Bedingung formulieren case 1: $srch = " LIKE '%". $search ."%'"; break; // Text-Muster case 2: $srch = "=". ($search = intval($search)); break; // numerische Idendität } $query = "SELECT * FROM benutzer WHERE ". $fnam . $srch; // Query bauen $total = mysql_num_rows($result = mysql_query($query)); // Anzahl Treffer } else { echo "Falscher Aufruf"; exit; } // Fehler
Weiter unten, im BODY:
<?php //---- Resultat der Suche anzeigen echo "Suchergebnis ('"; switch ($op) { case 1: echo htmlentities($search), "' in "; break; // Text-Muster case 2: echo $search, "' als "; break; // numerische Idendität } echo $fshow[$fnr], "): ", ($total? $total: "keine"), " Benutzer gefunden."; if ($total) { ?> <!---- hier Liste anzeigen, evtl. als Tabelle ----> <?php } ?>
Im switch($fnr)-Block ermitteln wir neben dem DB-Feldnamen auch den Operator, weil in diesem Beispiel 2 Vergleichsarten möglich sind:
Weitere denkbare Varianten wären:
Im switch($op)-Block wird dann die Bedingung je nach Operatorsyntax passend formatiert.

Index :: PHP/MySQL


template