php-resource.de

PHP Tutorial: Gästebuch mit Datenbankanbindung

Dieses Tutorial beschreibt ausführlich wie ein Gästebuch in PHP und mySQL programmiert wird.

|27.01.2003 | andy@ | 52440 | KAT : PHP | | Kommentare 1


6

9

Hier nun die Erklärung des Quelltextes, der ja nicht gerade klein ist.

<html>
<head>
  <title>Mein Gästebuch</title>
<link rel="stylesheet" type="text/css" href="style/style.css">
</head>
<body>

An dieser Stelle beginnen wir eine ganz normale HTML-Seite. Mit <link rel="stylesheet" type="text/css" href="style/style.css"> binden wir unsere Stylesheet-Datei ein, die das Aussehen der Seite regelt.


1  <?php
2 
include("inc/connect.inc.php");
3 
?>

Hier kommt nun der erste Aufruf an PHP eine Datei zu includen. Soll heissen, PHP schaut im angegebenen Ordner inc nach ob die Datei namens connect.inc.php vorhanden ist, und setzt deren Inhalt an die Stelle, an der der Aufruf steht. Dies hat also die gleiche Auswirkung, als wenn wir den Quelltext, der Datei connect.inc.php an die Stelle mit dem include-Aufruf setzen würden. Bei diesem Skript mag das noch vertretbar sein. Sollten aber die Skripte grösser und umfangreicher werden, so ist die Methode mit include sicherlich die Bessere und Übersichtlichere und vor allem müssen wir nicht jedes mal dasselbe schreiben ;-)

<table width="600" border="0" bgcolor="#000000" cellpadding="5" cellspacing="1" align="center">
  <tr>
    <td height="40" bgcolor="#227CAC" align="center" valign="middle"><span class="header">Mein Gästebuch</span></td>
  </tr>
  <tr>
    <td bgcolor="#dedede" valign="top" align="center">
    <a href="eintragen.php">In das Gästebuch eintragen</a>
    <br><br>

Nun wird der Anfang einer Tabelle definiert und ein Link zum Formular (eintragen.php) gesetzt. Es folgen zwei Zeilenumbrüche bevor es mit dem nächsten PHP-Skript weiter geht. Nun wird es etwas heftiger. Es folgt die Anfrage an die Datenbank und die Ausgabe der Daten.


 1  <?php
 2     $abfrage 
= @mysql_query("SELECT * FROM gbook ORDER BY id DESC")or die("Konnte den SELECT-Befehl nicht ausführen!!!");
 3         while(
$eintraege mysql_fetch_object($abfrage)) {
 4         echo 
"<table width="540" border="0" bgcolor="#000000" cellpadding="5" cellspacing="1" align="center">";
 5         
echo "<tr> <td bgcolor="#227CAC" colspan="2"><span class="eintrag">Eintrag ".$eintraege->id." vom ".$eintraege->datum." um ".$eintraege->zeit."</span></td> </tr> ";
 6         
echo "<tr> <td width="180" bgcolor="#227CAC" valign="top" rowspan="2">";
 7         
echo "<table width="170" bgcolor="#1F729F" border="0" cellpadding="2" cellspacing="1" align="center"> ";
 8         
echo "<tr> ";
 9         echo 
"<td bgcolor="#2E8BBC" colspan="2"><b>Geschrieben von:</b></td></tr>";
10         
echo "<tr> ";
11         echo 
"<td width="25" bgcolor="#2E8BBC"><img src="images/user.gif" width="16" height="16" alt="Eintrag von ".$eintraege->name."" border="0"></td> ";
12         
echo "<td width="145" bgcolor="#2E8BBC" valign="middle">".$eintraege->name."</td></tr> ";
13         
echo "<td width="25" bgcolor="#2E8BBC"><a href="mailto:".$eintraege->email.""><img src="images/email.gif" width="18" height="18" alt="E-Mail an ".$eintraege->name." senden" border="0"></a></td> ";
14         
echo "<td width="145" bgcolor="#2E8BBC" valign="middle"><a href="mailto:".$eintraege->email."">E-Mail</a></td></tr> ";
15         
if(!empty($eintraege->www)) {
16           echo 
"<td width="25" bgcolor="#2E8BBC"><a href="".$eintraege->www."" target="_blank"><img src="images/home.gif" width="16" height="16" alt="Homepage von ".$eintraege->name." besuchen" border="0"></a></td> ";
17           
echo "<td width="145" bgcolor="#2E8BBC" valign="middle"><a href="".$eintraege->www."" target="_blank">Homepage</a></td></tr>";
18         
}
19         echo 
"</table>";
20         echo 
"</td>";
21         echo 
"<td width="360" bgcolor="#dedede">".$eintraege->eintrag."</td></tr>";
22         
echo "<td width="360" bgcolor="#dedede" valign="bottom"><img src="images/ip.gif" width="16" height="16" border="0" alt="".$eintraege->ip_adresse.""> <span class="hinweis">IP-Adresse gespeichert</span></td></tr>";
23         
echo "</table><br>";
24         }
25         @
mysql_free_result($abfrage);
26         @
mysql_close();
27       
?>

