2010-02-04 4 views
0

Commander Page: Sur cette page, les clients peuvent choisir d'ajouter des commandes de cartes de visite avec différentes langues et d'autres options. Lorsque l'utilisateur clique sur un bouton pour ajouter une carte supplémentaire, javaScript ajoute une série de champs de formulaire et afin de leur donner des attributs de nom uniques, j'ajoute simplement une variable de compteur à la fin du nom pour chaque groupe des champs, donc je peux les enregistrer comme un groupe unique de variables de session où chaque champ de formulaire a des noms différents mais le même nombre de compteur à la fin, donc je sais qu'ils appartiennent ensemble.Comment renvoyer des variables de session dynamiques en PHP?

Ce sont les variables de session, je suis économie lorsque l'utilisateur soumet le formulaire pour aller à la page suivante:

  • $ _SESSION [quantity1] = 500
  • $ _SESSION [langue1] = coréen
  • $ _SESSION [quantity2] = 250
  • $ _SESSION [langue2] = Chinois

Page de paiement: Sur cette page, je veux qu'elle fasse écho les informations pour chaque carte différente commandée.

J'essaye d'écho dehors toutes les variables de session avec le même nombre à la fin de la variable de session sur la page de paiement. Jusqu'à présent, j'utilise une boucle foreach pour faire écho à toutes les variables de la session, mais j'essaie de faire écho seulement celles avec un '1' à la fin des noms, ou un '2' à la fin des noms , etc., et regroupez-les ensemble.

Donc, idéalement, je voudrais quelque chose comme ceci:

Commande # 1,
Quantité: 500,
Langue de la carte: Coréen

Commande # 2,
Quantité: 250 ,
Langue sur Carte: Chinois

Comment puis-je répercuter et regrouper ces variables de session dynamiques sur la page de paiement?

Répondre

3

Restructurer session lors de l'enregistrement de ce lieu:

  • $ _SESSION [commande] [1] [quantité] = 500
  • $ _SESSION [commande] [1] [langue] = coréen
  • $ _SESSION [commande] [2] [quantité] = 250
  • $ _SESSION [commande] [2] [langue] = chinois

de cette façon, vous pouvez utiliser foreach() sur order pour tout obtenir proprement. Pourquoi ne pas stocker dans la session d'une manière comme ça?

+0

J'aime cette idée. J'ai réussi à enregistrer les sessions comme vous le recommandiez, mais je ne sais pas trop comment écrire la boucle foreach et ce que vous entendez par «ordre». Je ne trouve pas cette fonction sur php.net – zeckdude

+0

'foreach ($ _ SESSION ['order'] as $ order) {...}' –

+0

Je me suis rendu compte que je devais mettre une boucle foreach dans cette boucle foreach. Je vous remercie! – zeckdude

1

Le regroupement des champs est relativement facile. Parcourez-les en boucle, enlevez le numéro à la fin et regroupez-les dans un autre tableau.

$vars = array(); 
foreach ($_SESSION as $k => $v) { 
    if (preg_match('!\d+$!', $k, $matches)) { 
    $number = $matches[0]; 
    if (array_key_exists($number, $vars)) { 
     $vars[$number][$k] = $v; 
    } else { 
     $vars[$number] = array($k => $v); 
    } 
    } 
} 
print_r($vars); 

Pour les afficher en boucle par $vars et faire ce que vous devez faire. Vous devrez peut-être trier $vars si vous les voulez dans un ordre particulier. Vous devrez peut-être trier les sous-tableaux pour placer les champs dans un ordre particulier.

4

$_SESSION[orders] => array(
    [0]=>array(
    'quantity'=>1, 
    'language'=>'Korean' 
    ), 
    [1]=>array(
    'quantity'=>2, 
    'language'=>'Chinese' 
    ), 
) 

Ensuite, votre itération sur la page de paiement sera simple

Questions connexes