Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Ankündigungen, News und Feedback > Tutorials > [PHP] Eingabeüberprüfung eines Formulars
Antwort
 
Themen-Optionen
Alt 15.03.2005, 08:22   Nach oben    #1
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.800
Standard

Eingabeüberprüfung eines Formulars

Oftmals möchte man überprüfen, ob alle nötigen Eingaben eines Formulars gemacht wurden, beispielsweise bei einem Gästebuch oder einem Kontaktformular.

Dabei ist es natürlich komfortabel, wenn der User nach einer unzureichenden Eingabe, z.B. wenn eine Angabe vergessen wurde, nur diese eine Angabe ergänzen und nicht alle Eingaben nochmals tätigen muss.
Um diese Funktionalität zu realisieren nutzen wir Sessions.

Erstellen wir aber zunächst einmal ein Beispielformular. Dieses Formular wird an eine PHP-Datei geschickt, die dann die Überprüfung der Eingaben übernimmt.

Code:
<form action="ueberpruefung.php" method="post">

    <input type="text" name="name">
    <input type="text" name="email">

    <input type="hidden" name="gesendet" value="1">

    <input type="submit" name="abschicken" value="Weg damit">

</form>
Das macht nun genau das, was oben beschrieben wurde.

Schauen wir uns nun, die Datei "ueberpruefung.php" an.

Da wir eine Session brauchen starten wir diese zu Beginn mit session_start().
PHP-Code:
<?php

   
// Session starten
   
session_start();

?>
Da diese Datei nur dann durch das Formular aufgerufen werden soll, fragen wir ab, ob dies auch geschehen ist. Das machen wir, indem wir überprüfen, ob der Schlüssel "gesendet" des superglobalen Arrays $_POST gesetzt ist. Dieser Schlüssel entspricht dem im Formular definierten hidden-field.
Wurde die Datei direkt per URL aufgerufen, so wird der User zum Formular weitergeleitet.
PHP-Code:
<?php

   
// Absicherung, dass die Datei auch über das Formular aufgerufen wurde
   
if( isset($_POST['gesendet']) ) {
       
// Eingabeprüfung
   
}
   else {
       
header'Location: http://localhost/formular.php' );
       exit();
    }
?>
Hier sei angemerkt, dass sowohl bei session_start(), als auch bei header() darauf zu achten ist, dass keine Ausgabe (auch keine Leerstelle) an den Browser gesendet wird, bevor diese Funktionen aufgerufen werden.


Wenden wir uns aber nun der Eingabeüberprüfung zu.

Zunächst einmal erstellen wir im Array $_SESSION den Schlüssel 'error' und weisen diesem ein Array zu. Wir haben somit ein mehrdimensionales Array.
PHP-Code:
<?php

        $_SESSION
['error']  = array();

?>
Beim Absenden eines Formulars werden alle "values" der Formularelemente im Array $_POST abgespeichert, sofern im Formularkopf method="post" steht.

Wir verwenden also eine foreach-Schleife und durchlaufen so das Array.
Im Schleifenrumpf werden dann die Überprüfungen durchgeführt. In unserem Fall überprüfen wir zum Einen, ob überhaupt etwas eingegeben wurde und deuten dann noch eine Überprüfung der eMail-Adresse an.
PHP-Code:
<?php

        
foreach( $_POST as $key => $value ) {
             
// Ist überhaupt etwas geschrieben worden?
             
if( strcmp(trim($value),'') == ) {
                 
$_SESSION['error'][] = $key;
             }
             else {
                 if( 
strcmp($key,'email') ) {
                       
ueberpruefeMail($value);
                 }
                 else {
                       
$_SESSION[$key] = $value;
                 }
             }
        }
Wenn keine Angabe gemacht wurde wird der Name des Formularfelds, also der entsprechende Schlüssel aus dem Array $_POST, als Element der zweiten Dimension zu $_SESSION['error'] hinzugefügt.
Ist eine Angabe gemacht worden, so wird diese dem entsprechenden Schlüssel (= Formularfeld) zugewiesen.


