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;
}
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
Cela a fonctionné à merveille! Je ne peux pas croire que j'ai manqué cela :) – NightHawk