2011-01-19 37 views
2

我有一个调查脚本,每页有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; 
} 
+2

它重写`$ _SESSION ['survey'] ['data']`因为您正在为其分配一个新值。使用`$ _SESSION ['survey'] ['data'] [$ data ['question']] = $ data ['answer']` – naiquevin 2011-01-19 17:29:19

+0

这很好用!我不能相信我错过了:) – NightHawk 2011-01-19 17:44:19

回答

0

循环遍历$数据阵列和将其设置为naiquevin所述,$ _SESSION [ '调查'] [ '数据'] [$数据[ '问题']] = $数据['答案“]。

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; 
    } 
    } 

?>