我有一个基本的表单提交脚本,它从循环中设置多维 $_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 。我也打开它,看看它是否会有所作为,但没有运气。
对此的任何见解将不胜感激。谢谢。