Cases à cocher récupération de valeurs dynamiques ?

Eléphant du PHP | 254 Messages

05 avr. 2006, 15:48

Bonjour, j'ai lu le tuto de ouckileou sur les cases à cocher.
Je voudrais l'appliquer pour un panier.
Jusqu'à maintenant, la liste de mes produits s'affiche, un caddie à droite permet de sélectionner le produit en méthode GET :
panier.php?reference=<?php echo $row_Produits['reference']; ?>&prix=<?php echo $row_Produits['prix'];?>&marque=<?php echo $row_Produits['marque']; ?>&couleur=<?php echo $row_Produits['couleur']; ?>&ajoutPanier=AJOUTER
Comment pourrais-je faire pour que l'on sélectionne les produits qui nous intéressent dans la liste, puis cliquer sur ajouter.
J'ai commencé à faire ça :
<input name="choix[]" type="checkbox" value="reference=<?php echo $row_Produits['reference']; ?>&prix=<?php echo $row_Produits['prix'];?>&marque=<?php echo $row_Produits['marque']; ?>&couleur=<?php echo $row_Produits['couleur']; ?>&ajoutPanier=AJOUTER" />
Puis le bouton pour ajouter au panier
<a href="panier.php?choix[]=&ajoutPanier=AJOUTER"><img src="../img/ajout_panier.gif" alt="Ajouter" width="20" height="18" border="0" /></a>
Comment devrais décomposer mon tableau, sachant que j'y ai mis plus qu'une valeur dedans ? :-k
// vérifions que la variable a été transmise 
$tabchoix = (isset($_GET['choix']))?$_GET['choix']:null; 
// bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées 
if (!empty($tabchoix)) { 
    foreach($tabchoix as $valeur) } 
Je ne sais pas comment récupérer les valeurs dans mon ancien tableau... ?
$reference=$_GET['reference'];
	$nb=1; //par défaut la quantité est = 1
	$prix=$_GET['prix'];
	$marque=$_GET['marque'];
	$couleur=$_GET['couleur'];
	$liste[]=array($reference,$nb,$prix,$marque,$couleur);
	$_SESSION['liste']=$liste;
	//ajoute un article à la liste
}
Merci de votre aide :)

Eléphant du PHP | 254 Messages

06 avr. 2006, 12:19

bon, depuis hier je stagne un peu sur cela.
Je me suis documentée et effectivement je peux insérer une $variable comme valeur par défaut dans ma case à cocher.
J'ai donc pris la valeur de la référence dans mon tableaux de produits, qui est une région répétée...

J'avoue ne pas bien comprendre le "foreach".
Et je me pose la question si dans mon formulaire avec les cases à cocher, il est possible de récupérer plusieurs références ?

Si qqu'un pouvait me donner une première piste, ça serait génial !!!
Merci :)

Eléphant du PHP | 254 Messages

06 avr. 2006, 14:17

alors j'ai un peu avance
Le catalogie avec la liste des produits est dans un formulaire, méthode POST et action="panier.php".
La checkbox box est la suivante :
<input name="choix[]" type="checkbox" id="reference" value="<?php echo $row_Produits['reference'];?>" />
Sur la page panier :
//Récupération des variables
  $choix = $_POST["choix"]; 

//Affichage des références cochées (pour tester) 
if ($choix) 
    foreach ($choix as $reference){ 
         echo "<p>$reference";      
     } 
J'affiche bien les références sélectionnées.
Comment faire pour les intégrer dans la variable de session du panier ?
est-ce que je peux faire ça ?
if ($choix){
	$reference=$_POST['choix'];
	$nb=1; //par défaut la quantité est = 1
    $liste[]=array($reference,$nb);
	$_SESSION['liste']=$liste;
	//ajoute un article à la liste
Ca ne fonctionne pas, j'ai bien les références affichées par l'echo en haut de la page, mais celles-ci ne se mettent pas dans le tableau
:(

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 avr. 2006, 14:32

Bonjour vous :)

Personnellement, dans le value de ta case à cocher, je ne mettrais que la référence, et j'irais effectivement ensuite chercher en base les infos complémentaire si nécessaire :)

Quant au problème de mise en session, c'est parce qu'il faut l'intégrer dans ta boucle foreach pour gérer chaque reference :
//Récupération des variables 
$choix = $_POST["choix"]; 

//Affichage des références cochées (pour tester) 
if ($choix) 
  foreach ($choix as $reference){ 
    $nb=1; //par défaut la quantité est = 1 
    $liste[]=array($reference,$nb); // le $reference provient du tableau choix
    $_SESSION['liste']=$liste; 
  } 

Eléphant du PHP | 254 Messages

06 avr. 2006, 15:17

thank's !!! ça marche...;-)
J'ai modifié la construction de la liste en session...
<?php
session_start();
require_once('../Connections/connexionCW.php');
//Récupèrer le postage 
if(!isset($_POST['choix'])) $choix=""; else $choix=$_POST["choix"]; 

//Affichage des numéros cochés  (pour tester) 
if ($choix) 
    foreach ($choix as $reference){
	mysql_select_db($database_connexion, $connexion);
	$query_Panier="select * from produits where reference = '".$reference."'";

	$Panier = mysql_query($query_Panier, $connexion) or die(mysql_error());
    $row_Panier = mysql_fetch_assoc($Panier);	
	
	$nb=1; //par défaut la quantité est = 1 
	$prix=$row_Panier['prix'];
	$marque=$row_Panier['marque'];
	$couleur=$row_Panier['couleur'];
	$liste[]=array($reference,$nb,$prix,$marque,$couleur);
	// la $reference provient du tableau choix 
    $_SESSION['liste']=$liste;
Ca a l'air de fonctionner, et je préfère cette méthode à l'ancienne qui passait les variables dans l'url....
Mais j'ai un souci. :lol: fallait bien ! :wink:
Je fais un premier choix de 4 produits...ok
Si je retourne sur ma page catalogue...et que je choisis deux autres produits. Sur ma page panier, ne s'affichent que les deux derniers pdts et non les 6 sélectionnés !
:arrow: pb de mise en session ? pourquoi cette liste est modifiée ???? :-k

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 avr. 2006, 16:01

Ta liste est modifiée parce que tu l'écrases au lieu de la compléter :)

En fait quand tu fais $liste[] = array(...) il crée un nouveau tableau et ajoute les valeurs. Du coup ce nouveau tableau écrase ta session $_SESSION['liste']=$liste;

En fait, pour le compléter, il te suffit de venir le lire au préalable :
$liste = $_SESSION['liste']; // initialise $liste avec les valeurs en session (tes 4 articles) au lieu de créer un tableau vide

$liste[] = array(...) ; // ajoute à la fin du tableau les éléments (tes 2 nouveaux articles) 

$_SESSION['liste']=$liste; // écrase la session, mais cette fois avec les 6 articles au lieu juste des 2)

Eléphant du PHP | 254 Messages

06 avr. 2006, 16:28

merci merci merci Ryle !!! :love4: à chaque fois que je poste, tu m'enlves des épines du pied et en plus, tu m'apprends plein de choses nouvelles :!
A plus pour la fonction supprimer avec cases à cocher ;-) ;-)
Heheh