Alternative zu header()

djnelly

Erfahrenes Mitglied
Ich habe ein script gepostet...

Kurz erklärt:

-> anmelden -> login ->session start(wegen der sicherheit)

Das ist mal nen beispiel code aus der Login.php

PHP:
include("config.php");

//Wenn $page gleich null ...gehe zu page=index
if($page == "") { $page="index"; }

//Registrieren
if($registrieren) {
header ("Location: eintragen.php");
}
//Passwort vergessen
if($passwortvergessen) {
header ("Location: login.php?page=passwortvergessen"); 
}


$verbindung = mysql_connect($db_server,$db_user,$db_pass);
if (!$verbindung) {
echo "Keine Verbindung zur Datenbank";
exit;
}

mysql_select_db($db_datenbank);

//loginprüfung
if ($login) {
$sqlkommando = "select * from webseiten where user = '$name'";
$sqlanfrage = mysql_query($sqlkommando) or die ("Error: " .mysql_error());

while($daten = mysql_fetch_object($sqlanfrage))
{

$passg = ($daten->passwort);
$id = ($daten->id);
}
$pass = md5($passwort);

			//Passwort prüfung... ->Richtig
			if($pass == $passg) {

			echo "<center><b>Login erfolgreich $id</b></center>";


			session_start();
			$session_user_id = $id;
			if(session_register("session_user_id")) echo "Variable registriert!"; 
			echo "<center><a href=settings.php?sid=".session_id()."&page=index>Weiter</a></center>";
			$session = session_id();
			$sqlkommando_update_session = "update webseiten set session='$session' where id= '$id'";
			$sqlanfrage_update_session = mysql_query($sqlkommando_update_session) or die ("Error: " .mysql_error());
			 header("Location: settings.php?sid=".session_id()."&page=index");
			#echo "Session wurde erfolgreich in die Datenbank eingetragen<br>"; 

					}

		//Passwort prüfung... ->Falsch
		if($pass != $passg) {

			echo "<center><b>Login fehlgeschlagen</b><br></center>";
					}
}


if($passlost) {

mysql_select_db($db_datenbank);
$sqlkommando_passlost = "select * from webseiten where email = '$passwort_email'";
$sqlanfrage_passlost = mysql_query($sqlkommando_passlost) or die ("Error: " .mysql_error());

//Falls Fake
if($passwort_email == "") 
{ echo "<center><b>Es wurde keine eMail Adresse eingegeben!</b></center><br>"; 
} else {
while($daten = mysql_fetch_object($sqlanfrage_passlost))
{
$user_email = $daten->email;
}

$passwort_text = "Du erhällst diese Nachricht weil du dein Passwort vergessen hast<br>
					 	 <br><br>Dein Passwort: $daten->pass <br><br>Mit diesem kannst du dich nun wieder einloggen.";
					  
							mail ($passwort_email, "Dein Passwort",$passwort_text,"From: ");
							echo "<center><b>Die Daten zur eMail Adresse: $passwort_email wurden überprüft und dir wurde das Passwort zugesendet.<br><br><a href=\"login.php?page=index\">Weiter zum Login</a><br></center></b>";

}
}


//Account löschen
if($page == account_loeschen) {
		echo "<center><b>Dein Accout wurde erfolgreich gelöscht</b></center>"; 
							  }
//Pass Lost
if($page == passwortvergessen) {
		?>

Ich bekomme immer fehlermeldungen bei header()...
so in etwa... wurde schon gesendet..

was mache ich falsch..

bzw...gibt es eine alternative zu header() ?
ich will nach den versch. scripten auf bestimmte seiten weiterleiten?


Danke
 
Hallöchen,

sobald du 'vor' header() eine Ausgabe machst(auch <html> ist eine Ausgabe), wird ein automatisch ein header gesendet, und deswegen bekommst du diese Fehlermeldung.

Falsch machst du also keine, umgehen kann man das nicht, man darf nur vorher keine Ausgabe machen wenn man header() verwenden will.

Alternative dazu wäre evtl. ein meta refresh.
Das ganze ist HTML und sieht so aus:

<meta http-equiv="Refresh" content="X; URL=LINK">

Wobei X für eine beliebige Anzahl von Sekunden steht, nach diesen auf die Seite LINK weitergeleitet werden soll.

mfg

Devil
 
gibt es ausser

- meta refresh und
- header('location: www.google.de')

keine möglichkeit eine weiterleitung in php zu machen? :(
 
Also eine vom Server zu senden geht eben nur vor der Ausgabe, aus dem Grunde, da die Aktion, der Server generiert die Seite, der Client empfängt sie dann abgeschlossen ist.
Sprich Meta und this.location ( JavaScript) passieren auf Clientseite, liegen also nicht mehr in der Hand von PHP. Gneua genommen tut dies header() auch nicht sondern verändert entsprechend den Header der HTTP-Antwort des Servers sodass der Client dann die Veränderung der Location durchführt.
 
Zurück