PHP Kurs Logo  
 
Buttons PHP Kurs - Kapitel Trennlinie Was brauche ich ? Trennlinie Kontakt Trennlinie Impressum & Datenschutz Buttons
 
 
Menu
Allererste PHP Schritte
- Webserver Installation
- PHP Editor Installation

PHP Grundlagen
- PHP Grundwissen
- Mein erstes Programm
- Kommentare einfügen
- Variablen
- PHP+HTML mischen
- If Abfragen
- Rechenarten
- Arrays
- Schleifen
- Funktionen
- Klassen
- Includes
- Sessions und Cookies
- Login mit Sessions
- Login mit Datenbank
- Referer auslesen
- Wert aus Datenbank
- Variablen übergeben

MySQL Grundlagen
- Was ist das ?
- Erste Schritte
- Verbindung herstellen
- Einfache SQL Befehle
- SQL Injection

Häufig gefragt
- Was ist Adwords ?
- Interessante Links
- Wasserzeichen mod_rewrite
- Thumbnails erstellen
- PHP Gästebuch
- PHP Header
- Webseiten auslesen
- Socket Verbindungen
- E-Mail Adressen prüfen
- E-Mails versenden
- $_GET & $_POST
- Datenbank sichern
- Server DDOS Angriffe Abwehren
- Webhosting - Worauf ist zu achten ?

Interessante Artikel


PHP Gästebuch und/oder Newsscript programmieren

Ein Gästebuch und ein Newsscript unterscheiden sich nicht wesentlich voneinander. Beide speichern einzelne Texte und zeigen diese wieder nach Datum geordnet an. Bei einem Gästebuch geben die Besucher die Beiträge ein und bei einem Newsscript tut dies der Seitenbetreiber. Bei dem Gästebuch zeigt man die Eingabemöglichkeit ganz offen auf der Homepage und bei dem News Skript versteckt man diese halt in einem separaten Adminbereich.

Für die Eingabe des Textes kann man einen sogenannten WYSIWYG Editor verwenden, um es so komfortabel wie möglich zu gestalten. WYSIWYG bedeutet im Prinzip: What You See Is What You Get, übersetzt also "Was du siehst ist, was du bekommst." Verändert man die Schriftgröße, oder fügt man ein Bild ein, so erscheint dies auch direkt im Eingabefenster - man sieht also sofort wie das Endergebnis später aussehen wird. Solche Editoren sind in Javaskript programmiert und es gibt sie schon zu hauf fertig downloadbar im Netz. Deshalb gehen wir hier auch auf diese Art von Eingabemöglichkeiten nicht weiter ein - es ist kein PHP und diese sind auch dermaßen komplex, dass wir hier nicht zum eigentlichen Thema kommen würden. Uns reicht ein einfaches Eingabefeld von einem Formular. Wenn Sie Ihr Skript später erweitern möchten, versuchen Sie einen solchen Editor einzubauen.

PHP Gästebuch

Gehen wir zuerst auf das Gästebuch ein. Darauf werden wir dann später aufbauen, und eine Möglichkeit einfügen um ein Bild mit anzeigen zu können. Zuerst benötigen wir eine Möglichkeit die gesamten Einträge speichern zu können. Da wir mit MySQL arbeiten, erstellen wir uns eine entsprechende Tabelle, in der wir alle benötigten Daten speichern können.

Was müssen wir speichern ? Als erstes ein Feld für eine fortlaufende Nummerierung, damit jeder Eintrag eindeutig identifiziert werden kann (int, auto_increment). Wir benötigen den Namen des Erstellers (char 30), einen Titel (char 100), den Text (type text) und das Erstellungsdatum (Datetime).

CREATE TABLE `gaestebuch` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`ersteller` CHAR( 30 ) NOT NULL ,
`titel` CHAR( 100 ) NOT NULL ,
`beitrag` TEXT NOT NULL ,
`datum` DATETIME NOT NULL
) ENGINE = MYISAM ;

Jetzt haben wir eine gaestebuch Tabelle in der Datenbank, wo wir unsere Einträge ablegen können. Fangen wir mit dem Skript an. Als erstes müssen wir die Datenbank öffnen und eine Verbindung herstellen (MySQL Grundlagen)

<?php
    $server 
"localhost";
    
$datenbank "php-kurs";
    
$username "web1";
    
$passwort "abcdef";

    
$link mysql_connect($server$username$passwort);

    if (!
$link)
        {
        die(
"Konnte die Datenbank nicht öffnen.
             Fehlermeldung: "
mysql_error());
        }

    echo 
