Layout

Lektion 14 - Eintrag bearbeiten

Wir wollen deinem Mitglied nun die Möglichkeit geben, seine Angaben zu ändern.

 

14.1 Daten in ein Formular auslesen

Wir werden deinem Mitglied außerdem die Möglichkeit geben, etwas über sich zu schreiben. Dazu brauchen wir ein neues Feld in der MySQL Tabelle Mitglieder. Öffne dein phpMyAdmin und klicke auf den Link mit der Tabelle Mitglieder. Unten drunter findest du ein Formularfeld mit dem du neue Felder hinzufügen kannst. Nenne das neue Feld 'Profil'. Als Typ wählst du 'text' aus.

Wie man etwas aus einer MySQL Tabelle ausliest, weißt du bereits. Auch, wie man Werte in ein Formular einfügt. Damit jedes Mitglied seine eigenen Angaben sehen kann, wählen wir als WHERE Anweisung seine Session ID. Und damit ein nicht angemeldeter Besucher dort nichts sehen kann, weil er keine Session hat, füge den Link zur Seite profil_bearbeiten.php in das Menü, das beim Einloggen erscheint. Zum Beispiel unter dem Link 'Ausloggen'.

// Die Seite profil_bearbeiten.php

$sql = "SELECT
                Name,
                eMail,
                Passwort,
                Wohnort,
                Avatar,
                Profil
           FROM
                Mitglieder
           WHERE
                ID = '"
.$_SESSION['ID']."'";

$result = mysql_query($sql) OR die(mysql_error());

while($row = mysql_fetch_assoc($result)) {

       echo "<form action='index.php?Seite=profil_bearbeiten.php&action=senden'
           method='POST'>"
;

       echo "Name:
           "
.$row['Name']."<br>";
       
echo "eMail:
          <input type='text' name='eMail' size='20' value='"
.$row['eMail']."'><br>";
       
echo "Passwort:
          <input type='password' name='Passwort' size='20' value='"
.$row['Passwort']."'><br>";
       
echo "Passwort wiederholen:
          <input type='password' name='Passwort' size='20' value='"
.$row['Passwort1']."'><br>";
       
echo "Wohnort:
          <input type='text' name='Wohnort' size='20' value='"
.$row['Wohnort']."'><br>";
       
echo "URL zu deinem Avatar:
          <input type='text' name='Avatar' size='20' value='"
.$row['Avatar']."'><br>";
       
echo "Über dich: <br>
           <textarea name='Profil' cols='20' rows='8'>"
.$row['Profil']."</textarea><br>";
       echo "<input type='submit' value='Bearbeiten'>";

       echo "</form>";

}

Den Namen darf man nicht mehr ändern. Da man den Geburtstag bereits zwangsläufig bei der Anmeldung eingetragen hat, brauchen wir den auch nicht mehr, denn er ändert sich schließlich nicht.

 

14.2 Eintrag bearbeiten

Oberhalb des Formulars starte nun die Abfrage, ob das Formular verschickt wurde. Wenn der Eintrag bearbeitet wurde, kann es ruhig weiter angezeigt werden. Überprüfe, ob die Felder eMail, Passwort, und Avatar ausgefüllt sind, ob die Passwörter übereinstimmen und ob der Eintrag unter Avatar länger als 11 Zeichen ist.
Auch, wie man einen Datenbankeintrag aktualisiert, hast du bereits gesehen.

if ($_GET['action'] == "senden") {

    // Überprüfe Angaben

    if ($Fehler != 1) {

        $sql = "UPDATE
                        Mitglieder
                    SET
                        eMail = '"
.$_POST['eMail']."',
                        Passwort = '"
.$_POST['Passwort']."',
                        Wohnort = '"
.$_POST['Wohnort']."',
                        Avatar = '"
.$_POST['Avatar']."',
                        Profil = '"
.htmlspecialchars($_POST['Profil'])."'
                    WHERE
                        ID = '"
.$_SESSION['ID']."'";

        mysql_query($sql) OR die(mysql_error());

        echo "Deine Angaben wurden bearbeitet.";

    }

}

 

14.3 Die Funktion htmlspecialchars()

Mit der Funktion htmlspecialchars() verhindert man die Übsersetzung von HTML Code auf der Seite. Das heißt, wenn dein Mitglied nun HTML Code in das Textfeld schreibt, wird der HTML Code auf der Seite zu sehen sein und nicht übersetzt.

$String = "<a href='http://www.telien.de/' target='_blank'>Telien</a>";

    echo $String;

        // Gibt Telien aus

    echo htmlspecialchars($String);

        // Gibt <a href='http://www.telien.de/' target='_blank'>Telien</a> aus

 

14.4 Anklickbare Smilies

Geben wir unserem Mitglied doch einmal die Möglichkeit, durch einen Klick Smilies in seinem Teil 'Über sich' einzufügen. Dafür wenden wir uns kurz von PHP ab und Javascript zu.

Smily Smily Smily Smily Smily Smily

Um über Javascript Funktionen mit einem Formular zu kommunizieren, müssen wir ihm erst einmal einen Namen geben. Ich habe es z.B. 'Formular' genannt.

<form action='seite.php' method='POST' name='Formular'>

Nenne du nun das Formular zum Bearbeiten der Einträge 'Formular'.

Um nun etwas mit Javascript in ein Textfeld einzufügen, benötigen wir den Pfad zum Textfeld.

document.Formular.Profil.value;

Diese Seite - Das Formular mit Namen 'Formular' - Das Feld mit Namen 'Profil'.

