Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
727 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Insertion en BDD différente de mon nb d'articles dans panier

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Insertion en BDD différente de mon nb d'articles dans panier

n°2264591
chrispc
Easy peasy
Posté le 19-08-2015 à 17:53:13  profilanswer
 

Bonjour à tous,
 
J'ai un problème au niveau de mon panier. Que j'ai 1 ou plusieurs articles dans mon panier, dans ma table details_commande, il ne veut pas me créer autant de ligne qu'il n'y a d'article avec le même id_details_commande qui correspondra à cette même commande.  
 
Voici mon code:
 

Code :
  1. if(isset($_POST['payer']) && $_POST['payer'])
  2.   {
  3.     //boucle qui tourne autant de fois qu'il y a d'articles différents dans le panier :  
  4.     for($i = 0; $i < count($_SESSION['panier']['id_article']) ; $i++)
  5.       //cf. count() équivalent du sizeof() => http://php.net/manual/fr/function.sizeof.php
  6.     {
  7.       $resultat = informationSurUnArticle($_SESSION['panier']['id_article'][$i]);
  8.      
  9.       $article = $resultat->fetch_assoc();
  10.      
  11.       #verification du stock : (on est toujours dans la boucle dont le but est de nous retourner le contenu du panier)
  12.       if($article['stock'] < $_SESSION['panier']['quantite'][$i]) //si le stock actuel est strictement inférieur à la quantité que l'on souhaite commander...=>PROBLEME !!!
  13.       {
  14.         echo '<hr><div class="erreur">Stock restant : ' . $article['stock'] . '</div>';
  15.         echo '<div class="erreur">Quantité demandée : ' .$_SESSION['panier']['quantite'][$i] . '</div>';
  16.      
  17.         if($article['stock'] > 0)
  18.         {
  19.           echo '<div class="erreur">la quantité de l\'article ' . $_SESSION['panier']['id_article'][$i] . ' a été réduite car notre stock était insuffisant. Veuillez vérifier vos achats</div>';
  20.           $_SESSION['panier']['quantite'][$i] = $article['stock'];
  21.         }
  22.         else //rupture de stock : on retire carrément les articles du panier.  
  23.         {
  24.           echo '<div class="erreur">l\'article ' . $_SESSION['panier']['id_article'][$i] . ' a été retiré de votre panier car nous sommes en rupture de stock, veuilliez vérifier vos achats.</div>';
  25.           retirerArticleDuPanier($_SESSION['panier']['id_article'][$i]); //on retire l'article.  
  26.           $i--; //on décrémente pour retirer un article. Lorsque l'on souhaite rajouter une valeur à notre variable on incrémente, ici on souhaite enlever une valeur du coup on décrémente.  
  27.         }
  28.         $erreur = TRUE;
  29.       }
  30.     }
  31.   if(!isset($erreur)) //si $erreur = FALSE => on enregistre le panier.  
  32.   {
  33.  executeRequete("INSERT INTO commande(id_membre,montant,date) VALUES (" . $_SESSION['utilisateur']['id_membre'] . "," . montantTotal() . ", NOW())" );
  34.  //récupération du dernier identifiant auto-généré par l'auto-increment de la BDD
  35.  $id_commande = $mysqli->insert_id;
  36.  //pour tous les articles dans le panier, on observe l'id, la quantité, le prix : on récupère tout pour les placer dans la table details_commande :  
  37.  for($j = 0 ; $j < count($_SESSION['panier']['id_article'][$j]); $j++)
  38.  {
  39.    //ajout des informations dans la table details_commande :  
  40.  executeRequete("INSERT INTO details_commande (id_commande,id_article,quantite,prix) VALUES ($id_commande, ". $_SESSION['panier']['id_article'][$j] . "," . $_SESSION['panier']['quantite'][$j] . ",". $_SESSION['panier']['prix'][$j]. " )" );
  41.   
  42.    //on va faire un update de notre stock : on attribue le nouveau stock  
  43.  executeRequete("UPDATE article SET stock=stock-".$_SESSION['panier']['quantite'][$j] . " WHERE id_article=" . $_SESSION['panier']['id_article'][$j]);
  44.  }
  45.  //paiement par chèque du coup on vide le panier :  
  46.  unset($_SESSION['panier']);
  47.  //envoi mail confirmation achat au client :  
  48.  // mail($_SESSION['utilisateur']['email'],"Confirmation de la commande", "Votre suivi de commande est le suivante : $id_commande","From:confirmation@hus.com" );
  49.  echo "<div class='validation'>Merci pour votre commande. Votre n° de suivi est le $id_commande</div>";
  50.   } 
  51. }


 
