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 :

balise select et requête sous pdo


Sujet :

PHP & Base de données

  1. #1
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut balise select et requête sous pdo
    Re ; je veux afficher le résultat d'une requête sous PDO dans une balise select mais je bloque:
    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
     
    <select>
    <option name="$com">Choisissez...</option>
    <?php 
     
    // on crée la requête SQL 
    $sql='SELECT cdc,com FROM com WHERE cdw =:cdw ORDER BY cdc DESC';
    $sqlcom=$cbd->prepare($sql);
    $sqlcom->bindParam(':cdw', $_SESSION['cdw'], PDO::PARAM_INT);
    $sqlcom->execute();
     
    while($datacom = mysql_fetch_assoc($sqlcom)) 
    {
    // on affiche les informations de l'enregistrement en cours
     
     
    }
     
     
    ?>
    </select>
    comment affecter les valeurs a la variable <option name="$com">Choisissez...</option> ?

    en plus j'ai un message warning:
    Warning: mysql_fetch_assoc() expects parameter 1 to be resource

  2. #2
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Re , le warning est réglé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    $datacom=$sqlcom->fetch();
    while($datacom = $sqlcom->fetch())

  3. #3
    Expert éminent sénior

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Points : 19 374
    Points
    19 374
    Par défaut
    Bonjour,

    Tu mets ta requête au dessus de l'option, puis tu boucles sur son résultat avec un for ( ou foreach ) pour créer tes options dynamiquement.
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    le problème est que tu as mélangés 2 extensions, mysql et PDO

  5. #5
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam :
    stealth35:
    le problème est que tu as mélangés 2 extensions, mysql et PDO
    ma requête fonctionne bien et avec un print_r($datacom) m'affiche ceux ci:
    Array ( [cdc] => 3126 [0] => 3126 [com] => docxs [1] => docxs )
    c'est le dernier enregistrement de ma table.
    là je ne sait ! normalement tous les enregistrement s'affiche au lieu du dernier. !!!!

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $datacom=$sqlcom->fetch();
    while($datacom = $sqlcom->fetch())
    C'est ton 1er appel (1er fetch) qui te fais quelque part perdre la 1ère ligne.

    Il faut supprimer le code du 1er fetch() et conserver juste la boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ($datacom = $sqlcom->fetch()) {
        print_r($datacom);
    }
    Là tu devrais parcourir toutes les lignes récupérée par la requête.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  7. #7
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Slt ; RunCodePhp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while ($datacom = $sqlcom->fetchall()) {  // là j'ai utilisé fetchall au lieu de fetch
    print_r($datacom); // pour verifier le résultats
    								}
    maintenant comment je peux affecter les résultats de la requéte ( cdc , com) a la balise select.

  8. #8
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    maintenant comment je peux affecter les résultats de la requéte ( cdc , com) a la balise select
    Ca c'est de la "cuisine".

    Exemple :
    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
    <select name="choix_com">
    <?php 
     
    // on crée la requête SQL 
    $sql = 'SELECT cdc,com FROM com WHERE cdw =:cdw ORDER BY cdc DESC';
    $sqlcom=$cbd->prepare($sql);
    $sqlcom->bindParam(':cdw', $_SESSION['cdw'], PDO::PARAM_INT);
    $sqlcom->execute();
     
    while ($datacom = $sqlcom->fetch(PDO::FETCH_ASSOC)) {
        // on affiche les informations de l'enregistrement en cours
        echo '<option value="'.$datacom['cdc'].'">'.$datacom['com'].'</option>';
    }
    ?>
    </select>
    Attention,
    -> c'est dans la balise SELECT ou il faut donner un nom au contrôle. Attribut name.
    -> et c'est dans la balise OPTION où on mets les différentes valeurs, les différents choix. Attribut : value (et non name)


    Cependant, il est bon de séparer les traitements et la partie interface.
    Faire comme ceci serait mieux :
    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
    <?php
    // on crée la requête SQL 
    $sql = 'SELECT cdc,com FROM com WHERE cdw =:cdw ORDER BY cdc DESC';
    $sqlcom=$cbd->prepare($sql);
    $sqlcom->bindParam(':cdw', $_SESSION['cdw'], PDO::PARAM_INT);
    $sqlcom->execute();
     
    // On récupère en 1er toutes les données
    $datacom = $sqlcom->fetchAll(PDO::FETCH_ASSOC);
     
    // Partie interface
    ?>
    <html>
    ... etc ...
     
    <body>
     
    ... etc ...
     
    <select name="choix_com">
    <?php
    foreach ($datacom as $com) {
        // on affiche les informations de l'enregistrement en cours
        echo '<option value="'.$com['cdc'].'">'.$com['com'].'</option>';
    }
    ?>
    </select>
     
    </body>
    </html>
    En somme, on fait un fetchAll pour tout récupérer d'un coup, puis la boucle (foreach) après.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  9. #9
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Re; merci RunCodePhp , toujours là pour aider
    Cependant, il est bon de séparer les traitements et la partie interface.
    c'est l'idéal , de plus créé ces propre class aussi c'est très intéressant mais faut étudier la POO donc c'est en perspective pour mon projet.

  10. #10
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Re ; j'ai ajouter a la partie traitement une ligne de code afin d'éviter des erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php 
    ........
    // On récupère en 1er toutes les données
    $datacom = $sqlcom->fetchAll(PDO::FETCH_ASSOC);
         // ligne de code ajouter
    // libéré la connexion du serveur ( fermeture du curseur des résultats)
    $sqlcom->closeCursor();	
    ............
    ?>
    je sais pas s'il est au bon endroit ou non ? c’est a dire après récupération des données.

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    pas besoin de faire un closeCusor après un fetchAll

Discussions similaires

  1. [MySQL] Requête paramétrée et balise select
    Par redoran dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 17/06/2012, 19h42
  2. SELECT, JOIN et sous-requêtes dans une même colonne
    Par Alcorak dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/06/2011, 09h04
  3. Réponses: 3
    Dernier message: 20/10/2010, 12h27
  4. balise <select> et attribut focus sous ie et sous firefox
    Par tofito dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 27/07/2009, 15h09
  5. onChange balise select sous IE
    Par jedi186 dans le forum Général JavaScript
    Réponses: 37
    Dernier message: 15/07/2008, 16h35

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