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

Langage PHP Discussion :

Erreur quand je clique sur le bouton envoie.


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2019
    Messages : 35
    Par défaut Erreur quand je clique sur le bouton envoie.
    Voici un résumé de ma page et de sont fonctionnement pour bien comprendre mon probleme.

    Ma page ajoutercommande.php cette page sert à afficher tous les produits qui sont dans la base de donné ainsi de commander un ou des produits pour un client.
    1: le vendeur qui utilise cette interface devra sélectionner un client déjà enregistré dans la BDD a l'aide d'un SELECT pour récupérer le ID client ainsi que tous les informations associer à cette ID .
    2: le vendeur devra commander(bouton) et confirmer(oui ou non) la commande et un récapitulatif de cette commande sera affiché a l’écran avec le montant avant et après Taxe.
    2.1: si le vendeur clique sur bouton non la commande est rollback(cancel) et si il clique sur oui les information sur la commande et le client seront dans une fonction pour enregistrer la commande.

    Donc voila je suis coincé une fois que je sélectionne le client et je clique sur le bouton Commandez il m'affiche une erreur : Erreur de requête : 1054 – Champ 'lient_info' inconnu dans where clause
    j'ai fais un CTRL + F pour chercher dans ma page l'erreur : lient_info , et j'ai rien trouvé.

    Nom : bugtitre.jpg
