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 :

Double boucle while input select [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut Double boucle while input select
    Bonsoir j'ai besoin d'utilisé deux boucle while do mais hélas "logique" cela ne marche pas et j'aimerai trouvé une autre idée pour faire ce que je veux.

    Ma premier boucle me sort mes enregistrement a modifié tiré de mysql
    La second me permet de faire un menu select pour l'un des enregistrement.

    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
      <table align="center">
        <tr valign="baseline">
          <td nowrap align="right">Id_culture:</td>
          <td>Surface:</td>
           <td>Surface:</td>
        <tr>
        <tr valign="baseline">
          <?php do { ?>
            <td nowrap align="right"><select name="id_culture">
              <?php 
    do {  
    ?>
              <option value="<?php echo $row_Fiche_culture2['id_culture']?>" <?php if (!(strcmp($row_Fiche_culture2['id_culture'], htmlentities($row_record_sous_traitement_engrais['id_culture'], ENT_COMPAT, 'utf-8')))) {echo "SELECTED";} ?>><?php echo $row_Fiche_culture2['parcelle']?></option>
              <?php
    } while ($row_Fiche_culture2 = mysql_fetch_assoc($Fiche_culture2));
    ?>
            </select></td>
            <td><input type="text" name="surface" value="<?php echo htmlentities($row_record_sous_traitement_engrais['surface'], ENT_COMPAT, 'utf-8'); ?>" size="32"></td>
            <td><input type="text" name="quantite2" value="<?php echo htmlentities($row_record_sous_traitement_engrais['quantite'], ENT_COMPAT, 'utf-8'); ?>" size="32"></td>
            <?php } while ($row_record_sous_traitement_engrais = mysql_fetch_assoc($record_sous_traitement_engrais)); ?>
        </tr>
     
        <tr valign="baseline">
     
          <td colspan="3"><input type="submit" value="Mettre à jour l'enregistrement"></td>
        </tr>
      </table>
    Voici le code
    Cela me retourne un certain nombre de ligne
    La 1er ligne est correcte avec mon menu select qui contient bien les info de la boucle while
    La 2nd ligne provenant de la boucle me met un menu select vide et les input qui suive sont correcte.
    A partir d'ici en faite mon menu est vide et je trouve pas idée, de solution. C'est pas une erreur vu que c'est logique ce qui ce produit.
    Mais j'aimerai trouvé une solution pour que mon menu select soit générer via SQL et avoir aussi ma boucle while pour les enregistrement.

    J'ai du mal un peu a expliqué mais je pense que le code est assez explicite.

  2. #2
    Membre actif
    Profil pro
    Responsable de service informatique
    Inscrit en
    Août 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 174
    Points : 232
    Points
    232
    Par défaut
    Bonsoir,

    Désolé mais je ne trouve pas le code très explicite.

    De plus, il crée plusieurs fois le même select.

    Les boucles do while ne sont pas très pratique en général et dans ton cas ça ne l'est pas.

    Que veux tu faire exactement ? Tes requêtes récupèrent quoi ?

    Cordialement,

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut
    J'ai deux tables, l'une qui alimente mon menu et l'autre qui contient les enregistrement

    Dans mon cas j'ai une table qui contient des parcelles de culture.
    La 2nd table contient des enregistrement de surface lié a la dite parcelle, ainsi que des quantité de produit qui y on était mis.

    J'ai donc une boucle pour les enregistrement
    Et une autre qui va alimenté mon menu select avec les options

    Donc a chaque nouvelle ligne de la table 2 j'aurai un menu select effectivement.
    Si j'ai 3 enregistrement. J'aimerai en résulta
    le menu select, input text, input text
    menu select, input text, input text
    menu select, input text, input text


  4. #4
    Membre actif
    Profil pro
    Responsable de service informatique
    Inscrit en
    Août 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 174
    Points : 232
    Points
    232
    Par défaut
    Je suis désolé mais j'ai certainement un peul de mal à comprendre.

    Ta liste de select avec les deux input text proviennent de la table parcelle. C'est bien ça ?

    Quand tu parles d'enregistrements, tu parles d'une seule ligne de la table avec tous les champs de la table ?

    Ton screen me met le doute. Tu n'as pas besoin de boucle pour afficher les données de la table des enregistrements s'il y a une seule ligne dans la table.

    Encore désolé mais je n'ai pas tout saisi.

  5. #5
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Est-ce que par hasard, tu voudrais qu'un select modifie dynamiquement un ou des autres input ?
    Auquel cas, il faudra que tu te tournes vers Ajax. (autre techno).
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  6. #6
    Membre actif
    Profil pro
    Responsable de service informatique
    Inscrit en
    Août 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 174
    Points : 232
    Points
    232
    Par défaut
    Bonjour,

    Peux-tu faire un mcd avec quelques explications ?

    Natso

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 103
    Points : 4 449
    Points
    4 449
    Par défaut
    si j'ai bien compris, les valeurs du select sont les mêmes, mais c'est la valeur sélectionnée(selected) qui change

    Il faudrait que tu fasses en fait un fetchall de $Fiche_culture2 avant ta première boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ($row_Fiche_cultures[] = mysql_fetch_assoc($Fiche_culture2));
    Comme cela dans ta boucle, tu pourrais alors faire une deuxième boucle mais sur ton tableau $row_Fiche_cultures (et non sur une requete)

    ps: il faut changer le name dans ta boucle de select et des 2 input (id_culture[],surface[],quantite[])
    $moi= ( !== ) ? : ;

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut
    Dendrite non ça j'arrive a le faire... et ce n'est pas ce que je souhaite faire dans ce cas la. Je te remercie.

    mlebeguec c'est quoi un mcd?

    Je vais essayé de mieux m'expliqué...
    J'ai une table nommé Fiche_culture avec la structure suivante
    id_culture, producteur, parcelle, surface_p, culture, variété
    J'ai donc des parcelles avec chacune une surface, et une culture
    ex:
    id_culture, producteur, parcelle, surface_p, culture, variété
    1, producteur1, A1, 30, carotte, nantaise
    2, producteur1, A2, 30, mais, waxy
    etc...
    J'ai une seconde table nommé sous_traitement_engrais avec cette structure
    id, id_traitement_engrais, id_culture, surface, quantité
    1,1,1,29,3000 ( avec sql et des unions et la table précédent cela me sort 1,1,A1, carotte,nantaise,29,3000)
    Donc en gros sur la parcelle A1 on a mis 3000kg d'engrais sur 29 hectares.
    Je peux avoir donc X enregistrement pour ici pour une parcelle ce qui me ferait ceci
    2,1,1,29,1000
    3,1,1,29,4000
    etc...

    Pour en revenir a mon code et ce que je souhaite faire
    Je souhaite pouvoir modifié les enregistrement de la table sous_traitement_engrais mais pas avoir les id qui font référence a d'autre table d'ou mon menu select qui va affiché A1,A2 etc.. et via option seleted le bon nom et en value j'aurai 1,2 etc..

    Je pense papajoker a compris ce que je souhaite faire. Je vais essayé de le mettre en place.

  9. #9
    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 ne peux pas faire le fetch complet deux fois sur la même requête.
    Fais ta requête recupérant les parcelles avant et stock le résultat :

    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 
    while ($row = mysql_fetch_assoc($Fiche_culture2)) {
        $tblCulture[$row['id_culture']] = $row['parcelle'];
    }
     
    echo '<td nowrap align="right">
                    <select name="id_culture">';
    foreach ($tblCulture as $id=>$value) {
       if ($id == $row_record_sous_traitement_engrais['id_culture'])) {
                $selected = ' selected="selected" ';
        }
        else {
                $selected = '';
         }
        echo  '<option value="' . $id . '"' . $selected . '>' . htmlentities($value) . '</option>';
    }
    echo '</select></td>';
    Attention, je trouve que dans ton code et tes explications les notions de parcelle et de culture se mélangent dangereusement.
    Évite les boucles de la mort et les noms de variable a rallonge, c'est vite illisible
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut
    Merci beaucoup sabotage
    ça marche presque parfaitement.
    Il y a juste un bug au niveau du selected que je ne comprends pas vraiment.
    $id prend pas la valeur de 1 mais 2 des le début.

    $row_record_sous_traitement_engrais['id_culture'] peut etre égale a n'importe quoi sauf 1 ça marche mais si c'est 1, ça marche pas.

  11. #11
    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 ne nous a pas montré les requêtes donc j'ai déduis des trucs.
    Assure toi que ce j'ai écris est logique.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut
    Voici les requêtes
    Tu as bien déduis il me semble.
    J'ai affiché $id et $row_record_sous_traitement_engrais['id_culture'] pour voir leur valeur et en l'occurence j'ai $id=2 et $row_record_sous_traitement_engrais['id_culture'] = 2

    Donc cela me retourne le 2nd ID de la table
    Par contre si dans la table je modifie la valeur a par exemple 2 ou plus ça marche bien, c'est seulement quand $row_record_sous_traitement_engrais['id_culture'] = 1 que cela bug vu que
    directe $id=2 au lieu de 1 a la première itération.

    Voici un screen, j'ai affiché les valeur dans l'input select
    On peut donc voir C1 qui est la parcelle suivi de l'id puis $row_record_sous_traitement_engrais['id_culture']



    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
    $colname_record_sous_traitement_engrais = "-1";
    if (isset($_GET['id_traitement_engrais'])) {
      $colname_record_sous_traitement_engrais = $_GET['id_traitement_engrais'];
    }
    mysql_select_db($database_cultureV2, $cultureV2);
    $query_record_sous_traitement_engrais = sprintf("SELECT * FROM sous_traitement_engrais WHERE id_traitement_engrais = %s", GetSQLValueString($colname_record_sous_traitement_engrais, "text"));
    $record_sous_traitement_engrais = mysql_query($query_record_sous_traitement_engrais, $cultureV2) or die(mysql_error());
    $row_record_sous_traitement_engrais = mysql_fetch_assoc($record_sous_traitement_engrais);
    $totalRows_record_sous_traitement_engrais = mysql_num_rows($record_sous_traitement_engrais);
     
    mysql_select_db($database_cultureV2, $cultureV2);
    $query_Fiche_culture2 = "SELECT * FROM Fiche_culture";
    $Fiche_culture2 = mysql_query($query_Fiche_culture2, $cultureV2) or die(mysql_error());
    $row_Fiche_culture2 = mysql_fetch_assoc($Fiche_culture2);
    $totalRows_Fiche_culture2 = mysql_num_rows($Fiche_culture2);

  13. #13
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $row_Fiche_culture2 = mysql_fetch_assoc($Fiche_culture2);
    Enlève cette ligne, elle recupère la première ligne de la requête.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut
    C'est fait mais cela ne commence toujours pas a 1 mais a 2 grrr

  15. #15
    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
    Je ne l'ai pas précisé mais c'est la même chose pour l'autre requête
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  16. #16
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut
    Autant pour moi...
    J'ai pas fait attention que le FTP me demandé de confirmé l'envoie sur le serveur... Des fois ça lui prend...

    J'ai supprimé les deux parce que j'ai eu un doute. Cela a créer une ligne de plus vide tant dis que si je remets $row_record_sous_traitement_engrais = mysql_fetch_assoc($record_sous_traitement_engrais); cela remarche parfaitement.

    GRAND merci a vous tous et particulièrement a toi sabotage

  17. #17
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut
    sabotage j'ai besoin d'un petit coup de main...

    Sur le meme code j'aurai besoin de sorti plusieur info de la db
    Actuellement j'ai parcelle et id
    value=id
    et l'étiquette = parcelle
    moi j'aimerai aussi sortir d'autre info pour compléter l'étiquette.

  18. #18
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut
    J'y suis parvenue mais pas d'une façon tres "propre"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ($row = mysql_fetch_assoc($Fiche_culture2)) {
        $tblCulture[$row['id_culture']] = $row['exploitation'].' '.$row['parcelle'].' '.$row['culture'].' '.$row['variete'].' '.$row['surface'];
    }

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

Discussions similaires

  1. [MySQL] Optimisation code double boucle while
    Par heretik25 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/11/2011, 15h38
  2. Quitter une double boucle while
    Par sirop-de-menthe dans le forum MATLAB
    Réponses: 3
    Dernier message: 13/05/2011, 23h05
  3. [PHP 5.3] Soucis avec le résultat d'une requête (double boucles while)
    Par beegees dans le forum Langage
    Réponses: 7
    Dernier message: 31/05/2010, 22h26
  4. [PHP 5.3] Double boucles while, problème d'accès au données de la première
    Par beegees dans le forum Langage
    Réponses: 3
    Dernier message: 09/11/2009, 08h44
  5. Input dans une boucle while
    Par bdptaki dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 02/09/2009, 07h51

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