语言:PHP
我有一个表格,询问用户的教育详情,课程详情和技术细节。提交表单后,页面将转到另一个页面以对信息运行进程并将部件保存到数据库。 HOWEVER (!)然后我需要将页面返回到原始页面,在那里需要访问原始帖子信息。
我认为将多维(md)$ _POST数组复制(按值)到$ _SESSION ['post']
会很简单session_start();
$_SESSION['post'] = $_POST;
然而,这似乎只是将数组的顶层放入$ _SESSION ['post']而没有对子/子数组做任何事情。
md $ _POST数组的缩写形式如下:
Array ( [formid] => 2 [edu] => Array ( ['id'] => Array ( [1] => new_1 [2] => new_2 ) ['nameOfInstitution'] => Array ( [1] => 1 [2] => 2 ) ['qualification'] => Array ( [1] => blah [2] => blah ) ['grade'] => Array ( [1] => blah [2] => blah ) ) [vID] => 61 [Submit] => Save and Continue )
如果我回显$ _SESSION ['post'] ['formid'],则会写入“2”,如果我回显$ _SESSION ['post'] ['edu'],则返回“Array”。如果我检查edu是一个数组(is_array($ _ SESSION ['post'] ['edu]))它返回true。如果我回显$ _SESSION ['post'] ['edu'] ['id']它返回数组,但是当检查时(is_array($ _ SESSION ['post'] ['edu] ['id']))它返回是的,我无法回应任何元素。
如何将整个数组(包括其子代)成功复制(按值,而不是通过引用)到新数组?
感谢每个人的回应 - 更新
这个问题在我的表单中命名字段时引起了我无关的引号。
答案 0 :(得分:2)
我不知道为什么这不起作用
session_start();
$_SESSION['post'] = $_POST;
在第二页上,您是否在访问session_start()
之前致电$_SESSION
?
您可以将其直接放在session_start()
下以帮助调试。
var_dump($_SESSION);
答案 1 :(得分:2)
如果这是你真正的print_r输出,那么你的数组键中就会有一些不需要的字符。
Array
(
[formid] => 2
[edu] => Array //<--- $_SESSION['post']['edu']
(
['id'] => Array // <---- $_SESSION['post']['edu']["'id'"]
答案 2 :(得分:1)
您可以使用serialize()将数组转换为字符串,并通过post传递或将其存储在会话中。
在将数组保存到PHP中的$ _SESSION之前,我注意到了一些有趣的行为。有时,如果你做一个参考并使用它更容易,例如:
$session =& $_SESSION['post'];
$session = array ();
不要问为什么:)
另外,要扩展评论中所说的haim evgi,请将print_r包装在<pre>
标签中,例如:
echo "<pre>";
print_r ($array);
echo "</pre>";
使数组输出可读。
答案 3 :(得分:1)
DCD走在正确的轨道上。
通常,我会在会话中存储表单的序列化版本,然后在需要使用它时将其反序列化。
存储它:
$_SESSION['post'] = serialize($_POST);
要检索它:
$post = unserialize( $_SESSION['post'] );
答案 4 :(得分:0)
如果在数组中使用echo
,PHP将打印“Array”而不是数组内容。请改用print_r
。
您的作业仅供参考。在内部(为了保留记忆),在您更改$_SESSION['post']
之前,它是一个参考。从那时起,您将有两个独立的变量。