PHP MySQL Beispiel
Um das bisher eher theoretisch Wissen anzuwenden, finden Sie in den nächsten drei Kapiteln dieses Tutorials ein Beispiel für das Zusammenspiel von PHP und MySQL. Es soll ein komplettes Gästebuch entstehen, in dem Benutzer Einträge machen können und Ihnen als Administrator zusätzliche Funktionen zur Verfügung stehen.
Tabelle anlegen
Zu Beginn benötigen Sie die Tabelle “gaestebuch”, die die einzelnen Einträge des Gästebuches aufnimmt. Falls diese Tabelle in Ihrer Datenbank “mydatabase” noch nicht existiert oder Sie sie gelöscht haben sollten, können Sie die Tabelle mit dem folgenden SQL-Befehl wieder anlegen. Dies funktioniert am einfachsten mit Unterstützung von phpMyAdmin: Kopieren Sie den entsprechenden Befehl in das SQL-Fenster von phpMyAdmin.
CREATE TABLE `gaestebuch` (
`ID` INT NOT NULL AUTO_INCREMENT ,
`Name` VARCHAR( 100 ) NOT NULL ,
`Titel` VARCHAR( 50 ) NOT NULL ,
`Eintrag` TEXT NOT NULL ,
`Erstellt` DATETIME NOT NULL ,
PRIMARY KEY ( `ID` )
) TYPE = MYISAM ;
Das Gästebuchformular
Dieser Teil hat nicht direkt etwas mit PHP zu tun, vielmehr müssen Sie ein Formular erstellen, mit dessen Hilfe der Benutzer dem Gästebuch einen Eintrag hinzufügen kann. Das Formular könnte so aussehen:
<html> <head> <title>Mein Gästebuch</title> </head> <body> <form action="eintrag-einfuegen.php" method="post"> <table border="0"> <tr> <td><b>Name:</b></td> <td><input name="Name" maxlength="50" type="text"></td> </tr> <tr> <td><b>Titel des Eintrages:</b></td> <td><input maxlength="40" name="Titel" type="text"></td> </tr> <tr> <td><b>Eintrag:</b></td> <td><textarea cols="30" name="Eintrag" rows="5"></textarea></td> </tr> <tr> <td align="center" colspan="2"> <input name="Send" type="submit" value="Eintragen"> <input name="Reset" type="reset" value="Löschen"> </td> </tr> </table> </form> </body> </html>
Speichern Sie das Formular in einer Datei mit dem Namen “gaestebuch.php”.
Neue Einträge ins Gästebuch aufnehmen
Legen Sie eine neue Datei mit dem Namen “eintrag-einfuegen.php” an. In diesem Script soll das Einfügen eines neuen Eintrags erfolgen. Aus diesem Grund werden die eingegebenen Daten aus dem Formular auch an diese Datei geschickt.
Zuerst folgen das vollständige Script zur Aufnahme eines neuen Eintrages und danach die Erläuterungen zu selbigen.
<html>
<head>
<title>Eintrag hinzufügen</title>
</head>
<body>
<?php
$DatabasePointer = mysql_connect("localhost", "", "");
mysql_select_db("mydatabase", $DatabasePointer);
$SQL = "INSERT INTO gaestebuch (Name, Titel, Eintrag, Erstellt) VALUES ('".$_REQUEST['Name']."', '".$_REQUEST['Titel']."', '".$_REQUEST['Eintrag']."', NOW(''))";
mysql_query($SQL, $DatabasePointer);
if(mysql_affected_rows($DatabasePointer) == 1)
{
?>
<p>Vielen Dank für Ihren Eintrag!<br>
<a href="gaestebuch.php">Zurück</a></p>
<?php
}
else
{
?>
<p>Beim Eintragen ist ein Fehler aufgetreten.<br>
<a href="javascript:history.back();">Zurück</a></p>
<?php
}
?>
</body>
</html>
Zu Beginn des Scriptes wird mit Hilfe der Funktion mysql_connect(…) eine Verbindung mit dem Datenbankserver aufgebaut und anschließend die Datenbank “mydatabase” ausgewählt.
In der Variablen $SQL erfolgt der “Zusammenbau” des SQL-Befehls zum Einfügen des Eintrages in die Tabelle “gaestebuch”. Es schließt sich dann das eigentliche Abschicken des Befehls an den Datenbankserver mit Hilfe der Funktion mysql_query(…) an.
Um entscheiden zu können, ob der Eintrag erfolgreich war oder nicht, wird noch die Funktion mysql_affected_rows(…) aufgerufen. Sofern durch den vorherigen SQL-Befehl eine Zeile in die Tabelle “gaestebuch” eingefügt wurde, wird eine entsprechende Anzeige im Browser (”Vielen Dank für Ihren Eintrag!”) ausgegeben. Andernfalls wird der Besucher über den Fehler informiert.
Gästebucheinträge anzeigen
Überschreiben Sie den bisherigen Inhalt der Datei “gaestebuch.php” mit dem nachstehenden Quellcode. Das eigentlich in dieser Datei gespeicherte Formular ist im folgenden Quellcode enthalten.
<html>
<head>
<title>Mein Gästebuch</title>
</head>
<body>
<h2>Mein Gästebuch</h2>
<a href="#neuereintrag">Eintrag hinzufügen</a><br><br>
<?php
$DatabasePointer = mysql_connect("localhost", "", "");
mysql_select_db("mydatabase", $DatabasePointer);
$ResultPointer = mysql_query("SELECT * FROM gaestebuch ORDER BY Erstellt DESC", $DatabasePointer);
?>
<table border="0">
<?php
for($i = 0; $i < mysql_num_rows($ResultPointer); $i++)
{
$Gaestebuch = mysql_fetch_object($ResultPointer);
?>
<tr>
<td><b>#<?php echo$i+1; ?>: <?php echo$Gaestebuch->Titel; ?></b></td>
</tr>
<tr>
<td><?php echo nl2br($Gaestebuch->Eintrag); ?></td>
</tr>
<tr>
<td>Eintrag von <b><?php echo$Gaestebuch->Name; ?></b> am <b><?php echo substr($Gaestebuch->Erstellt, 8, 2); ?>.<?php echo substr($Gaestebuch->Erstellt, 5, 2); ?>.<?php echo substr($Gaestebuch->Erstellt, 0, 4); ?> <?php echo substr($Gaestebuch->Erstellt, 10); ?></b></td>
</tr>
<tr>
<td><hr></td>
</tr>
<?php
}
?>
</table><br><br>
<h3><a name="neuereintrag">Neuer Eintrag:</a></h3>
<form action="eintrag-einfuegen.php" method="post">
<table border="0">
<tr>
<td><b>Name:</b></td>
<td><input name="Name" maxlength="50" type="text"></td>
</tr>
<tr>
<td><b>Titel des Eintrages:</b></td>
<td><input maxlength="40" name="Titel" type="text"></td>
</tr>
<tr>
<td><b>Eintrag:</b></td>
<td><textarea cols="30" name="Eintrag" rows="5"></textarea></td>
</tr>
<tr>
<td align="center" colspan="2">
<input name="Send" type="submit" value="Eintragen">
<input name="Reset" type="reset" value="Löschen">
</td>
</tr>
</table>
</form>
</body>
</html>
Zuerst erfolgt wie gewohnt der Verbindungsaufbau zum Datenbankserver und die Auswahl der Datenbank “mydatabase”.
Im Anschluss daran wird der SELECT-Befehl dazu benutzt, um alle Einträge aus der Tabelle auszulesen.
Um das Ergebnis auszugeben, wird die for-Schleife solange ausgeführt, wie Ergebniszeilen vorhanden sind. Pro Eintrag werden der Name, der Titel, die Beschreibung sowie das Datum ausgegeben. Da das Datum und die Uhrzeit innerhalb der MySQL-Tabelle in der Form “2005-10-25 19:01:25″ gespeichert ist, wird es vor der Ausgabe mit Hilfe der Funktion substr(…) ins deutsche Format umgewandelt.
Nach der Ausgabe der aktuellen Gästebuchbeiträge wird der Seite noch das Formular für einen neuen Eintrag angefügt.
Administration des Gästebuchs
Nachstehend finden Sie den Quellcode für eine einfache Administrationsoberfläche für das Gästebuch.
<html>
<head>
<title>Mein Gästebuch - Administration</title>
</head>
<body>
<h2>Mein Gästebuch - Administration</h2>
<?php
$Zugangspasswort = "1234";
if($_REQUEST['Send'] && $Zugangspasswort == $_REQUEST['Passwort'])
{
$DatabasePointer = mysql_connect("localhost", "", "");
mysql_select_db("mydatabase", $DatabasePointer);
if($_REQUEST['Loeschen'] && $_REQUEST['ID'])
{
mysql_query("DELETE FROM Gaestebuch WHERE ID = '".$_REQUEST['ID']."'", $DatabasePointer);
}
$ResultPointer = mysql_query("SELECT * FROM gaestebuch ORDER BY Erstellt DESC", $DatabasePointer);
?>
<table border="0">
<?php
for($i = 0; $i < mysql_num_rows($ResultPointer); $i++)
{
$Gaestebuch = mysql_fetch_object($ResultPointer);
?>
<tr>
<td><b>#<?php echo$i+1; ?>: <?php echo$Gaestebuch->Titel; ?></b></td>
</tr>
<tr>
<td><?php echo nl2br($Gaestebuch->Eintrag); ?></td>
</tr>
<tr>
<td>Eintrag von <b><?php echo$Gaestebuch->Name; ?></b> am <b><?php echo substr($Gaestebuch-> Erstellt, 8, 2); ?>.<?php echo substr($Gaestebuch-> Erstellt, 5, 2); ?>.<?php echo substr($Gaestebuch-> Erstellt, 0, 4); ?> <?php echo substr($Gaestebuch->Erstellt, 10); ?></b></td>
</tr>
<tr>
<td><a href="<?php echo$_SERVER['PHP_SELF']; ?>?Send=1&Passwort=<?php echo$_REQUEST['Passwort']; ?>&Loeschen=1&ID=<?php echo$Gaestebuch->ID; ?>">Eintrag löschen</a></td>
</tr>
<tr>
<td><hr></td>
</tr>
<?php
}
?>
</table>
<?php
}
else
{
?>
<table border="0">
<form action="<?php echo$_SERVER['PHP_SELF']; ?>" method="post">
<tr>
<td>Passwort</td>
<td><input name="Passwort" size="10" type="password"></td>
</tr>
<tr>
<td align="center" colspan="2"><input name="Send" type="submit" value="Login"></td>
</tr>
</form>
</table>
<?php
}
?>
</body>
</html>
Speichern Sie diesen Quellcode in einer Datei mit Namen “gaestebuch-administration.php”.
Um den Administrationsbereich vor unbefugtem Zugriff zu schützen, erscheint beim Aufruf der Seite zuerst ein Login-Formular. In dieses müssen Sie das im Quellcode angegebene Passwort eingeben, welches Sie natürlich beliebig verändern können und sollten.
Nachdem Sie das richtige Passwort eingegeben haben, gelangen Sie zu der folgenden Administrationsseite.
Auf der oben abgebildeten Seite finden Sie alle bisherigen Einträge des Gästebuchs. Unter jedem Eintrag befindet sich ein Link mit der Beschriftung “Eintrag löschen”. Durch einen Klick darauf wird der entsprechende Eintrag aus dem Gästebuch entfernt.
Erläuterungen zum Quellcode
Zu Beginn des Quellcodes müssen Sie ein beliebiges Passwort der Variablen $Zugangspasswort zuweisen. Mit diesem Passwort können Sie sich anschließend in den Administrationsbereich einloggen.
Wird die Seite “gaestebuch-administration.php” anschließend aufgerufen, ist die erste if-Bedingung noch nicht wahr und der else-Bereich, in dem das Login-Formular notiert ist, wird ausgeführt. Nach Eingabe des Passwortes und Abschicken des Formulars enthält die Variable $_REQUEST['Send'] als Wert die Beschriftung des Login-Buttons und die Variable $_REQUEST['Passwort'] das eingegebene Passwort. Stimmt letzteres mit dem im Quellcode definierten Zugangspasswort überein, wird der Administrationsbereich angezeigt.
Es wird zunächst eine Verbindung mit dem Datenbankserver hergestellt sowie die Datenbank “mydatabase” als aktive Datenbank ausgewählt.
Nach der if-Bedingung (dazu später mehr) werden alle Einträge des Gästebuches aus der Tabelle “gaestebuch” ausgelesen und anschließend mit Hilfe einer for-Schleife ausgegeben. Diese Schleife ist fast mit der Ausgabeschleife identisch, die dem Besucher die Gästebucheinträge präsentiert. Der einzige Unterschied liegt in dem unter jedem Eintrag angezeigten Link mit der Beschriftung “Eintrag löschen”.
Klicken Sie auf diesen Link wird die Seite “gaestebuch-administration.php” erneut aufgerufen; diesmal allerdings mit insgesamt vier Parametern. Die beiden Parameter “Send” und “Passwort” simulieren die Übergabe der für den Aufruf der Administrationsseite notwendigen Werte des Login-Formulars. Zusätzlich werden noch zwei weitere Parameter übergeben: Der Parameter “Loeschen” dient dazu, beim erneuten Aufruf der Seite festzustellen, dass ein bestimmter Eintrag aus dem Gästebuch entfernt werden soll. Damit der richtige Eintrag gelöscht wird, muss noch die ID des Eintrages mit übergeben werden. Nach einem Klick auf den Link wird die Administrationsseite zunächst wie sonst üblich aufgerufen mit der Ausnahme, dass auch die bereits oben erwähnte, zweite if-Bedingung wahr ist und der notierte SQL-Befehl an den Datenbankserver abgeschickt wird. Dadurch wird der Eintrag mit der entsprechenden ID gelöscht.
Der vollständige Quellcode des Gästebuchbeispiels
Auf den kommenden Seiten finden Sie noch einmal zusammengefasst den kompletten Quellcode aller drei für das Gästebuch benötigten Dateien.
Die Datei “gaestebuch.php”:
<html>
<head>
<title>Mein Gästebuch</title>
</head>
<body>
<h2>Mein Gästebuch</h2>
<a href="#neuereintrag">Eintrag hinzufügen</a><br><br>
<?php
$DatabasePointer = mysql_connect("localhost", "", "");
mysql_select_db("mydatabase", $DatabasePointer);
$ResultPointer = mysql_query("SELECT * FROM gaestebuch ORDER BY Erstellt DESC", $DatabasePointer);
?>
<table border="0">
<?php
for($i = 0; $i < mysql_num_rows($ResultPointer); $i++)
{
$Gaestebuch = mysql_fetch_object($ResultPointer);
?>
<tr>
<td><b>#<?php echo$i+1; ?>: <?php echo$Gaestebuch->Titel; ?></b></td>
</tr>
<tr>
<td><?php echo nl2br($Gaestebuch->Eintrag); ?></td>
</tr>
<tr>
<td>Eintrag von <b><?php echo$Gaestebuch->Name; ?></b> am <b><?php echo substr($Gaestebuch->Erstellt, 8, 2); ?>.<?php echo substr($Gaestebuch->Erstellt, 5, 2); ?>.<?php echo substr($Gaestebuch->Erstellt, 0, 4); ?> <?php echo substr($Gaestebuch->Erstellt, 10); ?></b></td>
</tr>
<tr>
<td><hr></td>
</tr>
<?php
}
?>
</table><br><br>
<h3><a name="neuereintrag">Neuer Eintrag:</a></h3>
<form action="eintrag-einfuegen.php" method="post">
<table border="0">
<tr>
<td><b>Name:</b></td>
<td><input name="Name" maxlength="50" type="text"></td>
</tr>
<tr>
<td><b>Titel des Eintrages:</b></td>
<td><input maxlength="40" name="Titel" type="text"></td>
</tr>
<tr>
<td><b>Eintrag:</b></td>
<td><textarea cols="30" name="Eintrag" rows="5"></textarea></td>
</tr>
<tr>
<td align="center" colspan="2">
<input name="Send" type="submit" value="Eintragen">
<input name="Reset" type="reset" value="Löschen">
</td>
</tr>
</table>
</form>
</body>
</html>
Die Datei “eintrag-einfuegen.php”:
<html>
<head>
<title>Eintrag hinzufügen</title>
</head>
<body>
<?php
$DatabasePointer = mysql_connect("localhost", "", "");
mysql_select_db("mydatabase", $DatabasePointer);
$SQL = "INSERT INTO gaestebuch (Name, Titel, Eintrag, Erstellt) VALUES ('".$_REQUEST['Name']."', '".$_REQUEST['Titel']."', '".$_REQUEST['Eintrag']."', NOW(''))";
mysql_query($SQL, $DatabasePointer);
if(mysql_affected_rows($DatabasePointer) == 1)
{
?>
<p>Vielen Dank für Ihren Eintrag!<br>
<a href="gaestebuch.php">Zurück</a></p>
<?php
}
else
{
?>
<p>Beim Eintragen ist ein Fehler aufgetreten.<br>
<a href="javascript:history.back();">Zurück</a></p>
<?php
}
?>
</body>
</html>
Die Datei “gaestebuch-administration.php”:
<html>
<head>
<title>Mein Gästebuch - Administration</title>
</head>
<body>
<h2>Mein Gästebuch - Administration</h2>
<?php
$Zugangspasswort = "1234";
if($_REQUEST['Send'] && $Zugangspasswort == $_REQUEST['Passwort'])
{
$DatabasePointer = mysql_connect("localhost", "", "");
mysql_select_db("mydatabase", $DatabasePointer);
if($_REQUEST['Loeschen'] && $_REQUEST['ID'])
{
mysql_query("DELETE FROM Gaestebuch WHERE ID = '".$_REQUEST['ID']."'", $DatabasePointer);
}
$ResultPointer = mysql_query("SELECT * FROM gaestebuch ORDER BY Erstellt DESC", $DatabasePointer);
?>
<table border="0">
<?php
for($i = 0; $i < mysql_num_rows($ResultPointer); $i++)
{
$Gaestebuch = mysql_fetch_object($ResultPointer);
?>
<tr>
<td><b>#<?php echo$i+1; ?>: <?php echo$Gaestebuch->Titel; ?></b></td>
</tr>
<tr>
<td><?php echo nl2br($Gaestebuch->Eintrag); ?></td>
</tr>
<tr>
<td>Eintrag von <b><?php echo$Gaestebuch->Name; ?></b> am <b><?php echo substr($Gaestebuch-> Erstellt, 8, 2); ?>.<?php echo substr($Gaestebuch-> Erstellt, 5, 2); ?>.<?php echo substr($Gaestebuch-> Erstellt, 0, 4); ?> <?php echo substr($Gaestebuch->Erstellt, 10); ?></b></td>
</tr>
<tr>
<td><a href="<?php echo$_SERVER['PHP_SELF']; ?>?Send=1&Passwort=<?php echo$_REQUEST['Passwort']; ?>&Loeschen=1&ID=<?php echo$Gaestebuch->ID; ?>">Eintrag löschen</a></td>
</tr>
<tr>
<td><hr></td>
</tr>
<?php
}
?>
</table>
<?php
}
else
{
?>
<table border="0">
<form action="<?php echo$_SERVER['PHP_SELF']; ?>" method="post">
<tr>
<td>Passwort</td>
<td><input name="Passwort" size="10" type="password"></td>
</tr>
<tr>
<td align="center" colspan="2"><input name="Send" type="submit" value="Login"></td>
</tr>
</form>
</table>
<?php
}
?>
</body>
</html>
Schlussbemerkung
Ich freue mich, dass Sie dieses doch recht umfangreiche Tutorial bis an diese Stelle durchgearbeitet haben. Sie besitzen nun das Rüstzeug, um eigenständig PHP-Scripte zu entwickeln. Darüber hinaus haben Sie gesehen wie einfach das Zusammenspiel von PHP und MySQL funktioniert. In der kommenden Zeit werden Sie sicherlich noch auf die eine oder andere Hürde bei der Entwicklung von PHP-Scripten stoßen. Lassen Sie sich davon ebenso wenig abschrecken wie von umfangreichen PHP-Anwendungen, die sich überall im Netz befinden. Sie werden sehen, dass alle Entwickler mit den gleichen Funktionen auskommen müssen, wie Sie auch Ihnen zur Verfügung stehen. Aus diesem Grund empfehle ich – gerade in der anfänglichen Lernzeit – viel zu experimentieren und den ständigen Blick ins PHP-Handbuch. Sie finden letzteres unter der Adresse http://www.php.net und über die Suchfunktion lassen sich Ihnen bisher unbekannte Funktionen schnell aufrufen. Nicht außer Acht lassen sollten Sie die zu fast jeder Funktion vorhandenen Kommentare der Benutzer des Handbuches. In den meisten Fällen gehen Sie weit über die Beispiele des eigentlichen Handbuches hinaus und geben so Tipps & Tricks zur Benutzung der jeweiligen Funktion.
Zusätzlich kann ein Blick in die Suchmaschine Ihrer Wahl nie schaden. So erfahren Sie, wie andere Entwickler ähnlich gelagerte Probleme lösen. Denn bevor Sie Stunden oder gar Tage an einem Problem forschen und schon aufgeben wollen, lässt sich meist irgendjemand ausfindig machen, der genau dieses Problem schon gelöst hat. Aber denken Sie daran: Von anderen lernen, bedeutet nicht fremden Quellcode zu kopieren. Sofern der Quelltext nicht ausdrücklich zur freien Verfügung bereit steht, sollten Sie also immer den Autor vorher nach seiner Genehmigung zur Verwendung in Ihren PHP-Scripten fragen.
An dieser Stelle möchte ich auch auf meine eigene Webseite Webmaster Resource aufmerksam machen: Auf dieser finden Sie hunderte Tipps & Tricks, insbesondere aus dem Bereich “PHP”. Für viele alltägliche Probleme bei der Entwicklung von PHP-Scripten bieten diese Artikel bereits fertige Lösungen an.
Zu guter Letzt wünsche ich Ihnen viel Erfolg mit Ihren zukünftigen Webprojekten.