문제

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.

도움이 되었습니까?

해결책 2

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.

다른 팁

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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top