@Toxical
Ich habe das Posting noch kurz umformuliert, hier ist es wieder. 
Step 4
Datenbank durchsuchbar machen
Um unsere unglaubliche Fülle von Adressen nun durchsuchbar zu mcahen, bauen wir eine kleine Suchfunktion ein. Wir fangen erstm mal klein an, und lassen nur nach Vor- oder Nachname suchen. Dazu benötigen wir ein entsprechendes Formular, in dem neben unserer Variable "
$action" auch übergeben wird, in welcher Spalte nach was gesucht werden soll:
Code:
<form action="<?php $PHP_SELF ?>">
<table border="0" cellspacing="5">
<tr>
<td colspan="2">Nach Adressen suchen</td>
</tr>
<tr>
<td>Suchwort:</td><td><input type="text" name="suchwort"></td>
</tr>
<tr>
<td colspan="2">
Suche nach
<input type="radio" name="spalte" value="nachname" checked> Nachname oder
<input type="radio" name="spalte" value="vorname"> Vorname?
</td>
</tr>
<tr>
<td colspan="2">
<input type="hidden" name="action" value="suchen">
<input type="submit" value="Finden">
</td>
</tr>
</table>
</form>
Im Script wird dann wieder geprüft, welche Aktion (-> $action) ausgeführt werden soll. In disem Falle die Suche:
Code:
if($action == "suchen"){
$abfrage = "SELECT * FROM adressen WHERE $spalte='$suchwort'";
$ergebnis = mysql_query($abfrage, $verbindung);
$anzahl = mysql_affected_rows();
print("
<tr>
<td colspan=\"7\">$anzahl Adresse(n) gefunden:</td>
</tr>
");
while ($zeile = mysql_fetch_array($ergebnis)){
print("
<tr bgcolor=\"#CCCCCC\">
<td>$zeile[nachname]</td>
<td>$zeile[vorname]</td>
<td>$zeile[strasse]</td>
<td>$zeile[plz] $zeile[ort]</td>
<td>$zeile[telefon]</td>
<td><a href=\"$PHP_SELF?action=loeschen&id=$zeile[id]\">Löschen?</a></td>
</tr>
");
}
print("
<tr>
<td colspan=\"7\"><hr></td>
</tr>
");
}
Die Abfrage arbeitet wieder mit dem WHERE-Statement, nur, dass diesmla kein fester SQÖ-Ausdruck verwendet wird, sondern eine Abfrage aus den übergebenen Variablen zusammengebaut wird:
PHP-Code:
$abfrage = "SELECT * FROM adressen WHERE $spalte='$suchwort'" // Bitte hierzu noch mal einen Blick auf das Formular werfen
Die Script-Zweig sieht dann so aus:
PHP-Code:
f($action == "suchen"){
$abfrage = "SELECT * FROM adressen WHERE $spalte='$suchwort'";
$ergebnis = mysql_query($abfrage, $verbindung);
$anzahl = mysql_affected_rows();
print("
<tr>
<td colspan=\"7\">$anzahl Adresse(n) gefunden:</td>
</tr>
");
while ($zeile = mysql_fetch_array($ergebnis)){
print("
<tr bgcolor=\"#CCCCCC\">
<td>$zeile[nachname]</td>
<td>$zeile[vorname]</td>
<td>$zeile[strasse]</td>
<td>$zeile[plz] $zeile[ort]</td>
<td>$zeile[telefon]</td>
<td><a href=\"$PHP_SELF?action=loeschen&id=$zeile[id]\">Löschen?</a></td>
</tr>
");
}
print("
<tr>
<td colspan=\"7\"><hr></td>
</tr>
");
}
Neu ist die Funktion
mysql_affected_rows(), sie liefert die Anzahl der von der Abfrage zurückgelieferten Spalten. Diesen Wert schreiben wir in die Variable "
$anhahl" und können somit komfortabel ausgeben, wieviele Treffer gefunden wurden. Falls kein Treffer geliefert wird, erfolgt keine Ausgabe, da die Funktion FALSE zurückliefert, man kann dieses jedoch mit einer einfachen Schleife umbauen, damit zumindest eine Meldung erscheint (könnt Ihr ja mal testen).
Hier nun unser aktuelles Script:
PHP-Code:
<html>
<head>
<title>Workshop</title>
</head>
<body>
<table border="0" cellspacing="5">
<?
$verbindung = mysql_connect("localhost","root",""); // Diese Daten koennen natuerlich auch aus Variablen gelesen werden
mysql_select_db("test");
if($action == "neu"){
$abfrage = "INSERT INTO adressen (vorname,nachname,strasse,plz,ort,telefon) VALUES ('$vorname', '$nachname','$strasse','$plz','$ort','$telefon')";
mysql_query($abfrage, $verbindung);
print("<tr><td colspan=\"7\">Neuen Datensatz gespeichert!</td></tr>");
}
if($action == "loeschen"){
$abfrage = "DELETE FROM adressen WHERE id='$id'";
mysql_query($abfrage, $verbindung);
print("<tr><td colspan=\"7\">Datensatz $id gelöscht!!</td></tr>");
}
if($action == "suchen"){
$abfrage = "SELECT * FROM adressen WHERE $spalte='$suchwort'";
$ergebnis = mysql_query($abfrage, $verbindung);
$anzahl = mysql_affected_rows();
print("
<tr>
<td colspan=\"7\">$anzahl Adresse(n) gefunden:</td>
</tr>
");
while ($zeile = mysql_fetch_array($ergebnis)){
print("
<tr bgcolor=\"#CCCCCC\">
<td>$zeile[nachname]</td>
<td>$zeile[vorname]</td>
<td>$zeile[strasse]</td>
<td>$zeile[plz] $zeile[ort]</td>
<td>$zeile[telefon]</td>
<td><a href=\"$PHP_SELF?action=loeschen&id=$zeile[id]\">Löschen?</a></td>
</tr>
");
}
print("
<tr>
<td colspan=\"7\"><hr></td>
</tr>
");
}
$abfrage = "SELECT * FROM adressen";
$ergebnis = mysql_query($abfrage, $verbindung);
while ($zeile = mysql_fetch_array($ergebnis)){
print("
<tr bgcolor=\"#CCCCCC\">
<td>$zeile[nachname]</td>
<td>$zeile[vorname]</td>
<td>$zeile[strasse]</td>
<td>$zeile[plz] $zeile[ort]</td>
<td>$zeile[telefon]</td>
<td><a href=\"$PHP_SELF?action=loeschen&id=$zeile[id]\">Löschen?</a></td>
</tr>
");
}
mysql_close($verbindung);
?>
</table>
<form action="<?php $PHP_SELF ?>">
<table border="0" cellspacing="5">
<tr>
<td colspan="2">Neue Adresse eintragen</td>
</tr>
<tr>
<td>Vorname:</td><td><input type="text" name="vorname"></td>
</tr>
<tr>
<td>Nachname:</td><td><input type="text" name="nachname"></td>
</tr>
<tr>
<td>Strasse:</td><td><input type="text" name="strasse"></td>
</tr>
<tr>
<td>PLZ:</td><td><input type="text" name="plz"></td>
</tr>
<tr>
<td>Ort:</td><td><input type="text" name="ort"></td>
</tr>
<tr>
<td>Telefon:</td><td><input type="text" name="telefon">
</tr>
<tr>
<td colspan="2">
<input type="hidden" name="action" value="neu">
<input type="submit" value="Speichern">
</td>
</tr>
</table>
</form>
<form action="<?php $PHP_SELF ?>">
<table border="0" cellspacing="5">
<tr>
<td colspan="2">Nach Adressen suchen</td>
</tr>
<tr>
<td>Suchwort:</td><td><input type="text" name="suchwort"></td>
</tr>
<tr>
<td colspan="2">
Suche nach
<input type="radio" name="spalte" value="nachname" checked> Nachname oder
<input type="radio" name="spalte" value="vorname"> Vorname?
</td>
</tr>
<tr>
<td colspan="2">
<input type="hidden" name="action" value="suchen">
<input type="submit" value="Finden">
</td>
</tr>
</table>
</form>
</body>
</html>
Die Ausgabe der gesamten Datensätze erfolgt aus Gründen der Nachvollziehbarkeit immer noch parallel.