"Erfolgreich zur Datenbank verbunden !";

    
$db mysql_select_db($datenbank$link);

    if (!
$db)
        {
        echo 
"Konnte die Datenbank nicht auswählen.";
        }

    
mysql_close($link);
?>

Die Logindaten müssen natürlich der eigenen Datenbank angepasst werden.

Desweiteren benötigen wir ein Eingabeformular, worüber der Besucher seinen Text hinterlassen kann. Unsere gesamte Datei nennen wir gaestebuch.php:

<form action="gaestebuch.php" method="POST">
Ihr Name: <input name="ersteller" maxlength=30><br>
Titel des Beitrags: <input name="titel" maxlength=100><br>
Ihr G&auml;stebucheintrag:<br>
<textarea name="beitrag" rows=5 cols=50></textarea><br>
<input type="submit" name="submit" value="Eintragen">
</form>

Es gibt Eingabefelder für den Namen, einen Titel und einen Textbeitrag. Mit maxlength haben wir die maximale mögliche Eingabe von Zeichen begrenzt. Unsere Felder in der MySQL Datenbank fassen nur eine bestimmte Anzahl an Zeichen die wir angegeben haben, so dass es Sinn macht diese zu begrenzen. Der Besucher gibt nicht unnötig zuviel ein, was später doch nicht angezeigt wird.

Sobald unser Besucher das Formular abschickt, bekommen wir die Daten in dem Array $_POST geschickt und können die Daten dort abfragen.

<?phpphp
    $ersteller = trim(strip_tags($_POST["ersteller"]));
    $titel = trim(strip_tags($_POST["titel"]));
    $beitrag = trim(strip_tags($_POST["beitrag"]));

    if (!empty($_POST["submit"]))
        {
        # Formular wurde abgesendet, ist nicht leer !
        }
?>

Wir machen alles in einer einzigen Datei und fragen bevor wir das Formular anzeigen einfach ab, ob der User das Formular beim letzten Aufruf ausgefüllt hat. Wenn $_POST["submit"] nicht leer ist ( !empty() ), dann wurde etwas ausgefüllt. Wir müssen dann nur prüfen, ob die Eingaben plausibel sind - ob auch alles eingetragen wurde was wir haben möchten. Ist dies nicht der Fall müssen wir eine Fehlermeldung auf dem Bildschirm ausgeben. In diesem Beispiel haben wir die Daten aus dem $_POST nochmal extra gespeichert und verarbeitet. Dies hat einen Sicherheitsaspekt. Der Befehl strip_tags(); entfernt sämtliche HTML und PHP Befehle aus der Eingabe. Der User könnte, wenn er böswillig ist sonst Code einschleusen und unsere Seite zu seinen zwecken missbrauchen. Der Befehl trim(); entfernt einfach nur die vorhandenen Leerzeichen am Anfang und am Ende der Eingabe. Wir wollen ja keinen Namen haben, der nur aus 10 Leerzeichen besteht. Der Besucher soll ja schon was richtiges eintragen.

Die Fehlermeldungen können wir in einem Array speichern. Wenn wir bei einem Array einfach die eckigen Klammern dahinter setzen [] , dann wird der Datensatz in dem nächst freien Eintrag gespeichert. Hierzu ein Beispiel wie diese Abfrage aussehen könnte:

<?phpphp
        if (empty($ersteller))    $_errors[] = "Name Fehlt.";
        if (empty($titel))        $_errors[] = "Titel fehlt.";
        if (empty($beitrag))    $_errors[] = "Beitrag fehlt.";

        # Sind Fehler im Array $_errors gespeichert ?
        if (count($_errors) > 0)
            {
            # Ja, Fehler vorhanden - anzeigen !
            foreach($_errors as $_error)
                {
                echo $_error . "<br>";
                }
            }
        else
            {
            # Nein, keine Fehler - Eintrag in SQL abspeichern
            }
?>

Wenn die Eingabe korrekt gelaufen ist, können wir den Eintrag in der Datenbank abspeichern. Hierbei bitte ich euch die Eingaben des Users die wir schon mit strip_tags und trim bearbeitet haben nicht einfach nur abzuspeichern. Es gibt viele Leute, die versuchen mit SQL Injections Schaden anzurichten. Damit die Einträge auch richtig abgespeichert werden und kein schadhafter Code eingeschleust werden kann, bitte ich euch Eingaben von aussen IMMER mit mysql_real_escape_string() in die Datenbank zu schreiben.

