我有一个调查脚本,每页有3个问题。当用户回答第一页上的问题并单击下一步时,上一页中的数据将存储在$_SESSION['survey']['data']
中:
$data = postToArray($_POST, $ignore_fields);
$_SESSION['survey']['data'] = $data;
$data
是一个类似于:
array('question' => 'answer', 'question' => 'answer');
postToArray
做一些检查并稍微操纵实际提交,然后再将其返回$data
。
当用户在调查的第二页时,同样的事情发生了。我假设当$data
通过$_SESSION['survey']['data'] = $data;
添加到会话时,如果'question'
(密钥)不存在,它会附加到会话数组,但是如果它存在(因为用户转到上一页并更改了他们的答案),将覆盖具有相同键的现有值,但最后一页的提交将覆盖会话中['data']
数组中的所有内容。来考虑一下,这非常有意义。
我尝试了各种各样的东西,例如检索$_SESSION['survey']['data']
,将其存储在数组中,读取最后一个提交,合并数组,然后在SESSION中重新保存所有内容,但是我的代码没有用完 - 这种方法有意义吗?这可能吗?
我也试过array_push
,但没有运气。
此外,我尝试添加$_SESSION['survey']['data'][]
,至少保存所有内容(每个提交都在自己的数组中),但是如果用户返回页面,则会添加他们更改并重新提交的任何值作为另一个阵列。
最好是,我想要一个包含所有问题/答案的巨型数组,它会不断添加到该数组并使用现有密钥覆盖任何值。
最好的方法是什么?
谢谢, -Ryan
已实施解决方案
$data = postToArray($_POST, $ignore_fields);
foreach($data as $question => $answer)
{
$_SESSION['survey']['data'][$question] = $answer;
}
答案 0 :(得分:5)
尝试序列化数据,然后将其保存在会话变量中。
答案 1 :(得分:0)
循环遍历$ data数组并将其设置为naiquevin所述,$ _SESSION ['survey'] ['data'] [$ data ['question']] = $ data ['answer']。
答案 2 :(得分:0)
<?php
session_start();
if(!isset($_POST["submit"])){
$_SESSION["abc"]=array("C", "C++","JAVA","C#","PHP");
}
if(isset($_POST["submit"])){
$aa=$_POST['text1'];
array_push( $_SESSION["abc"],$aa);
echo "hello";
foreach( $_SESSION["abc"] as $key=>$val)
{
echo $val;
}
}
?>