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

Résolu/Fermé
philippef - 6 déc. 2019 à 11:59
 philippef - 11 déc. 2019 à 19:56
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

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
6 déc. 2019 à 12:25
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
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
11 déc. 2019 à 14:13
Un oublie de "point"
echo '<option value="'.$M['id'].'">' . $M['nom'] . ' ' . $M['prenom'].'</option>';
0
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
j'ai oublié : MERCI pour l'aide
0