PHP Tutorials, PHP lernen, PHP Forum, PHP Community and more ... MyWebsolution.de!

Sidebar

Home News Tutorials Workshops Tipps Artikel Gästebuch Sitemap Unicode Shopping

Suche

Members

Forum Login Registrierung

Statistik

Statistikbereich
Jetzt1
Heute98
Gestern286
Gesamt1624140

Formularprüfung - Typischer Formularaufbau, Affenformular

Autor Flitze
Klicks 85723
Rating für Formularprüfung
  6 von 10
Bewertungen35
Stand 12.06.2013
Keywords:
Formulare Tutorial, Formularverarbeitung, Formularaufbau, Daten übergeben, Affenformular, Daten in Formular erhalten, Formularaufbau, HTML, Affenformular

Amazon: PHP 5.3 und MySQL 5.1
Breadcrumb:
Tutorials » Formularprüfung » Formularprüfung - Typischer Formularaufbau, Affenformular
Seite : 1 2 3 4 5 6 Bewerten
Article Wizard - deutscher Article Spinner

6. Typischer Formularaufbau


Bei der Bearbeitung von Formularen hat es sich bewährt, Formulare in der gleichen Datei anzuzeigen und zu verarbeiten.
Das könnte so aussehen:
PHP:
Dateiname: formular.php

<?php
    
// Wenn auf 'Eintragen' geklickt wurde, verarbeite das Formular
    
if(isset($_POST['submit']) AND $_POST['submit']=='Eintragen'){
        
// z.B. Speichern in einer Datenbank oder Textdatei...
         
echo "Vielen Dank!<br>\n".
              
"Sie wurden erfolgreich in den Newsletter aufgenommen.";
    }
    
// Ansonsten, z.B. wenn der User das Formular zum 1. Mal aufruft, wird das Formular angezeigt
    
else{
?>
    Bitte geben Sie ihren Namen und Ihre Email-Adresse ein, um sich für den Newsletter einzutragen<br>
<form action="formular.php"
      method="post"
      accept-charset="ISO-8859-1">
<table>
 <tr>
  <td>
   Name*
  </td>
  <td>
   <input type="text" name="Name">
  </td>
 </tr>
 <tr>
  <td>
   Email-Adresse*
  </td>
  <td>
   <input type="text" name="Email">
  </td>
 </tr>
</table>
<input type="submit" name="submit" value="Eintragen">
</form>
<?php
    
}
?>

Zunächst wird das Formular angezeigt, da $_POST['submit'] noch nicht existiert. Wenn der User auf 'Eintragen' klickt, werden die Formulardaten bearbeitet und
Zitat:
Vielen Dank
Sie wurden erfolgreich in den Newsletter aufgenommen.

wird angezeigt.

Allerdings wäre es nicht gut, wenn jemand vergisst, seine Emailadresse anzugeben, da es ja keinen Sinn macht einen Namen ohne Email-Adresse zu speichern. Deshalb sollten die obligatorischen Felder mit '*' o.ä. gekennzeichnet werden. Bei der Verarbeitung muss nun noch geprüft werden, ob diese Daten auch wirklich eingegeben wurden.


7. Formulardaten überprüfen


Eine Fehlerüberprüfung lässt sich ebenfalls standardisiert darstellen. Sie könnte wie folgt aussehen:

PHP:
<?php
    
// Wenn auf 'Eintragen' geklickt wurde, verarbeite das Formular
    
