0

I have a basic form submission script that sets multidimensional $_SESSION variables (2 levels) from a loop - then redirects using header location.

I developed this on my local machine (xampp/windows server running PHP 5.3.8) without problems but I am having issues with it on my web linux server running PHP 5.3.3 and even upgraded to 5.3.21 with same issues.

here is my script:

if($_POST['submitted']){


    $_SESSION['c'] = array();
    $_SESSION["RETURNING_DISCOUNT"] = array();
    $seq = 1;

    for($d=1; $d<=10; $d++){

        if($_POST["COMPANY_$d"] && $_POST["PHONE_$d"]){

            $_SESSION['c'][$seq] = array();

            $_SESSION['c'][$seq]["COMPANY"] = str_replace("\'", "", str_replace('\"', '', $_POST["COMPANY_$d"]));
            $_SESSION['c'][$seq]["PHONE"] = str_replace("\'", "", str_replace('\"', '', $_POST["PHONE_$d"]));

            if($_POST["COUNTRY_$d"] == 'Canada'){
                $_SESSION['c'][$seq]["STATE"] = str_replace("\'", "", str_replace('\"', '', $_POST["STATE_$d"]));
            }else{
                $_SESSION['c'][$seq]["STATE"] = str_replace("\'", "", str_replace('\"', '', $_POST["STATE_2_$d"]));
            }
            $_SESSION['c'][$seq]["COUNTRY"] = $_POST["COUNTRY_$d"];
            $_SESSION['c'][$seq]["ADDY1"] = str_replace("\'", "", str_replace('\"', '', $_POST["ADDY1_$d"]));
            $_SESSION['c'][$seq]["ADDY2"] = str_replace("\'", "", str_replace('\"', '', $_POST["ADDY2_$d"]));
            $_SESSION['c'][$seq]["CITY"] = str_replace("\'", "", str_replace('\"', '', $_POST["CITY_$d"]));
            $_SESSION['c'][$seq]["ZIP"] = str_replace("\'", "", str_replace('\"', '', $_POST["ZIP_$d"]));
            $_SESSION["RETURNING_DISCOUNT"][$_SESSION['c'][$seq]["COMPANY"]] = $_POST["RETURNING_COMPANY_$d"];

            $seq++;

        }//end declare var in $_SESSION

    }//end for


                header("location: register3.php");



}//end usersubmit

And what it sets is following:

[RETURNING_DISCOUNT] => Array
    (
        [working] => 1
    )

[c] => 11

What it should set (and does set if I disable header location) is:

[RETURNING_DISCOUNT] => Array
        (
            [working] => 1
        )

    [c] => Array
        (
            [1] => Array
                (
                    [COMPANY] => jk
                    [PHONE] => jhgk
                    [STATE] => 
                    [COUNTRY] => 
                    [ADDY1] => 
                    [ADDY2] => 
                    [CITY] => 
                    [ZIP] => 
                )

        )

So as you can see the issue is with the $_SESSION['c'] array. Like I said it works when you disable header("location: register3.php");. Its almost as if the page redirects before the multidimensional array values are properly set.

Could this be a output_buffering issue? I have output_buffering = off in my php.ini file. I also turned it on to see if it would make a difference but no luck.

Any insight to this would be much appreciated. Thanks.

Jiminy Cricket
  • 908
  • 1
  • 9
  • 24

2 Answers2

0

Please try printing the session content before the header redirect and check whether this is well formatted at this page or not.

print_r($_SESSION);
exit;

And comment the header redirection line on the page.

Carsten
  • 11,287
  • 7
  • 39
  • 62
  • If I add print_r($_SESSION) in place of header redirect it comes out formatted properly. I don't believe anything on register3.php is changing the $_SESSION values but I am continuing to investigate the possibility. Either that or it may be a php bug I'm thinking?!? – Jiminy Cricket Feb 18 '13 at 10:50
  • you can try removing all the php code from that page and just use session_start(); and print_r($_SESSION); on that page also clear your buffer using ob_start(); just above session_start(); function line – user2082783 Feb 18 '13 at 11:21
0

Passerby set me on the right path. register3.php was the culprit. I still don't understand how the same code rendered differently on two servers.

here is what I had:

for($c=0; $c<=10; $c++){
    if($_SESSION['c'][$c]){
        $all_co[] = "taco";
    }//end if something is found in array
}//end for

and when I changed the var $c to $x everything worked fine. I'm glad I finally solved this but still unsettled as to why this happened.

Jiminy Cricket
  • 908
  • 1
  • 9
  • 24