<?phpphp
            $_sql = 'INSERT INTO gaestebuch
                     (ersteller,titel,beitrag,datum)
                       VALUES (
                     "'.mysql_real_escape_string($ersteller).'",
                     "'.mysql_real_escape_string($titel).'",
                     "'.mysql_real_escape_string($beitrag).'",
                     NOW());';

            mysql_query($_sql, $link);
            echo "<b>Danke für Ihren Eintrag.</b><br><br>";
?>

Was fehlt uns noch ? Wir müssen natürlich das, was in die Datenbank geschrieben wurde auch wieder auf der Homepage anzeigen. Hierfür können wir ein paar Zeilen noch in das Skript einfügen - am besten direkt VOR das Formular. Wir fordern per SQL Befehl alle Datensätze aus der Tabelle gaestebuch an und drucken alle mit Hilfe einer While Schleife aus.

Das ganze kann natürlich optisch noch viel mehr von Dir verschönert werden. Zu Demonstrationszwecken wie man ein Gästebuch programmiert reicht dies allerdings völlig aus.

<?phpphp
    $_sql = "SELECT * FROM gaestebuch ORDER BY datum ASC";
    $_res = mysql_query($_sql, $link);
    while ($row = mysql_fetch_array($_res, MYSQL_ASSOC))
        {
        echo "<hr>";
        echo "Eintrag Nummer: " . $row["id"];
        echo " von " . $row["ersteller"];
        echo " vom " . date("d.m.Y - H:i:s", strtotime($row["datum"]));
        echo "<br>Titel: " . $row["titel"];
        echo "<br>Text: ". str_replace("\n", "<br>", $row["beitrag"]);
        echo "<hr>";
        }
?>

Mit dem SQL Befehl sagen wir, dass wir alle Einträge haben möchten, nach aufsteigendem Datum sortiert. Die While Schleife arbeitet solange, wie es Einträge von der Datenbank bekommt. Jeden einzelnen Eintrag geben wir dann aus. An dem Punkt könnte man das ganze noch in einen schöneren Rahmen tun - einfach schöner darstellen. Bei der Textausgabe benutzen wir noch str_replace(); um das Zeichen \\n zu ersetzen. Bei Formulareingaben ist dieses Zeichen nämlich das Return ; es geht also eine Zeile tiefer. Verwendet man dieses jedoch bei der Anzeige im HTML, so wird lediglich im Quelltext ein Zeilenumbruch vorbenommen. Daher ersetzen wir dieses Zeichen durch den Befehl <br>, wodurch später sichtbar für den Besucher ein Zeilenumbruch erfolgt.

Das fertige Beispielskript zum ausprobieren finden Sie hier.

Das Endskript sollte ungefähr so aussehen (Datei: gaestebuch.php):

