HTML, CSS, PHP, MySQL

html-php.de

HTML & CSS Stylesheets Referenz JavaScript PHP MySQL Sonstiges Gästebuch Inhalt Impressum

[ Formulare ] [ Kennwortschutz ] [ Kontakt-Formular ] [ Checkboxen ] [ Umfrage-Formular ]

Formulare

Um Daten aus einem Formular an den Server zu ü,bermitteln, setzen wir post ein. Damit werden die Daten unsichtbar übergeben. Sollten Sie ein Passwort-Feld einsetzen, können Sie das input-Feld mit type="passwort deklarieren, damit neugierige Zeitgenossen keine Change haben, dem User beim eintippen den Passwortes zuzuschauen. Damit wären wir schon bei einem Kennwortschutz für Webseiten.

Kennwortschutz für Webseiten

Zuerst schreiben Sie eine Login-Datei, die wie folgt aussehen könnte:

  <html>
  <head>
    <title>Login</title>
  </head>
  <body>
     <form method="post" action="geheim.php">
     Username: <input name="name" type="text"><br>
     Kennwort: <input name="pass" type="password"><br>
     <input type="submit" value="Login">
     </form>
  </body>
  </html>

Nach Wahl des Login-Button wird die Datei geheim.php aufgerufen. In dieser Datei lesen wir zuerst die übermittelte Daten mit $_POST ein. und überprüfen die Eingabe auf richtigkeit.

  <?php
    $user = $_POST['name'];
    $pass = $_POST['pass'];
    $okuser = "Anwender" ;
    $okpass = "Passwort" ;
    if ($user == $okuser && $pass == $okpass) {
      echo "Korrekte Eingabe" ;
    } else {
      echo "Falsche Eingabe" ;
    }
  ?>

Dieses hat allerdings ein Sicherheitsrisiko. Fällt auf den Webserver mal der PHP-Interpreter aus, wird diese Datei im Quelltext angezeigt. Dieses wird mit hoher wahrscheinligkeit nicht vorkommen, aber hundertprozentig Sicher kann man nicht sein. Daher sollten Sie die Passwortdaten in einer externen Datei einbinden, und mit include einbinden. Um diese Datei zusätzlich zu schützen, nennen Sie die Datei so, das diese mit einer Raute beginnt, z.B. #zugang.php. Ruft man diese Datei jetzt über den Browser auf, interpretiert er diese als Sprungmarke, und kann nicht aufgerufen werden. In dieser Datei können Sie dann die Zugangsdaten speichern.
Einen besseren Schutz erhalten Sie, wenn Sie diese Datei in einem anderen Ordner legen, der durch .htaccess geschützt ist.

  <?php
    $okuser = "Anwender" ;
    $okpass = "Passwort" ;
  ?>

Unsere geheim.php sieht jetzt so aus:

  <html>
  <head>
    <title>Login</title>
  </head>
  <body>
  <?php
    include "#zugang.php" ;
    $user = $_POST['name']; 
    $pass = $_POST['pass'];
    if ($user == $okuser && $pass == $okpass) {
      include "#anzeige.php" ;
    } else {
      echo "Falsche Eingabe" ;
    }
  ?>
  </body>
  </html>

Wird das Kennwort richtig eingegeben, wird der Inhalt von #anzeige.php angezeigt, ansonsten ist nur falsche Eingabe zu sehen. Anzeigebeispiel.

Kontaktformular

Wenn Sie Ihren Besuchern die Möglichkeit bieten möchen, Kontakt per eMail über ein Kontakt-Formular aufzunehmen, kann mit einen einfachen Script erledigen. Allerdings gibt es dabei ein kleines Problem. Einige Free-Webspace-Anbieter haben die Mail-Funktion deaktiviert.
Zuerst legen Sie wieder eine Formular an, das in der Regel nur 3 Felder braucht. Den Namen und die Mail-Adresse des Absenders sowie die Nachricht.

  <html>
  <head>
    <title>Kontakt-Formular</title>
    <style type="text/css">
      * {
        font-family: Arial, Helvetica, sans-serif;
      }
      body {
        background-color: #eeeeff;
        margin: 20px;
      }
      td {
        vertical-align: top;
        text-align : left;
      }
      h2 {
        font-size: 20px;
      }
    </style>
  </head>
  <body>
     <h2>Kontakt-Formular</h2>
     <form method="post" action="versand.php">
     <table>
     <tr><td>Ihr Name:</td>
     <td><input name="name" type="text" size="54"></td></tr>
     <tr><td>Ihre Mailadresse:</td>
     <td><input name="mail" type="text" size="54"></td></tr>
     <tr><td>Ihre Nachricht:</td>
     <td><textarea name="text" rows="10" cols="52"></textarea></td></tr>
     </table>
     <br>
     <input type="submit" value="Versenden">
     </form>
  </body>
  </html>

