Header - sehr komischer Fehler

WolfBauer

Erfahrenes Mitglied
Moin,

ich habe hier einen Fehler den ich mir nicht erklären kann. Habe zwar auch eine Lösung durch Zufall gefunden allerdings kommt mir das alles sehr komisch vor.

Also ich habe ein Formular. Wenn bei Speichern bestimmt Felder nicht ausgefüllt sind soll man auf eine Seite mit Fehlermeldungen gesendet werden mittels "header". Mein Beispiel mache ich mit drei Feldern welche alle ausgefüllt sein sollen.

bei speichern sieht der Code so aus:
Code:
else if(empty ($new_kompo_name))
{
header ("Location: index.php?action=$action&message=J&errorNr=1&kompoForm=true&komponente=".urlencode($new_kompo_name)."text=".urlencode($new_kompo_name));
}
else if(empty ($new_kompo_titel))
{
header ("Location: index.php?action=$action&message=J&errorNr=2&kompoForm=true&komponente=".urlencode($new_kompo_name)."text=".urlencode($new_kompo_name));
}
else if(empty ($kompo_besch))
{
header ("Location: index.php?action=$action&message=J&errorNr=3&kompoForm=true&komponente=".urlencode($new_kompo_name)."text=".urlencode($new_kompo_name));
}

Bei jedem Feld was leer ist soll man zu der gleichen Seite gesendet werden mit einem anderen Fehlercode. Ich habe das gleiche auch ausbrobiert wenn alle den gleichen Fehlercode haben.

Nun der Fehler. Bei den Feldern 1. und 3. klappt das ohne Probleme. Bei Feld 2. werde ich allerdings auf der Zielseite auf eine andere Stelle gelenkt. Immer dran denken der Link bei allen Feldern war der gleich. Das kann ja alles durch irgendeine falsche Variablenübergabe passieren. Was ist jedoch mit meiner Lösung:
Code:
else if(empty ($new_kompo_name))
{
header ("Location: index.php?action=$action&message=J&errorNr=1&kompoForm=true&komponente=".urlencode($new_kompo_name)."text=".urlencode($new_kompo_name));
}
else if(empty ($new_kompo_titel))
{
header ("Location: index.php?action=$action&message=J&errorNr=2&kompoForm=true&komponente=".urlencode($new_kompo_name)."text=".urlencode($new_kompo_name));

echo "irgendwas";
}
else if(empty ($kompo_besch))
{
header ("Location: index.php?action=$action&message=J&errorNr=3&kompoForm=true&komponente=".urlencode($new_kompo_name)."text=".urlencode($new_kompo_name));
}

Wenn ich hinter dem zweiten Feld irgendeine Ausgabe mache funktioniert die Weiterleitung genau so wie sie soll!! Das kann doch gar nicht gehen. An der Ausgabe kommt man doch nie an. Und warum geht es bei den anderen und nur bei der nicht?

Irgendwer ne Idee.
 
Probier mal Folgendes:
PHP:
<?php

	$errors = array();

	if( empty($new_kompo_name) ) {
		$errors[] = 'Feld X darf nicht leer sein, bitte füllen Sie es aus!';
	}
	if( empty($new_kompo_titel) ) {
		$errors[] = 'Feld Y darf nicht leer sein, bitte füllen Sie es aus!';
	}
	if( empty($kompo_besch) ) {
		$errors[] = 'Feld Y darf nicht leer sein, bitte füllen Sie es aus!';
	}


	if( !empty($errors) ) {

		echo '<div class="note error"><ul>';
		foreach( $errors as $error ) {
			echo '<li>'.$error.'</li>';
		}
		echo '</ul></div>';

	} else {

		// Erfolg

	}

?>
 
aber so werde ich ja nicht auf die gewünschte seite weitergeleitet. Ich möchte, dass der Nutzer wieder zum Formular geleitet wird und die Felder mit den alten Werten auch gefüllt werden.
 
ich habe es jetzt mal so versuch:

Code:
else if(empty ($new_kompo_name))
{
$error = 1;
}
else if(empty ($new_kompo_titel))
{
$error = 2;
}
else if(empty ($kompo_besch))
{
$error = 3;
}

if($error > 0)
{
header ("Location: index.php?action=$action&message=J&errorNr=$error&kompoForm=true&komponente=".urlencode($new_kompo_name)."text=".urlencode($new_kompo_name));
}

Das Problem bleibt aber das gleich.
 
ok. ich habe die Lösung. Es hat nicht mit den Headern zu tun. Das ganze ist in ein "switch" eingebetet und auf dieses "switch" folgt noch ein zweites "switch" in welchen ebenfalls Weiterleitungen auf andere Dateien vorhanden sind. Anscheinend wurde der Code der Datei weiter abgearbeitet, obwohl ein Header-Befehl schon ausgeführt wurde.
 
WolfBauer hat gesagt.:
ok. ich habe die Lösung. Es hat nicht mit den Headern zu tun. Das ganze ist in ein "switch" eingebetet und auf dieses "switch" folgt noch ein zweites "switch" in welchen ebenfalls Weiterleitungen auf andere Dateien vorhanden sind. Anscheinend wurde der Code der Datei weiter abgearbeitet, obwohl ein Header-Befehl schon ausgeführt wurde.
Genau richtig erkannt, denn das Script wird ja auf dem Server ausgefuehrt. Und header() fuehrt nicht zur Beendigung der Ausfuehrung.
Dementsprechend solltest Du nach header() exit nutzen um die Ausfuehrung des Scripts nicht unnoetig fortzusetzen.
 
Zurück