Prob. mit "GUMBO`s leere_pflichtfelder"

Tabuk

Erfahrenes Mitglied
Hallo,
habe mir aus Formularwerte prüfen von GUMBO folgendes Skript angeschaut:
PHP:
function leere_pflichtfelder()
{

    $errors = array();
    $requiredArgs = array(
        'POST' => array(
            'vorname'     => 'Es wurde kein Vorname eingegeben!',
            'nachname'    => 'Es wurde kein Nachname eingegeben!',
            'anmeldename' => 'Es wurde kein Anmeldename eingegeben!',
            'passwort'    => 'Es wurde kein Passwort eingegeben!',
            'geschlecht'  => 'Es wurde kein Geschlecht ausgewählt!',
            'gebdatum'    => 'Es wurde kein Geburtsdatum eingegeben!',
            'email'       => 'Es wurde keine E-Mail-Adresse eingegeben!'
        )
    );
    foreach( $requiredArgs as $method => $items ) {
        if( !isset(${'_'.$method}) ) {
            continue;
        }
        foreach( $items as $key => $value ) {
            if( !isset(${'_'.$method}[$key]) || trim(${'_'.$method}[$key]) == '' ) {
                $errors[] = $value;
            }
        }
    }

    if( !empty($errors) ) {
        echo '<div class="note error"><ul>';
        echo '<li>'.implode('</li><li>', $errors).'</li>';
        echo '</ul></div>';
    } else {
        echo 'Herzlichen Glückwunsch.<br>Es wurden alle Pflichtfelder ausgefüllt.';
    }

}
Finde das Skript von der Idee her echt super, aber leider funktioniert es bei mir nicht.
Als Antwort bekomme ich immer, das alle Pflichtfelder ausgefüllt worden sind.
Auch wenn dies nicht der Fall ist.
Woran kann das liegen?

MfG Tabuk
 
Wie sieht denn das Formular aus?

Die Formularfelder müssen genau dieser namenssyntax folgen...

Das Formular muss als method POST benutzen, die felder müssen dann 'vorname', etc. etc. heissen
 
Zuletzt bearbeitet:
Hier ein kleiner Auszug meines Quelltextes:
PHP:
<?php
echo <<<tabelle
<form action="$_SERVER[PHP_SELF]" method="post">
tabelle;
?>
<input name="nachname" type="text">
Also die Daten werden via POST an sich selber übergeben.
Soweit funktioniert das auch..
 
Zuletzt bearbeitet:
Versuche einmal eine neue Zuweisung von "${'_'.$method}" zu "$_POST" am Anfang des ersten Durchlauf der "foreach()" Schleife.

PHP:
foreach( $requiredArgs as $method => $items ) {        
   ${'_'.$method} = $_POST;
   if( !isset(${'_'.$method}) ) {          
      continue;
}
//u.s.w
 
So, funktioniert es.
Aber dann würde die Schleife ja nutzlos sein.
Oder hast Du jetzt eine Ahnung, woran es liegen kann ?
 
Innerhalb der Funktion ist "${'_'.$method}" nicht mehr global.
Deshalb kannst Du auch folgendes schreiben.

PHP:
foreach( $requiredArgs as $method => $items ) {        
   global ${'_'.$method};
   if( !isset(${'_'.$method}) ) {          
     continue;
   }
//u.s.w
 
Dann mach da lieber Folgendes raus:
PHP:
foreach( $requiredArgs as $method => $items ) {
	if( !isset($GLOBALS['_'.$method]) ) {
		continue;
	}
	foreach( $items as $key => $value ) {
		if( !isset($GLOBALS['_'.$method][$key]) || trim($GLOBALS['_'.$method][$key]) == '' ) {
			$errors[] = $value;
		}
	}
}
 
Zurück