Affichages : 281
Taille : 127,2 Ko

    Voici mon code de la page ajoutercommande.php, j'ai documenté un peu le code pour mieux si retrouver.
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    <?php
    <?php
    require_once("../../inc/connectDB.php");
    require_once("../../inc/sql.php");
     
    unset($_SESSION["message"]);
    // Catalogue client
    $recherche = isset($_GET['recherche']) ? trim($_GET['recherche']) : "";
     
    // liste tous les produits lié a une categorie
    $liste = afficherProduits($conn, $recherche);
     
    // liste tous les clients enrigistré
    $afficherclient = afficherclients($conn);
     
    //recupere la valeur ID du SELECT name:client_id
    if (isset($_POST["client_id"])){
        $_POST["client_id"];
     
        //fonction qui recupere les informations client par son ID  
        $_SESSION['client_info'] = lireClient($conn,  $_POST["client_id"]);
     
        //vérification des valeurs recupéré
        var_dump($_SESSION['client_info']['client_id']);
        var_dump($_SESSION['client_info']['client_adresse']); 
    }
     
     
     
     
    // retour des formulaires de confirmation
    // ------------------------------------
     
    $confirme = isset($_POST['confirme']) ? $_POST['confirme'] : "";
    $confirmation = isset($_POST['confirmation']) ? $_POST['confirmation'] : "";
    if ($confirmation == "OK") {
        header('Location: authentification.php');
    }?>
     
    <!DOCTYPE html>
    <html lang="fr">
     
    <head>
        <meta charset="UTF-8">
        <title>Catalogue produits</title>
        <link rel="stylesheet" href="assets/css/style.css">
    </head>
     
    <header>
        <p class="menu">
            <a href="../afficher/affichercommande.php">Afficher Commande</a>
        </p>
    </header>
     
    <body>
        <h1>Catalogue des produits</h1>
        <?php
        if (isset($_SESSION["identifiant_utilisateur"])) : ?>
            <h2>Utilisateur : <?= $_SESSION["identifiant_utilisateur"] ?><br>
        <?php endif; ?>
        <p class="menu">
            <a href="deconnexion.php"><?= isset($_SESSION["identifiant_utilisateur"]) ? "Déconnexion" : "Connexion" ?></a>
        </p>
     
        <!-- moteur de rechercher -->
        <form id="recherche" action="" method="get">
            <label>Produit</label>
            <input type="text" name="recherche" value="<?= $recherche ?>" placeholder="nom du produit contient ces caractères">
            <input type="submit" value="Recherchez">
        </form>
     
     
       <form id="commande" action="" method="POST">   
     
       <!-- affiche la liste de tous les clients enrigistré dans la base de donné -->
        <table>
            <?php if (count($afficherclient) > 0) : ?>
            <label>Client</label>
            <select name="client_id" >
                <?php foreach ($afficherclient as $row) : ?>
                    <option  value="<?= $row["client_id"] ?>"><?= $row["client_prenom"] . ' ' . $row["client_nom"] . ' ' . $row["client_adresse"] ?></option>
                <?php endforeach; ?>    
            </select>
        </table>
            <?php else : ?>
            <p>Aucun Type Utilisateur trouvé.</p>
            <?php endif; ?>
     
        <!-- affiche la liste des produit en vente -->
        <table>
            <tr>
                <th>Catégorie</th>
                <th>Nom</th>
                <th>Descriprion</th>
                <th>Prix</th>
                <th>Commander</th>
            </tr>
            <!-- <form id="commande" action="" method="POST">   -->
                <?php foreach ($liste as $row) : ?>
                <tr>
                    <td style="text-align: center"><?= $row["categorie_nom"] ?></td>
                    <td style="text-align: center"><?= $row["produit_nom"] ?></td> 
                    <td style="text-align: center"><?= $row["produit_description"] ?></td>
                    <td style="text-align: center"> <?= $row["produit_prix"] . " $" ?></td>
                    <td style="text-align: center">
                    <input type="number" min="0" max="<?= $row["produit_quantite"] ?>" name="q<?= $row["produit_id"] ?>" placeholder="quantité">
                    </td>
                </tr> <?php endforeach; ?> </form>
        </table>
     
        <!-- bouton qui recupere tous les informations form commande -->
        <button form="commande" type="submit" name="envoi">Commandez !</button>
     
     
        <?php if (isset($_POST["envoi"])) : ?>
                <?php $i = 1;
                $_SESSION["commande"] = []; ?>
                    <?php
                    foreach ($_POST as $p => $q) { 
                        if ($q != "" && $q != 0) {
                            $_SESSION["commande"][] = ["produit" => substr($p, 1), "quantité" => $q];
                        }
                        ++$i;
                    }
                    ?>
     
        Tableau récapitulatif de la commande
        <?php if (count($_SESSION["commande"]) > 0) : ?>
        <section class="tableau-commande">
            <p>Confirmez la commande :</p>
            <table>
                <tr>
                    <th>Produit</th>
                    <th>Quantité</th>
                    <th>Prix</th>
                </tr>
                <?php 
                $i = 0;
                foreach ($_SESSION["commande"] as $c) :
                $produit = lireProduit($conn, $c["produit"]);
                ?>
                <tr>
                    <td><?= $produit["produit_nom"] ?></td>
                    <td><?= $c["quantité"] ?></td>
                    <?php $prix[] = $c["quantité"] * $produit["produit_prix"]; ?>
                    <td><?= $prix[$i] ?> $</td>
                </tr>
                <?php 
                $i++;
                endforeach; ?>
            </table>
            <p class="total">Total = 
                <?php 
                    $total = 0;
                    $taxt = 0;
                    for ($i = 0; $i < count($prix); ++$i) {
                        $total += $prix[$i];
                        $taxt = $total * 1.15;
                    }
                    echo $total . " $" ?> <br>
                    <?php echo "taxt inclus : " . ROUND($taxt,2). " $";     
                ?>
            </p>
        </section>
        <section>
            <form class="form-suppression" action="" method="post"> 
                <input type="submit" name="confirme" value="OUI"> 
                <input type="submit" name="confirme" value="NON">
            </form>
        </section>
        <?php 
     
     
        else : 
            unset($_SESSION["commande"]); ?>
            <p class="erreur">Vous devez selectionner une quantité pour au moins un produit pour passer une commande.</p>
        <?php endif;
        endif; ?>
     
        <!-- function SQL enrigistrerCommande envoie la commande sous forme de tableau et l'ID ainsi que l'adresse. -->
        <?php
        if ($confirme !== "") {
            if ($confirme === "OUI") {
                if (isset($_SESSION["identifiant_utilisateur"])) {
                    enregistrerCommande($conn, $_SESSION["commande"], $_SESSION["client_info"]["client_id"], $_SESSION["client_info"]["client_adresse"]);
                    $_SESSION["message"] = "<p class=\"succes\">Commande effectuée.</p>";
                    unset($_SESSION["commande"]);
                }
                else {
                    echo "<p>Vous devez vous connecter ou créer un compte.</p>";
                    ?>
                    <form class="form-suppression" action="" method="post"> 
                        <input type="submit" name="confirmation" value="OK"> 
                    </form>
                <?php 
                }
            }
            else if ($confirme === "NON") {
                $_SESSION["message"] = "<p class=\"erreur\">Commande non effectuée.</p>";
                unset($_SESSION['commande']);
            }
     
         }
        ?>
        <?php echo isset($_SESSION["message"]) ? $_SESSION["message"] : "&nbsp;" ?>
    </body>
    </html>
    Ma fonction enregistrer commande j'envois 3 variable en paramètre donc le tableau commande, l'id client et l'adresse_client.
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    <?php
    /**
     * Fonction enregistrerCommande
     * Auteur : Samuel
     * Date   : 2020-01-27
     * But    : ajout de ligne dans les tables commande et produit_commande 
     * Arguments en entrée : $conn = contexte de connexion
     *                       $commande = tableau contenant les id et les quantités des produits commandés
     * Valeurs de retour   : aucune
     */
    function enregistrerCommande($conn, array $commande, $client_id, $client_adresse) {
        mysqli_begin_transaction($conn); // Début de la transaction
     
        // Création de la commande
        $req = "INSERT INTO commandes (commande_client_id, commande_adresse) VALUES ($client_id, $client_adresse);";
        // die($req);
     
        if ($result = mysqli_query($conn, $req)) {
            $row = mysqli_affected_rows($conn);
        } else {
            errSQL($conn);
            mysqli_rollback($conn);
            exit;
        }
     
        $commande_id = mysqli_insert_id($conn);
     
        foreach($commande as $c) { // Pour chaque produit commandé
            // Récupération de la quantité actuelle des produits commandés
            $req = "SELECT produit_quantite FROM produits WHERE produit_id = ". $c["produit"];
     
            if ($result = mysqli_query($conn, $req)) {
                $row = mysqli_fetch_row($result);
                $quantite = $row[0]; 
            } else {
                errSQL($conn);
                mysqli_rollback($conn);
                exit;
            }
     
            $nouvelleQuantite = $quantite - $c["quantité"];
     
            // Insert les produits commandés dans la table produit_commande
            $req = "INSERT INTO produits_commandes (produits_fk_id, commandes_fk_id, produit_commande_quantite) VALUES (" . $c["produit"] . ", $commande_id," . $c["quantité"] . ");";
     
            if ($result = mysqli_query($conn, $req)) {
                $row = mysqli_affected_rows($conn);
            } else {
                errSQL($conn);
                mysqli_rollback($conn);
                exit;
            }
     
            // Si il y a suffisament de stock, mise à jours de la quantité des produits commandés
            if ($c["quantité"] <= $quantite) {
                $req = "UPDATE produits SET produit_quantite = $nouvelleQuantite WHERE produit_id = " . $c["produit"];
     
                if ($result = mysqli_query($conn, $req)) {
                    $row = mysqli_affected_rows($conn);
                } else {
                    errSQL($conn);
                    mysqli_rollback($conn);
                    exit;
                }
            }
            else {
                mysqli_rollback($conn); ?>
                    <p class="erreur">Erreure : Plus assez de stock pour le produit numéro <?= $c["produit"] ?>.</p>
            <?php  exit;
            }
        }
        mysqli_commit($conn);
    }
    Section commandes de ma BDD
    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
     
    -- -----------------------------------------------------
    -- Table `i-vend`.`commandes`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `i-vend`.`commandes` (
      `commande_id` INT NOT NULL AUTO_INCREMENT,
      `commande_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `commande_etat` VARCHAR(255) DEFAULT 'Procedure' not null,
      `commande_commentaire` VARCHAR(255)  NULL,
      `commande_adresse` VARCHAR(255) NOT NULL,
      `commande_client_id` INT NOT NULL,
      PRIMARY KEY (`commande_id`),
      INDEX `fk_commandes_Clients_idx` (`commande_client_id` ASC),
      CONSTRAINT `fk_commandes_Clients`
        FOREIGN KEY (`commande_client_id`)
        REFERENCES `i-vend`.`Clients` (`client_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    A mon avis 'lient_info' , fais référence à client_info qui est mal définit dans votre formulaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name= client_info method="POST">
    devrais être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="client_info" method="POST">

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

    1- method="POST" n'a rien à faire non plus dans un <select> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="client_info">
    2- Ce qui m'interpelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        //fonction qui recupere les informations client par son ID  
        $_SESSION['client_info'] = lireClient($conn, $_SESSION['client_info']);
    Que fait la fonction lireClient() ?

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2019
    Messages : 35
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="client_info" method="POST">
    merci Je viens de corrigé bien vue, tout fois le probleme persiste toujours.

    Citation Envoyé par jreaux62 Voir le message
    Que fait la fonction lireClient() ?
    elle me sert a bien identifier l'id récupérer et de prendre tous les information sur le client.

    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
     
    /**
     * Fonction lireClient
     * Auteur : Samuel
     * Date   : 01-17-2019
     * But    : Récupérer le client par son identifiant clé primaire 
     * Arguments en entrée : $conn = contexte de connexion
     *                       $id   = clé primaire
     * Valeurs de retour   : $row  = ligne correspondant à la clé primaire
     *                               tableau vide si non trouvée     
     */
    function lireClient($conn, $id)
    {
     
        $req = "SELECT * FROM clients WHERE client_id=" . $id;
        // die($req);
        if ($result = mysqli_query($conn, $req)) {
            $nbResult = mysqli_num_rows($result);
            $row = array();
            if ($nbResult) {
                mysqli_data_seek($result, 0);
                $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
            }
            mysqli_free_result($result);
            return $row;
        } else {
            errSQL($conn);
            exit;
        }
    }

    j'ai corrigé les fautes en question tout fois le probleme reste le même.

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

    Mets des lunettes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lireClient($conn, $_SESSION['client_info']);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function lireClient($conn, $id)
    Tu ne vois toujours pas ?

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2019
    Messages : 35
    Par défaut
    c'est surement moi qui comprend pas?
    que veux-tu me dire, désoler parce que ce que je vois c'est que j'ai une fonction avec $_SESSION['client_info'] qui contient un ID
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lireClient($conn, $_SESSION['client_info']);
    , elle se fait vérifier par la fonction et retourne les information dans la variable $_SESSION['client_info'] qui est donc réinitialisée.

    quand je fais un vardump de mes variables $_SESSION je constante que j'ai bien récupérer les informations désirer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      //vérification des valeurs recupéré
        var_dump($_SESSION['client_info']['client_id']);
        var_dump($_SESSION['client_info']['client_adresse']);

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/02/2013, 00h05
  2. [Toutes versions] message d'erreur quand je clique sur un bouton qui ouvre un formulaire
    Par Mat08 dans le forum IHM
    Réponses: 6
    Dernier message: 11/08/2009, 10h34
  3. Erreur quand je clique sur un bouton
    Par zouuc dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 17/04/2009, 00h33
  4. [phpBB] Envoi mail automatique quand on clique sur un bouton
    Par Nicca dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 08/12/2006, 12h42
  5. Afficher une TextArea quand on clique sur un bouton
    Par Goozisan dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 26/11/2006, 21h44

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