Formularwerte prüfen

illuminatus26

Erfahrenes Mitglied
Hallo zusammen......

Bin gerade dabei ein Registrierungsformular zu schreiben.....
Die eingegebnen Werte, werden an einen neue Datei übergeben und dann erfolgt für den Anfang erstmal ne Prüfung, ob alle Pflichtfelder ausgefüllt wurden.
Das Problem, dass ich habe, stellt sich so da.
Fülle ich alle Pflichtfelder aus, wird der else-Block ausgeführt.
Das ist auch richtig so.
Fülle ich nix aus, kommen die Fehlermeldungen.
Auch das ist richtig.
Fülle ich aber alle Felder bis auf das Passwortfeld aus, wird zuerst die Fehlermeldung ausgegeben und dann aber trotzdem der else-Block ausgeführt.
Hoffe es war verständlich....

;)

PHP:
<?php

function leere_pflichtfelder () 	{
			
		if (!$_POST[vorname])
			{echo "Es wurde kein Vorname eingegeben !<br>";}
		
		if (!$_POST[nachname])
			{echo "Es wurde kein Nachname eingegeben !<br>";}
		
		if (!$_POST[anmeldename])
			{echo "Es wurde kein Anmeldename eingegeben !<br>";}
		
		if (!$_POST[passwort])
			{echo "Es wurde kein Passwort eingegeben !<br>";}
			
		if (!$_POST[geschlecht])
			{echo "Es wurde kein Geschlecht ausgewählt !<br>";}
			
		if (!$_POST[gebdatum])
			{echo "Es wurde kein Geburtsdatum eingegeben !<br>";}
			
		if (!$_POST[email])
			{echo "Es wurde keine E-Mail-Adresse eingegeben !<br>";}
					
		
		
else {

     echo "Herzlichen Glückwunsch.<br>Es wurden alle Pflichtfelder ausgefüllt ";
       
        }// Ende else
	
   }// Ende leere_pflichtfelder ()						
		
leere_pflichtfelder () -> $ausgabe;
echo $ausgabe;

?>

Dazu wäre noch zu sagen, dass im Formular alle Felder vom Typ Text sind.
Lediglich das Passwortfeld ist als password deklariert.
Die vergebnen Namen sind auch alle identisch.
 
Die else-Anweisung bezieht sich ja auch nur auf die letzte if-Anweisung. Setz am besten in den if-Anweisungen eine Variable $allesOk = false und prüfe dann am Schluss, ob $allesOk = false ist.

PHP:
function leere_pflichtfelder ()     {
            
    $allesOk = true;

    if (empty($_POST['vorname'])) {
		echo "Es wurde kein Vorname eingegeben !<br>";
		$allesOk = false;
	}

    // ...

    if($allesOk === true) {
		echo "Herzlichen Glückwunsch.<br>Es wurden alle Pflichtfelder ausgefüllt ";
	} else{
		echo "Leider nicht!";
	}
    
}// Ende leere_pflichtfelder ()
 
Zuletzt bearbeitet:
Auch wenn deine Abfragen funktionierem, weil PHP gnädig ist, solltest du sie korrigieren.

Code:
if (!$_POST[vorname])

Was macht diese Abfrage? sie prüft nicht, ob die Variable leer ist, sondern ob sie FALSE ist.(PHP akzeptiert freundlicherweise die Eingabe von Nicht auch als FALSE)
...weiterhin solltest du dir angewöhnen, die Arrayschlüssel in Anführungszeichen zu setzen.

Wenn du prüfen willst, ob eine Variable leer ist, benutze [phpf]empty[/phpf]:
Code:
if (empty($_POST['vorname']))

Später solltest du an der Prüfung noch feilen...und anhand regulärer Ausdrücke genau prüfen, was jeder String enthalten muss...denn so, wie es jetzt ist, reicht es, ein Leerzeichen einzugeben...was dir sicher nicht weiterhelfen wird.
 
Besten dank..
Auch ein sehr guter Tip....
Warum Array-Schlüssel in "".
Welchen Nachteil habe ich ohne

Das mit den Leerstrings und dem verhindern vom HTML-Code im Eingabefeld kommt noch.
Hatte mir auch das tolle Tutorial "Forumlarverarbeitung mal anders" angesehen.
Dafür reicht aber mein momentanes Wissen nicht aus, um es umzusetzen.
Versteh da nur Bahnhof und habe mir nun vorgenommen es erstmal so zu versuchen, damit es weitergeht........
 
Ohne ' interpretiert PHP es für gewöhnlich als Konstante (siehe [phpf]define[/phpf]).
 
Warum Array-Schlüssel in "".

Weil ansonsten eine Konstante gesucht wird.
Auch wenn es jetzt noch klappt, irgendwann wird mal die PHP-Konfiguration auf dem Server geändert, und du musst alles umändern, weil nichts mehr funktioniert...deswegen:

Gleich von Anfang an so korrekt wie nur irgend möglich arbeiten...das erspart dir später böse Überraschungen...und wenn du als Array-Key einen String hast, wie es der Fall ist, dann muss der gequotet werden.
 
@mAu

Da werd ich nicht schlau drauss. Aber macht nix.....
:-) :-) :-)


@Sven

Klingt logisch. Dann werd ich das mal so machen....


Danke Jung´s
 
illuminatus26 hat gesagt.:
Da werd ich nicht schlau drauss. Aber macht nix.....

Probier mal das, dann wirst du sehen, dass es doch was macht :-)
PHP:
<?php
$arr = array(
  'bla'=>'bla',
  'blubb'=>'blubb'
);

echo $arr[bla].'<br>';

define('bla','blubb');

echo $arr[bla].'<br>';
?>

Zuerst wird der Inhalt von $arr['bla'] ausgegeben, (PHP ist so gnädig und toleriert deinen Fehler, und nimmt $arr['bla'], weil die Konstante bla nicht gefunden wurde....übrigens meldet PHP diesen Fehler auch, wenn du dein error_reporting auf E_ALL setzt.)

Danach wird die Konstante bla definiert....mit dem Wert blubb

Und dann...oh Schreck :-)
...selber Aufruf, anderes Resultat: die Konstante existiert jetzt, alles läuft korrekt und
als Array-Schlüssel wird der Wert der Konstante bla genommen...nämlich blubb
 
Ich würde in diesem Fall eher mit Arrays arbeiten, in denen einerseits die benötigten Argumente als auch die Fehlermeldungen gesammelt werden:
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.';
	}

}
Vieleicht solltest du auch noch den Ton der Fehlermeldungen etwas freundlicher gestalten und daraus einen bittenden Hinweis machen: „Bitte geben Sie Ihren Vornamen ein.“ klingt wesentlich freundlicher als ein befehlender Ausruf.
 
Zurück