Wir definieren eine Variable namens $abfrage und weisen ihr als Wert eine SQL-Anweisung zu:
$abfrage = @mysql_query("SELECT * FROM gbook ORDER BY id DESC")or die("Konnte den SELECT-Befehl nicht ausführen!!!"); Mit SELECT * FROM gbook weisen wir MySQL an, alle (*) Spalten der Tabelle gbook auszuwählen. Mit ORDER BY id DESC weisen wir MySQL an, die Einträge nach der id absteigend (DESC) zu sortieren. Dies bewirkt, dass der neueste (letzte) Eintrag immer an erster Stelle steht. Mit or die("Konnte den SELECT-Befehl nicht ausführen!!!"); brechen wir die Ausführung des Skriptes bei einem Fehler ab und geben unsere eigene Fehlermeldung aus.

Es folgt eine while-Schleife, die so oft durchlaufen wird wie Einträge im Gästebuch vorhanden sind.


 1  <?php
 2         
while($eintraege mysql_fetch_object($abfrage)) {
 3         echo 
"<table width="540" border="0" bgcolor="#000000" cellpadding="5" cellspacing="1" align="center">";
 4         
echo "<tr> <td bgcolor="#227CAC" colspan="2"><span class="eintrag">Eintrag ".$eintraege->id." vom ".$eintraege->datum." um ".$eintraege->zeit."</span></td> </tr> ";
 5         
echo "<tr> <td width="180" bgcolor="#227CAC" valign="top" rowspan="2">";
 6         
echo "<table width="170" bgcolor="#1F729F" border="0" cellpadding="2" cellspacing="1" align="center"> ";
 7         
echo "<tr> ";
 8         echo 
"<td bgcolor="#2E8BBC" colspan="2"><b>Geschrieben von:</b></td></tr>";
 9         
echo "<tr> ";
10         echo 
"<td width="25" bgcolor="#2E8BBC"><img src="images/user.gif" width="16" height="16" alt="Eintrag von ".$eintraege->name."" border="0"></td> ";
11         
echo "<td width="145" bgcolor="#2E8BBC" valign="middle">".$eintraege->name."</td></tr> ";
12         
echo "<td width="25" bgcolor="#2E8BBC"><a href="mailto:".$eintraege->email.""><img src="images/email.gif" width="18" height="18" alt="E-Mail an ".$eintraege->name." senden" border="0"></a></td> ";
13         
echo "<td width="145" bgcolor="#2E8BBC" valign="middle"><a href="mailto:".$eintraege->email."">E-Mail</a></td></tr> ";
14         
if(!empty($eintraege->www)) {
15           echo 
"<tr><td width="25" bgcolor="#2E8BBC"><a href="".$eintraege->www."" target="_blank"><img src="images/home.gif" width="16" height="16" alt="Homepage von ".$eintraege->name." besuchen" border="0"></a></td> ";
16           
echo "<td width="145" bgcolor="#2E8BBC" valign="middle"><a href="".$eintraege->www."" target="_blank">Homepage</a></td></tr>";
17         
}
18         echo 
"</table>";
19         echo 
"</td>";
20         echo 
"<td width="360" bgcolor="#dedede">".$eintraege->eintrag."</td></tr>";
21         
echo "<td width="360" bgcolor="#dedede" valign="bottom"><img src="images/ip.gif" width="16" height="16" border="0" alt="".$eintraege->ip_adresse.""> <span class="hinweis">IP-Adresse gespeichert</span></td></tr>";
22         
echo "</table><br>";
23         }
24 
?>

In dieser Schleife definieren wir gleich zu Beginn die Variable $eintraege und weisen ihr als Wert die MySQL-Anweisung mysql_fetch_object($abfrage) als Bedingung zu. Die Schleife wird also so lange durchlaufen, bis uns die MySQL-Anweisung keinen Wert mehr zurückgibt - das Ende der Tabelle gbook in der Datenbank erreicht ist. Diese Anweisung erwartet als Parameter unsere Abfrage, die wir in der Variablen $abfrage definiert haben und gibt uns als Ergebnis ein Objekt mit den Daten der jeweiligen Zeile aus der Tabelle zurück. Soll also heissen, die Variable $eintraege enthält bei jedem Schleifendurchlauf alle Daten eines Eintrages unserer Besucher.

