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 :

select dynamique [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 193
    Points
    193
    Par défaut select dynamique
    salut.

    J'aimerais effectuer un select dynamique.

    Pour cela je récupère le nombre de champs de ma table.

    J'aimerai que selon le nombre de champs trouvé le select soit composé d'autant de champs trouvé et qu'il ai comme valeur les valeurs de la base.

    Comment s'y prendre?
    Merci

  2. #2
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    je ne sais pas si mon ma liste déroulante peut t'aider:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <tr> 
                <td>Incident</td>
                <td> <select name="NumIncident">
                    <?php
    do {  
    ?>
                    <option value="<?php echo $row['NumInc']?>"><?php echo $row['NumInc'];?>****<? echo $row['jourAppel'];?>****<? echo $row['Raison_sociale'];?>****<? echo $row['Nom'];?></option>
                    <?php
    } while ($row = mysql_fetch_assoc($res));
     
    ?>
                  </select> </td>
              </tr>

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 193
    Points
    193
    Par défaut
    J'ai fait ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    require("config.php");
    $query="SELECT * from `user`";
    $result = mysql_query($query);
    do {
    ?>
    ligne 15 <option value="<?php echo $row['id_user']?>"><?php echo $row['login'];?></option>
    <?php
    } while ($row = mysql_fetch_assoc($result));
     
    ?>
    </select>
    C'est presque bon.
    En effet à la premiere ligne de mon select il me met erreur à la ligne 15 undefined variable row.

    Et après les deux autres choix c'est bien les login de ma base

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 193
    Points
    193
    Par défaut
    j'ai modifié comme ceci et ca marche.
    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
    <tr>
    <td>Soumis par</td>
    <td> <select name="Soumis_par">
    <?php
    require("config.php");
    $query="SELECT * FROM user WHERE 'id_user' IS NOT NULL";
    $result = mysql_query($query);
    while ($val = mysql_fetch_assoc($result)) {
    ?>
    <option value="<?php echo $val['id_user']?>"><?php echo $val['login'];?></option>
    <?php
    } 
    ?>
    </select> </td>
    </tr>

  5. #5
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    c'est mysql_fetch_assoc qui manquait à ton code.

  6. #6
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    mysql_fetch_assoc retourne un tableau associatif qui contient la ligne lue, ou bien FALSE, si il ne reste plus de lignes.
    N'oublie pas de mettre résolu.

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Lorsque tu parcours les résultats d'une table, préfère while()... à do...while(), sinon tu as toutes les chances d'avoir un souci avec la première ou la dernière ligne (selon le cas).

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 193
    Points
    193
    Par défaut
    Yes kirkis exact ^^

  9. #9
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    la dernière fois j'ai eu des soucis lorsque j'ai utilisé while()... .
    le premier enregistrement n'aaparaissait. j'ai du utiliser do...while() pour avoir ce dernier.

  10. #10
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Rectification, j'ai écrit trop vite tout à l'heure : tu auras toujours un souci en utilisant do...while() et la raison est simple. Tu forces PHP à faire un tour de boucle avant d'avoir effectué le test (et le fetch_), donc tu utilises $row alors qu'il n'y a rien dedans (ou, éventuellement, une variable précédente de ton script et qui n'a rien à voir).

    do...while() prend tout son sens pour des menus par exemple mais, en PHP, son utilité est bien limitée (par rapport au C par exemple).

  11. #11
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    dans mon cas comment aurais pu afficher le 1er enregistrement, si je n'avais pas utilisé do ...while?

  12. #12
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Je prends le problème à l'envers. Dans ton code du départ, je me demande comment tu n'as pas remarqué que tu avais une première ligne supplémentaire vide si tu utilisais do...while() (ou bien pourquoi tu ne l'as pas eue).
    Avec while()..., que j'utilise (et je crois pouvoir dire "que nous utilisons tous") systématiquement pour ce genre de job, y'a pas de souci.

  13. #13
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    Dans ton code du départ, je me demande comment tu n'as pas remarqué que tu avais une première ligne supplémentaire vide si tu utilisais do...while() (ou bien pourquoi tu ne l'as pas eue).
    OU?

  14. #14
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Si on regarde le fonctionnement de do...while(), voici ce qu'il se passe :

    1. faire qqch
    2. vérifier une condition
    3. tout répéter tant que 2. est vrai


    Dans ton cas, le 2. se découpe ainsi :
    1. exécute une fonction,
    2. retourne un résultat
    3. l'assigne à une variable (mettons $row pour l'exemple)
    4. vérifie si cette variable est vide


    La condition du 2. est à peu près équivalente à empty($row)

    Le problème est que, si $row n'existe pas, le 1. va l'utiliser quand même puisque le premier test n'est pas encore fait (il arrive ensuite).

    Dans ton cas, cela signifie que la boucle do...while() va effectuer un premier tour "à vide", c'est-à-dire avec une variable $row qui ne contient pas le résultat que tu attends. À ce moment précis, cette variable $row peut tout aussi bien être vide que contenir le résultat final d'un do...while() que tu as fait précédemment dans ton PHP (dans un scope accessible).


    Je ne sais pas pourquoi tu n'avais pas le premier résultat de la BDD avec while()... alors que do...while() te permettait d'y accéder. Je sais seulement que, si tu souhaites vraiment utiliser do...while() pour parcourir un résultat de requête de BDD, la pratique courante est de faire un appel à mysql_fetch_array() juste avant.

  15. #15
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    au lieu de mysql_fetch_assoc .
    merci pour ces précisions.

  16. #16
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Non non, mysql_fetch_array() et mysql_fetch_assoc() fonctionnent de manière similaire. L'un (_array) retourne un tableau indexé à la fois par des clés numériques et par des clés alphanumériques, l'autre (_assoc) retourne seulement un tableau associatif.
    Les deux fonctions sont aussi rapides l'une que l'autre, seulement _assoc utilise probablement légèrement moins de mémoire.

    Utiliser l'une ou l'autre ne change rien, dans ton cas.

  17. #17
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    ok, attends je te montre ce bout de code qui m'a fait utiliser do...while
    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
     <?php  
    		  $color=1;
    		  do { 
    		   if ($color%2==0) {$bgcolor="#99FFCC";} else{$bgcolor="#ffffff";}
    		  ?>
              <tr bgcolor="<? echo $bgcolor?>"> 
                <td><?php echo $row['NumIntervention']; ?></td>
                 <td> 
                  <?php $jour=$mois=$annee="";sscanf($row['jourIntervent'],"%d-%d-%d",$annee,$mois,$jour);echo sprintf("%d/%d/%d",$jour,$mois,$annee); ?>
                </td>
                <td><?php echo $row['debutIntervent']; ?></td>
    			<td><?php echo $row['finIntervent']; ?></td>
                <td><input type="checkbox" name="etat"   value=""<?php if ( $row['Etat']=="Y") echo "checked"; ?>></td>
                <!--<td><?php echo $row['DateResolution']; ?></td>-->
                <td> 
                  <?php $jour=$mois=$annee="";sscanf($row['DateResolution'],"%d-%d-%d",$annee,$mois,$jour);echo sprintf("%d/%d/%d",$jour,$mois,$annee); ?>
                </td>
                <td><?php echo $row['NumInc']; ?></td>
                <td><?php echo $row['Raison_sociale']; ?></td>
                <td><?php echo $row['Nom']; ?></td>
              </tr>
              <?php 
    		  $color++;
     		  } while ( $row = mysql_fetch_assoc($res)); 
    		  ?>

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

Discussions similaires

  1. Un 'selected' dynamique dans <OPTION>
    Par wkhead dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/04/2006, 15h38
  2. champs select dynamique
    Par kcizth dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/04/2006, 09h56
  3. [MySQL] [BDD] Problème avec SELECT "dynamique"
    Par Vecine dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/03/2006, 11h11
  4. question simple sur les select dynamiques
    Par grinder59 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 24/01/2006, 15h53
  5. Select dynamique
    Par mandaillou dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/11/2005, 15h14

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