Diese Datei speichern wir dann ab z.b. unter "kontakt.html". Durch drücken des Buttons "Versenden" wird die PHP-Datei "versand.php" aufgerufen, in der wir zuerst kontrollieren, ob alle drei Felder ausgefüllt sind.

  <?php
  $fehler = "";
  $name = $_POST['name'];
  $mail = $_POST['mail'];
  $text = $_POST['text'];
  if (empty($name)) {
    $fehler .= "<li>der Absendername fehlt</li>" ;
  }
  if (empty($mail)) {
    $fehler .= "<li>die Mailadresse fehlt</li>" ;
  }
  if (empty($text)) {
    $fehler .= "<li>keine Nachricht eingetragen</li>" ;
  }
  ?>

Ist die Variable $fehler leer, können wir das Formular nun mit der mail()-Funktion versenden. Dabei wird in der Reihenfolge die Mail-Adresse des Empfängers, Betreffzeile und Mitteilung angegeben. Zusätzlich kann noch die Absender-Adresse angegeben werden. Fehlt diese Angabe, wird standartmäßig die Adresse me@localhost eingetragen. Dabei darf From: nicht vergessen werden.

mail("empfaenger@domain.de","Betreff","Mitteilung","From: Absender");

Die Absender-Daten geben Sie am besten so an, das Sie sofort erkennen, dass das Mail von Ihrem Kontaktformular kommt, und den Absender aus dem Formular packen Sie in die Nachricht. Nun können Sie für ein Zeilenumbruch natürlich nicht das <br>-Element nehmen, sondern müssen den ASCII-Codes 13 und 10 einsetzen. Dafür benutzen wir die chr()-Funktion.

  <?php
  if (empty($fehler)) {
    $return = chr(13).chr(10);
    $an = "adresse@domain.de" ;
    $betreff = "Mein Kontaktformular" ;
    $von = "From: Kontaktformular <null@MeineHTML.de>" ;
    $datum = "Datum: ".date("j.n.Y").$return;
    $zeit = "Zeit:  ".date("H:i").$return;
    $abs = "Von:   ".$name." <".$mail.">".$return;
    $trennen = "-----------------------------------------------".$return;
    $nachricht = $datum.$zeit.$abs.$trennen.$text;
    mail($an,$betreff,$nachricht,$von);
  }
  ?>

Die Nachricht kommt dann so in Ihre Mailbox an:
Mailbox-Screenshoot

