ループから多次元 $_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 があります。また、それが違いを生むかどうかを確認するためにそれをオンにしましたが、運はありませんでした.
これに対する洞察は大歓迎です。ありがとう。