IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

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


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2015
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

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

    Merci d'avance !!!!

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux être plus précis que "il ne veut pas" ?
    Tu as une erreur ?

    Au passage on n'écris jamais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     for($i = 0; $i < count($array) ; $i++)
    Fais une boucle foreach()
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2015
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2015
    Messages : 68
    Points : 33
    Points
    33
    Par défaut
    Je souhaiterai qu'il intègre autant d'article qu'il y a dans mon panier au moment où il paye pour avoir un suivi des commandes que l'utilisateur a passé sur le site.

    Je suis obligé de faire une boucle foreach étant donné qu'il y a une quantité d'article qui est géré. A moins que je ne vois pas du tout comment je dois faire mais ça me parait logique.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Qu'obtiens-tu actuellement ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2015
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2015
    Messages : 68
    Points : 33
    Points
    33
    Par défaut
    Pour le moment je n'obtiens qu'un article enregistré en BDD alors qu'il y en a plusieurs dans mon panier.

    Donc je ne peux pas faire de suivie de commande pour le moment

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Affiche tes requêtes pour voir a quoi elles ressemblent.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2015
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2015
    Messages : 68
    Points : 33
    Points
    33
    Par défaut
    Mes requêtes c'est-à-dire ? Le résultat que j'obtiens ou mes requêtes SQL (elles sont dans mon code dans mon premier lien ) ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1/ dans ton code, c'est.... du code !
    Ce qu'il faut regarder, c'est ce que ça donne avec les valeurs :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
         //ajout des informations dans la table details_commande :  
         $sql_insert =  "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]. " )";
         echo 'sql_insert'.$j.' : '.$sql_insert.'<br />';
         executeRequete($sql_insert);
     
           //on va faire un update de notre stock : on attribue le nouveau stock  
         $sql_update = "UPDATE article SET stock=stock-".$_SESSION['panier']['quantite'][$j] . " WHERE id_article=" . $_SESSION['panier']['id_article'][$j];
         echo 'sql_update'.$j.' : '.$sql_update.'<br />';
         executeRequete($sql_update);
    2/ Si tu veux vraiment utiliser une boucle for, sors le count() (sinon, il est recalculer à chaque tour de boucle !)
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         $count_j = count($_SESSION['panier']['id_article'][$j]);
         for($j = 0 ; $j < $count_j; $j++)
         {
    Sinon, avec foreach :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         foreach($_SESSION['panier']['id_article'] as $j => $article_j)
         {

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2015
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2015
    Messages : 68
    Points : 33
    Points
    33
    Par défaut
    Merci, je vais essayer ça dans le week-end et je vous dirai si ça fonctionne enfin !

    Edit: le souci c'était juste le [$j] en trop ici :

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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Insertion de données avec 2 bdd différentes
    Par Castor SQL dans le forum Langage SQL
    Réponses: 3
    Dernier message: 06/05/2009, 11h10
  2. Relation entre tables dans bdd différentes
    Par Mandotnet dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 29/03/2006, 09h03
  3. [VB.NET 2005][SQL SERVER 2005] Pb d'insertion en BdD
    Par jhary07 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 02/01/2006, 09h53
  4. [SGBD] formulaire insertion date Bdd Mysql
    Par Mimisator dans le forum Administration
    Réponses: 7
    Dernier message: 30/11/2005, 10h38
  5. [ADO.Net][VB.NET] Comment copier des données entre deux BDD différentes ?
    Par maddog2032 dans le forum Accès aux données
    Réponses: 6
    Dernier message: 06/06/2005, 12h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo