PHP Anfänger Tutorial – Gästebuch

Da im Kommentarbereich zu meinem PHP-Seminarbesuch-Artikel der Vorschlag gemacht wurde, etwas von meinem erlernten Wissen weiterzugeben, möchte ich euch heute über das von mir im Seminar erstellte Gästebuchscript erzählen, welches auf den grundlegenden PHP Funktionen und Anweisungen aufbaut.

PHP TutorialMein erstes PHP Tutorial richtet sich deshalb auch an PHP Interessierte und Neueinsteiger, die sich bisher noch nicht großartig mit der Materie beschäftigt haben. Da ich selbst noch grün hinter meinen PHP Ohren bin, erwartet aber bitte nicht zuviel. Im Gästebuch sind nur die nötigsten Funktionen integriert. Sicher lässt sich der Code an einigen stellen verfeinern und für den Alltagsgebrauch müsste er noch um einige Funktionen erweitertet werden. Sinn und Zweck dieses Tutorials ist es aber, allen Interessierten einen kleinen Einblick zu bieten und die Grundlagen kurz anzureissen. Für weitere Infos bin ich nicht qualifiziert genug 😉 Ich hoffe trotzdem, das durch dieses PHP Newbie-Tutorial der Eine oder Andere auf den Geschmack kommt und sich näher mit dem Thema befasst, denn PHP programmieren macht fun und ist bei weitem kein Buch mit sieben Siegeln. 🙂

Das Gästebuch Script

Ein simples Gästebuch mit Datenbankanbindung ist in der Regel schnell programmiert. Experten würden vielleicht 5 Minuten benötigen. Ich habe bei meinem ersten Versuch zwar etwas länger gebraucht, aber es hat dafür auch fast auf Anhieb funktioniert. Gerade eine Anbindung zur Datenbank ist kein großer Aufwand, denn viele Zeilen Code lassen sich immer wieder verwenden und können nach dem Baukastenprinzip eingesetzt werden.

das Eingabeformular

Als erstes erstellen wir eine PHP Datei mit der Bezeichnung gbook.php und gestalten das Eingabeformular der Gästebucheinträge mit HTML und/oder CSS (solltet Ihr für die PHP Porgrammierung bereits drauf haben!). Mit dem Attribut action wird die Datei aufgerufen, welche die Daten nach dem Absenden verarbeitet. Da der ganze Code in der Datei gbook.php untergebracht wurde, tragen wir auch diese dort ein.

<form action="gbook.php" method="post">
Name: <input type="text" name="name" value=""><br />
EMail: <input type="text" name="email"  value=""><br />
Text: <textarea name="text" cols="20 rows="6">
</textarea><br />
<input type="submit" value="Eintragen!">
</form>
der PHP Code – Arrays

Nach dem Eingabeformular und eventuellen Layout-Verschönerungen folgt der PHP-Code. Als erstes beginnen wir, ähnlich wie bei HTML, den PHP Code mit <?php . Dann speichern wir die übermittelten Daten des Namens, der EMailadresse und des Gästebuchkommentars in Arrays (Variablen) um diese unkompliziert weiterverarbeiten zu können. Was dann ungefähr so aussieht:

$name = $_POST["name"];
$email = $_POST["email"];
$nachricht = $_POST["nachricht"];

Arrays beginnen immer mit einem Dollarzeichen und können (fast) beliebig benannt werden. $_POST beinhaltet die übermittelten Formulardaten. Im Prinzip könnten wir jetzt mit dem Befehl print $Arrayname oder echo $Arrayname die Formulardaten wieder auf dem Bildschirm ausgeben. Wollen wir aber nicht 😉 Die Gästebucheinträge sollen ja schließlich in der Datenbank abgelegt werden und nicht nach der Ausgabe wieder verschwinden.

Datenbankanbindung

