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 :

liste déroulante dynamique avec ajout


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien Hotline
    Inscrit en
    Octobre 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien Hotline
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2015
    Messages : 22
    Points : 14
    Points
    14
    Par défaut liste déroulante dynamique avec ajout
    Bonsoir,

    J'ai un table residence où est inscrit 5 copropriétés du même quartier.

    Je voudrais créer une liste déroulante affichant les information suivante :
    nom du quartier avec le nombre de fois qu'il est présent dans la BDD

    Coté requête SQL je sais que la fonctions suivantes :
    • DISTINCT = affiche une fois une données présente x fois
    • COUNT = permet d'afficher le nombre de fois qu'une donnée est présente.


    Ce premier script affiche 5 lignes vierges alors qu'il devrait afficher le nom du quartier 5 fois:
    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
     
    <?php
    //VARIABLES DE CONNEXION BDD
    $dbhost = "127.0.0.1";
    $dbuser = "root";
    $dbpass = "";
    $dbname = "immeuble";
    $dbchar = "utf8";
    //VARIABLES POUR LISTE DEROULANTE
    $liste_quartier = $_POST["liste_quartier"] ;
     
    //TENTATIVE DE CONNEXION PDO
    try {
        $pdo = new PDO('mysql:host='."$dbhost".';dbname='."$dbname".';'."$dbuser","$dbuser","$dbpass", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES '".$dbchar."'"));
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
        catch (PDOException $e) {
        die($e->getMessage());
    }
     
    //REQUETE SQL A EXECUTER
    //$reponse = $bdd->query('SELECT DISTINCT quartier (SELECT COUNT quartier FROM residence) FROM residence');
    //$reponse = $bdd->query('SELECT COUNT(DISTINCT quartier) as quartier FROM residence');
    //$reponse = $bdd->query('SELECT COUNT(DISTINCT quartier) AS quartier FROM residence groupe by quartier');
    $sql="SELECT quartier FROM residence";
     
    //PREPARATION ET EXECUTION DE LA REQUETE
    $stmt = $pdo->prepare($sql);
    //$stmt->execute();
    ?>
    <!-- Liste deroulante MYSQL des Quartier -->
    <form method="post" action="liste deroulante.php">
        <select name="liste_quartier">
            <?php
            //SCRIPT DE RETOUR DES ENREGISTREMENTS EN BDD
            while ($result = $stmt->fetchAll()) {
                echo '<option value="'.$result["quartier"].'">'.$result["quartier"].'</option>';
            }
            ?>
        </select>
        <input type="submit" value="Valider" />
    </form>
    Voici le résultat de ce script quand l'on clique pour voir le contenu de la liste déroulante :


    A mon avis ce bug d'affichage doit être du à un problème de code. Mais je n'arrive pas à déceler où est le problème.

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

    Il faut exécuter la requête préparée pour pouvoir récupérer (et afficher) les résultats.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien Hotline
    Inscrit en
    Octobre 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien Hotline
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2015
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Oui effectivement merci à toi de ce rappel.

    Voici mon code modifier

    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
     
    <?php
    //VARIABLES DE CONNEXION BDD
    $dbhost = "127.0.0.1";
    $dbuser = "root";
    $dbpass = "";
    $dbname = "immeuble";
    $dbchar = "utf8";
     
     
    //TENTATIVE DE CONNEXION PDO
    try {
        $pdo = new PDO('mysql:host='."$dbhost".';dbname='."$dbname".';'."$dbuser","$dbuser","$dbpass", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES '".$dbchar."'"));
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
        catch (PDOException $e) {
        die($e->getMessage());
    }
     
    //REQUETE SQL A EXECUTER
    $sql="SELECT quartier FROM residence";
     
    //PREPARATION ET EXECUTION DE LA REQUETE
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    ?>
    <!-- Liste deroulante MYSQL des Quartier -->
    <form method="post" action="liste deroulante.php">
        <select name="liste_quartier">
            <?php
            //SCRIPT DE RETOUR DES ENREGISTREMENTS EN BDD
            while ($result = $stmt->fetchAll()) {
                echo '<option value="'.$result["quartier"].'">'.$result["quartier"].'</option>';
            }
            ?>
        </select>
        <input type="submit" value="Valider" />
    </form>

    et le résultat


    Est-ce que le contenu d'un liste déroulante, s’adapte en largueur à son contenu sans code supplémentaire?

  4. #4
    Membre éclairé
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 335
    Points : 715
    Points
    715
    Par défaut
    Bonsoir,
    Plutôt fetch que fetchAll dans le while.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien Hotline
    Inscrit en
    Octobre 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien Hotline
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2015
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Merci Loralina j'ai modifié mon code comme suit :

    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
     
    <?php
    //VARIABLES DE CONNEXION BDD
    $dbhost = "127.0.0.1";
    $dbuser = "root";
    $dbpass = "";
    $dbname = "immeuble";
    $dbchar = "utf8";
     
     
    //TENTATIVE DE CONNEXION PDO
    try {
        $pdo = new PDO('mysql:host='."$dbhost".';dbname='."$dbname".';'."$dbuser","$dbuser","$dbpass", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES '".$dbchar."'"));
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
        catch (PDOException $e) {
        die($e->getMessage());
    }
     
    //REQUETE SQL A EXECUTER
    $sql="SELECT quartier FROM residence";
     
    //PREPARATION ET EXECUTION DE LA REQUETE
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    ?>
    <!-- Liste deroulante MYSQL des Quartier -->
    <form method="post" action="liste deroulante.php">
        <select name="liste_quartier">
            <?php
            //SCRIPT DE RETOUR DES ENREGISTREMENTS EN BDD
            while ($result = $stmt->fetch()) {
                echo '<option value="'.$result["quartier"].'">'.$result["quartier"].'</option>';
            }
            ?>
        </select>
        <input type="submit" value="Valider" />
    </form>
    <?php
    //Démarage du code PHP si l'utilisateur à validé le bouton submit:
            if(isset($_POST['valider']))
    		{
            echo 'Vous avez selectionné la ligne '.'liste_quartier';
            }
     
       ?>
    et voici le résultat:



    A savoir que le code qui permet d'afficher le contenu du choix de la liste déroulante ne me renvoi rien, même le texte qui présente les données?!

    Effectivement il y a bien 5 lignes car 5 fois le même quartier.

    A quoi est du 5 lignes vides?

    je pense que j'ai encore des progrès à faire en PHP

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

    1/ c'est bien gentil de nous montrer une image (!), mais ce qui serait plus intéressant, ce serait le code HTML généré : "Ctrl" + "U"

    2/ Il va vraiment falloir que tu LISES au moins 1 tuto sur PDO !

    1ère méthode (la plus courante) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = ".........."; // la requête SQL
     
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
     
            while ( $row = $stmt->fetch() ) { // on récupère une ligne à la fois
                echo $row['...'];
    		}
    2ème méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = ".........."; // la requête SQL
     
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $rowAll = $stmt->fetchAll(); // on récupère toutes les lignes dans un array
     
            foreach( $rowAll as $row ) {
                echo $row['...'];
    3/ Pour éviter les doublons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="SELECT DISTINCT quartier FROM residence";
    Dernière modification par Invité ; 06/08/2017 à 12h51.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Technicien Hotline
    Inscrit en
    Octobre 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien Hotline
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2015
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Merci Jreaux 62 pour ta réponse.

    Sache que j'ai déjà réussi à faire un formulaire ajout de données en connexion PDO avec liste déroulante non dynamique.

    Donc j'ai modifié comme suit mon code :

    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
     
    <?php
    //VARIABLES DE CONNEXION BDD
    $dbhost = "127.0.0.1";
    $dbuser = "root";
    $dbpass = "";
    $dbname = "immeuble";
    $dbchar = "utf8";
     
     
    //TENTATIVE DE CONNEXION PDO
    try {
        $pdo = new PDO('mysql:host='."$dbhost".';dbname='."$dbname".';'."$dbuser","$dbuser","$dbpass", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES '".$dbchar."'"));
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
        catch (PDOException $e) {
        die($e->getMessage());
    }
     
    //REQUETE SQL A EXECUTER
    $sql="SELECT quartier FROM residence";
     
    //PREPARATION ET EXECUTION DE LA REQUETE
    $stmt = $pdo->prepare($sql);
    $result = $stmt->execute();
     
    ?>
    <!-- Liste deroulante MYSQL des Quartier -->
    <form method="post" action="liste deroulante 2.php">
        <select name="liste_quartier">
            <?php
            //SCRIPT DE RETOUR DES ENREGISTREMENTS EN BDD
            while ($row = $result->fetch()) {
               echo $row['<OPTION VALUE="'.$result["quartier"].'">'.$result["quartier"].'</OPTION>'];
            }
            ?>
        </select>
        <input type="submit" value="Valider" />
    </form>
    <?php
    //Démarage du code PHP si l'utilisateur à validé le bouton submit:
            if(isset($_POST['valider']))
    		{
            echo 'Vous avez selectionné la ligne '.'liste_quartier';
            }
     
       ?>
    Avant d'aller plus loin dans le code SQL mon code ne me permet pas d'afficher la liste déroulante par rapport à la requête SQL. la liste est vide et le bouton "Validé" n'est pas visible.

    Voici le code retour à la place d'une image :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <!-- Liste deroulante MYSQL des Quartier -->
    <form method="post" action="liste deroulante 2.php">
        <select name="liste_quartier">
            <br />
    <b>Fatal error</b>:  Call to a member function fetch() on boolean in <b>C:\xampp\htdocs\sylvain\liste deroulante.php</b> on line <b>31</b><br />
    Si je mets le code suivant ma liste déroulante affiche des données :
    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
     
    <?php
    //DB PARAMS
    $dbhost = 'localhost';
    $dbuser = 'root';
    $dbpass = '';
    $dbname = 'immeuble';
    $dbchar = 'utf8';
     
    //PDO CONNECT
    try
    {
        $pdo = new PDO("mysql:host=".$dbhost.";dbname=".$dbname, $dbuser, $dbpass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES '".$dbchar."'"));
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    }
    catch (PDOException $e)
    {
        die($e->getMessage());
    }
     
    //REQUETE SQL A EXECUTER
    //$sql="SELECT quartier FROM residence";
    //$sql="SELECT Count(`residence`.`Quartier`) AS `Count_Quartier` FROM `residence`";
    $sql="SELECT quartier , Count(*)  FROM residence ";
     
     
    //PREPARATION ET EXECUTION DE LA REQUETE
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $rows = $stmt->fetchAll();
    var_dump($rows);
    ?>
     
    <!-- Liste deroulante MYSQL des Quartier -->
    <form method="post" action="liste deroulante 2.php">
        <select name="liste_quartier">
            <?php
            //SCRIPT DE RETOUR DES ENREGISTREMENTS EN BDD
            foreach ($rows as $row)
            {
                echo '<option value="'.$row["quartier"].'">'.$row["quartier"].'</option>';
            }
            ?>
        </select>
        <input type="submit" value="Valider" />
    </form>
    <?php
    //Démarage du code PHP si l'utilisateur à validé le bouton submit:
    if(isset($_POST['valider']))
    {
    echo 'Vous avez selectionné la ligne '.'liste_quartier';
    }
    ?>
    array(1) { [0]=> array(2) { ["quartier"]=> string(9) "LE BLOSNE" ["Count(*)"]=> string(1) "7" } }

    Du coût je n'arrive à afficher le nombre en détaille des 2 quartier avec leur nombre respectif de fois dans la BDD ?
    Je ne pense pas qu"il face ajouter un WHERE car je veux avoir une visibilité sur tout les quartier présent dans le BDD.

    Est-ce quelqu'un aurais une idée sur la SQL?

  8. #8
    Membre éclairé
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 335
    Points : 715
    Points
    715
    Par défaut
    Bonjour,
    Vous devriez faire des vérifications et affichages à chaque étape du code.
    Vous essayez d'afficher des données tout en construisant une liste : en cas d'erreur, le problème peut se situer au niveau de la construction de la liste ou des données récupérées.
    Analysez les deux séparément :

    1) Vous ne poseriez pas cette question : "Est-ce que le contenu d'un liste déroulante, s’adapte en largueur à son contenu sans code supplémentaire?" si vous faisiez un simple test avec une liste ayant un contenu fixe.
    Essayez de construire la liste en vous basant sur un simple tableau : ['nom 1','nom 2','nom 3'].

    2) Affichez le retour de la requête en dehors de la liste.
    Après $stmt->execute();, ajoutez temporairement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var_dump($stmt->fetchAll());
    exit;
    Faîtes ces tests à partir du code du message #5.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bon. En fait, l'erreur vient de moi... (j'ai corrigé mon précédent message)
    D'où ma recommandation de LIRE UN TUTO !..

    Je reprends donc, en ajoutant la captation d'exception PDO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    $sql = ".........."; // la requête SQL
     
    try {
       $stmt = $pdo->prepare($sql);  // PREPARATION
       $stmt->execute(); // EXECUTION
    } catch (PDOException $e){ echo 'Erreur SQL : '. $e->getMessage().'<br/>'; die(); }
     
            while ( $row = $stmt->fetch() ) { // on récupère une ligne à la fois
                var_dump( $row ); // ON VERIFIE ce que contient $row (array)  !
                echo $row['...'];
    		}
    Par contre, tu peux modifier/optimiser ton code de connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //CONNEXION PDO
    try {
        $pdo = new PDO('mysql:host='."$dbhost".';dbname='."$dbname".';'."$dbuser","$dbuser","$dbpass", array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,		// rapport d'erreurs sous forme d'exceptions
            PDO::ATTR_PERSISTENT => true, 						// Connexions persistantes
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES '".$dbchar."'"	// encodage
        ));
     
    } catch (PDOException $e) {
        die($e->getMessage());
    }
    Dernière modification par Invité ; 06/08/2017 à 15h02.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Technicien Hotline
    Inscrit en
    Octobre 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien Hotline
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2015
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Bonsoir à tous,

    Voici mon code avec vos préconisations :

    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
     
    <?php
    //DB PARAMS
    $dbhost = 'localhost';
    $dbuser = 'root';
    $dbpass = '';
    $dbname = 'immeuble';
    $dbchar = 'utf8';
     
    //CONNEXION PDO
    try {
        $pdo = new PDO('mysql:host='."$dbhost".';dbname='."$dbname".';'."$dbuser","$dbuser","$dbpass", array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,		// rapport d'erreurs sous forme d'exceptions
            PDO::ATTR_PERSISTENT => true, 						// Connexions persistantes
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES '".$dbchar."'"	// encodage
        ));
     
    } catch (PDOException $e) {
        die($e->getMessage());
    }
     
    //REQUETE SQL A EXECUTER
    //$sql="SELECT quartier FROM residence";
    //$sql="SELECT Count(`residence`.`Quartier`) AS `Count_Quartier` FROM `residence`";
    $sql="SELECT quartier , Count(*)  FROM residence ";
     
     
    //PREPARATION ET EXECUTION DE LA REQUETE
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
     
     
    ?>
     
    <!-- Liste deroulante MYSQL des Quartier -->
    <form method="post" action="liste deroulante 2.php">
        <select name="liste_quartier">
            <?php
            //SCRIPT DE RETOUR DES ENREGISTREMENTS EN BDD
               while ( $row = $stmt->fetch() ) { // on récupère une ligne à la fois
                var_dump( $row ); // ON VERIFIE ce que contient $row (array)  !
    			var_dump($stmt->fetch());
               echo $row['<OPTION VALUE="'.$result["quartier"].'">'.$result["quartier"].'</OPTION>'];
            }
            ?>
        </select>
        <input type="submit" value="Valider" />
    </form>
    <?php
    //Démarage du code PHP si l'utilisateur à validé le bouton submit:
    if(isset($_POST['valider']))
    {
    echo 'Vous avez selectionné la ligne '.'liste_quartier';
    }
    ?>
    resultat ctrl + U :
    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
    <!-- Liste deroulante MYSQL des Quartier -->
    <form method="post" action="liste deroulante 2.php">
        <select name="liste_quartier">
            array(4) {
      ["quartier"]=>
      string(9) "LE BLOSNE"
      [0]=>
      string(9) "LE BLOSNE"
      ["Count(*)"]=>
      string(1) "7"
      [1]=>
      string(1) "7"
    }
    array(0) {
    }
    <br />
    <b>Notice</b>:  Undefined variable: result in <b>C:\xampp\htdocs\sylvain\liste deroulante 2.php</b> on line <b>42</b><br />
    <br />
    <b>Notice</b>:  Undefined variable: result in <b>C:\xampp\htdocs\sylvain\liste deroulante 2.php</b> on line <b>42</b><br />
    <br />
    <b>Notice</b>:  Undefined index: <OPTION VALUE=""></OPTION> in <b>C:\xampp\htdocs\sylvain\liste deroulante 2.php</b> on line <b>42</b><br />
        </select>
        <input type="submit" value="Valider" />
    </form>
    Actuellement il y les enregistrements suivant dans ma BDD :
    5 fois le quartier "LE BLOSNE"
    2 fois le quartier "BREQUINI"

    Sinon avec le code suivant un affichage se fait dans la liste déroulante :

    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
     
    <?php
    //DB PARAMS
    $dbhost = 'localhost';
    $dbuser = 'root';
    $dbpass = '';
    $dbname = 'immeuble';
    $dbchar = 'utf8';
     
    //PDO CONNECT
    try
    {
        $pdo = new PDO("mysql:host=".$dbhost.";dbname=".$dbname, $dbuser, $dbpass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES '".$dbchar."'"));
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    }
    catch (PDOException $e)
    {
        die($e->getMessage());
    }
     
    //REQUETE SQL A EXECUTER
    //$sql="SELECT quartier FROM residence";
    //$sql="SELECT Count(`residence`.`Quartier`) AS `Count_Quartier` FROM `residence`";
    $sql="SELECT quartier , Count(*)  FROM residence GROUPE by quartier";
     
     
    //PREPARATION ET EXECUTION DE LA REQUETE
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $rows = $stmt->fetchAll();
    var_dump($rows);
    ?>
     
    <!-- Liste deroulante MYSQL des Quartier -->
    <form method="post" action="liste deroulante.php">
        <select name="liste_quartier">
            <?php
            //SCRIPT DE RETOUR DES ENREGISTREMENTS EN BDD
            foreach ($rows as $row)
            {
                echo '<option value="'.$row["quartier"].'">'.$row["quartier"].'</option>';
            }
            ?>
        </select>
        <input type="submit" value="Valider" />
    </form>
    <?php
    //Démarage du code PHP si l'utilisateur à validé le bouton submit:
    if(isset($_POST['valider']))
    {
    echo 'Vous avez selectionné la ligne '.'liste_quartier';
    }
    ?>
    Affichage d'un nom de 2 quartiers sans chiffre
    array(2) { [0]=> array(2) { ["quartier"]=> string(8) "BREQUINI" ["Count(*)"]=> string(1) "2" } [1]=> array(2) { ["quartier"]=> string(9) "LE BLOSNE" ["Count(*)"]=> string(1) "5" } }

    la requête est correcte mais pas de chiffres dans la liste déroulante.

    Quelqu'un aurait une idée?

  11. #11
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Salut,

    la requête telle que vous avez posté est bien une erreur de copier-coller non ? SELECT quartier , Count(*) FROM residence GROUPE by quartier plutôt GROUP BY non ? Faudrait utiliser un alias pour récupérer facilement la valeur de COUNT(*) comme ça SELECT quartier , COUNT(*) AS total FROM residence GROUP BY quartier, dans ce cas le "chiffre" sera dans $row['total']. Je n'ai aucune idée de comment vous voulez afficher le chiffre.


    PS: Comme préconisé par la doc http://php.net/manual/fr/mysqlinfo.concepts.charset.php , pour une version de PHP à partir de 5.3.6, il faut préférer ;charset=utf8 dans le DSN et non PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8" pour passer l'encodage
    Le bienfait n'est jamais perdu

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
               while ( $row = $stmt->fetch() ) { // on récupère une ligne à la fois
                var_dump( $row ); // ON VERIFIE ce que contient $row (array)  !
    			var_dump($stmt->fetch());
               echo $row['<OPTION VALUE="'.$result["quartier"].'">'.$result["quartier"].'</OPTION>'];


    • Il ne faut pas copier-coller n'importe quoi, n'importe comment.
    • Et quand on ne sait pas à quoi sert une fonction, on fait une recherche.

    • les var_dump() ne servent qu'à VISUALISER les array, juste pour savoir ce qu'ils contiennent : donc juste EN TEST !
      Il faut les enlever après !
    • var_dump($stmt->fetch()); NON ! Là, tu lis la ligne SUIVANTE !
    • echo $row['<OPTION ......... Là, c'est du grand n'importe quoi...

    Ensuite, apprends à LIRE et COMPRENDRE les messages d'erreur :
    Notice: Undefined variable: result in C:\xampp\htdocs\sylvain\liste deroulante 2.php on line 42
    .....
    • $result n'existe plus. Maintenant, c'est $row.

    Coder ne s'invente pas !
    Je répète : LIS UN TUTO !!



    N.B. Je comprends que "coder" n'est pas ton métier.
    Mais alors :
    • soit tu APPRENDS (pour comprendre)
    • soit tu confies le travail à un professionnel !

    Si tu ne le fait pas, non seulement TU vas perdre du temps, mais tu vas aussi NOUS en faire perdre, car tu ne comprendras pas les corrections qu'on te donne.
    Dernière modification par Invité ; 08/08/2017 à 08h33.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Technicien Hotline
    Inscrit en
    Octobre 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien Hotline
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2015
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    [*]les var_dump() ne servent qu'à VISUALISER les array, juste pour savoir ce qu'ils contiennent : donc juste EN TEST !
    Il faut les enlever après ![*]var_dump($stmt->fetch()); NON ! Là, tu lis la ligne SUIVANTE ![*]echo $row['<OPTION ......... Là, c'est du grand n'importe quoi...

    .
    Bonjour jreaux

    je suis désolé d'avoir mal compris quand tu as mis le code
    echo $row['...'];
    . j'ai pensé que les "......" était le contenu intégral de mon code après la commande echo.

    Effectivement je ne comprends pas pourquoi j'ai placé la ligne de code var_dump($stmt->fetch()); à l'endroit où je l'ai placé. N’importe quoi

    je sais le rôle de la commande var_dump() et je trouve qu'elle est le pratique pour mon cas pour voir le résultat de la requête SQL surtout quand la liste déroulant est en panne pour afficher les données.

    Désolé de te faire perdre ton temps.

    Sinon j'ai bien lu le tuto sur la connexion PDO (quand j'ai copier le texte du tuto problème de syntax, donc je suis revenu avec le code de jreaux62)
    Donc voici mon code en espérant froisser personne.

    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
     
    <?php
    //DB PARAMS
    $dbhost = 'localhost';
    $dbuser = 'root';
    $dbpass = '';
    $dbname = 'immeuble';
    $dbchar = 'utf8';
     
    //CONNEXION PDO
    try {
        $pdo = new PDO('mysql:host='."$dbhost".';dbname='."$dbname".';'."$dbuser","$dbuser","$dbpass", array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,		// rapport d'erreurs sous forme d'exceptions
            PDO::ATTR_PERSISTENT => true, 						// Connexions persistantes
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES '".$dbchar."'"	// encodage
        ));
     
    } catch (PDOException $e) {
        die($e->getMessage());
    }
    //REQUETE SQL A EXECUTER
     
    $sql="SELECT quartier , Count(*) AS total FROM residence GROUP by quartier";
     
     
    //PREPARATION ET EXECUTION DE LA REQUETE
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $rows = $stmt->fetchAll();
    ?>
     
    <!-- Liste deroulante MYSQL des Quartier -->
    <form method="post" action="liste deroulante 2.php">
        <select name="liste_quartier">
            <?php
            //SCRIPT DE RETOUR DES ENREGISTREMENTS EN BDD
            foreach ($rows as $row)
            {
                echo '<option value="'.$row["quartier"].''.$row["total"].'">'.$row["quartier"].'</option>';
            }
            ?>
        </select>
        <input type="submit" value="Valider" />
    </form>
    <?php
    //Démarage du code PHP si l'utilisateur à validé le bouton submit:
    if(isset($_POST['valider']))
    {
    echo 'Vous avez sélectionné la ligne '.'liste_quartier';
    }
    ?>
    Je pense que je me suis trompé dans la syntax pour afficher une deuxième colonne dans ma liste déroulante, puisque cette dernière ne s'affiche pas.

    CTRL + U
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    <!-- Liste deroulante MYSQL des Quartier -->
    <form method="post" action="liste deroulante 2.php">
        <select name="liste_quartier">
            <option value="BREQUINI2">BREQUINI</option><option value="LE BLOSNE5">LE BLOSNE</option>    </select>
        <input type="submit" value="Valider" />
    </form>


    Principe de la présentation de la liste déroulante sur 2 colonnes:

    colonne 1 : nom quartier
    colonne 2 : nbr de fois ce quartier dans la table résidence

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

    OK. Alors tout va bien

    Regarde à chaque fois le code html généré :
    • "Ctrl" + "U"
    • ou clic droit -> code source de la page

    Tu aurais vu où se situe l'erreur :
    Tu y étais presque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        <select name="liste_quartier">
    <?php
            //SCRIPT DE RETOUR DES ENREGISTREMENTS EN BDD
            foreach ($rows as $row)
            {
                echo '<option value="'.$row['quartier'].'">'.$row['quartier'].' ('.$row['total'].')</option>';
            }
    ?>
        </select>

  15. #15
    Membre à l'essai
    Homme Profil pro
    Technicien Hotline
    Inscrit en
    Octobre 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien Hotline
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2015
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Bonsoir,

    mon code à évoluer dans le sens ou la requête SQL s’exécute sans erreur et me retourne bien dans un Alias "total" le nombre de quartier pour un quartier donné.

    La liste déroulante affiche bien tous les quartiers avec l'allias mais dans la même colonne.

    Comment faire apparaitre une deuxième colonne avec l'Alias? (a moins que soit déjà le cas ?)

    Voici mon code à jour :

    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
     
    <?php
    //DB PARAMS
    $dbhost = 'localhost';
    $dbuser = 'root';
    $dbpass = '';
    $dbname = 'immeuble';
    $dbchar = 'utf8';
     
    //CONNEXION PDO
    try {
        $pdo = new PDO('mysql:host='."$dbhost".';dbname='."$dbname".';'."$dbuser","$dbuser","$dbpass", array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,		// rapport d'erreurs sous forme d'exceptions
            PDO::ATTR_PERSISTENT => true, 						// Connexions persistantes
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES '".$dbchar."'"	// encodage
        ));
     
    } catch (PDOException $e) {
        die($e->getMessage());
    }
    //REQUETE SQL A EXECUTER
     
    $sql="SELECT quartier , Count(*) AS total FROM residence GROUP by quartier";
     
     
    //PREPARATION ET EXECUTION DE LA REQUETE
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $rows = $stmt->fetchAll();
    ?>
     
    <!-- Liste deroulante MYSQL des Quartier -->
    <form method="post" action="liste deroulante 2.php">
        <select name="liste_quartier">
            <?php
            //SCRIPT DE RETOUR DES ENREGISTREMENTS EN BDD
            foreach ($rows as $row)
            {
    			echo '<option value="'.$row["quartier"].'">'.$row["quartier"].' '.$row["total"].' </option>';
            }
            ?>
        </select>
        <input type="submit" value="Valider" />
    </form>
    <?php
    //Démarage du code PHP si l'utilisateur à validé le bouton submit:
    if(isset($_POST['valider']))
    {
    echo 'Vous avez selectionné la ligne '.'liste_quartier';
    }
    ?>

  16. #16
    Invité
    Invité(e)
    Par défaut
    Je ne vois pas ce que tu appelles "2eme colonne"...

    Le code génère une "liste déroulante".
    Point.

  17. #17
    Membre à l'essai
    Homme Profil pro
    Technicien Hotline
    Inscrit en
    Octobre 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien Hotline
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2015
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Bonsoir jreaux62,

    Nos messages ont du ce croiser car quand j'ai fait mon message précédent je n'avais pas vu le tien.

    Actuellement la liste déroulante affiche bien la liste des quartiers avec leurs nombre de fois qu'il sont présent dans la base de données.

    le code suivant fait bien afficher le nom du quartier sans le champs total pour aller dans la bdd :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo 'Vous avez sélectionné la ligne '.$_POST['liste_quartier'];
    Avant de passer à l'étape d'ajouter un quartier nom présent dans la bdd, j’aurais une question d’esthétique.
    Je voudrais que le champs 'total' apparaisse dans le déplier de la liste déroulante.
    Une fois que l'utilisateur à choisi le quartier, est-il possible que le champs total n’apparaisse plus?
    De façon à avoir une concordance entre les données affichées et celle envoyées à la bdd.

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

    oui.
    Contrairement à ce que tu as fait (et à la "logique chronologique"), il faut effectuer le traitement du retour ($_POST) AVANT l'affichage de la liste déroulante.

  19. #19
    Membre à l'essai
    Homme Profil pro
    Technicien Hotline
    Inscrit en
    Octobre 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien Hotline
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2015
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Bonsoir,

    Voici mon nouveau code
    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
     
    <?php
    //DB PARAMS
    $dbhost = 'localhost';
    $dbuser = 'root';
    $dbpass = '';
    $dbname = 'immeuble';
    $dbchar = 'utf8';
     
    //CONNEXION PDO
    try {
        $pdo = new PDO('mysql:host='."$dbhost".';dbname='."$dbname".';'."$dbuser","$dbuser","$dbpass", array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,		// rapport d'erreurs sous forme d'exceptions
            PDO::ATTR_PERSISTENT => true, 						// Connexions persistantes
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES '".$dbchar."'"	// encodage
        ));
     
    } catch (PDOException $e) {
        die($e->getMessage());
    }
     
    //REQUETE SQL A EXECUTER
    $sql="SELECT quartier , Count(*) AS total FROM residence GROUP by quartier";
     
    //PREPARATION ET EXECUTION DE LA REQUETE
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $rows = $stmt->fetchAll();
    //var_dump($rows);
    ?>
     
    <!-- Liste deroulante MYSQL des Quartier -->
    <form method="post" action="listeDD.php">
    <select name="liste_quartier" onchange=" form1.submit();">
    <option value=-1>-- Choisissez -- </option> <!-- il faut cette ligne pour avoir obliagtoirement un changement -->
            <?php
            //SCRIPT DE RETOUR DES ENREGISTREMENTS EN BDD
    		{    
    		echo '<option value="'.$rows['quartier'].'">'.$rows['quartier'].' ('.$rows['total'].')</option>';
    		if($liste1==$rows['quartier']) { echo "selected"; }//garder la selection lors du réaffichage
            echo ">".$rows['']."</option>\n";
            }
    		?>
     
    		<?php
    if($liste1 != -1){ //si on a fait un choix
    //on refait une requette avec une condition
    $requete = "SELECT quartier , FROM residence GROUP by quartier WHERE quartier='".$liste1."'";
    $execution_requete = mysql_query($requete);
     
    // on affiche les valeurs correspondantes au nom selectionné, pas besoin de boucle while, on ne récupère qu'un seul enregistrement
    $total = mysql_fetch_array($execution_requete);
    echo $row['quartier'];
    }  
    ?>			
        </select>
        <input type="submit" value="Valider" />
    </form>
     
     
     
    <?php
    if(isset($_POST['liste1'])){
    	//si la liste a été "postée" c'est à dire choix fait
    	$liste1=$_POST['liste1'];
    }else{
    	$liste1=-1;
    }
     
    //Démarage du code PHP si l'utilisateur à validé le bouton submit
    if(isset($_POST['valider']))
    {
    echo 'Vous avez selectionné la ligne '.$_POST['liste_quartier'];
    }
    ?>
    Avec ce code la liste déroulante affiche une ligne -- Choisissez -- et une ligne avec ()

    Étant donné que les noms de quartier ne sont pas présent dans liste déroulante je ne peu point testé mon code.

    affichage CTR - U

    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
     
     
    <!-- Liste deroulante MYSQL des Quartier -->
    <form method="post" action="listeDD.php">
    <select name="liste_quartier" onchange=" form1.submit();">
    <option value=-1>-- Choisissez -- </option> <!-- il faut cette ligne pour avoir obliagtoirement un changement -->
            <br />
    <b>Notice</b>:  Undefined index: quartier in <b>C:\xampp\htdocs\sylvain\listeDD.php</b> on line <b>38</b><br />
    <br />
    <b>Notice</b>:  Undefined index: quartier in <b>C:\xampp\htdocs\sylvain\listeDD.php</b> on line <b>38</b><br />
    <br />
    <b>Notice</b>:  Undefined index: total in <b>C:\xampp\htdocs\sylvain\listeDD.php</b> on line <b>38</b><br />
    <option value=""> ()</option><br />
    <b>Notice</b>:  Undefined index: quartier in <b>C:\xampp\htdocs\sylvain\listeDD.php</b> on line <b>39</b><br />
    <br />
    <b>Notice</b>:  Undefined variable: liste1 in <b>C:\xampp\htdocs\sylvain\listeDD.php</b> on line <b>39</b><br />
    selected<br />
    <b>Notice</b>:  Undefined index:  in <b>C:\xampp\htdocs\sylvain\listeDD.php</b> on line <b>40</b><br />
    ></option>
     
    		<br />
    <b>Notice</b>:  Undefined variable: liste1 in <b>C:\xampp\htdocs\sylvain\listeDD.php</b> on line <b>45</b><br />
    <br />
    <b>Notice</b>:  Undefined variable: liste1 in <b>C:\xampp\htdocs\sylvain\listeDD.php</b> on line <b>47</b><br />
    <br />
    <b>Deprecated</b>:  mysql_query(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in <b>C:\xampp\htdocs\sylvain\listeDD.php</b> on line <b>48</b><br />
    <br />
    <b>Warning</b>:  mysql_fetch_array() expects parameter 1 to be resource, boolean given in <b>C:\xampp\htdocs\sylvain\listeDD.php</b> on line <b>51</b><br />
    <br />
    <b>Notice</b>:  Undefined variable: row in <b>C:\xampp\htdocs\sylvain\listeDD.php</b> on line <b>52</b><br />
     
        </select>
        <input type="submit" value="Valider" />
    </form>
    Pourquoi le champs de donnée quartier n'est plus reconnu?

    Pour info j'ai déjà rectifié le code grâce à CTRL + U, merci à vous.
    Mais là je sèche, je ne vois pas comment y remédier encore plus.

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

    Bon. Je pense que tu as assez galéré...
    Voici un code correct.

    J'ai bien séparé chaque traitement, pour que tu comprennes bien chaque étape.

    Fichier connexion-pdo.php :
    on met tout le code de connexion dans un fichier externe, pour ne pas être obligé de le recopier à chaque fois.
    Code php : 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
    <?php
    // Connexion à la base de données
    // -----------------------------------
    //DB PARAMS
    $dbhost = 'localhost';
    $dbuser = 'root';
    $dbpass = '';
    $dbname = 'immeuble';
    $dbchar = 'utf8';
    // -----------------------------------
    //CONNEXION PDO
    try {
        $pdo = new PDO('mysql:host='."$dbhost".';dbname='."$dbname".';'."$dbuser","$dbuser","$dbpass", array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,		// rapport d'erreurs sous forme d'exceptions
            PDO::ATTR_PERSISTENT => true, 					// Connexions persistantes
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES '".$dbchar."'"	// encodage
        ));
     
    } catch (PDOException $e) {
        die($e->getMessage());
    }
    // -----------------------------------
    Fichier de travail listeDD.php :
    Code php : 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
    <?php
    // -----------------------------------
    // Connexion à la base de données
    require(__DIR__.'/connexion-pdo.php'); // on inclus le fichier externe
    // -----------------------------------
    // TRAITEMENT DU FORMULAIRE (si posté)
    if( isset($_POST['choix_quartier']) )
    {
    	$choix_quartier = $_POST['choix_quartier']; // choix fait
    } else {
    	$choix_quartier = -1;
    }
    // -----------------------------------
    ?>
    <!DOCTYPE HTML>
    <html lang="fr">
    <head>
    	<meta charset="utf-8" />
    	<!-- ... -->
    </head>
    <body>
     
    <form method="post" action="listeDD.php">
    	<!-- Liste déroulante des Quartiers -->
    	<select name="choix_quartier">
    		<option value="-1"<?php if($choix_quartier==-1){ echo ' selected="selected"'; } ?>>-- Choisissez -- </option>
    <?php
    	// ----------------
    	// REQUETE SQL
    	$sql = "SELECT quartier, Count(*) AS total FROM residence GROUP by quartier";
    	// ----------------
    	// PREPARATION ET EXECUTION DE LA REQUETE
    	$stmt_quartier = $pdo->prepare($sql);
    	$stmt_quartier->execute();
    	// ----------------
    	while( $row = $stmt_quartier->fetch() ) // on récupère une ligne à la fois
    	{ 
    ?>
    		<option value="<?php echo $row['quartier']; ?>"<?php if($choix_quartier==$row['quartier']){ echo ' selected="selected"'; } ?>><?php echo $row['quartier'].' ('.$row['total'].')'; ?></option>
    <?php
    	}
    	// ----------------
    ?>
        </select>
        <input type="submit" value="Valider" />
    </form>
     
    <?php
    // -----------------------------------
    // AFFICHAGE du résultat (si on a fait un choix)
    if($choix_quartier != -1)
    { 
    ?>
    	<p>Vous avez sélectionné le quartier : <?php echo $choix_quartier; ?></p>
    <?php
    	// ----------------
    	// on peut maintenant AFFICHER la liste des RESIDENCE de CE QUARTIER
    	$sql = "SELECT * FROM residence WHERE quartier = :choix_quartier";
    	// ----------------
    	// PREPARATION ET EXECUTION DE LA REQUETE
    	$stmt_residence = $pdo->prepare($sql);
    	$stmt_residence->execute( array(
    		':choix_quartier' => $choix_quartier
    	) );
    ?>
    	<div id="lisitng-residences">
    <?php
    	// ----------------
    	while( $row = $stmt_residence->fetch() ) // on récupère une ligne à la fois
    	{    
    ?>
    		<div>
    			<?php echo $row['residence']; ?> <!-- ICI, on affiche les infos de cette residence -->
    		</div>
    <?php
    	}
    	// ----------------
    ?>
    	</div>
    <?php
    }  
    // -----------------------------------
    ?>
     
    </body>
    </html>

    Voici l'AUTRE méthode (juste pour ton information) :
    Code php : 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
    <form method="post" action="listeDD.php">
    	<!-- Liste déroulante MYSQL des Quartier -->
    	<select name="choix_quartier">
    		<option value="-1"<?php if($choix_quartier==-1){ echo ' selected="selected"'; } ?>>-- Choisissez -- </option>
    <?php
    	// ----------------
    	// REQUETE SQL
    	$sql="SELECT quartier, Count(*) AS total FROM residence GROUP by quartier";
    	// ----------------
    	// PREPARATION ET EXECUTION DE LA REQUETE
    	$stmt = $pdo->prepare($sql);
    	$stmt->execute();
    	// ----------------
    	$rows = $stmt->fetchAll(); // on récupère TOUTES les lignes
    	// ----------------
    	foreach( $rows as $row ) // une ligne à la fois
    	{ 
    ?>
    		<option value="<?php echo $row['quartier']; ?>"<?php if($choix_quartier==$row['quartier']){ echo ' selected="selected"'; } ?>><?php echo $row['quartier'].' ('.$row['total'].')'; ?></option>
    <?php
    	}
    	// ----------------
    ?>
        </select>
        <input type="submit" value="Valider" />
    </form>
    Dernière modification par Invité ; 15/08/2017 à 09h34.

Discussions similaires

  1. [XL-2010] Liste déroulante dynamique avec multi séléction
    Par Tralalala35 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/01/2016, 13h38
  2. Liste déroulante dynamique avec filtre
    Par merlinus3000 dans le forum Excel
    Réponses: 7
    Dernier message: 05/01/2014, 18h16
  3. [Wiki] Ajouter liste déroulante dynamique
    Par nadia lydia dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 13/01/2009, 08h59
  4. [AJAX] Est-ce réalisable ? 4 liste déroulante dynamique avec bd
    Par Tomdu85 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/05/2008, 11h34
  5. Un souci avec les listes déroulantes dynamiques
    Par namstou3 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 04/02/2008, 17h08

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