if(isset($_POST['submit']) AND $_POST['submit']=='Eintragen'){
         
// Fehlerarray erzeugen
         
$errors = array();
         
// Prüfen, ob alle Felder existieren
         
if(!isset($_POST['Name'], $_POST['Email']))
             
$errors[] = "Bitte benutzen sie unser Formular.";
         else{
                 
// Prüfen, ob Name und Email nicht leer sind
                 
if(trim($_POST['Name'])=='')
                     
$errors[] = "Bitte geben Sie ihren Namen ein.";
                 if(
trim($_POST['Email'])=='')
                     
$errors[] = "Bitte geben Sie ihre Email-Adresse ein.";
         }
         
// Prüfen, ob ein Fehler aufgetreten ist
         
if(count($errors)){
             echo 
"Sorry, ihre Daten konnten nicht bearbeitet werden.<br>\n".
                      
"<br>\n";
                 foreach(
$errors as $error)
                     echo 
$error."<br>\n";
                 echo 
"Zur&uuml;rck zum <a href=\"formular.php\">Formular</a>\n";
         }
         else{
        
// z.B. Speichern in einer Datenbank oder Textdatei...
             
echo "Vielen Dank!<br>\n".
                       
"Sie wurden erfolgreich in den Newsletter aufgenommen.";
         }
    }
    
// Ansonsten, z.B. wenn der User das Formular zum 1. Mal aufruft, wird das Formular angezeigt
    
