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 :

Requete UPDATE dans une boucle do-while


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2023
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2023
    Messages : 7
    Par défaut Requete UPDATE dans une boucle do-while
    Bonsoir à tous, voici mon souci depuis 3 jours:

    J'ai une page pour modifier des éléments dans un tableau(catégorie, nom du produit et quantité). Afin de parcourir le tableau j'ai utilisé la boucle do-while pour executer la requette sur chaque champ mais la modication ne prend effet que sur le premier champ cest à dire "categorie1".

    voici le formulaire:
    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
    <form method="post" action="UpdateFiche.php?idFiche=<?php echo $idFiche ?>">
                            <tr>
                                <label>Date : &nbsp;<?php echo $fiche['dateFiche']; ?></label>
                            </tr>
                            <br>
                            <tr>
                                <label>Commentaire : &nbsp;</label><input type="text" name = "commentaire" value = "<?php echo $fiche['commentaire']; ?>">
                            </tr>
                    </div>
     
                        <div class="table-responsive">
                        <div class="table-responsive">
     
      <table class="margetop" id = "productTable" name="tableProduit">
        <thead>
          <tr>
            <th>Catégorie</th>
            <th>Désignation</th>
            <th>Quantité</th>
            <th style="width: 15%;">Destination</th>
          </tr>
        </thead>
        <tbody>
          <?php
            $count = 0;
            $nombreProduit = 0;
            while ($produit = $resultatp->fetch()) {
                $nombreProduit++;
              $count++;
              //$idCategorie=$produit['idCategorie'];
          ?>
            <tr class="product-row">
              <td>
              <select name = "categorie<?php echo $count; ?>">
                  <?php
                            $resultatC = $pdo->query("select * from Categorie");
                            while($categorie = $resultatC->fetch()){ ?>
                                <option value="<?php echo $categorie['idCategorie']; ?>"
                                   <?php if($categorie['nomCategorie']===$produit['nomCategorie']) echo "selected"; ?>>
                                    <?php echo $categorie['nomCategorie'] ?>
                                </option>
                                    <?php } ?>
                            </select>
            </td>
              <td><input type="text" name = "produit<?php echo $count; ?>" value ="<?php echo $produit['nomProduit']; ?>"></td>
              <td><input type="text" name = "quantite<?php echo $count; ?>" value ="<?php echo $produit['quantite']; ?>"></td>
              <?php if ($resultatp->rowCount() == 1) { ?>
                <td><select name="destination">
                  <?php
                            $resultatD = $pdo->query("select * from Direction");
                            while($direction = $resultatD->fetch()){ ?>
                                <option name = "destination" value="<?php echo $direction['nomDirection']; ?>"
                                   <?php if($direction['nomDirection']===$fiche['destination']) echo "selected"; ?>>
                                    <?php echo $direction['nomDirection'] ?>
                                </option>
                                    <?php } ?>
                            </select></td>
              <?php } else if ($resultatp->rowCount() > 1) {
                if ($count == 1) { ?>
                  <td rowspan="<?php echo $resultatp->rowCount(); ?>">
                  <select name="destination">
                  <?php
                            $resultatD = $pdo->query("select * from Direction");
                            while($direction = $resultatD->fetch()){ ?>
                                <option name = "destination" value="<?php echo $direction['nomDirection']; ?>"
                                   <?php if($direction['nomDirection']===$fiche['destination']) echo "selected"; ?>>
                                    <?php echo $direction['nomDirection'] ?>
                                </option>
                                    <?php } ?>
                            </select>
                        </td>
                <?php }
     
              } ?>
            </tr>
          <?php }?>
          <input type = "hidden" name = "nombreProduit" value="<?php $count; ?>">
        </tbody>
     
                        </table>
                        <div class = "submit">
                    <button type="button" id="addButton">Ajouter une ligne <span class="glyphicon glyphicon-plus" style="color:green"></span> </button>
                    &nbsp;&nbsp;&nbsp;
                    <button type="button" id="removeButton">Supprimer la dernière ligne <span class="glyphicon glyphicon-minus" style="color:red"></span> </button>
                </div>
     
                        <div class="signature-container">
      <div class="signature">
        <div>
          <label>Le chef de service <br> demandeur</label><br><br>
        </div>
        <div>
          <label class="signature-adjoint">Directeur général adjoint &nbsp;<br>
            <select name="dga" required>
     
                        <option value="technique" <?php if($fiche['dga']=="technique"){ echo "selected";}?>>
                                    Technique
                        </option>
     
     
     
                        <option value="chargé des operations"<?php if($fiche['dga']=="chargé des operations") echo "selected";?>>
                                   Chargé des opérations
                        </option>
     
     
                    </select></label><br><br>
     
        </div>
        <div>
          <label>Directeur <br>général</label><br><br>
        </div>
      </div>
    </div>
     
     
                    </div>
                    <?php
                } else {
                    echo "Erreur : la fiche demandée n'existe pas.";
                }
            ?>
            <div class="submit">
                <input type="submit"  name = "submit" class="btn btn-success" value="Enregistrer les modifications">
                </form>
    Voici la boucle:
    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
     
    $i=1;
     
     
     
     
        do{
     
        if(isset($_POST['produit'.$i])){
            $nombreProduits = $_POST['nombreProduit'];
        echo $nombreProduits;
                $produit = $_POST['produit'.$i];
                $quantite = $_POST['quantite'.$i];
                $idCategorie = $_POST['categorie'.$i];
                $requetep = "select * from produit where idFiche = $idFiche";
                $resultatp = $pdo->query($requetep);
                $nomProduit = $resultatp -> fetch();
                $requeteProduit = "UPDATE Produit AS p
                                       /* inner join Categorie as c on c.idCategorie = p.idCategorie
                                        inner join fiche as f on p.idFiche = f.idFiche*/
                                        set p.idCategorie = :idCategorie
                                       /*p.nomProduit = :produit,
                                        p.quantite = :quantite*/
                                        where p.idFiche = :idFiche
                                        and p.idProduit = :produit
                                        ";
     
            //$resultatp = $pdo->query($requeteProduit);
            $stmtProduit = $pdo->prepare($requeteProduit);
            $stmtProduit->execute(array(
            ':idCategorie' => $idCategorie,
     
            ':idFiche' => $idFiche,
            ':produit' => $produit,
     
        ));
    }
     
     
            echo $nombreProduits;
        var_dump($nombreProduits);
     
     
        }while($i<=$nombreProduits);

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Ce n'est pas du tout comme cela qu'il faut procéder.

    1. Tu as une boucle de 3 requêtes SQL => Récupère tes valeurs 1 fois en début de script dans des tableaux PHP, et parcours les au besoin

    2. Tu nommes tes champs avec un index en suffixe => Il faut utiliser des [], ainsi dans le script de destination tout sera dans un tableau qu'il suffira de boucler, regarde "Exemple #3 Variables de formulaires complexes" de la doc. https://www.php.net/manual/fr/langua...s.external.php

    3. Plus généralement, tu immerges de l'accès aux données et de la logique dans ton HTML => Il faut séparer les 2, préparer les données et la logique en début de script, utiliser la syntaxe alternative des structures PHP et le short-echo-tag et limiter le HTML à de l'affichage bête et méchant

    4. Tes script sont mal indentés => Cela n'aide pas à bien comprendre la situation, d'ailleurs le script de màj est incohérent avec $i qui n'évolue pas (boucle infinie) des variables qui sortent de nul part ($idFiche) et $_POST['nombreProduit'] qui n'est pas utilisé correctement

    Voici ce que tu fais :

    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
    <?php 
     
    $i = 1;
     
    do {
     
        if(isset($_POST['produit'.$i])){
            $nombreProduits = $_POST['nombreProduit'];
            $produit = $_POST['produit'.$i];
            $quantite = $_POST['quantite'.$i];
            $idCategorie = $_POST['categorie'.$i];
            $requeteProduit = 'UPDATE ...';
            $stmtProduit = $pdo->prepare($requeteProduit);
            $stmtProduit->execute(...);
        }
     
    } while ($i <= $nombreProduits);
    Alors que pour rester un minimum cohérent (et toujours sans respecter le point 2. plus haut, ce qui est toujours mauvais) il faudrait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
     
    for ($i = 1; $i <= $_POST['nombreProduits']; $i++) {
        $product = $_POST["produit{$i}"];
        $category = $_POST["categorie{$i}"];
        // ...
    }

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2023
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2023
    Messages : 7
    Par défaut
    Bonjour Seb.
    Merci pour ta reponse, je vais essayer avec tes suggestions et je te tiens au courant

  4. #4
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 486
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Tu as une boucle de 3 requêtes SQL => Récupère tes valeurs 1 fois en début de script dans des tableaux PHP, et parcours les au besoin
    oui, mettre toutes les données dans un tableau puis parcourir celui-ci selon le besoin est en effet la bonne méthode sinon les performances seraient affreuses.

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2023
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2023
    Messages : 7
    Par défaut
    Merci de votre aide, en suivant vos suggestions, j'ai pu effectuer les modifications.

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

Discussions similaires

  1. [MySQL] Requête update dans une boucle while
    Par Alorslaçaprogramme dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 25/11/2015, 16h55
  2. Réponses: 2
    Dernier message: 06/02/2007, 15h05
  3. [MySQL] Requetes SQL dans une boucle PHP
    Par Siteac dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/11/2006, 14h35
  4. Réponses: 13
    Dernier message: 20/03/2006, 16h26
  5. probleme de recordset dans une boucle do while
    Par Shoryu dans le forum ASP
    Réponses: 18
    Dernier message: 05/07/2004, 15h30

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