views:

92

answers:

4

(1)I'm in the process of uploading my website to a remote web server.

(2)The site's template system is set up in a way that all of the pages are formed by sending url-encoded get requests to index.php

(3)Loading up the initial page works. This page determines the location of the next page by evaluating the value of its form.

(4)The redirection to the next page is performed by doing a: header('location: next_page')

(5)For some reason, the redirection is not performed. Here's what the code looks like:

$error = "";
if(isset($_POST['index_choice'])){
    $path_choice = isset($_POST['path']) ? $_POST['path'] : NULL;

    //echo $path_choice;
    //echo $page_inc;

    //nothing after this

    if($path_choice != null){

        if($form->is_connected()){

            //if($path_choice != "" || $path_choice != NULL){
                if($path_choice == "new"){

                    //header('location: /login.php');
                    //header('location: page/login');
                    header('location: /index.php?page=login');
                    exit();

                }
                else{

                    //header('location: /amend.php');
                    //header('location: page/amend');
                    header('location: /index.php?page=amend');
                    exit();
                }
            //}
            /**
            else{
                //destroy_session();
                $error = "You haven't selected a path. Please choose a path";
            }
             *
             */
        }
        else{
            //destroy_session();
            $error = "Problems with connecting to the database";
        }
    }else{
        //destroy_session();
        $error = "You have not indicated your choice";
    }

}

SOLVED

It was a matter of having a blank space after a ?> somewhere else in the code. This was revealed to me after placing the following commands at the top of the code:

 error_reporting(E_ALL); ini_set('display_errors', 'On'); 

I'd like to say thanks to all of the people that have tried to help.

+3  A: 

Looks like you're echo-ing text to the browser before sending the header('location'). You can not send content to your browser before executing a header(), as your echo will force a header to be sent. Comment these lines out and see if it works:

// echo $path_choice;
// echo $page_inc;

Now your header will be sent and you will be redirected.

@Karst Lok That looks like the right answer, and I've done what you've suggested. However, it hasn't changed any thing.
Tunji Gbadamosi
Try adding the complete address including http:// / https:// And if you want to do it by the book, you have to write Location with a capital L
@Karst Lok: HTTP header names are case-insensitive per RFC 2616.
joschi
@Karst Lok Using the full address doesn't do any thing.
Tunji Gbadamosi
What's higher up in your code? Is there any blank space before the opening `<?php`? Anything in your error log?
Matt Gibson
+1  A: 

Does simple PHP script like the following work?

<?php header('Location: /index.php?page=login'); ?>

You also have to make sure that the code path with $path_choice != null and $form->is_connected() === true is actually taken because your error states don't set HTTP headers at all.

joschi
The simple code actually WORKS. What now?
Tunji Gbadamosi
Now make sure that the correct code paths are taken in your script. Although that's more a question for StackOverflow rather than ServerFault.
joschi
+1  A: 

I believe you need to check your if-stack and make sure you are getting into each of your loops. Place an echo after each if statement to make sure the header() is even being evaluated, your loop is prolly being cut earlier than you expect.

My suspect has to do with the usage of null and $path_choice != null. Have you tried is_null() or isset() since they were designed specifically to check if a variable is null. Also, the !== operand may work in this case too, but i'm not sure offhand if PHP has that.

Nucleon
+2  A: 

I see a 'destroy_session()', are you using session_start() somewhere? Make sure that NO content (including (session)cookies) is already sent.

Tips for debugging: set error_reporting(E_ALL) (including E_NOTICE). That'll give you the line on which the headers are sent.

Other sources of trouble: - BOM - extra lines before in an included file

Lekensteyn