Nun müssen wir natürlich auch noch überprüfen, ob ein Fehler aufgetreten ist oder nicht. Sind die Angaben nicht vollständig oder nicht korrekt, so wird der User per header() wieder zurück zum Formular geleitet.
Ist kein Fehler entdeckt worden wird das Formular so verarbeitet, wie es gewünscht ist.
PHP-Code:
<?php

        
if( count($_SESSION['error']) > ) {
             
header'Location: [url]http://localhost/formular.php[/url] ' );
             exit();
        }
        else {
             
// Hier kann z.B. eine Mail abgeschickt und der User danach zu einer
             // Bestätigungsseite weitergeleitet werden.
             
header'Location: http://localhost/bestaetigung.php' );
             exit();
        }

?>

Der interessante Teil ist nun natürlich der Fall, wenn Fehler aufgetreten sind.
Wir müssen unsere Datei mit dem Formular etwas umbauen, um den gewünschten Komfort zu erreichen.

Wir müssen natürlich auch hier eine Session starten, da wir ja auf die Inhalte der Session-Variablen zugreifen wollen.
PHP-Code:
<?php

   
// Session starten
   
session_start();

?>
Um dem User auch optisch anzuzeigen, wo er seine Angabe verbessern bzw. komplettieren muss bauen wir noch ein kleines Feature ein. Die Beschriftung des Textfeldes wird farbig, in diesem Falle rot, dargestellt, wenn die Eingabe nicht korrekt war.
Das erfordert eine kleine Variablendefinition:

PHP-Code:
<?php

   
// Definition der Schriftfarbe bei inkorrekter Eingabe
   
$cssErrorVorne  '<span style="color:#ff0000;">';
   
$cssErrorHinten '</span>';

?>
Nun geht es ans Eingemachte
Wir erstellen ein Array, welches die anzuzeigenden Fehler enthält.
Wir füllen es, indem wir mittels einer foreach-Schleife durch das Array $_SESSION['error'] laufen und die Schlüssel der zweiten Dimension dem zweidimensionalen Array "$_error" hinzufügen.
PHP-Code:
<?php

   
// Array, welches die anzuzeigenden Fehler enthält
   
$_error = array();

   foreach( 
$_SESSION['error'] as $key ) {
        
$_error[$key]['vorne']  = $cssErrorVorne;
        
$_error[$key]['hinten'] = $cssErrorHinten;
   }

?>
Das mag nun auf den ersten Blick etwas komisch erscheinen, allerdings wird es durch den letzten Codeschnipsel sicherlich klarer.
Wir geben also nun das Formular aus. Dabei halten wir die Werte des Attributs "value", sowie die farbliche Markierung bei einem Fehler variabel.

PHP-Code:
<?php

   printf
'<form action="ueberpruefung.php" method="post">

               %sName:%s <input type="text" name="vorname" value="%s">
               %sVorname:%s  <input type="text" name="nachname" value="%s">

               <input type="hidden" name="sent" value="1">
               <input type="submit" name="submit" value="Abschicken">

            </form>'
,
           
$_error['name']['vorne'],
           
$_error['name']['hinten'],
           
$_SESSION['name'],
           
$_error['email']['vorne'],
           
$_error['email']['hinten'],
           
$_SESSION['email'] );

?>
Somit wird da, wo denn eine korrekte Eingabe vorhanden war, diese auch angezeigt und die Beschriftung bleibt in der Originalfarbe. Dort wo aber keine bzw. eine falsche Angabe gemacht wurde bleibt das "value"-Attribut leer und die Beschriftung wird in der vorher definierten Farbe dargestellt.


Dieses Beispiel ist selbstverständlich noch stark erweiterbar. Vor allem im Bereich der eigentlichen Überprüfung sollte man sich etwas Zeit lassen und durch "Spielen" herausfinden, wie man die eigenen Überprüfungen. optimal realisieren kann.


Die verwendeten Funktionen findet man natürlich wie immer im offiziellen Manual.

Viel Spaß beim Basteln

Solltet Ihr Fragen zu dem Tutorial haben, so schreibt bitte einen Beitrag im PHP-Forum mit einem Verweis auf dieses Tutorial.
Danke.

Ich hoffe, dass ich Euch hier etwas weiterhelfen konnte.

Grüße Ben.

