Récupérer tous les enregistrements d'une base de données

Résolu
philippef -  
 philippef -
Bonjour,

Mon problème est simple!!
je voudrai afficher des éléments de chaque enregistrement d'une table dans une liste déroulante.
voici ce que j'ai écris. Mais je ne sais pas aller plus loin
Je sais qu'il faut faire une boucle mais ....
<select name="nationalite">
<?php 
$sql = $cnx->prepare("SELECT * FROM membres ORDER BY nom, prenom ");
$sql->execute(array($id,$nom,$prenom));

?> 
<option value=<?php echo $id; ?><?php echo $nom $prenom; ?></option>
</select>


Merci d'avance

4 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    Avant tout... je t'invite à lire (et à appliquer) le contenu de ces deux liens
    https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
    https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

    Ensuite, deux possibilités :
    Soit tu fais une boucle "WHILE" en faisant le FETCH du résultat de ta requête
    Soit tu fais directement un FETCHALL puis une boucle FOREACH

    Vu que tu savais déjà qu'il fallait faire une boucle... je suis étonné que tu n'aies pas été capable de trouver (parmi les millions de tutos existant à ce sujet) de réponse sur internet (ou même juste dans ce forum)

    Pour cette fois je vais te donner le code...histoire de ne pas perdre de temps et devoir revenir t'expliquer morceau par morceau..
    mais sache que ce n'est pas comme ça qu'on fait ici... on est là pour aider.. par pour donner du code tout cuit !

    1 - Fichier de connexion à la bdd avec activation des erreurs PDO
    <?php
    // Fichier de connexion à la bdd - cnxBdd.php
    // tu penseras à modifier les variables  host, user, password et dbname pour correspondre à ton site
    try{
     $bdd =new PDO('mysql:host=localhost; dbname=mabdd; charset=utf8', 'user', 'password');
     // Activation des erreurs PDO
     $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
     $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    } catch(PDOException $e) {
        die('Erreur : ' . $e->getMessage());
    }
    ?>
    


    2 - Le code de ta page :
    <?php
    // au début de ton fichier php :
    //affichage des erreurs PHP
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
    
    // connexion à la bdd
    require_once "cnxBdd.php"; // tu places la connexion à ta bdd dans un fichier à par et tu en fais un include ou un require
    
    //préparation de la requête et des variables
     $sql = "SELECT * FROM membres ORDER BY nom, prenom";
    //Execution de la requete
    try{
      $requete = $bdd->prepare($sql) ;
      $requete->execute();
      $arr_membres = $requete->fetchAll(); // on stocke le resultat de la requete dans un array
    }catch(Exception $e){
      // en cas d'erreur dans la requete:
       echo " Erreur ! ".$e->getMessage();
    }
    
    // ... le reste de ton code php si il y en a
    
    
    
    
    // puis fin du PHP. maintenant on fait le html
    ?>
    
    <!-- le code html -->
    <html>
      <head> 
         <meta charset="utf-8">
         <title> Titre de ta page </title>
          <!--  autres balises meta et include CSS ...  -->
      </head>
      <body>
          
          <!--
          
           Le code HTML de ta page si il y en a avant ta liste déroulante
          
          -->
      
        <select name="nationalite">
          <?php 
          if(!empty($arr_membres)){ // on s'assure que la variable n'est pas vide
            foreach($arr_membres as $M){ // on boucle dessus à l'aide d'un foreach
              echo '<option value="'.$M['id'].'">'$M['nom'] . ' ' . $M['prenom'].'</option>'; // on affiche les fonnées 
            }
          }
          ?> 
        </select>
        
          <!--
          
             Suite de ton code html ...
          
          -->
        
      </body>
     </html>
     

    0
  2. philippef
     
    Bonjour,
    concernant la connexion j'ai le même fichier de connexion à la bdd et je n'ai pas de soucis car j'ai déjà des requêtes de sélection, de mise à jour et de suppression qui fonctionnent normalement.

    en reprenant la proposition de Jordane45 suivante :
     $sql = "SELECT * FROM membres ORDER BY nom, prenom";
    try {
    	$requete = $cnx->prepare($sql);
    	$requete->execute();
    	$arr_membres = $requete->fetchAll();// on stocke le resultat de la requete dans un array
    }
    catch(Exception $e){
      // en cas d'erreur dans la requete:
       echo " Erreur ! ".$e->getMessage();
    }
    if(!empty($arr_membres)){ // on s'assure que la variable n'est pas vide
    	foreach($arr_membres as $M){ // on boucle dessus à l'aide d'un foreach
            	echo '<option value="'.$M['id'].'">'$M['nom'] . ' ' . $M['prenom'].'</option>'; // on affiche les fonnées 
    
            }
    }
    
    ?>
    </select>
    

    j'ai le message suivant
    Parse error: syntax error, unexpected '$M' (T_VARIABLE), expecting ',' or ';' in C:\Weblocal\Sites\Jumelage\fr\membres.php on line 107
    

    la ligne 107 correspond à :
    echo '<option value="'.$M['id'].'">'$M['nom'] . ' ' . $M['prenom'].'</option>'; // on affiche les données 
    

    j'ai essayé plusieurs modifs mais rien ne marche !!
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Un oublie de "point"
      echo '<option value="'.$M['id'].'">' . $M['nom'] . ' ' . $M['prenom'].'</option>';
      
      0
  3. philippef
     
    Toujours un souci avec echo ...
    donc j'ai écris :
    echo '<option value="'.$M['id'].'">'; echo $M['nom'].' '.$M['prenom'].'</option>';
    

    et ça marche !!

    Désolé mais je ne vois pas la roue crantée pour indiquer RESOLU
    0
  4. philippef
     
    j'ai oublié : MERCI pour l'aide
    0