Weiterleitung mittels Header funktioniert nicht - leere Seite!

preko

Erfahrenes Mitglied
Hi,

in meinem Script habe ich folgende Wahrheitsprüfung eingebaut:

PHP:
...
  if( !$result = mysql_query($sql_query, $db) ) { 
    echo "<p><strong>Fehler ".mysql_errno($db)."</strong><br />\nFehler-Ausgabe:<strong>".mysql_error($db)."</strong>"; 
    exit; 
  } 
  while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) { 
  	$vorname = $row['vorname'];
  	$name = $row['name'];
	   if ($vorname == "" || $name == "") {
	   	header ('Location: login.php');	  	
	  }
	  	else {
	  		echo "Guten Tag <strong>".$row['vorname']." ".$row['name']."</strong>";	
	  	}  	
  }
...
Wenn die korrekten Daten (die mit einer MySQL Datenbank abgeglichen werden) eingegeben wurden, kommt auch die Ausgabe, z. B. : Guten Tag Max Mustermann.
Wenn jedoch falsche Zugangsdaten eingegeben werden, erscheint einfach "nur" eine leere Seite und es wird nicht wieder auf die Seite mit der Eingabemaske (login.php) zurückgeleitet.

Habe ich einen Scriptfehler übersehen, oder liegt es eventuell an der Serverumgebung (Win2003 Server mit IIS6 und PHP als CGI, MySQL)?

Beste Grüße,
preko
 
Wenn man davon ausgeht, dass bei falschen Zugangsdaten kein Datensatz zurückgeliefert wird, dann liegt der Fehler in der while-Schleife. Diese wird in dem Fall nämlich überhaupt nicht durchlaufen.
Richtig wäre es so:

PHP:
...
  if( !$result = mysql_query($sql_query, $db) ) {
    echo "<p><strong>Fehler ".mysql_errno($db)."</strong><br />\nFehler-Ausgabe:<strong>".mysql_error($db)."</strong>";
    exit;
  }
  if (mysql_num_rows($result) == 0) {
    header ('Location: login.php');
    exit;
  } else {
    $row = mysql_fetch_array($result, MYSQL_ASSOC);
    echo "Guten Tag <strong>".$row['vorname']." ".$row['name']."</strong>";    
  }
...

Die while-Schleife hab ich hier mal ganz weggelassen, da ich davon ausgehe, dass sowieso maximal ein einziger Datensatz zurückgegeben und auch verarbeitet werden soll.
 
@ Matthias Reitinger:

Vielen Dank - das war´s. ;)

Es wird tatsächlich nur ein Datensatz geprüft, da sich ja logischerweise nur einer Einwählt.

Beste Grüße,
preko
 
Zurück