• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage Formular prüfen

Curved

Neues Mitglied
Hallo zusammen,

bin noch ziemlicher PHP-Anfänger und habe mir folgende Formularverarbeitung aus dem Internet "geliehen":
PHP:
if(isset($_POST)) {
   foreach($_POST as $name => $value) {
      if(is_array($value)) {
          $mailText .= $name . ":\n";
          foreach($valueArray as $entry) {
             $mailText .= "   " . $value . "\n";
          }
      }
      else {
          $mailText .= $name . ": " . $value . "\n";
      } 
   } 
}

Das funktioniert soweit wunderbar und ich finde es praktisch, dass ich nicht einzeln meine Formularfelder zuweisen muss. Trotzdem würde ich gerne überprüfen, ob ein Feld nicht ausgefüllt wurde (es sollen alle ausgefüllt werden) und dementsprechend zurück zum Formular verweisen.

Ich weiß, dass man üblicherweise mit !isset überprüfen kann, aber ich weiß leider nicht, wo ich das in die bestehende Verarbeitung einbauen kann, bzw. ob das überhaupt möglich ist.

Vielen Dank für eure Hilfe,

Curved
 
Hallo zusammen,

bin noch ziemlicher PHP-Anfänger und habe mir folgende Formularverarbeitung aus dem Internet "geliehen":
PHP:
if(isset($_POST)) {
   foreach($_POST as $name => $value) {
      if(is_array($value)) {
          $mailText .= $name . ":\n";
          foreach($valueArray as $entry) {
             $mailText .= "   " . $value . "\n";
          }
      }
      else {
          $mailText .= $name . ": " . $value . "\n";
      }
   }
}

Das funktioniert soweit wunderbar und ich finde es praktisch, dass ich nicht einzeln meine Formularfelder zuweisen muss. Trotzdem würde ich gerne überprüfen, ob ein Feld nicht ausgefüllt wurde (es sollen alle ausgefüllt werden) und dementsprechend zurück zum Formular verweisen.

Ich weiß, dass man üblicherweise mit !isset überprüfen kann, aber ich weiß leider nicht, wo ich das in die bestehende Verarbeitung einbauen kann, bzw. ob das überhaupt möglich ist.

Vielen Dank für eure Hilfe,

Curved

Ich glaube du hast isset() noch nicht ganz verstanden.
Damit wird nur geprüft ob die Variable existiert, nicht ob sie "leer" ist.
PHP:
$var1 = null;
isset($var1); // true
isset($var2); // false
Innerhalb eines foreach macht isset außerdem keinen Sinn. Denn würde der Eintrag nicht existieren würde die Iteration erst gar nicht stattfinden.

Außerdem musst du validieren bevor du die Ausgabe beginnst um dann ggf. statt der Ausgabe mit einem Fehler zu antworten.
 
Vielen Dank für die Antwort, dann heißt das also ich muss die gesamte Verarbeitung umstellen. Gibt es sonst keine Möglichkeiten alle Felder zu überprüfen?
 
Vielen Dank für die Antwort, dann heißt das also ich muss die gesamte Verarbeitung umstellen. Gibt es sonst keine Möglichkeiten alle Felder zu überprüfen?

Klar gibt es die, aber halt in einem getrennten Arbeitsschritt.

PHP:
$errors = [];

foreach($_POST as $name => $value) {

    if(is_array($value)) {

        foreach($value as $num => $subvalue) {

            if(!$subvalue) {
                $errors[] = 'Row '.($num+1).' in '.$name.' is invalid.';
            }

        }

    }

    if(!$value) {
        $errors[] = $name.' is invalid.';
    }

}

if($errors) {
    var_dump($errors);
    exit;
}

// no errors / output

Ich denke aber du wirst selbst noch herausfinden dass so eine allgemeine Prüfung nicht wirklich praktikabel ist.
 
PHP:
if(!$subvalue)
Wenn ich das richtig sehe, wird hier bei einer Eingabe einer 0 ein Problem entstehen, oder? Und sollte man Eingaben nicht auch trimmen, damit nicht einfach nur ein Blank eingegeben werden kann?
 
PHP:
if(!$subvalue)
Wenn ich das richtig sehe, wird hier bei einer Eingabe einer 0 ein Problem entstehen, oder? Und sollte man Eingaben nicht auch trimmen, damit nicht einfach nur ein Blank eingegeben werden kann?

Stimmt. Gleiches trifft auch für den zweiten if-Block zu.

Und ob Whitespace nun gültig ist oder nicht, meinte ich mit meinem letzten Satz.
Je nach Art der Daten kann auch ein Space gewünscht sein bzw. eine 0 erlaubt sein oder nicht. Eine allgemeine Validierung ist daher nicht praktikabel.

Ein "trim" hat im Validator selbst mMn. nichts zu suchen, sondern sollte ggf. vorher durchgeführt werden. Der Validator sollte nur prüfen, nicht ändern.
 
Zuletzt bearbeitet:
Zurück
Oben