[RESOLU] Tableau associer quantités et produits

Eléphanteau du PHP | 13 Messages

15 févr. 2014, 01:20

Bonjour!
Je vous explique le problème, je crée un site dans lequel l'utilisateur peut choisir plusieurs produits, pas de problème, ils les cochent et une page récapitule les informations. Pour chaque produits qu'il a choisi, il est possible de mettre une quantité:
Par exemple, je veux deux produits "a", et trois produits "y".
Le résultat doit être stocké dans une base de données. Pour insérer les produits, aucun problème, par contre, pour y associer une quantités, cela devient difficile:

Code pour récupérer l'identifiant de mes produits das un tableau:(inclus dans une boucle while qui liste mes produits)
<input type="hidden" name="IdProduit[]" value=<?php echo $donnees['IdProduit'];?>>
Code permettant de récupérer la quantités(celle ci s'incrémente grâce à un bouton plus et moins):
<input type="text" name="quantites[]" style="width:15px;height:11px;" value="1">
Je reprécise, que avant de gérer la quantités, tous mes produits s'insérait correctement dans la base de données.
Maintenant l'extrait de code de ma page qui insère le résultat ainsi que les boucle qui extrait les valeurs des tableaux:
	  $IdProduit ='';
	  $quantites ='';
	//on boucle
	for ($i=0;$i<count($_POST['IdProduit']);$i++)
	{
	//on concatène
	$IdProduit .= $_POST['IdProduit'][$i].'|';
	}
	$explore = explode('|',$IdProduit);
	//QUANTITES
	//on boucle
	for ($i=0;$i<count($_POST['quantites']);$i++)
	{
	//on concatène
	$quantites .= $_POST['quantites'][$i].'|';
	}
	$exploration = explode('|',$quantites);
	
	foreach($explore as $valeur)
	{
    if(!empty($valeur))
	{
	foreach($exploration as $value)
	{
    if(!empty($value))
	{
	      
    $sql = $bdd->exec("INSERT  INTO reservation (DateReservation, HeureReservation, MinuteReservation, NomCli ,IdProduit, Quantites, PrixTotal)
            VALUES ('$Date','$HeureReservation', '$MinuteReservation', '$NomCli', '$valeur', '$value', '$prix')") ;
    }
	}
	}
	}
L'éxecution de ce code me renvoi dans ma base de données, par exemple si l'on a choisi produit "a" quantites=3 et produit "b" quantites=2:

produit "a" quantités=3;
produit "a" quantités=2;

produit "b" quantités = 3;
produit "b" quantités = 2;

Je comprend tout à fait pourquoi le résultat est ainsi, étant donné que j'ai un foreach imbriqué dans un autre foreach, mais je ne vois vraiment pas comment faire autrement...

Merci d'avance, et si ce poste aurait du être dans php avancé, faite moi savoir!

Mammouth du PHP | 2278 Messages

15 févr. 2014, 10:37

Teste donc ça:
<?PHP
$id_produits = array(1,258,45,23);
$nb_produits = count($id_produits);
$chaine = "<form method = 'post' action = 'traiter.php'>";
for ($i = 0; $i < $nb_produits; $i++)
{
	$id_produit = $id_produits[$i];
	$chaine .= "
             <input type='text' name='quantites[$id_produit]' value='1'>";
}
$chaine .= "<button type = 'submit'>ok</button>
</form>";
print "$chaine";
?>
et
<?PHP
print_r($_POST);
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 13 Messages

15 févr. 2014, 19:46

Merci de ta réponse! J'ai essayé ton code, alors oui il fonctionne, mais je ne crois pas qu'il soit adapté au mien... J'ai un message d'erreur, je n'arrive pas à retourner la quantités, voilà donc mon code modifier:
<?php
	for ($i=0;$i<count($_POST['IdProduit']);$i++)
	{
	//on concatène
	$IdProduit .= $_POST['IdProduit'][$i].'|';
	}
	$explore = explode('|',$IdProduit);
	foreach($explore as $valeur)
	{
    if(!empty($valeur))
	{
    $sql = $bdd->query("SELECT * FROM produit WHERE IdProduit='$valeur'") ;
while ($donnees = $sql->fetch())
{

$prix = $prix + $donnees['PrixProduit']; 
 ?> <input type="hidden" name="IdProduit[]" value=<?php echo $donnees['IdProduit'];?>>
 			 <input type="button" src="images/moins.png" class="boutonmoins">
             <input type="text" name="quantites[$valeur]" style="width:15px;height:11px;" value='1'>
			 <input type="button" src="images/plus.png" class="boutonplus">
<?php 
echo $donnees['NomProduit'];  
echo ' ';
echo $donnees['PrixProduit']; 
$NomProduit = $donnees['NomProduit']; 
?> € 
	 <br>

<?php
}
    }
	}?> 
Et
	$bla = $_POST['quantites[$valeur]'];
	print_r($bla);

Eléphanteau du PHP | 13 Messages

16 févr. 2014, 22:55

Sujet résolu!