2011-01-19 5 views
2

J'ai un script de sondage qui a 3 questions par page. Lorsque les utilisateurs de répondre aux questions sur la première page et cliquez sur suivant, les données de la page précédente sont stockées dans $_SESSION['survey']['data'] en faisant ceci:

$data = postToArray($_POST, $ignore_fields); 
$_SESSION['survey']['data'] = $data; 

$data est un tableau qui ressemble à:

array('question' => 'answer', 'question' => 'answer'); 

postToArray fait quelques vérifications et manipule un peu la soumission, avant de la renvoyer à $data.

Lorsque l'utilisateur est à la page deux de l'enquête, la même chose se produit. J'ai supposé que lorsque $data est ajouté à la session, via $_SESSION['survey']['data'] = $data;, qu'il s'ajouterait au tableau de session si le 'question' (clé) n'existait pas, mais si c'était le cas (parce que l'utilisateur est allé à une page précédente et a changé sa réponse) , que la valeur existante avec la même clé soit écrasée, cependant la soumission de la dernière page écrase tout dans le tableau ['data'] de la session. Venez y penser, cela fait parfaitement sens.

J'ai essayé plusieurs choses, comme récupérer le $_SESSION['survey']['data'], le stocker dans un tableau, lire la dernière soumission, fusionner les tableaux, puis réenregistrer tout dans la SESSION, mais mon code n'a pas fonctionné - cette approche a un sens? Est-ce possible?

J'ai également essayé array_push, mais pas de chance là-bas. En outre, j'ai essayé d'ajouter à $_SESSION['survey']['data'][], qui enregistre au moins tout (chaque soumission dans son propre tableau), mais si l'utilisateur retourne une page, toutes les valeurs qu'ils modifient et soumettent de nouveau sont ajoutées comme un autre tableau . De préférence, je voudrais un tableau géant avec toutes les questions/réponses et il continue à ajouter à ce tableau et écrase toutes les valeurs avec les clés existantes.

Quelle est la meilleure approche?

Merci, -Ryan

SOLUTION MIS EN OEUVRE

$data = postToArray($_POST, $ignore_fields); 
foreach($data as $question => $answer) 
{ 
    $_SESSION['survey']['data'][$question] = $answer; 
} 
+2

il réécrit le '$ _SESSION ['survey'] ['data']' parce que vous lui attribuez une nouvelle valeur. utilisez '$ _SESSION ['survey'] ['data'] [$ data ['question']] = $ data ['réponse']' – naiquevin

+0

Cela a fonctionné à merveille! Je ne peux pas croire que j'ai manqué cela :) – NightHawk

Répondre

0

boucle à travers le réseau de données de $ et le mettre comme naiquevin a déclaré, $ _SESSION [ 'enquête'] [ 'data'] [$ data [ 'question']] = $ data [ 'réponse '].

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

?> 
Questions connexes