Geändert von Jann Hendrik (27.06.2007 um 10:58 Uhr). Grund: intern-tag-Fehler manuell angepasst
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.11.2005, 12:34   Nach oben    #2
Doggi
Erfahrener Benutzer
 
Benutzerbild von Doggi
 
Registriert seit: 26.10.2005
Ort: Basel
Beiträge: 115
Standard

printf( '<form action=ueberpruefung.html method="post">

müsste heißen

printf( '<form action=ueberpruefung.php method="post">
Doggi ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.11.2005, 12:42   Nach oben    #3
Corvin
Erfahrener Benutzer
 
Benutzerbild von Corvin
 
Registriert seit: 19.03.2005
Ort: S-H | Flensburg
Beiträge: 439
Standard

Am besten:
printf( '<form action="ueberpruefung.php" method="post">
Corvin ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.11.2005, 12:43   Nach oben    #4
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.800
Standard

Hi,
der PHP-Highlighter frisst da irgendwas. Zitiert einfach mal meinen Code, dann seht ihr, dass ich die Anführungszeichen eingebaut habe.

Ich werde mal schauen, ob man diesen kleinen Bug irgendwie fixen kann.

Grüße Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.11.2005, 13:31   Nach oben    #5
Chr!s
Erfahrener Benutzer
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

PHP-Code:
<?php

        
if( $count($_SESSION['error']) > ) {    
             
header'Location: [url]http://localhost/formular.php[/url] ' );
             exit();   
        }
        else {        
             
// Hier kann z.B. eine Mail abgeschickt und der User danach zu einer
             // Bestätigungsseite weitergeleitet werden.
             
header'Location: http://localhost/bestaetigung.php' );
             exit();               
        }

?>
Erste Zeile-müsste es nicht count() statt $count() sein?
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.11.2005, 13:33   Nach oben    #6
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.800
Standard

Danke schön . Wurde aktualisiert.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.01.2006, 13:28   Nach oben    #7
PaterNoster
Erfahrener Benutzer
 
Benutzerbild von PaterNoster
 
Registriert seit: 18.08.2005
Ort: Dortmund
Beiträge: 166
Standard

Wenn man von dem Beispiel-Formular ausgeht, ist das hier falsch:

PHP-Code:
<?php

   printf
'<form action="ueberpruefung.php" method="post">
               
               %sName:%s <input type="text" name="vorname" value="%s">
               %sVorname:%s  <input type="text" name="nachname" value="%s">
               
               <input type="hidden" name="sent" value="1">
               <input type="submit" name="submit" value="Abschicken">
                 
            </form>'
,
           
$_error['name']['vorne'],
           
$_error['name']['hinten'],
           
$_SESSION['name'],
           
$_error['email']['vorne'],
           
$_error['email']['hinten'],
           
$_SESSION['email'] );
 
?>
Richtig wäre doch wohl

PHP-Code:
<?php

   printf
'<form action="ueberpruefung.php" method="post">
               
               %sName:%s <input type="text" name="name" value="%s"> //Hier
               %sE-Mail:%s  <input type="text" name="email" value="%s"> //...und hier
               
               <input type="hidden" name="sent" value="1">
               <input type="submit" name="submit" value="Abschicken">
                 
            </form>'
,
           
$_error['name']['vorne'],
           
$_error['name']['hinten'],
           
$_SESSION['name'],
           
$_error['email']['vorne'],
           
$_error['email']['hinten'],
           
$_SESSION['email'] );
 
?>
Nur ne Kleinigkeit, hat mich aber auf Anhieb doch ein wenig verwirrt
PaterNoster ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage zum Tut: [PHP] Fremde Webseiten auslesen the_cRu PHP-Programmierung 27 10.02.2007 19:59
[PHP] 404-Fehlerseiten als Chance PaterNoster Tutorials 0 23.04.2006 15:04
[PHP] Formulare verstehen und auswerten WarrenFaith Tutorials 5 21.03.2006 17:11
Tutorial: Eingabeüberprüfung eines Formulars UNeverNo PHP-Programmierung 2 02.03.2006 13:39
[PHP] Ein einfaches Template-System MrNiceGuy Tutorials 0 09.10.2005 18:30


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:27 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44