我将值从表单传递到处理页面。还有更多的领域,但关注的是:
<label><input type="checkbox" name="plans[]" value="1" /> Number 1</label>
<label><input type="checkbox" name="plans[]" value="2" /> Number 2</label>
<label><input type="checkbox" name="plans[]" value="3" /> Number 3</label>
<label><input type="checkbox" name="plans[]" value="4" /> Number 4</label>
我知道当处理页面上的$ _POST打印显示我的$ _POST数组中的plans数组时,值正在正确提交并存在。
在我的处理页面上(从表单提交),如果数据中发生错误,原始的$ _POST值将存储为新的$ _SESSION ['fields']变量,以便在页面重定向时它们可以重新填充字段到上一页。
$_SESSION['fields'] = $_POST;
如果确实发生了错误,我的实际表单页面会使用以下代码从SESSION变量中提取原始字段值:
if(isset($_SESSION['fields'])) {
$fields = array();
$fields = $_SESSION['fields'];
unset($_SESSION['fields']);
}
打印$ fields变量时,所有原始帖子值都会显示在原始数组之外(复选框)。它们根本不显示(但是名称,地址等)。
您是否无法以这种方式通过引用传递数组中的数组?
流程是这样的:
答案 0 :(得分:1)
这里似乎还有其他错误。请查看以下内容:
的index.html:
<form method="post" action="l.php" >
<label><input type="checkbox" name="plans[]" value="1" /> Number 1</label>
<label><input type="checkbox" name="plans[]" value="2" /> Number 2</label>
<label><input type="checkbox" name="plans[]" value="3" /> Number 3</label>
<label><input type="checkbox" name="plans[]" value="4" /> Number 4</label>
<input type="submit" />
</form>
l.php
<?php
session_start();
$_SESSION['fields'] = $_POST;
header("Location: o.php");
o.php
<?php
session_start();
var_dump($_SESSION);
如果你在index.html中提交表单,你最终会得到o.php并得到类似的结果:
array(1) { ["fields"]=> array(1) { ["plans"]=> array(2) { [0]=> string(1) "1" [1]=> string(1) "3" } } }
它对你有用吗?
在旁注中你可以用不同的方式完成同样的尝试。使用相同的文件进行表单显示和处理,这样您就不必从form.php到process.php返回到form.php。
您可以检查是否应该通过检查$ _POST isset()来处理提交的表单。
我不知道你是否对它有意义,但这样你就完全避免使用会话了。
答案 1 :(得分:1)
确保在将其传递给SESSION变量(例如array_pop()或在您的情况下是array_map())之前,您没有进行任何类型的数据操作。你的array_map(strtoupper)破坏你的数组的原因是strtoupper试图在数组而不是单个元素上执行。要解决此问题,您可以在映射中检查is_array,然后在那里循环,或者设置嵌套数组元素的递归函数。
答案 2 :(得分:0)
你可以这样做 - 从你所说的,这应该有效。
请注意,$fields = array();
行完全是多余的 - 您将其初始化为空数组,然后将其设置为完全不同的数据。
当你print_r($_SESSION)
时,你会得到什么?