0

ループから多次元 $_SESSION 変数 (2 レベル) を設定し、ヘッダーの場所を使用してリダイレクトする基本的なフォーム送信スクリプトがあります。

これをローカル マシン (PHP 5.3.8 を実行する xampp/windows サーバー) で問題なく開発しましたが、PHP 5.3.3 を実行する Web Linux サーバーで問題が発生し、同じ問題で 5.3.21 にアップグレードしました。

ここに私のスクリプトがあります:

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

そして、それが設定するものは次のとおりです。

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

[c] => 11

設定する必要があるもの (およびヘッダーの場所を無効にした場合に設定するもの) は次のとおりです。

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

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

        )

ご覧のとおり、問題は $_SESSION['c'] 配列にあります。私が言ったように、header("location: register3.php"); を無効にすると機能します。多次元配列の値が適切に設定される前にページがリダイレクトされたかのようです。

これは output_buffering の問題でしょうか? php.ini ファイルに output_buffering = off があります。また、それが違いを生むかどうかを確認するためにそれをオンにしましたが、運はありませんでした.

これに対する洞察は大歓迎です。ありがとう。

4

2 に答える 2

0

通行人は私を正しい道に導きました。register3.php が原因でした。同じコードが 2 つのサーバーでどのように異なってレンダリングされるのか、まだ理解できません。

ここに私が持っていたものがあります:

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

var $c を $x に変更すると、すべて正常に機能しました。最終的にこれを解決できたことをうれしく思いますが、なぜこれが起こったのかについてはまだ不安です。

于 2013-02-18T11:26:23.070 に答える
0

ヘッダー リダイレクトの前にセッション コンテンツを印刷して、このページで適切にフォーマットされているかどうかを確認してください。

print_r($_SESSION);
exit;

ページのヘッダー リダイレクト行にコメントを付けます。

于 2013-02-18T10:40:34.043 に答える