Formularfelder prüfen

jpfote

Grünschnabel
Hi Leute,

ich bin hier grad am verzweifeln. Ich mache grade meine ersten versuche in PHP. Eigentlich erstelle ich nur Tools als PERL & Shellskripte aber jetzt muss ich auch mal an PHP ran. Folgendes Problem:

Ich habe ein Formular, dass über 3 Seiten geht. Im Grunde funktioniert alles, die Daten werden übergeben u.s.w.. Ich muss jetzt aber noch prüfen, ob die eingegeben Daten korrekt sind (z.B. dass in der PLZ keine Buchstaben drin sind und so). Ich habe mir auch schon die ganzen Prüfausdrücke ausgearbeitet, sie liegen feinsäuberlich in einer Textdatei vor mir :-).

Ich scheitere aber am einfachsten :-(. Wie binde ich diese Prüfungen jetzt ein? Ich kann zumindest einen Teilerfolg vermelden:

Um die Felder von Seite 1 zu prüfen, habe ich in Seite 2 die Ausdrücke eingebaut unter zuhilfenahme von if-Bedingungen. Aber wie geht es nun weiter? Ich möchte erreichen, dass ein Benutzer, der z.B. keine PLZ angegeben hat, wieder auf die Seite 1 gelangt und dort z.B. in roter Schrift unter dem PLZ-Feld steht "PLZ korrigieren" oder so.

Wie wird sowas realisiert? Ich kriegs nicht hin :-(. Ich denke Euch vielmals für Eure Tipps!

Grüße Jens
 
Hallo,

eine Weiterleitung zurück auf die 1. Seite kannst du mit
Code:
header("Location: http://www.domain.de/foo.php");
exit;
realisieren!

Mit "Prüfausdruck" meinst du sicher einen regulären Ausdruck. http://php.net/preg_match ist die Funktion, die du suchst!

Gruß
 
Danke für die Antwort, die reg.Exps habe ich schon, den header kenne ich auch schon. Ich weis eben nur nicht, ob das so korrekt ist. Ich skizziere am besten mal den Ablauf, wie ich ihn mir vorstelle:

1.) Die 1. Seite wird ausgefüllt
2.) Der User betätigt den Button absenden
3.) Seite 2 wird als form_action aufgerufen
4.) Am Anfang von Seite 2 steht der Code für die Prüfungen, z.B. ist die Variable "PLZ" leer? Wenn nein weiter, wenn ja leite per header auf Seite 1 um.

Ist das so korrekt oder löst man dieses Problem normalerweise anders? Wie kann ich es hinbekommen, dass dann auf der 1. Seite bei PLZ z.B. rot druntersteht "Sie haben die PLZ vergessen" oder ähnlich?

Grüße Jens
 
Zuletzt bearbeitet:
Moin Jens,

ich für meinen Teil finde es am einfachsten, soetwas in einer einzigen Seite zu erledigen.

Prüfe die Daten...sind sie korrekt, verarbeite sie halt, wenn nicht, gebe die Meldungen inkl. Formular aus.


Die Lösung mit der Weiterleitung im Fehlerfall ist eher suboptimal, so gehen dir bereits getätigte, korrekte Formulareingaben, verloren...das nervt die User.
Bei komplett korrekten Eingaben kannst du dann nach erfolgter Verarbeitung immer noch weiterleiten...dann benötigst du die Daten ja idR. nicht mehr.

Für die Validierung empfehle ich auch hier(wie schon oft :-))...einen Blick auf [phpf]filter_input_array[/phpf]

Das erspart obendrein die wiederholte Prüfung, ob überhaupt etwas übergeben wurde. Du kannst deine Formularfelder einfach mit den gefilterten Ergebnissen füllen...wurde nichts oder fehlerhaftes übergeben, bleiben sie halt leer....ohne irgendwelche Notice's :)
 
Hallo Sven,

vielen Dank für Deine Antwort,

diese optimale Idee mit der Prüfung auf der selben Seite wie das eigentliche Formular hatte ich auch schon. Nut genau da liegt mein Problem, ich weis nicht, wie das gehen soll. Entweder sage ich dem Formular als Action "seite2.php" oder eben "phpself". Beides geht ja nicht. Verstehst Du, was ich meine?