<?phpphp
    $server = "localhost";
    $datenbank = "datenbankname";
    $username = "dbusername";
    $passwort = "dbpasswort";

    $link = mysql_connect($server, $username, $passwort);

    if (!$link)
        {
        die("Konnte die Datenbank nicht öffnen.
             Fehlermeldung: ". mysql_error());
        }

    #### "Erfolgreich zur Datenbank verbunden ! ####

    $db = mysql_select_db($datenbank, $link);
    if (!$db)
        {
        echo "Konnte die Datenbank nicht auswählen.";
        }

    #### Datenbank ausgewählt, jetzt Gästebuch Programm ####

    $ersteller = trim(strip_tags($_POST["ersteller"]));
    $titel = trim(strip_tags($_POST["titel"]));
    $beitrag = trim(strip_tags($_POST["beitrag"]));

    # Wurde das Formular ausgefüllt ?
    if (!empty($_POST["submit"]))
        {
        # Prüfen ob etwas fehlt
        if (empty($ersteller))    $_errors[] = "Name Fehlt.";
        if (empty($titel))        $_errors[] = "Titel fehlt.";
        if (empty($beitrag))    $_errors[] = "Beitrag fehlt.";

        # Sind Fehler im Array $_errors gespeichert ?
        if (count($_errors) > 0)
            {
            # Ja, Fehler vorhanden - anzeigen !
            foreach($_errors as $_error)
                {
                echo $_error . "<br>";
                }
            }
        else
            {
            # Nein, keine Fehler - Eintrag abspeichern
            $_sql = 'INSERT INTO gaestebuch
                     (ersteller,titel,beitrag,datum)
                       VALUES (
                     "'.mysql_real_escape_string($ersteller).'",
                     "'.mysql_real_escape_string($titel).'",
                     "'.mysql_real_escape_string($beitrag).'",
                     NOW());';

            mysql_query($_sql, $link);

            echo "<b>Danke für Ihren Eintrag.</b><br><br>";
            }
        }

?>
<b>Alle G&auml;stebucheintr&auml;ge:</b><br>
<br>
<?php
    $_sql 
"SELECT * FROM gaestebuch ORDER BY datum ASC";
    
$_res mysql_query($_sql$link);
    while (
$row mysql_fetch_array($_resMYSQL_ASSOC))
        {
        echo 
"<hr>";
        echo 
"Eintrag Nummer: " $row["id"];
        echo 
" von " $row["ersteller"];
        echo 
" vom " date("d.m.Y - H:i:s"strtotime($row["datum"]));
        echo 
"<br>Titel: " $row["titel"];
        echo 
"<br>Text: "str_replace("\n""<br>"$row["beitrag"]);
        echo 
"<hr>";
        }
?>
<br><br>
<form action="gaestebuch.php" method="POST">
Ihr Name: <input name="ersteller" maxlength=30><br>
Titel des Beitrags: <input name="titel" maxlength=100><br>
Ihr G&auml;stebucheintrag:<br>
<textarea name="beitrag" rows=5 cols=50></textarea><br>
<input type="submit" name="submit" value="Eintragen">
</form>
<?php
    mysql_close
($link);
?>


Gästebücher und Sicherheit

In Sachen Sicherheit gibt es leider auch etwas zu sagen. Das obige Beispiel zeigt einem wie man ganz einfach ein Gästebuch programmieren kann. Leider gibt es viel zu viele Menschen im Internet, die die Arbeit anderer nicht würdigen und versuchen Schaden anzurichten oder rumzuspammen. Vielfach werden extra Programme darauf angesetzt Gästebücher, Foren u.ä. mit Internetadressen und Werbung für komische Tabletten vollzuspammen.

Das führt leider dazu dass man früher oder später einen Schutz braucht gegen automatische Einträge. Wie Ihr an unserer Kommentarmöglichkeit unten seht, habe ich ein sogenanntes Capture programmiert und eingebaut. Der Eintrag geschieht nur, wenn man die Zeichenfolge von dem Bild abtippt und mit eingibt. Automatisierte Programme können dies nicht oder nur sehr schwer lesen, wodurch die Spammer sich gleich die nächste Seite suchen. Wie man ein Capture graphisch generiert und abfragt wäre noch ein weiteres Thema, aber auch hier gibt es fertige Lösungen die man nur einbauen braucht.

Bilder im Newsskript oder Gästebuch

Das Skript könnte man sehr leicht zu einem Newsskript umfunktionieren. Hierzu müsste man einfach nur die Eintragsmöglichkeit rausnehmen und in eine extra Datei packen. Diese könnte man z.B. hinter einem Passwortschutz (htaccess) tun. Dann wäre nur die Anzeigeroutine in der Homepage und nur der Webmaster könnte Einträge vornehmen. Da man als Webmaster allerdings auch mal Bilder mit in den Text einbauen möchte, sollte man strip_tags();rausnehmen. Diese filtern nämlich jeglichen HTML & PHP Code. Wenn dieser Befehl nicht mehr existiert könnte man Bilder mit einem einfachen HTML Befehl einbinden:

<img src="mein_bild.jpg" border=0>

Zu Anfang würde ich empfehlen die Bilder die man einbaut mit einem FTP Programm hochzuladen und dann mit diesem IMG Befehl zu verknüpfen. Alternativ kann man in das Eingabeformular noch ein Feld für einen Dateiupload machen. Will man allerdings mehr als 1 Bild uploaden, müsste das Programm noch weitaus umfangreicher sein (Editierfunktionen etc). Der WYSIWYG Editor würde uns an dieser Stelle auch weiterhelfen, da wir diese HTML Befehle nicht selbst schreiben müssten bei der Eingabe. Wir würden gleich das Endergebnis sehen und es direkt in die Datenbank schreiben.

Einfach bei Tante Google mal nach WYSIWYG Editor kostenlos suchen.

Ich hoffe die Erläuterungen haben euch weitergebracht. Experimentiert mit eurem fertigen Skript ein wenig rum und baut zusätzliche Funktionen ein. Daraus lernt man und ist mit der Zeit in der Lage noch komplexere Skripte zu programmieren.





<<<< zurück Kapitelauswahl vorwärts >>>>






Content
 
  Bottom Design  

PepperTools.de Software Download | Software Shop
PepperTools Software Shop