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 de données d'un panier dans une base


Sujet :

PHP & Base de données

Vue hybride

nono72i Insertion de données d'un... 01/02/2021, 14h19
mathieu la 1re chose à regarder est... 01/02/2021, 14h53
nono72i J'obtiens cela en faisant un... 01/02/2021, 15h05
mathieu s'il n'y a pas les données... 01/02/2021, 18h27
nono72i Ok alors j'ai réussi à... 02/02/2021, 09h45
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2021
    Messages : 16
    Par défaut Insertion de données d'un panier dans une base
    Bonjour,

    Tout d'abord je précise que je suis débutant donc j'appelle à une certaine indulgence envers mon soucis...
    J'ai essayé, dans le cadre de la création d'un outil de gestion de bon de commandes, de réaliser un 'panier'.
    Après quelques heures de galère j'ai décidé de me servir d'un script assez facile à mettre en place sur mon projet.
    J'ai donc réussi à l'incorporer, mais maintenant je n'arrive pas à réaliser l'insertion des produits et de leur quantité dans ma base de données.
    Pour vous expliquer, mon insertion doit se faire premièrement dans une table commande puis dans une table commande_contenu.

    Voci mon script d'insertion :

    ajout_commande.php
    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
     
    <?php
     
    $id_produits = !empty($_POST['id_produit']) ? $_POST['id_produit'] : NULL;
    $quantites= !empty($_POST['quantite']) ? $_POST['quantite'] : NULL;
     
    // Requêtes d'ajout d'ouvrages à la commande
    if(isset($_POST['commander'])){
     
        // Création de la commande
        $commander = mysqli_real_escape_string($con, htmlspecialchars($_POST['commander']));
     
        $commande1="INSERT INTO commande(`id_client`,`etat_commande`)
                    VALUES (1, 'en attente')";
     
        //exécution de la requete
        if(!mysqli_query($con, $commande1) ){
            echo("Erreur dans la requete : " . $commande1 . ' <br>Erreur :' . mysqli_error($con));
        }
     
        // récupération de l'id nouvellement inséré en BDD
        $id_commande =  mysqli_insert_id($con);         
     
        $_SESSION['id_commande'] = $id_commande;
     
        // Puis boucle sur le/les produit(s) pour les ajouter dans la commande
        foreach($quantites as $id_produits => $qte ){
     
     
            if(!empty( $qte) && !empty($id_produits) ) {
            $commande2="INSERT INTO commande_contenu(`id_commande`,`id_produit`,`quantite`)
                        VALUES ('".$id_commande."', '".$id_produits."', '".$qte."')";
     
                //exécution de la requete 2 avec le même id_commande.
                if(!mysqli_query($con, $commande2) ){
                    echo("Erreur dans la requete : " . $commande2 . ' <br>Erreur :' . mysqli_error($con));
                }
            }
     
        } 
        header('Location:recap_commande.php');
    }
    La première partie fonctionne(insertion dans la table commande), mais pas la deuxième(insertion des données id_produits et quantite dans la table commande_contenu. A la ligne 26, j'ai l'erreur suivante :
    Warning: Invalid argument supplied for foreach() in C:\wamp64\www\semaine5\ajout_commande.php

    Puis, même ligne :
    Warning: Cannot modify header information - headers already sent by (output started at C:\wamp64\www\semaine5\ajout_commande.php:26) in C:\wamp64\www\semaine5\ajout_commande.php on line 40


    Je vous mets aussi mon script de panier pour que vous puissiez mieux comprendre :


    commande.php
    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
     
    <?php 
    // Création de la commande si n'existe pas dans la session de l'utilisateur
    if (! isset($_SESSION['commande']))  $_SESSION['commande'] = array();
     
    // Voici les données externes utilisées par la commande
    $id_produit   = isset($_GET['id_produit'])   ? $_GET['id_produit']   : null;
    $nom_produit  = isset($_GET['nomProduit'])  ? $_GET['nomProduit']  : null;
    $prix_produit = isset($_GET['prixProduit']) ? $_GET['prixProduit'] : '?';
    $qte_produit  = isset($_GET['qte_produit'])  ? $_GET['qte_produit']  : 1;
     
    // Voici les traitements de la commande
    if ($id_produit == null) echo 'Veuillez sélectionner un produit pour le mettre dans la commande!'; // Message si pas d'acticle sélectionné
    else
    if (isset($_GET['ajouter'])){ // Ajouter un nouvel produit
      $_SESSION['commande'][$id_produit]['nom']  = $nom_produit;
      $_SESSION['commande'][$id_produit]['prix'] = $prix_produit;
      $_SESSION['commande'][$id_produit]['qte']  = $qte_produit;
    } 
    else if (isset($_GET['modifier']))  $_SESSION['commande'][$id_produit]['qte'] = $qte_produit; // Modifier la quantité achetée
    else if (isset($_GET['supprimer']))  unset($_SESSION['commande'][$id_produit]); // Supprimer un produit de la commande
     
    // Voici l'affichage de la commande
    echo '<h2>Contenu de votre commande</h2><ul>';
    if (isset($_SESSION['commande']) && count($_SESSION['commande'])>0){
      $total_commande = 0;
      foreach($_SESSION['commande'] as $id_produit=>$produit_acheté){
        // On affiche chaque ligne de la commande : nom, prix et quantité modifiable + 2 boutons : modifier la qté et supprimer l'produit
        if (isset($produit_acheté['nom']) && isset($produit_acheté['prix']) && isset($produit_acheté['qte'])){
          echo '<li><form>', $produit_acheté['nom'], ' (', number_format($produit_acheté['prix'], 2, ',', ' '), ' €) ',
           '<input type="hidden" name="id_produit" value="', $id_produit , '" />
            <br />Qté: <input type="text" name="qte_produit" value="', $produit_acheté['qte'] , '" />
            <input type="submit" name="modifier" value="Nouvelle Qté" />
            <input type="submit" name="supprimer" value="Supprimer" />
          </form>
          </li>';
     
          // Calcule le prix total de la commande 
          $total_commande += $produit_acheté['prix'] * $produit_acheté['qte'];
        }
      }
      echo '<hr><h3>Total: ', number_format($total_commande, 2, ',', ' '), ' €'; // Affiche le total de la commande
    }
    else { echo 'Votre commande est vide'; } // Message si la commande est vide
    echo "</ul>";
     
     
     
    ?>
    Merci pour votre attention, bonne journée

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 644
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 644
    Par défaut
    la 1re chose à regarder est le contenu de $_POST pour vérifier que vous récupérez bien toutes les données.

    vous pouvez essayer cette fonction qui affichera n'importe quelle variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function aff($var) {
    	echo "<pre>";
    	echo htmlspecialchars(var_export($var, TRUE));
    	echo "</pre>";
    }

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2021
    Messages : 16
    Par défaut
    J'obtiens cela en faisant un var_dump (la fonction au dessus me renvoyait une fatal error):

    array (size=1)
    'commander' => string 'Commander' (length=9)

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 644
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 644
    Par défaut
    s'il n'y a pas les données "quantite" dans le tableau, cela veut dire qu'il y a un souci sur le formulaire qui envoie les données.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2021
    Messages : 16
    Par défaut
    Ok alors j'ai réussi à récupérer les données qui m'intéressent,

    array (size=3)
    'id_produit' => string '9' (length=1)
    'quantite_produit' => string '1' (length=1)
    'commander' => string 'Commander' (length=9)


    mais j'ai néanmoins toujours la même erreur,

    Warning: Invalid argument supplied for foreach() in C:\wamp64\www\semaine5\ajout_commande.php *

    J'ai fait des recherches sur la possible origine de cette erreur mais je n'ai pas réussi à la corriger...

    Bonne journée

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 644
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 644
    Par défaut
    vous n'avez toujours rien dans $_POST['quantite'] et j'ai l'impression que vous récupérez seulement le dernier élément.
    pour récupérer toutes les données, vous pouvez par exemple utiliser les crochets dans les noms des champs comme cela :
    https://www.php.net/manual/fr/langua...s.external.php

Discussions similaires

  1. Réponses: 19
    Dernier message: 27/10/2011, 14h01
  2. Réponses: 3
    Dernier message: 19/09/2009, 03h19
  3. Réponses: 15
    Dernier message: 21/12/2008, 19h31
  4. Insertion des données d'un formulaire dans une base
    Par youssef222 dans le forum Langage
    Réponses: 3
    Dernier message: 22/10/2008, 00h16
  5. Insertion de données d'un formulaire dans une table
    Par manu971 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 06/11/2007, 19h22

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