Spätestens jetzt solltet Ihr mit PHPMyAdmin oder einem anderen Tool eine Datenbank anlegen, da dieses Script keine neue Datenbank erstellt, sondern nur den Inhalt in eine bereits vorhanden schreibt und ausliest. Der folgende Codeabschnitt baut eine Verbindung mit der Datenbank team02 auf. Im ersten Teil werden die Zugangsdaten abgefragt.

$res = mysql_connect("localhost", "root", "server"); 
         # or die(mysql_error());
mysql_select_db("team02", $res); 
         # or die(mysql_error());

Mit diesem Codeschnipsel erstellen wir in der Datenbank (team02), falls noch nicht vorhanden, den Table „test“ mit den Spalten „name“ „email“ und „nachricht“, in der wir die Formulardaten ablegen.

$query = "CREATE TABLE IF NOT EXISTS `test` ( "
 . "id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, "
 . "name VARCHAR(50), " 
 . "email VARCHAR(50), " 
 . "nachricht VARCHAR(50) " 
 . ")";
$result = mysql_query($query, $res); 
            # or die(mysql_error());

Und wieder ein Standard MySQL Codeschnipsel. Hiermit schreiben wir die übermittelten Formulardaten in die Datenbank. Wie man sieht, nutzen wir dazu die Arrays.

$query = "INSERT INTO test (name, email, nachricht) 
VALUES ('".$name."','".$email."','".$nachricht."')";
$result = mysql_query($query, $res); 
            # or die(mysql_error());

Jetzt wird es etwas komplizierter. Wir möchten die Daten wieder ausgeben. Dazu wird die Datenbank angewählt…

$query = "SELECT * FROM test";

$result = mysql_query($query, $res) 
            # or die(mysql_error());

..und die Einträge mit einer while Schleife ausgegeben.

Die Ausgabe in einer Schleife

Der Wert $row gibt die jeweilige Spalte in der Datenbank aus. Ohne Schleife würde zwar ein neuer Gästebucheintrag in der Datenbank erstellt, aber nicht richtig ausgeben. Genau hier hatte ich die größten Schwierigkeiten, denn ohne eine Schleife wurde bei mir zwar immer ein neuer Eintrag erstellt, aber auch alle älteren Einträge überschrieben. .htmlentities ist übrigens ein kleiner Schutz, um das einschleusen von unerwünschten Code zu vermeiden.

while ($row = mysql_fetch_array( $result )) {
print "<div style=\"margin:0px;padding:10px\">";
print "Name: " .htmlentities($row["name"]). "<br />";
print "EMail: " .htmlentities($row["email"]). "<br />";
print "<span style=\"background:#ccc;color:#fff;\">" 
.htmlentities($row["nachricht"]). "</span><br />";
print "</div>";
	}
?>

Das wars auch schon. Garnicht so schwer, oder? Jetzt könnt Ihr den Code abtippen, das Script ausprobieren, euch Online-Tutorials anschauen, Bücher bestellen, oder wie ich, ein Seminar besuchen 😉 Viel Spass! Über Feedback würde ich mich natürlich freuen. 🙂

