Case
Case

Reputation: 281

Header Redirect Conflict Confusion

I have read about 25 pages about this issue but no real clarity. More confusion than anything.

I have a redirect function I use below

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

then in my code when I want to redirect.

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

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

    RedirectToURL("index.php");

}

Now it registers the user but produces the following error,

Warning: Cannot modify header information - headers already sent

I have no white spaces or anything.. I read that redirects cause this issue.

My dilemma is that the posts i have read say using ob_start is a good idea, but i found some posts also that say ob_start is a bad idea. because ob_start will remove the error but the issue will still exist.

So by those post i am confused and not sure the correct way to resolve this.

Upvotes: 0

Views: 114

Answers (1)

Max Zuber
Max Zuber

Reputation: 1229

If your function set_message() outputs passed parameter, headers already sent. You should not print anything before redirect. If you want to print some message after redirect, you can store it in $_SESSION on some key before redirect and output on the index page if the key exists.

Also, your exit() is unreachable. Remove return before 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;
}

Some block on your index page:

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

Upvotes: 1

Related Questions