| |
Teil 4 Datensätze aktualisieren
Wir haben jetzt zwar eine Datenbank, in die wir sowohl Daten einfügen als auch abfragen können, aber was machen wir, wenn wir veraltete Datensätze löschen, oder bestehende aktualisieren wollen?
Dafür gibt es bei MySQL die UPDATE- und DELETE- Anweisung. Dazu im Folgenden mehr.
(1) Online Update in Datenbank Flohmarkt programmieren:
Wollen wir einen Datensatz in unserem Flohmarkt aktualisieren, so verwenden wir die UPDATE-Anweisung. UPDATE-SET und eine andere Art, die Daten aus der Datenbank zu fischen, das ist es, was wir in diesem Teil lernen werden.
<html>
<head>
<title>Aktualisierung von Flohmarkt</title>
</head>
<body>
<?
$db = mysql_connect("localhost", "root");
mysql_select_db("flohmarkt",$db);
if ($id) {
if ($submit) {
$sql = "UPDATE eintraege SET name='$name', vorname='$vorname', email='$email', datum='$datum', eintrag='$eintrag', preis='$preis', goa='$goa' WHERE id=$id";
$result = mysql_query($sql,$db);
echo "Die Informationen wurden aktualisiert.\n";
}
else {
$sql = "SELECT * FROM eintraege WHERE id=$id";
$result = mysql_query($sql,$db);
$myrow = mysql_fetch_array($result);
?>
<form method="post" action="<? echo $PHP_SELF?>">
<input type=hidden name="id" value="<? echo $myrow["id"] ?>">
Vorname:<input type="Text" name="vorname" value="<? echo $myrow["vorname"] ?>"><br>
Name:<input type="Text" name="name" value="<? echo $myrow["name"] ?>"><br>
Email:<input type="Text" name="email" value="<? echo $myrow["email"] ?>"><br>
Datum:<input type="Text" name="datum" value="<? echo $myrow["datum"] ?>"><br>
Eintrag:<textarea rows="7" cols="30" name="eintrag"><? echo $myrow["eintrag"] ?></textarea><br>
Preis:<input type="Text" name="preis" value="<? echo $myrow["preis"] ?>"><br>
Angebot(0) / Gesuch(1):
<?
if($myrow["goa"]==0) {
?>
<select name="goa" size="1">
<option value="0">Angebot
<option value="1">Gesuch
</select><br>
<?
} else {
?>
<select name="goa" size="1">
<option value="1">Gesuch
<option value="0">Angebot
</select><br>
<?
}
?>
<input type="Submit" name="submit" value="Aktualisieren!">
</form>
<?
}
}
else {
$result = mysql_query("SELECT * FROM eintraege",$db);
while ($myrow = mysql_fetch_array($result)) {
printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PHP_SELF, $myrow["id"], $myrow["name"], $myrow["vorname"]);
}
}
?>
</body>
</html>
(2) UH? Ist das ne Menge unverständliches Zeug ....
Keine Angst, das wird jetzt alles Schritt für Schritt erklärt. Allerdings glaube ich, es ist besser, erstmal das Skript auszuführen, oder die folgende kurze Erklärung zum Ablauf des Skriptes zu lesen. Beim ersten Aufruf des Skriptes erhalten wir eine Liste von allen Einträgen, und zwar die Angabe des Namens und Vornamens des Eintragenden. Anhand dieser Liste können wir unseren zu aktualisierenden Eintrag ansteuern. Wenn man hier nämlich auf einen Namen klickt, dann wird mit dem Link eine sog. ID übermittelt, und wen wundert's - das ist die $id, die in der Datenbank fortlaufend automatisch eingefügt wird.
Nach dem Klick auf den ausgesuchten Eintrag, erhalten wir ein Formularfeld, in welchem die bisherigen Angaben stehen. Hier editieren wir die Einträge, drücken auf "Aktualisieren!" und erhalten einen Bestätigungsscreen, daß die Informationen aktualisiert wurden. That's it!
Aber nun zum Skript selber: Fangen wir mit bekanntem an:
$db = mysql_connect("localhost", "root");
mysql_select_db("flohmarkt",$db);
stellt wie gehabt die Verbindung zum Server her und öffnet die Datenbank. Jetzt folgen erstmal zwei if-Abfragen. if($submit) kennen wir ja schon, diese Variable ist auf true gesetzt, wenn ein Submit-Button gedrückt wurde. In diesem Falle ist es der Aktualisieren-Button, den wir beim ersten Aufruf des Skriptes nicht sehen.
if ($id) fragt ab, ob die Eintragsliste mit Name, Vorname schon angezeigt wurde, und hier ein Eintrag ausgewählt wurde. Beim ersten Start des Skriptes, sind also beide Variablen ($submit und $id) auf false gesetzt, und daher ignoriert das Skript den folgenden Code. Das wollen wir jetzt auch erstmal tun, und schauen, wohin das Skript springt.
else {
$sql ="SELECT * FROM eintraege":
$result = mysql_query(sql, $db);
while ($myrow = mysql_fetch_array($result)) {
printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PHP_SELF, $myrow["id"], $myrow["name"], $myrow["vorname"]);
}
Jup, genau hier treffen wir uns wieder. Und Wunder ach, das meiste kommt uns doch sehr bekannt vor. In der Variablen $sql halten wir den QUERY (Den Query in eine solche Variable auszulagern hat immense Vorteile). In $result lesen wir unsere Abfrageergebnisse ein. Soweit alles wie gehabt. Die "While-Schleife" sieht nun etwas anders aus, aber nix schlimmes: Hier habe ich einfach mal der Vollständigkeit halber, eine andere Abfrage-Art gewählt. Haben wir bisher immer auf die Felder des "gefetchten" Array mit Index-Nummern zugegriffen (Was schnell mal sehr unübersichtlich werden kann), so greifen wir mittels der "mysql_fetch_array()" - Funktion auf die Array-Felder mittels der Namen zu. Das sieht man dann auch in der printf() - Funktion. Hier wird der Wert von ID nach $myrow["id"] zugewiesen. Also, welche Version man benutzt ist Geschmackssache, und abhängig von der Größe des Projekts. Nummern sind schneller mal geschrieben, aber unübersichtlicher.
(3) Auf, ans Eingemachte ...
Nun müssen wir uns doch mal an die einzelnen if-Abfragen heranwagen. ist aber gar nicht so schlimm, wie es aussieht. Also, Wir haben bei der if-Abfrage zwei Möglichkeiten. Gehen wir logisch vor. Wir haben beim Aufruf des Skriptes alle Einträge anhand von Namen und Vornamen des Eintragenden vorliegen. Und jetzt haben wir einen Namen (also Eintrag) ausgewählt. Mit dem Klick wird an das gleiche Skript die Variable $id übermittelt. Also können wir davon ausgehen, das die if-Abfrage bzgl. der $id wahr ist. Die if-Abfrage nach $submit ist allerdings nicht wahr, denn $submit ist noch nicht gesetzt. Also, wo landen wir? Genau:
else {
$sql = "SELECT * FROM eintraege WHERE id=$id";
$result = mysql_query($sql,$db);
$myrow = mysql_fetch_array($result);
[...]
}
Anhand des obigen Auszuges Wird genau der Eintrag aus der DB ausgewählt und in dem folgenden Formularfeld angezeigt, den wir zuvor ausgewählt hatten. Das System ist bekannt, alle Befehle auch. Daher muss ich dazu wohl nicht mehr viel sagen. Kommen wir also zum letzten Teil. Haben wir unsere Aktualisierung in den Fields vorgenommen und den "Aktualisieren!" - Button gedrückt, so haben wir auch $submit auf true gesetzt. Wichtig hierbei: Die Variable $id wird mittels eines "Hidden-Fields" mitgeschleift, damit unsere if-Abfrage auch funktioniert (Ansonsten wäre die $id ja auf false gesetzt, und wir würden gar nicht nach $submit vordringen .... ). Jetzt sind wir also hier:
if ($submit) {
$sql = "UPDATE eintraege SET name='$name', vorname='$vorname', email='$email', datum='$datum', eintrag='$eintrag', preis='$preis', goa='$goa' WHERE id=$id";
$result = mysql_query($sql,$db);
echo "Die Informationen wurden aktualisiert.\n";
}
Was ist hier neu? Die UPDATE-Anweisung. Wir müssen uns also nur die Variable $sql betrachten. Diese UPDATE-Anweisung ermöglicht es uns eine oder mehrere Spalten zu aktualisieren. Anhand der WHERE-Anweisung geben wir an, wo die Aktualisierung stattfinden soll. Also im obigen Beispiel: UPDATE bezieht sich auf die DB "eintraege", und wir wollen alle Einträge ändern. Syntax ist hierbei der Spaltenname gefolgt von ='$Variable' . Die Variable haben wir ja aus dem Formularfeld. Das ist alles. Schon haben wir eine schöne Aktualisierungsmöglichkeit für unseren Flohmarkt.
|