Solange Einträge in unserer Datenbank vorhanden sind, soll die Schleife per echo-Befehl eine Tabelle ausgeben, die mit den Daten der Besucher gefüttert wird. Hier erkläre ich den Zugriff auf unser Objekt, das uns MySQL zurückgibt. Wir greifen z.B. auf die Eintragsnummer insofern zurück, indem wir schreiben: $eintraege->id Das heisst, wenn wir uns nun folgende Tabellenzeile mit dem echo-Befehl ausgeben lassen, erscheint beispielsweise der Text Eintrag 1 in unserer Tabelle:
echo "<tr> <td bgcolor="#227CAC" colspan="2"><span class="eintrag">Eintrag ".$eintraege->id."</td> </tr>";
Wie man oben im Quelltext aber sieht, schreiben wir in diese Zeile gleich noch die Einträge für das Datum und die Uhrzeit gleich mit. Dies erfolgt allerdings nach dem gleichen Prinzip.

----------

Wir zeigen in diesem Gästebuch nicht die E-Mailadresse oder die Homepageadresse eines Besuchers an, sondern, verlinken einen Text (E-Mail und Homepage) mit der jeweiligen Adresse, die wir von unserem Objekt zurückbekommen. Bei der E-Mailadresse funktioniert dies (verkürzt nur der Link gezeigt) so: Das Bild wird verlinkt und als ALT-Attribut des Bildes platzieren wir einen Text mit dem Namen des Besuchers. <a href="mailto:".$eintraege->email.""><img src="images/email.gif" width="18" height="18" alt="E-Mail an ".$eintraege->name." senden" border="0"></a>

Der Text E-Mail wird folgendermassen verlinkt:
<a href="mailto:".$eintraege->email."">E-Mail</a>

----------

Das Bild, das vor dem Namen des Besuchers platziert wird, wird als normales Bild eingefügt und erhält als ALT-Attribut einen Text mit dem Namen des Besuchers. Dies funktioniert auf die gleiche Weise wie mit der E-Mailadresse. Nur dass hier nichts verlinkt wird.

----------

Innerhalb der while-Schleife befindet sich noch eine if-Abfrage ob ein Homepage-Eintrag vorhanden ist.
if(!empty($eintraege->www)) {
Bedeutet also: Wenn im Objekt $eintraege der Wert www NICHT leer ist, führe folgende Anwesiungen aus. Hat unser Besucher also eine Homepage angegeben, so platzieren wir eine neue Tabellenreihe mit einem Bild, das als ALT-Attribut einen Text und den Namen des Besuchers erhält. Dies funktioniert ebenso wie bei der E-Mailadresse. Auch dieses Bild verlinken wir mit der Homepageadresse.
<a href="".$eintraege->www."" target="_blank"><img src="images/home.gif" width="16" height="16" alt="Homepage von ".$eintraege->name." besuchen" border="0"></a>

Den Textlink verlinken wir mit der Homepageadresse und schreiben als Text Homepage
<a href="".$eintraege->www."" target="_blank">Homepage</a>
}

----------

Am Schluss erfolgt noch die Ausgabe eines Bildes, das als ALT-Attribut die IP-Adresse des Besuchers erhält Verkürzt geben wir das Bild mit dem Wert ip_adresse unseres Objektes folgendermassen aus:
<img src="images/ip.gif" width="16" height="16" border="0" alt="".$eintraege->ip_adresse."">

----------

Am Schluss geben wir noch den belegten Speicherplatz der Variable $eintraege wieder frei indem wir der Funktion mysql_free_result() als Parameter die Variable $eintraege übergeben und schliessen mit der Funktion mysql_close() die Verbindung zur Datenbank. Diese Verbindung wird ja nun nicht mehr benötigt.

Es folgt noch ein Link In das Gästebuch eintragen der zu der Seite eintragen.php führt und das Schliessen der HTML-Tabellen und der HTML-Seite.

Auf der nächsten Seite werden wir die Datei eintragen.php erstellen, in der unsere Besucher Ihren Eintrag schreiben können.

Navigation -> Seitenanzahl : (9)

  «  1 2 3 4 5 6 7 8 9  » 
Kommentare zum Tutorial
Tutorial kommentieren
 
19.06.2009 20:53:17 interressant... doch müssten da nicht noch viele Anführungszeichen escaped werden?: " ...

Alle Kommentare anzeigen ...
 
Über den Autor
andy@

andy@

Status
Premium Mitglied

Beruf
Unbekannt

Mitglied seit:
30.04.2009

letzte Aktivität
04.06.2009

 

Tutorial bewerten

Hat Ihnen dieses Tutorial gefallen? Dann bewerten Sie es jetzt! Fünf Sterne bedeutet "Sehr gut", ein Stern "Unzureichend".



 

aktuelle Artikel

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Neu | Berni

Wissensbestand in Unternehmen

Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Neu | Berni