value sorgt dafür, dass der Inhalt, der bereits im Textfeld steht, wieder in das Textfeld eingefügt wird. Würden wir das nicht extra sagen, würde das Feld gleich mit unserem Smilie überschrieben werden.

Nun müssen wir noch unser Smilie Kürzel hinzufügen. Dieses übergeben wir beim Aufruf der Funktion in einem Parameter. Aufrufen werden wir die Funktion über ein Javascript Event, in diesem Falle bei einem Klick auf das Bild. Das Event wird deshalb nun mit onClick eingeleitet.

<img src='smile.gif' border='0' onClick=\"javascript:Smilie(':)');\">

Klickt man nun auf den Smilie, wird die Funktion Smilie aufgerufen und der Wert ':)' übergeben. Als String steht er auch hier in Anführungszeichen. Damit der Quelltext diese nicht verwechselt, musst du diesesmal normale Anführungszeichen nehmen und im PHP Quelltext ggf. escapen.

<script language='javascript'>

   function Smilie(SCode) {
      document.Formular.Profil.value+=SCode;
      document.Formular.Profil.focus();
   }

</script>

Wird die Funktion nun aufgerufen, wird unser Smilie in der Variablen SCode gespeichert (In Javascript gibt es kein $ vor Variablen). += hängt einen Wert an den bereits vorhandenen Wert. Wie es der Punkt-Operator in PHP macht. Damit wäre die Funktion bereits fertig. Doch als nächstes wollen wir den Cursor wieder in das Formularfeld setzten. Dafür hat Javascript eine eigene Funktion focus().

Füge die Funktion nun in deine index.php ein und füge die anklickbaren Smilies zu deinem Profil Bearbeitungs Feld.

Smily
:)
Smily
-.-
Smily
:P
Smily
O.O
Smily
:(
Smily
:[

 

14.5 Smilie-Codes in Bilder übersetzten

Dein Mitglied hat nun etwas über sich geschrieben und ganz viele Smilie Codes in seinem Eintrag. Beim Auslesen auf der Profilseite sollen statt der Codes nun Bilder angezeigt werden. Wie man einen Teilstring durch etwas anderes ersetzt, hast du beim Spiel "Buchstabensalat" bereits mit der Funktion str_replace() kennengelernt. str_replace(" ", "", $String); ersetzt alle Leerzeichen durch einen leeren String. Nun haben wir aber das Problem, dass wir nicht einen Smilie haben, sondern 6. Und was gibt es schöneres, als Arrays abzuklappern...

Wir schreiben ein Array mit allen Codes, die gesucht werden sollen, und eins mit allen Bildern, die diese ersetzen sollen. Da du sicher vorhast, auf deiner Webseite Unmengen von Smilies zur Verfügung zu stellen, schreibe deine Arrays in eine Extra Seite und füge sie mit include auf deine index.php ein.

// Die Seite smile.php

$SCode = array (":)",
                           "-.-",
                           ":P",
                           "O.O",
                           ":(",
                           ":[");

$SBild = array ("<img src='smile.gif'>",
                        "<img src='none.gif'>",
                        "<img src='bigrazz.gif'>",
                        "<img src='eek.gif'>",
                        "<img src='cry.gif'>",
                        "<img src='mad.gif'>");

Achte darauf, dass die Bilder die gleichen Indexe wie die Codes bekommen.

Unsere str_replace() Funktion sieht nun so aus: str_replace($SCode, $SBild, $String). Sie durchläuft das Array SCode und ersetzt die gefundene Zeichenkette nun automatisch durch den Eintrag mit dem gleichen Index aus $SBild.

Eingefügt in unsere profil.php Seite sieht es so aus:

include "smile.php";

$sql = "SELECT
                Name,
                eMail,
                Wohnort,
                Avatar,
                date_format(Geburtstag, '%d.%m.%Y') as Geburtstag,
                date_format(Beitrittsdatum, '%d.%m.%Y') as Beitrittsdatum,
                Vermoegen,
                Profil
            FROM
                Mitglieder
            WHERE
                ID = '"
.$_GET['Mitglied']."'";

$result = mysql_query($sql) OR die(mysql_error());

while($row = mysql_fetch_assoc($result)) {

    $ProfilAusgabe = str_replace($SCode, $SBild, $row['Profil']);

    echo "<b>Über mich: </b>".nl2br($ProfilAusgabe);

}

 

14. 6 Die Funktion nl2br()

Die Funktion nl2br() erzeugt Zeilenumbrüche im Text, die ohne Ausgabe mit dieser Funktion ignoriert werden würden.

"Hallo ^^

ich bin der Eintrag einer Textarea.
Wie seh ich aus, wenn ich so eingefügt aus einer MySQL Tabelle gelesen werde?"

echo $row['Textarea'];

// Hallo ^^ ich bin der Eintrag einer Textarea. Wie seh
// ich aus, wenn ich so eingefügt aus einer MySQL
// Tabelle gelesen werde?

echo nl2br($row['Textarea'])

// Hallo "";
//
// ich bin der Eintrag einer Textarea.
// Wie seh ich aus, wenn ich so eingefügt aus einer
// MySQL Tabelle gelesen werde?"


hr

14.7 Aufgaben

Füge diese Profil-Bearbeitungsseite auf deine Übungsseite ein und stelle selbst noch 3 weitere Smilies zur Auswahl. Lese das neue Profilfeld wie beschrieben auf der Seite profil.php aus.

« zurück Inhalt | Fragen       Kurs weiter »
Layout