10 Kommentare

  1. ConnyLo September 30, 2010 8:37 am 

    Tolle Anleitung; macht Spaß, dem zu folgen! Kleinschrittige Erläuterung der Codeschnipsel und abarbeiten an Beispielen (zum Beispiel dem Gästebuch). In den Herbstferien habe ich Zeit zum Ausprobieren und dann dürfen es auch mal meine Screendesignschüler testen 😉

  2. Michael September 30, 2010 8:38 am 

    Schönes und gut erklärtes Beispiel. Für einen tatsächlichen Einsatz auf einer Website würde ich aber noch Spamschutz-Mechanismen einbauen, ansonsten besteht die Gefahr, dass die Datenbank ruck zuck geflutet wird …..

  3. Marian September 30, 2010 8:59 am 

    htmlentities helfen zwar gegen unerwünschten JavaScript code. Leider hast du vergessen die Anwendung gegen SQL-injection attacken abzusichern. Vor dem eintragen mit INSERT in die Tabelle sollte die Eingabe per mysql_real_escape() von möglichem Schadcode befreit werden.

  4. Florian September 30, 2010 9:51 am 

    Hi Jonas, ich verfolge deinen Blog erst seit kurzem und mich würden deine Vorkenntnisse etwas genauer interessieren, da ich auch überlege mich in Richtung html/php/css fortzubilden. Leider habe ich dazu bisher noch nicht soviele brauchbare Informationen über Google gefunden, aber vielleicht hilft mir ja dein Praxisbericht weiter! Gruß Florian

  5. Florian September 30, 2010 3:54 pm 

    Hey Jonas 😉

    bald biste so fit, dass du dir deinen Lebensunterhalt mit PHP-Seminaren verdienen kannst 😉
    Du weißt ja, was diese kosten ;))

  6. Jonas September 30, 2010 10:57 pm 

    @Michael @Marian
    das Script sollte ganz klar in der Form nicht in Webseiten eingebaut werden, habe ich aber auch im Artikel erwähnt. In das Thema Sicherheit muss ich mich noch reinarbeiten, kenne mich da noch zu wenig aus. Aber danke für den Tipp, wusste ich noch nicht, dass man sich mit dem Befehl gegen Injections absichern kann.

    @Florian1
    Ahh schön, ein neuer Leser 🙂 Für PHP solltest du auf jeden Fall HTML Vorkenntnisse mitbringen, denn dafür ist PHP ja auch da: um HTML Seiten „aufzupeppen“. Natürlich gehts auch ohne HTML, sieht dann aber nicht so schön aus 😉

    Also erst HTML & CSS lernen, dann kannst du dich an PHP ranwagen.

    @Florian2
    haha, ne danke, Vorträge halten und Leuten Dinge erklären ( außer vielleicht im Blog) war noch nie meine Stärke. Wobei, so ein Referent verdient echt gut 🙂

  7. Robert Curth Oktober 1, 2010 10:06 pm 

    Ssollte das so eingesetzt werden kann man nicht nur die gesammte Datenbank löschen (wirklich) sondern auch Cross Site Scripting und andere fiese Spielereien veranstalten Ich kann nur davor warnen, dass so einzusetzen. – Aber sagst Du ja auch. Ich empfehle übrigens als einstieg, das schlanke Buch PHP-Security von Oreilly.

  8. Philipp Oktober 20, 2010 1:10 am 

    Hey das macht ja sogar richtig Spaß dein Tutorial, mensch hätte ich nicht gedacht das ich es hinbekomme. Vielen Dank 🙂 So wie es aussieht werde ich das aber bald häufiger machen, naja Grundlagen sind wichtig.

  9. saps Juli 30, 2012 8:32 pm 

    alert(‚xss‘)

  10. Andy August 11, 2012 3:30 am 

    Also zunächst sollten die $_POST Parameter alle mit addslashes behandelt werden.
    $name, $email, $nachricht landen alle ungesichert in der Datenbank. Je nachdem, wie die Servereinstellungen vorliegen, kann dies gefährliche Sicherheitslücken hervorrufen, z.B. SQL Injection´s.
    Für den SQL-Statement bzw. die Parameter $name, $email usw. ist mysql_real_escape_string zu empfehlen 🙂

    Ich habe zwar die Kommentare gelesen und weiß, dass das schon genannt wurde, möchte aber ein Scriptbeispiel da lassen.

    foreach($_POST as $k=>$v){
    ${’sql_‘.$ka} = mysql_real_escape_string($v);
    }

    Damit hätte man dann z.B. die Variable $sql_name, für die Ausgabe im Html kann man dann eine weitere Variable anlegen.

    Ansonsten weiter machen, gutes Tutorial 🙂

    Liebe Grüße

Schreibe einen Kommentar