Si vous voyez le problème... Je tourne en rond depuis 1 semaine et ne comprend pas pourquoi il ne fait pas autant de ligne que je n'ai d'articles dans ma table.
 
Merci d'avance !!!!


---------------
Topic écologie : https://tinyurl.com/y6s6ysx3 | Topic habitats de demain : https://tinyurl.com/y5h2mjx7
mood
Publicité
Posté le 19-08-2015 à 17:53:13  profilanswer
 

n°2264662
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 21-08-2015 à 14:25:56  profilanswer
 

cette ligne ne s'exécutera qu'une fois, non ?

Code :
  1. for($i = 0; $i < count($_SESSION['panier']['id_article']) ; $i++)


(a priori t'as pas 2 articles qui ont le même id...)
 
montre le contenu de $_SESSION sinon.


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°2264664
lefilsdela​terre
Posté le 21-08-2015 à 15:26:30  profilanswer
 

C'est peut-être le contraire :  
si

Code :
  1. $_SESSION['panier']['id_article']

contient un nombre d'éléments correspondant au nombre d'articles,
c'est la ligne 39 qui ne fait qu'une exécution :

Code :
  1. for($j = 0 ; $j < count($_SESSION['panier']['id_article'][$j]); $j++)


 
ne faudrait-il pas retirer [$j] à la fin de

Code :
  1. $_SESSION['panier']['id_article'][$j]

?


Message édité par lefilsdelaterre le 21-08-2015 à 15:43:12
n°2264688
chrispc
Easy peasy
Posté le 22-08-2015 à 20:48:26  profilanswer
 

Le $_SESSION montre bien des id_article différents, donc il n'y a aucun soucis a ce niveau là :
 
Array
(
    [panier] => Array
        (
            [id_article] => Array
                (
                    [0] => 12
                    [1] => 6
                )
 
            [titre] => Array
                (
                    [0] => Tourne-disque Gramovox
                    [1] => Verres en gré (Lot de 4)
                )
 
            [photo] => Array
                (
                    [0] => /Hus/photo/_gramovox.jpg
                    [1] => /Hus/photo/6_6_oldmu7ayiu2p55vmr4fa.png
                )
 
            [prix] => Array
                (
                    [0] => 399
                    [1] => 38
                )
 
            [quantite] => Array
                (
                    [0] => 1
                    [1] => 1
                )
 
            [id_promo] => Array
                (
                    [0] => 1
                    [1] => 1
                )
 
            [reduction] => Array
                (
                    [0] => 0
                    [1] => 0
                )
 
        )
)
 
Le code fonctionnait sur un autre site auparavant et me rentrait en BDD tout mes articles, c'est ça que je ne comprends pas.
 
lefilsdelaterre, tu as raison le soucis c'est bien ça [$j], un grand merci !


---------------
Topic écologie : https://tinyurl.com/y6s6ysx3 | Topic habitats de demain : https://tinyurl.com/y5h2mjx7
n°2264719
rufo
Pas me confondre avec Lycos!
Posté le 24-08-2015 à 14:13:58  profilanswer
 

Ligne 7, $resultat contient quoi ? Normalement, ça devrait être une ressource sur la BD.
 
Ligne 9, $article contient quoi ?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2264724
lefilsdela​terre
Posté le 24-08-2015 à 15:52:16  profilanswer
 

Peut-être que tous les appels à la base de données seront faits en amont, et les résultats déjà stockés dans les tableaux.
Par contre cela comporte un risque...
Si l'utilisateur attend longtemps avant de vouloir payer, et qu'entre-temps d'autres clients ont acheté le même produit, la variable de stock n'est pas mise à jour (il me semble en tout cas).
 
Il vaudrait mieux, au moins pour le stock, faire l'appel à la base de données au moment de payer... et même mettre à jour le stock à ce moment-là pour éviter le chevauchement entre plusieurs clients, quitte à remettre le stock à son niveau initial si le paiement n'est pas validé.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Insertion en BDD différente de mon nb d'articles dans panier

 

Sujets relatifs
Page modèle rempli grâce à la BDDMon prorgrame de tri par insertion; ne trie pas
[résolu] Problème de récupération d'une valeur en BDD[Win7] Insertion de texte dans un nom de fichier lors d'un copy
Compter titres dans BDD (sauf celui d'article en cours de modif.)Comparer Bdd à fichier txt
Débutant BDD en général / liens entre tables[Topic Unique] Livres sur les BDD (conseils)
Insertion dynamique & gestion de la position dans la pageRequete BDD sur tables multiples
Plus de sujets relatifs à : Insertion en BDD différente de mon nb d'articles dans panier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR