Suche nach als

Formular mit Selbstbezug

Auf dieser Seite:

Ein Formular das die Seite in dem es liegt als Ziel hat und sich somit immer wieder selber aufruft. Das Formular wird durch sein Absenden scheinbar nicht verlassen und wird zur Benutzeroberfläche einer Applikation.

Ein Haiku

Schreiben Sie einen kurzen Haiku in das Formularfeld (mindestens 12 Zeichen, HTML erlaubt, keine E-Mail Adresse, kein Script, kein XSS).
Beispiel: Durch meine geschlossenen Lieder hab ich gesungen.

Es gibt hier 7 Punkte zu bemerken um das Formular anständig zu nutzen:

Die Prüfung der Eingaben

1. Am Seitenanfang!
Schutz vor Umleitung auf andere Adresse:

<?php
if ($_SERVER["SCRIPT_FILENAME"] != $_SERVER["DOCUMENT_ROOT"].$_SERVER["PHP_SELF"]) {
#  session_destroy();                          // Session beenden falls vorhanden
   
header"location: http://localhost/");     // selber umleiten  
#  echo "Du böser User du.";                   // Fehlermeldung ausgeben
#  exit;                                       // einfach Alles abbrechen
}
?>

2. Funktion zum Drucken von Fehlermeldungen im Head der Datei bereitstellen:

<?php
function errmsg($msg) {
   
?>
   <p style="font-weight:bold; color:#ff0000; border: solid 1px #ff0000; padding:5px"><?php print nl2br($msg?></p>
   <?php
}
?>

3. Funktion im Head zur Überprüfen der Eingabewerte für $textfeld auf Korrektheit und Fehlermeldung zurückgeben:

<?php
function validate_textfeld($val) {
   
$msg "";
   if (
strlen($val) < 12)
      
$msg .= "Der Haiku muss mindestens 12 Zeichen lang sein.\n";

   if (
preg_match("/@/"$val))
      
$msg .= "Ich will Ihre E-Mail Adresse nicht haben.\n";
      
   
$val1 strtolower($val); // für Prüfung

   
if (preg_match("/script/"$val1))
      
$msg .= "Ich akzeptiere kein Script.\n";

   if (
preg_match("/form/"$val1))
      
$msg .= "Ich akzeptiere kein Formular.\n";

   return 
$msg;
}
?>

4. Dieser Scriptteil wird einfach beim Einlesen ausgeführt. Für jedes Formularfeld werden nun obige Validatoren aufgerufen und das Ergebnis der Überprüfung gemerkt.

<?php
// Es wird die Flag $valid gesetzt
$valid true;
if (isset(
$_POST["textfeld"])) {
   
$error["textfeld"] = validate_textfeld($_POST["textfeld"]);
// falls eine Fehlermeldung vorhanden ist, wird die Flag auf 'false' gesetzt
   
if ($error["textfeld"] != "") {
      
$valid false;
   }
}
?>

Das Formular

$_SERVER["PHP_SELF"]

5. Das Formular ruft mit 'action' seine eigene Seite auf. Wenn der Name der Datei bekannt ist (was er ist, falls das Formular nicht in einer Include-Datei steckt), sollte ich besser den Dateinahmen angeben z.B.: action="formular_self.php" (das schützt vor XSS)!

6. Im Input textfeld wird der zuvor eingegebene Inhalt (entschärft) wieder eingefügt, falls in der Variablen $_POST etwas vorhanden ist.
Der Submitbutton sendet seinen Namen: do_form_x, der weiter unten abgefragt wird. Ohne diese Abfrage (ob überhaupt das Formular abgeschickt wurde), würde schon beim ersten Betreten der Seite, die Fehlermeldung ausgegeben.

<form action="<?php print $_SERVER["PHP_SELF"]; ?>" method="post">
  <input type="text" name="textfeld"
  value="<?php print htmlspecialchars($_POST["textfeld"]); ?>" size="50" />
  <p><input type="submit" name="do_form_x"
  value="Haiku auf der Zunge zergehen lassen ..." /></p>
</form>

Die Ausgabe

7. Falls die Variable $error nicht leer ist, wird sie ausgegeben. Dazu wird die Funktion errmsg() aufgerufen.
Falls die Flag $valid true ist und der Formularbutton seinen Namen schon gesendet hat
(weil er geklickt wurde), wird der übermittelte Text ausgegeben.
Lustig anzusehen, wie häuffig von PHP zu HTML und wieder zurück gewechselt wird (einmal bloss für eine }.
Der Zyklus startet erneut mit einem Klick auf den Button.


<?php
// Ggf. Fehlermeldung ausdrucken.
if ($error["textfeld"] != "")
   print 
errmsg($error["textfeld"]);
 if (
$valid and isset($_POST["do_form_x"])) { 
  echo 
"<p style='font-weight:bold; color:Green; border: solid 1px Green; padding:5px'>\"";
    print 
$_POST["textfeld"];
    
?>" schmeckt wie Ohrenschmalz.
  </p>
<?php ?>;


Valid XHTML 1.0 Check den Code.

Sprachwechsel >> << Formular auswerten
Ich bin hier: > PHP Lehrling >>> Formular mit Selbstbezug
 
HTML und XHTML | CSS | JavaScript und DHTML | PHP und MySQL | Andere Sprachen
Letzter Update: 19.12.2010