Grüße Jens
 
Hallo CookieBuster,

auch viele Dank für Deine Antwort, aber leider hilft sie mir nicht weiter :-(. Ich versuche nochmal das Problem zu umreisen:

Ich weis, das ich die Formularfelder mit Ausdrücken prüfen muss, die habe ich auch schon fertig. Ich kenne auch die if-Schleife :-). Ich weis nur nicht, wie ich diese Komponenten in das Formular einbaue.

Ich habe den gesamten Code zur Prüfung vor mir liegen, ich weis nur nicht, wie bewerkstelligen kann, das es eingebaut ist.

Wenn ich z.B. unter das Formular den Code

Code:
  <? 
echo $_POST["nachname"];
if(empty($_POST["nachname"]))
    {
        echo"Name vergessen";

    }?>

schreibe, wird das ja immer ausgeführt. Auch wenn der senden-Button noch gar nicht angeklickt wurde. Drücke ich mich so undeutlich aus? *lach*

Ich glaube, ich fange nochmal von vorne an mit dem Formular! Trotzdem vielen Dank Euch allen!

Grüße Jens
 
Hallo Jens,

bevor du $_POST["nachname"] verarbeitest, solltest du sicherstellen, dass die Variable auch existiert und dass sie auch nicht NULL ist. Dies machst du über:

if (isset($_POST["nachname"]))

Gruß,

Chris
 
Hier mal ein simples Beispiel, wie man es machen kann(mit einem einzigen Skript unter Verwendung des oberhalb erwähnten filter_input_array() )
PHP:
<?php
//Callback-Funktion zur Datumsfilterung
function datecheck($date)
{
  if(!preg_match('@^(\d\d).(\d\d).(\d\d\d\d)$@',$date,$matches))
  {
    return NULL;
  }
  if(checkdate($matches[2],$matches[1],$matches[3]))
  {
    return $date;
  }
  return NULL;
}

$filters=array(
    'zip'=>       array('filter'  =>  FILTER_VALIDATE_REGEXP,
                        'flags'   =>  FILTER_NULL_ON_FAILURE,
                        'options' =>  array(
                                            'regexp'=>'/^\d{5}$/' 
                                          ),
                        'label'   =>  'Postleitzahl',
                        'error'   =>  '[erlaubte Eingabe:5 Ziffern]'
                ),
    'birthdate'=> array('filter'  =>  FILTER_CALLBACK,
                        'options' =>  'datecheck',
                        'label' =>'Geburtsdatum',
                        'error'   =>'[erlaubte Eingabe: gültiges Datum im Format dd.mm.yyyy]'                       
                ),
    'mail'    =>  array('filter'  =>  FILTER_VALIDATE_EMAIL,
                        'flags'   =>  FILTER_NULL_ON_FAILURE,
                        'label' =>'Mailadresse',
                        'error'   =>'[erlaubte Eingabe:gültige Mailadresse]'                       
                )     
);



$POST=filter_input_array(INPUT_POST, $filters);


//Hier Daten verarbeiten...alles OK
if(!empty($POST) && !in_array(NULL,$POST))
{
  echo 'alles OK :)';
}

//Keine oder ungültige Daten übermittelt
else
{
echo (empty($POST))
        ? '<h3>Bitte Formular ausfüllen</h3>'
        : '<h3>Es sind Fehler aufgetreten, bitte korrigieren</h3>'

?>

<form method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>">
<?php
  foreach($filters AS $k=>$v)
  {
    $error=(!empty($POST) && is_null($POST[$k]))?$v['error']:'';
    $value=@$POST[$k];
    echo '<strong><label for="'.$k.'">'.$v['label'].'</label></strong>'.
         '<span style="color:red">'.$error.'</span>'.
         '<br/><input id="'.$k.'" name="'.$k.'" value="'.$value.'"><br/>';
  }
?>
<input type="submit"/>
</form>
<?php
}
?>
 
Zurück