8722 sujets

Développement web côté serveur, CMS

Bonjour,
Je dois faire un panier client avec une liste de produits et leurs prix. Le client peut mettre plusieurs produits dans son panier en même tps, j'ai donc utilisé checkbox dans mon formulaire et je récupère bien ses différents choix mais plus possible d'avoir aussi le prix! Je souhaiterai que mon tableau $results soit reprenne les choix du client comme un tableau dimensionnel avec les noms et prix des produits choisis.

Voici mon code

<?php
			$produits = array (
				0 => array ('nom' => 'A', 'prix' => 9),
				1 => array ('nom' => 'B', 'prix' => 19),
				2 => array ('nom' => 'C', 'prix' => 79),
				3 => array ('nom' => 'D', 'prix' => 5),
				4 => array ('nom' => 'E', 'prix' => 45),
				5 => array ('nom' => 'F', 'prix' => 29),
				6 => array ('nom' => 'G', 'prix' => 10),
						);
			var_dump ($_GET['test']);
			$results = [];
			if (isset($_GET['submit']))
				{
					foreach($produits as $produit)
						{
							if($produit['nom'] == $_GET['test'])
								{$results[] = $produit;}
						}
				}
			var_dump($results);
		?>
		
	
		<h1>Liste des produits</h1>
		<form method="get">
			<p>
				<?php foreach($produits as $produit):?>
				<li><input type="checkbox" name="test[]" value="<?php echo $produit['nom']?>"/><?php echo $produit['nom'] . '-' . $produit['prix'] . '€'?></li>
				<?php endforeach ?> 
			</p>
			<p><input type="submit" name="submit" value="Ajouter au panier"/></p>
		</form>


Merci d'avance pour votre aide!!
Modérateur
Et l'eau,

ton array est mal conçu :

$produits = array (
	array ('nom' => 'A', 'prix' => 9),
	array ('nom' => 'B', 'prix' => 19),
	array ('nom' => 'C', 'prix' => 79),
	array ('nom' => 'D', 'prix' => 5),
	array ('nom' => 'E', 'prix' => 45),
	array ('nom' => 'F', 'prix' => 29),
	array ('nom' => 'G', 'prix' => 10),
);


regarde bien ceci (notamment ton echo):

<input type="checkbox" name="test[]" value="<?php echo $produit['nom']?>"/>


Si tu récupères le nom, tu le recherches dans ton array ou sinon tu inclues le nom et le prix dans l'attribut value.
Modifié par niuxe (23 Jan 2020 - 02:11)
Et l'eau Niuxe,
Merci pour ta réponse! En fait ce que je souhaite récupérer c'est un tableau du même type que $produits mais avec les choix du client et qu'il puisse choisir plusieurs pdts d'un coup avec checkbox. Je l'avais fait avec un form radio et ça fonctionnait bien avec ce code:

<?php
			$produits = array (
				array ('nom' => 'A', 'prix' => 9),
				array ('nom' => 'B', 'prix' => 19),
				array ('nom' => 'C', 'prix' => 79),
				array ('nom' => 'D', 'prix' => 5),
				array ('nom' => 'E', 'prix' => 45),
				array ('nom' => 'F', 'prix' => 29),
				array ('nom' => 'G', 'prix' => 10),
						);
			var_dump ($_GET['test']);
			//Création d'un nouveau tableau avec le panier du client
			$results =[];
			if (isset($_GET['submit']))
				{
					foreach($produits as $produit)
						{
							if($produit['nom'] == $_GET['test'])
								{$results[] = $produit;}
						}
				}
			var_dump($results);


Mon tableau $results me retourne bien tous les choix du client comme ceci:
array (size=1)
0 =>
array (size=2)
'nom' => string 'A' (length=1)
'prix' => int 9
Et je peux donc exploiter le panier client comme je veux.

je n'arrive pas une fois les noms des produits récupérés à les rechercher dans le tableau $produits pour leur assigner le prix correspondant.
Je ne sais pas si je suis très claire...
J'ai trouvé la solution grâce à ton indication d'inclure le prix dans l'attribut value et l'utilisation de "explode" que je ne connaissais pas!
Pour ceux que ça intéresse voici le code pour faire un panier produit et le stocker dans un cookie

<body>
		<?php
			$produits = array (
				array ('nom' => 'A', 'prix' => 9),
				array ('nom' => 'B', 'prix' => 19),
				array ('nom' => 'C', 'prix' => 79),
				array ('nom' => 'D', 'prix' => 5),
				array ('nom' => 'E', 'prix' => 45),
				array ('nom' => 'F', 'prix' => 29),
				array ('nom' => 'G', 'prix' => 10),
				);
			//var_dump($_GET['produit']);
			
			if (isset($_GET['submit']))
				{
					foreach ($_GET['produit'] as $element)
						{$datas[] = explode("-", $element);}
				}
			
			//var_dump($datas);
			
			if((!isset($_COOKIE['panier'])) AND (isset($_GET['submit'])))
				{							
					//Sérialisation pour enregistrer les données dans le cookie
					$panier = serialize($datas);
					
					//Envoi du cookie
					setcookie('panier', $panier, time()+1296000);	
				}
			elseif (isset($_GET['submit']))
				{
					//Ajout du cookie dans un tableau
					$panier_liste = unserialize($_COOKIE['panier']);
					foreach($datas as $data)
					 {$panier_liste []= $data;}
					//Nouvelle valeur du cookie pour ajouter les nouveaux produits choisis
					$panier_liste_new = serialize($panier_liste);
					setcookie('panier', $panier_liste_new, time()+1296000);	
					$panier_total = unserialize($_COOKIE['panier']);
				}
			
			//var_dump($_COOKIE);
			//var_dump($panier_total);		
		?>
		
	
		<h1>Liste des produits</h1>
		<form method="get">
			<p>
				<?php foreach($produits as $produit):?>
				<li><input type="checkbox" name="produit[]" value="<?php echo $produit['nom'] . '-' . $produit['prix']?>"/><?php echo $produit['nom'] . '-' . $produit['prix'] . '€'?></li>
				<?php endforeach ?> 
			</p>
			<p><input type="submit" name="submit" value="Ajouter au panier"/></p>
		</form>
		
		<p>
			<a href="panier.php">Voir mon panier</a>
		</p>
		<p>
			<a href="delete_cookie.php">suppression du cookie</a>
		</p>
		
	</body>
Modérateur
Bonjour,

L'idée selon laquelle on stock le prix du produit dans un cookie pour s'en servir ensuite au lieu de le reprendre en base m'a toujours échappé. Ne n'aurions-nous pas uniquement besoin de l'identifiant unique du produit et de sa quantité au lieu de s'embarquer avec le prix en sus ?
Administrateur
Bonjour,

ah c'est vrai qu'appliquer un prix soldé le lendemain de la fin des soldes par exemple, ça tombe bien sous le coup de la loi française Smiley kc (oui on peut garder un onglet ouvert 3 jours…) Et ce sera pas discret vu qu'une facture va être établie avec un prix et une date.
Et quelle que soit la situation (prix en hausse, prix en baisse), le site et/ou le client va pas apprécier.
Raison n°53 de pourquoi les sites e-commerce sont hachement plus complexes que ce qu'on pourrait croire Smiley sweatdrop
Le sujet était un exercice dans le cadre d'un cours php Smiley smile
Le panier devait être stocké dans un cookie et on ne devait pas utiliser de base.
Cela n'est sûrement pas une solution pour un site de e-commerce, d'ailleurs j'en suis encore loin dans mon apprentissage Smiley smile