else{
    
//...
?>


Zuerst überprüft man, ob auch wirklich das vorgesehene Formular benutzt wurde, indem man überprüft, ob alle Eingabe-Elemente existieren (Vorsicht bei Checkboxen, Radiobuttons und Auswahllisten. Wenn dort nichts ausgewählt wurde, existiert auch kein entsprechendes $_POST-Array-Element!).

Nun prüft man, ob in das Feld auch etwas eingegeben wurde. Im obigen Beispiel wird das mittels
PHP:
<?php
if(trim($_POST['Name'])=='')
?>

getan. Alternativ dazu könnte man auch
PHP:
<?php
if(!empty($_POST['Name']))
?>

schreiben.
Falls ein Fehler auftritt, wird eine entsprechende Meldung in dem Fehlerarray $errors gespeichert. Anschließend wird geprüft, ob eine Fehlermeldung in dem Array gespeichert wurde. Ist dies der Fall, werden die einzelnen Fehlermeldungen ausgegeben, sodass der User sieht, was er falsch gemacht hat. Außerdem wird ein Link angezeigt, mit dem er zum Formular zurückkehren kann.

Natürlich können auch noch weitere Fehlerabfragen eingebaut werden, z.B. ob der Name aus mindestens 3 Zeichen besteht oder die Email-Adresse eine gültige Syntax hat. Dazu müsst ihr einfach eine weitere if-Abfrage mit der ensprechenden Bedingung und eine dazugehörige Fehlermeldung in euer Script implementieren.

Wenn die Daten vollständig sind, also
PHP:
<?php
count
($errors)
?>

0 liefert, werden die Daten schließlich weiterverarbeitet.

8. Das Affenformular


Bei diesem Formular wird das Formular so lange angezeigt, bis der User die richtige Daten eingegeben hat. Vom Prinzip her beruht es auf der o.g. Technik der Formularprüfung.
PHP:
<?php
    
// Wenn auf 'Eintragen' geklickt wurde, prüfe das Formular
    
if(isset($_POST['submit']) AND $_POST['submit']=='Eintragen'){
        
// Fehlerarray erzeugen
        
$errors = array();
         
// Prüfen, ob alle Felder existieren
         
if(!isset($_POST['Name'], $_POST['Email']))
             
$errors[] = "Bitte benutzen sie unser Formular.";
         else{
                 
// Prüfen, ob Name und Email nicht leer sind
                 
if(trim($_POST['Name'])=='')
                     
$errors[] = "Bitte geben Sie ihren Namen ein.";
                 if(
trim($_POST['Email'])=='')
                     
$errors[] = "Bitte geben Sie ihre Email-Adresse ein.";
         }
    }
    
// Wenn das Formular geprüft wurde und kein Fehler gefunden wurde verarbeite die Daten
    
if(isset($errors) AND !count($errors)){
    
// z.B. Speichern in einer Datenbank oder Textdatei...
         
echo "Vielen Dank!<br>\n".
              
"Sie wurden erfolgreich in den Newsletter aufgenommen.";
    }
    
// Beim ersten Aufruf oder beim Finden eines Fehlers wird das Formular angezeigt
    
else {
        
// Wurde bei der Formularprüfung ein Fehler gefunden wird er über dem Formular ausgegeben
         
if(isset($errors)){
             echo 
"Sorry, ihre Daten konnten nicht bearbeitet werden.<br>\n".
                       
"<br>\n";
             foreach(
$errors as $error)
                 echo 
$error."<br>\n";
             echo 
"<hr>\n";
         }
?>
Bitte geben Sie ihren Namen und Ihre Email-Adresse ein, um sich für den Newsletter einzutragen<br>
<form action="<? echo $_SERVER['PHP_SELF']; ?>"
      method="post"
      accept-charset="ISO-8859-1">
<table>
 <tr>
  <td>
   Name*
  </td>
  <td>
<?php
    
// Stellt den Namen wieder her, wenn ein Fehler auftrat
    
if(isset($_POST['Name']))
        
// htmlentities sichert das Formular gegen Cross-Scripting
        
echo "<input type=\"text\" name=\"Name\" value=\"".htmlentities($_POST['Name'], ENT_QUOTES)."\">\n";
    else
        echo 
"<input type=\"text\" name=\"Name\">\n";
?>
  </td>
 </tr>
 <tr>
  <td>
   Email-Adresse*
  </td>
  <td>
<?php
    
// Stellt die Email-Adresse wieder her, wenn ein Fehler auftrat
    
if(isset($_POST['Email']))
        echo 
"<input type=\"text\" name=\"Email\" value=\"".htmlentities($_POST['Email'], ENT_QUOTES)."\">\n";
    else
        echo 
"<input type=\"text\" name=\"Email\">\n";
?>
  </td>
 </tr>
</table>
<input type="submit" name="submit" value="Eintragen">
</form>
<?php
    
}
?>


Fehlerprüfung und Verarbeitung der Daten sind nun aber getrennt, so dass das Script die Verarbeitung nicht nur beendet, sondern gleich wieder das Formular anzeigen kann.

Das Zielscript des Formulars wurde durch $_SERVER['PHP_SELF'] ersetzt. In dieser Variable ist die aktuelle Seite gespeichert, allerdings ohne Parameterangaben! So ist das Formular universell einsetzbar und nich an einen Dateinamen gebunden.

Der eigentliche Vorteil dieses Formulars liegt in der Wiederherstellung der Daten, wenn ein Fehler auftrat. Der Wert beim Absenden des Formulars wird dabei als value-Attribut des entsprechenden Feldes wieder eingetragen. Dabei müssen unbedingt die HTML-spezifischen Zeichen umgewandelt werden, da es sonst zu Fehler bei der Anzeige kommen kann, wenn der User irgendwo die Zeichenfolge "> stehen hat. Damit würde das Inputfeld geschlossen werden und alles was danach kommt, stünde irgendwo "außerhalb" des Feldes auf der Seite. Um die Zeichen umzuwandeln, nutze ich die Funktion htmlentities.

PHP:
<?php
    
// Stellt den Namen wieder her, wenn ein Fehler auftrat
    
if(isset($_POST['Name']))
        
// htmlentities sichert das Formular gegen Cross-Scripting
        
echo "<input type=\"text\" name=\"Name\" value=\"".htmlentities($_POST['Name'], ENT_QUOTES)."\">\n";
    else
        echo 
"<input type=\"text\" name=\"Name\">\n";
?>


Zurück zur vorigen Seite:
Formularprüfung - Formulardaten an MySQL übergeben
Weiter zur nächsten Seite:
Formularprüfung - Optimierung

»» Zurück zum Menu

Suchmaschinenoptimierung

Suchmaschinenoptimierung (SEO - Search Engine Optimization)

Ranking

Tutorials (13)

8.6
8.4
8.1

Workshops (3)

8.8
8.7
7.6

Tipps (13)

7.2
6.7
6.5

Artikel (29)

8.4
7.2
6.4

RSS Feeds

Full Feed Tutorials Workshops Tipps Artikel

Twitter

Follow me on Twitter

Partner & Links


Valid HTML 4.01 Transitional
Valid CSS
nach oben

Diese Seiten unterstützen MyWebsolution:
 
© MyWebsolution.de
2006-2017