2016-10-29 3 views
0

Ich habe über 25 Seiten über dieses Problem gelesen, aber keine wirkliche Klarheit. Mehr Verwirrung als alles andere.Header Redirect Conflict Confusion

Ich habe eine Redirect-Funktion, die ich unter Verwendung

function RedirectToURL($url){ 
    return header("Location: {$url}"); 
    exit(); 
} 

dann in meinem Code, wenn ich umleiten möchten.

if (register($email, $username, $password)) { 

    set_message('<div class="alert-success" data-closable> 
    Account Registered.</div>'); 

    RedirectToURL("index.php"); 

} 

Jetzt meldet es den Benutzer, sondern erzeugt den folgenden Fehler,

Warnung: Kann nicht modify header information - headers already

geschickt Ich habe keine Leer- oder etwas .. Ich Lesen Sie, dass Redirects dieses Problem verursachen.

Mein Dilemma ist, dass die Posts, die ich gelesen habe sagen mit ob_start ist eine gute Idee, aber ich fand einige Beiträge auch, die sagen, ob_start ist eine schlechte Idee. weil ob_start den Fehler entfernt, aber das Problem weiterhin besteht.

Also von denen Post bin ich verwirrt und nicht sicher, den richtigen Weg, um dies zu lösen.

+1

Sie die Ausgabe etwas über die 'set_message()' -Funktion. Daher haben Sie vor dem Aufruf der 'RedirectToUrl()' -Funktion ausgegeben. Jede Ausgabe, unabhängig davon, in welcher Datei sie sich befindet, wird dies tun. 'ob_start()' ist eine völlig in Ordnung, um das Problem zu beheben - es ermöglicht die Ausgabe von Headern nach der Ausgabe und funktioniert gut für das vorliegende Problem. – junkfoodjunkie

+0

@junkfoodjunkie Muss ich dies nach meinem session_start nennen oder kann ich es direkt zum Code hinzufügen? – Case

+1

'ob_start()' kann entweder vor oder nach 'start_session()' gemacht werden - es spielt keine Rolle. – junkfoodjunkie

Antwort

1

Wenn Ihre Funktion set_message() Parameter übergeben hat, werden bereits Header gesendet. Sie sollten nichts vor der Weiterleitung drucken. Wenn Sie eine Nachricht nach der Weiterleitung drucken möchten, können Sie sie in $_SESSION auf einem Schlüssel vor der Umleitung speichern und auf der Indexseite ausgeben, wenn der Schlüssel vorhanden ist.

Auch Ihre exit() ist nicht erreichbar. Entfernen Sie return vor header().

function RedirectToURL($url) 
{ 
    header("Location: {$url}"); 
    exit(); 
} 

if (register($email, $username, $password)) { 
    set_message('<div class="alert-success" data-closable>Account Registered.</div>'); 

    RedirectToURL("index.php"); 
} 

function set_message($message) 
{ 
    $_SESSION['redirect_message'] = $message; 
} 

Einige Block auf der Indexseite:

if (array_key_exists('redirect_message', $_SESSION)) { 
    echo $_SESSION['redirect_message']; 
    unset($_SESSION['redirect_message']); 
}