Nun kann es sein, dass mit get oder post eine Variable mit Anführungszeichen " oder Hochkomma ' übergeben wird, und von PHP automatisch maskiert, also mit einem Backslash \ versehen wird. Diese Besonderheit von PHP nennt man "Magic Quotes". Um festzustellen, ob Magic Quotes aktiviertist, gibt es die Funktion get_magic_quotes_gpc() und kann mit if abgefragt werden. Mit stripslashes() können Sie dann diese Backslash´s löschen

  if (get_magic_quotes_gpc()) {
    $text = stripslashes($text);

Als nächstes soll die versendete Nachricht auf den Bildschirm angezeigt werden. Dazu müssen zunächst alle evtl. HTML und PHP-Code aus der Nachricht entfernt werden, denn ansonsten kann dies zu einen Absturz des Browsers oder zu unvorherbaren Darstellung kommen. Dazu wird die strip_tags()-Funktion eingesetzt. Der zweite Schritt ist die Umwandlung der Sonderzeichen mit der htmlentities(). Zu guter letzt müssen wir den Zeilenumbruch von chr(13)chr(10) wieder in dein <br> mit der Funktion str_replace() umwandeln. Außerdem fehlt noch die Ausgabe, falls ein Feld nicht ausgefüllt wurde, d.h. der String $fehler nicht leer ist.

  <?php
  if (empty($fehler)) {
    $return = chr(13).chr(10);
    $nachricht = strip_tags($nachricht);
    $nachricht = htmlentities($nachricht);
    $nachricht = str_replace($return,"<br>",$nachricht);
    echo "<p>Ihre Nachricht wurde versendet.</p>" ;
    echo "<p>$nachricht</p>" ;
  } else {
    echo "<p>Ihre Nachricht wurde nicht gesendet, weil</p>" ;
    echo "<ul>$fehler</ul>" ;
  }
  ?>

Dieses setzen wir jetzt alles zusammen und Speichern dies wie ober bereits erwähnt unter versand.php ab:

  <?php
  $fehler = "";
  $name = $_POST['name'];
  $mail = $_POST['mail'];
  $text = $_POST['text'];
  if (empty($name)) {
    $fehler .= "<li>der Absendername fehlt</li>" ;
  }
  if (empty($mail)) {
    $fehler .= "<li>die Mailadresse fehlt</li>" ;
  }
  if (empty($text)) {
    $fehler .= "<li>keine Nachricht eingetragen</li>" ;
  }
  if (empty($fehler)) {
    if (get_magic_quotes_gpc()) {
      $text = stripslashes($text);
    }
    $return = chr(13).chr(10);
    $an = "adresse@domain.de" ;
    $betreff = "Mein Kontaktformular" ;
    $von = "From: Kontaktformular <null@MeineHTML.de>" ;
    $datum = "Datum: ".date("j.n.Y").$return;
    $zeit = "Zeit:  ".date("H:i").$return;
    $abs = "Von:   ".$name." <".$mail.">".$return;
    $trennen = "-----------------------------------------------".$return;
    $nachricht = $datum.$zeit.$abs.$trennen.$text;
    mail($an,$betreff,$nachricht,$von);
  }
  ?>
  <html>
  <head>
    <title>Kontakt-Formular</title>
  </head>
  <body>
  <?php
  if (empty($fehler)) {
    $return = chr(13).chr(10);
    $nachricht = strip_tags($nachricht);
    $nachricht = htmlentities($nachricht);
    $nachricht = str_replace($return,"<br>",$nachricht);
    echo "<p>Ihre Nachricht wurde versendet.</p>" ;
    echo "<p>$nachricht</p>" ;
  } else {
    echo "<p>Ihre Nachricht wurde nicht gesendet, weil</p>" ;
    echo "<ul>$fehler</ul>" ;
  }
  ?>
  </body>
  </html>
Anzeigebeispiel

Checkboxen

Checkboxen eignen sich hervoragend dazu, wenn mehrere Antworten möglich sein können. Ein Formular könnte so aussehen:

  <h2>Welche "Websprachen" beherrsche Sie</h2>
  <p>Mehrere Antworten sind m&ouml;glich</p>
  <form method="post" action="ergebnis.php">
   "input name="html" type="checkbox">(X)HTML<br>
   "input name="xml" type="checkbox">XML<br>
   "input name="css" type="checkbox">CSS<br>
   "input name="php" type="checkbox">PHP<br>
   "input name="js" type="checkbox">JavaScript<br>
   "input name="perl" type="checkbox">Perl<br>
   "input name="andere" type="checkbox">andere<br>
   "input name="keine" type="checkbox">keine<br>
   "input type="submit" value="Versenden">
  </form>
  

Durch drücken des Buttons Versenden wird das Script ergebnis.php aufgerufen.

  <?php
    $text = "Sie haben folgendes gew&auml;hlt:<br> - " ;
    if (isset($_POST['html'])) $text .= "(X)HTML - ";
    if (isset($_POST['xml'])) $text .= "XML  - ";
    if (isset($_POST['css'])) $text .= "CSS - ";
    if (isset($_POST['php'])) $text .= "PHP - ";
    if (isset($_POST['js'])) $text .= "JavaScript - ";
    if (isset($_POST['perl'])) $text .= "Perl - ";
    if (isset($_POST['andere'])) $text .= "andere - ";
    if (isset($_POST['keine'])) $text .= "keine - ";
    echo " $text <br>"
  ?>
Anzeigebeispiel

Umfrage-Formular

Hier möchte ich Ihnen Zeigen, wie Sie ein Umfrageformular universell gestalten können. Wenn Sie einmal Ihre Umfrage ändern möchten, brauchen Sie nicht das ganze PHP-Script umschreiben, sondern nur eine inkludierte Datei, hier umfrage.php, mit der ich hier anfange:
In dieser Datei speichern Sie die Frage in die Variablen $frage und die möglichen Antworten in ein Array. Anschließend werden die Antworten noch sortiert. Die Antworten werden sollen in der Datei musik.txt gespeichert werden. Existiert diese Datei noch nicht, wird diese angelegt. Zusätzlich wird noch die Beschriftung des Buttons festgelegt.

  <?php
  $frage = htmlentities("Welche Musik hören Sie am liebsten ?");
  $werte = array("Blues","Classic Rock","Country","Dance","Disco","Funk","Hip-Hop",
     "Jazz","Metal","Oldies","Pop","Reggae","Rock","Techno","Soul","Rave","Opera");
  sort($werte);
  $anzahl = count($werte);
  $button = " Abstimmen ";
  $datei = "musik.txt";
  $return = chr(13).chr(10);
  if (!file_exists($datei)) {
    $erg = fopen($datei,"w");
    for ($i=0; $i < $anzahl; $i++) {
      $eintrag = $werte[$i].$return."0".$return;
      fwrite($erg,$eintrag);
    }
    fclose($erg);
  }
  ?>

Als zweites legen Sie das Umfrageformular an. Als erstes wird die umfrage.php inkludiert. Die Frage habe ich hier in eine Überschrift gefasst. Innerhalb einer for-Schleife werden die Antworten ausgegeben.

  <?php
    include ("umfrage.php");
  ?>
  <html>
  <head>
    <title>Umfrage</title>
  </head>
  <body>
     <h2>
     <?php
      echo "$frage";
     ?>
     </h2>
     <form method="post" action="ergebnis.php">
     <?php
      for ($i = 0; $i < $anzahl; $i++) {
       echo "<input type=\"radio\" name=\"umfrage\" value=\"$i\"> $werte[$i]<br>";
      }
     ?>
     <input type="submit" value="<?= $button ?>">
     </form>
     <a href="../formular.html">Zurück zum Kurs</a>
  </body>
  </html>

Wird der Button gedrückt, wird dann die PHP-Datei ergebnis.php aufgerufen. Auch hier wird die umfrage.php inkludiert. Als nächstes wird mit if (!isset($_POST['umfrage'])) geprüft, ob abgestimmt wurde. Die gewählte Antwort aus dem Umfrage-Formular wird in der Variablen $wahl gespeichert. Innerhalb einer for-Schleife wirden die Werte aus der Datei (hier musik.txt) eingelesen. Wird dabei der Satz erreicht, in der die Antwort mit der Wahl übereinstimmt, wird die Anzahl um ein Zähler erhöht. Zum Schluss wird das Ergebnis in die Datei zurückgeschrieben, und die Array-Liste mit der arsort() neu sortiert. Da wir hier assoziative Arrays einsetzen, können wir mit arsort() nach den zweiten Wert sortieren, also die abgegebenen Stimmen absteigend, mit asort() aufsteigend, sortieren. Wollen Sie nach den ersten Wert sortieren, also nach den Antworten, setzen Sie ksort() aufsteigend, bzw. krsort() für absteigend an. Zum Schluss wird mit Hilfe der forach-Funktion in der drei Variablen angegeben werden (der Name des Arrays, der Schlüssel (hier die Antwort), und der Wert (hier die Anzahl der Stimmen)), die Werte ausgegeben.

  <?php
    include ("umfrage.php");
  ?>
  <html>
  <head>
    <title>Umfrage</title>
  </head>
  <body>
     <h2>
     <?php
      echo "$frage";
     ?>
     </h2>
     <?php
       if (!isset($_POST['umfrage'])) {
         echo "<p>Bitte erst abstimmen - Dann sehen Sie das Ergebnis</p>";
       } else {
         $wahl = $werte[$_POST['umfrage']];
         $satz = "";
         $alle = 0;
         $liste = array();
         $erg = fopen($datei,"r");
         for ($i=0; $i < $anzahl; $i++) {
           $titel = trim(fgets($erg));
           $ezahl = trim(fgets($erg));
           if ($wahl == $titel) $ezahl++;
           $alle = $alle + $ezahl;
           $liste[$titel] = $ezahl;
           $satz = satz.$titel.$return.$ezahl.$return;
         }
         fclose($erg);
         $erg = fopen($datei,"w");
         fwrite($erg,trim($satz));
         fclose($erg);
       }
       echo "<p>Bisher abgegebene Stimmen: $alle<br>\n";
       echo "<p>Ihre Antwort lautet: $wahl</p>\n";
       echo "<p>Der aktuelle Stand:</p>\n";
       echo "<table>\n";
       arsort($liste);
       foreach ($liste as $key => $counter) {
         echo "<tr><td>$counter</td><td>$key</td></tr>\n";
       }
       echo "</table>\n";
    ?>
    <a href="../formular.html">Zurück zum Kurs</a>
  </body>
  </html>
Anzeigebeispiel

back top next