additionner des données en php

chatonne

chatonne Le 29 janvier 2018 à 21:45 (Édité le 25 janvier 2019 à 17:54)

Bonsoir à tous. 
je débute en php e je vous expose mon problème.
J'ai créé une page sur laquelle des clients peuvent choisir  des habits (avec le name=nom). 
Le résultat de leurs choix se fait sur une autre page
J'ai rentré dans ma base de donnée des habits avec (nom_habits, taille, couleur, prix, marque).Je souhaite calculer le prix des habits choisis par les clients.
Là actuellement, je n'ai que le prix du dernier habit sélectionné et non pas la somme de tous les habits sélectionnés.
La question peut sembler bête mais j'ai des difficultés
Merci à tous

<?php
try{
   $bdd = new PDO('mysql:host=localhost;dbname=projet_habits;charset=utf8', 'root', '');
}
catch(Exception $e)
{
   die('Erreur : '.$e->getMessage());
}
   

$name=$_POST['nom'];
$names = join("','",$name);
   
   
$reponse = $bdd-> query ("SELECT nom_habits, taille, couleur, prix, marque FROM habits WHERE nom_habits IN  ('".$names."')");

while ($donnees = $reponse->fetch())
   
{

    echo htmlspecialchars($donnees['nom_habits']). htmlspecialchars($donnees['taille']). htmlspecialchars($donnees["couleur"]).htmlspecialchars($donnees["prix"]).htmlspecialchars($donnees["marque"]);
   
   
   $prix=array($donnees['prix']);
   echo array_sum($prix);
   
}

$reponse->closeCursor();
   
   ?>
JuniorBawss

JuniorBawss Le 30 janvier 2018 à 14:36 (Édité le 30 janvier 2018 à 14:57)

😕
chatonne

chatonne Le 30 janvier 2018 à 19:23

Bon j'ai trouvé la solution à mon problème. Je vous montre mon code qui fonctionne et qui affiche le total des prix des habits sélectionnés
<?php
try
{
	$bdd = new PDO('mysql:host=localhost;dbname=projet_habits;charset=utf8', 'root', '');
}
catch(Exception $e)
{
	die('Erreur : '.$e->getMessage());
}
	

$name=$_POST['nom'];
$names = join("','",$name);
	
	
$reponse = $bdd-> query ("SELECT nom_habits, taille, couleur, prix, marque FROM habits WHERE nom_habits IN  ('".$names."')");

while ($donnees = $reponse->fetch())
	
{

	 echo htmlspecialchars($donnees['nom_habits']). htmlspecialchars($donnees['taille']). htmlspecialchars($donnees["couleur"]).htmlspecialchars($donnees["prix"]).htmlspecialchars($donnees["marque"]);
	
	
	$totalPrix= $totalPrix + $donnees['prix'];
	
}
echo $totalPrix;
$reponse->closeCursor();
	
	?>
	
chatonne

chatonne Le 30 janvier 2018 à 19:33

Par contre j'ai un autre problème: 
j'ai ma première base de données avec nom_habits, taille, couleur, prix, marque.
J'ai une deuxième base de données qui renseigne sur les quantités:  1 unité=1, 1 small_pack=10 habits, 1medium_pack=50 habits, 1 large_pack=100 habits etc...
L'idée serait que le client puisse choisir l'habit qu'il souhaite et la quantité qu'il souhaite également.
Moi ce que je voudrais c'est de pouvoir calculer le prix pour chaque choix en multipliant le prix de l'habit et l quantité désirée. Et au final arriver au prix total en additionnant toutes les précédentes multiplication.
je sais pas si je suis clair??
merci d'avance!!!!
Profil introuvable

Profil introuvable Le 5 février 2018 à 20:50

non t'es pas du tout clair
PrimFX

PrimFX Le 9 février 2018 à 12:30

Salut !

Je pense voir comprendre ce que tu veux faire, mais je pense que tu ne t'y prends pas de la bonne façon.

Tout d'abord, que contient la variable $_POST['nom'] ? Car s'il s'agit d'une simple input, cela veut dire qu'un utilisateur ne pourra choisir qu'un seul habit, or je pense que ce n'est pas le cas. Peux-tu nous envoyer le code de ton formulaire ?

Pour revenir au problèmes de quantités, je pense en fait que ta table (tu disais base de données mais je pense que tu parles des tables distinctes d'une même bdd) qui renseigne sur les quantités d'habits est superflue. Tu devrais simplement rajouter à ton formulaire un champ input de type number (avec 1 par défaut) et faire transiter cette quantité dans la superglobale $_POST (de même que tu l'as fait pour $_POST['nom']), en prenant en compte le fait qu'une quantité doit correspondre à l'habit souhaité, et c'est là que la structure de ton formulaire devient importante.

Le schéma devrait selon moi être le suivant :
  • Tu affiches sur ta page d'accueil plusieurs habits que l'utilisateur peut sélectionner
  • Ensuite : soit tu affiches sous chaque habit un formulaire avec un champ "nom" masqué (input type="hidden"), une petite input pour la quantité et un gros bouton du style "Ajouter au panier" qui permettra de valider le formulaire, soit tu affiches sous chaque article un lien qui renvoie vers une sorte de page de détails de l'habit sélectionné et tu affiches ton formulaire sur cette page.
  • Peu importe la manière de faire du point précédent, tu peux maintenant créer une page de traitement du formulaire en prenant en compte le nom de l'habit et sa quantité. Pour que l'utilisateur puisse sélectionner plusieurs habits, tu peux du coup créer une variable de session (comme $_SESSION['panier']) par exemple et ajouter chaque élément et sa quantité correspondante depuis ton traitement avec un code du style $_SESSION["panier"][] = ["nom" => $_POST["nom"], "qtite" => $_POST["qtite"]], en sécurisant le tout bien sûr et en prenant en compte qu'il faudra certainement initialiser cette variable de session tant qu'aucun article n'aura été sélectionné (tu peux vérifier ça avec empty($_SESSION["panier"])).
  • Pour finir, tu auras ta variable de session avec toutes les données dont tu as besoin. Il ne te restera plus qu'à faire un foreach dessus pour additionner dans une variable l'ensemble des quantités, l'ensemble des prix en récupérant les prix via ta base de données pour les noms correspondants, mais également (sans foreach) la quantité de chaque article distinct. Si tu veux ensuite appliquer des promotions ou autre en fonction de la quantité, tu pourras directement le faire dans le traitement du panier, donc pas besoin de table pour gérer tes quantités 😉
En espérant que ça puisse t'aiguiller dans ton code (et que j'ai bien saisi ce que tu voulais faire 😅)
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte