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 :

Faire une liste déroulante PHP avec des données de BDD


Sujet :

PHP & Base de données

  1. #1
    Membre régulier Avatar de Darkoos0410
    Homme Profil pro
    Technicien ingénierie réseaux et voix
    Inscrit en
    Septembre 2019
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien ingénierie réseaux et voix

    Informations forums :
    Inscription : Septembre 2019
    Messages : 119
    Points : 93
    Points
    93
    Par défaut Faire une liste déroulante PHP avec des données de BDD
    Bonjour,

    Je voudrais créer une liste déroulante en php, mais je voudrais qu'elle reprennes les données qui sont dans ma table.
    J'arrive déjà a afficher toute les informations de la table avec ce script, j'ai aussi commencer a créer une liste déroulante mais j'arrive pas a mettre les information dans la liste déroulantes.

    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
    <html>
        <head><title>Liste des capteurs </title></head>
        <link href="css/" rel="stylesheet" media="all" type="text/css">
        <body>
            <h1>Liste des capteurs : </h1>
     
    		<form name="connexion" method="post" action="traite_formulaire.php">
    		 </br>
    		 </br>
    		 <select name="Capteur">
    			<option>--Veuillez choisir un capteur--</option>
    			<option>Num_boitiers</option>
    			<option>capteur 2</option>
    		 </select>
    		 </br>
    		 </br>
    		  <input type="submit" name="valider" value="OK"/>
              <input type='submit' name='annuler' value='ANNULER'/>
    		 </br>
    		 </br>
            </form>
     
            <?php
            // on se connecte à MySQL et on sélectionne la base
            $conn = new mysqli('localhost', 'root', '', 'air_exterieur');
            if ($conn->connect_errno)
            {
                echo "Echec lors de la connexion à MySQL : " . $conn->connect_error;
            }
     
            // On créé la requête
            $req = "SELECT * FROM boitier_qae ORDER BY Num_boitiers";
            // on envoie la requête
            $res = $conn->query($req);
     
            // on va scanner tous les tuples un par un
            echo "<table class='paleBlueRows' >";
                    while($data = mysqli_fetch_array($res))
            {
              // on affiche les résultats
              echo "<tr>
              <td>".$data['Num_boitiers']."</td> 
    		  <td>".$data['Date_Heure']."</td>
              <td>".$data['PM0_3']."</td>
    		  <td>".$data['PM0_5']."</td>
    		  <td>".$data['PM1']."</td>
    		  <td>".$data['PM2_5']."</td>
    		  <td>".$data['PM5']."</td>
    		  <td>".$data['PM10']."</td>
    		  <td>".$data['Latitude']."</td>
    		  <td>".$data['Longitude']."</td>";
              echo "</tr>" ;
     
            }
            echo "</table>";
     
            // on ferme la connexion
            $conn->close();
     
            ?>
        </body>
    </html>
    Merci d'avance pour vos réponse

    Baptiste

  2. #2
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 749
    Points : 2 962
    Points
    2 962
    Par défaut
    Bonjour

    Dans le code que tu proposes, à partir de la ligne 23, tu as donc écris un code PHP. Est-ce que celui-ci fonctionne et affiche correctement la table ?

    Si oui, le reste sera un jeu d'enfant.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  3. #3
    Membre averti
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Points : 433
    Points
    433
    Par défaut
    Organisez votre code afin de le réutiliser dans d'autres pages.
    Exemple pour la connexion à la base de données, faîtes le une seule dans un fichier ou une fonction afin de le réutiliser dans tout votre projet.

    Séparez le code PHP de l'affichage (HTML). C'est à dire enregistrez le code PHP et le Code HTML dans des fichiers séparés. et faites des includes de fichiers.
    Dans le code HTML, utiliser du PHP que pour afficher vos variables.
    if ... endif
    foreach ..... endforeach
    while .... endwhile


    Voici comment alimenter votre menu déroulant dynamiquement et aussi mieux organiser votre projet

    fichier : connexion_bd.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    	$conn = new mysqli('localhost', 'root', '', 'air_exterieur');
    	if ( $conn->connect_errno ) die ('Echec lors de la connexion à MySQL : ' . $conn->connect_error);
    ?>
    fichier capteurs_data.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    	$req = 'SELECT Num_capteurs, Date_Heure, PM0_3, PM0_5, PM1, PM2_5, PM5, PM10, Latitude, Longitude ';
    	$req .= 'FROM boitier_qae ';
    	$req .= 'ORDER BY Num_boitiers ';
     
    	$capteurs = $conn->query($req);
    	$conn->close(); 
    ?>
    fichier : capteurs_affichage.php
    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
     
    <html>
    <head><title>Liste des capteurs </title></head>
    <link href="style.css" rel="stylesheet" media="all" type="text/css">
    <body>
     
    	<h1>Liste des capteurs : </h1>
     
    	<form name="connexion" method="post" action="traite_formulaire.php">
    	</br>
    	</br>
     
    	<select name="Capteur">
    		<option>--Veuillez choisir un capteur--</option>
    		<?php if ( !empty($capteurs): ?>
    		<?php while($capteur = mysqli_fetch_object($capteurs)): ?>
    			<option value="<?php echo $capteur->Num_capteurs ?>">Capteur <?php echo $capteur->Num_capteurs ?></option>
    		<?php endwhile ?>
    		<?php endif ?>
    	</select>
     
    	</br>
    	</br>
     
    	<input type="submit" name="valider" value="OK" />
    	<input type="submit" name="annuler" value="ANNULER" />
     
    	</br>
    	</br>
    	</form>
     
    	<?php if ( !empty($capteurs): ?>
    	<table class="paleBlueRows">;
    	<?php while($capteur = mysqli_fetch_object($capteurs)): ?>
    	<tr>
    		<td><?php echo $capteur->Num_capteurs ?></td>
    		<td><?php echo $capteur->Date_Heure ?></td>
    		<td><?php echo $capteur->PM0_3 ?></td>
    		<td><?php echo $capteur->PM0_5 ?></td>
    		<td><?php echo $capteur->PM1 ?></td>
    		<td><?php echo $capteur->PM2_5 ?></td>
    		<td><?php echo $capteur->PM5 ?></td>
    		<td><?php echo $capteur->PM10 ?></td>
    		<td><?php echo $capteur->Latitude ?></td>
    		<td><?php echo $capteur->Longitude ?></td>
    	</tr>
    	<?php endwhile ?>
    	</table>
    	<?php endif ?>
     
    </body>
    </html>
    fichier final: capteurs.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    	include 'connexion_bd.php';
    	include 'capteurs_data.php';
    	include 'capteurs_affichage.php';
    ?>

  4. #4
    Membre régulier Avatar de Darkoos0410
    Homme Profil pro
    Technicien ingénierie réseaux et voix
    Inscrit en
    Septembre 2019
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien ingénierie réseaux et voix

    Informations forums :
    Inscription : Septembre 2019
    Messages : 119
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par cavo789 Voir le message
    oui j'arrive à afficher toutes les informations de la table de la BDD

    Citation Envoyé par manzeki Voir le message
    Et du coup avec ce code on peut ajouter ou supprimer un capteur et la liste déroulante s'actualisera automatiquement ?
    Les includes je ne les mets que pour les fichiers php ou je les mets aussi pour les fichiers html ?
    Et pourquoi pour la requête SQL on ne peut pas faire qu'une ligne, en faisant SELECT * FROM boitier_qae ORDER BY Num_boitiers ; vu que je veux sélectionner toute la table ?
    À la ligne 15 il dit qu'il y a une erreur mais j'arrive pas à la trouver

  5. #5
    Membre averti
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Points : 433
    Points
    433
    Par défaut
    Citation Envoyé par Darkoos0410 Voir le message
    oui j'arrive à afficher toutes les informations de la table de la BDD
    Et du coup avec ce code on peut ajouter ou supprimer un capteur et la liste déroulante s'actualisera automatiquement ?
    C'était bien l'objet de votre post, n'est-ce pas ? Sinon pourquoi réposer la même question ?

    Citation Envoyé par Darkoos0410 Voir le message
    Et pourquoi pour la requête SQL on ne peut pas faire qu'une ligne, en faisant SELECT * FROM boitier_qae ORDER BY Num_boitiers ; vu que je veux sélectionner toute la table ?
    C'est une concaténation que j'ai faite pour des raisons de clarté simplement afin d'éviter une longue requête sur une seule ligne.
    Vous pouvez aussi le faire en une seule ligne.
    Par contre évitez l'usage de l'étoile * dans vos requêtes.
    Faîtes un SELECT du strict minimum de colonnes dont vous avez besoin. Comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT nom, prenom FROM....
    Listez toutes les colonnes consomme de la bande passante et du temps CPU

    Citation Envoyé par Darkoos0410 Voir le message
    À la ligne 15 il dit qu'il y a une erreur mais j'arrive pas à la trouver
    Je n'ai pas eu le temps de tester le code, montrez simplement le message d'erreur.

    Citation Envoyé par Darkoos0410 Voir le message
    Les includes je ne les mets que pour les fichiers php ou je les mets aussi pour les fichiers html ?
    Les deux.

    Apprenez à organiser vos projets en multiple fichiers pour des raisons de maintenance, de réutilisation, de clarté, de débogage
    Première règle : Séparez vos codes HTML, codes CSS, codes PHP dans des fichiers distincts. Inspirez vous de l'exemple que je vous ai codé.
    Vous ne pouvez pas faire un include avec des fichiers dont l'extension n'est pas .php
    Assurez vous que vos fichiers HTML ont pour extension .php, même s'ils ne contienent que du HTML.

    Si vos pages contiennent la même en-tête et le même pieds de page, pour éviter des copies coller infinie, mettez simplement votre entête dans un fichier entete.php ou menu.php ou header.php
    Et le pieds de page dans footer.php ou pieds_page.php.....
    Puis faîtes des includes simplement.

  6. #6
    Membre régulier Avatar de Darkoos0410
    Homme Profil pro
    Technicien ingénierie réseaux et voix
    Inscrit en
    Septembre 2019
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien ingénierie réseaux et voix

    Informations forums :
    Inscription : Septembre 2019
    Messages : 119
    Points : 93
    Points
    93
    Par défaut
    [QUOTE=manzeki;11684845]C'était bien l'objet de votre post, n'est-ce pas ? Sinon pourquoi réposer la même question ?


    C'est une concaténation que j'ai faite pour des raisons de clarté simplement afin d'éviter une longue requête sur une seule ligne.
    Vous pouvez aussi le faire en une seule ligne.
    Par contre évitez l'usage de l'étoile * dans vos requêtes.
    Faîtes un SELECT du strict minimum de colonnes dont vous avez besoin. Comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT nom, prenom FROM....
    Listez toutes les colonnes consomme de la bande passante et du temps CPU


    Je n'ai pas eu le temps de tester le code, montrez simplement le message d'erreur.

    Il met que le while n'est pas bon

  7. #7
    Membre averti
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Points : 433
    Points
    433
    Par défaut
    [QUOTE=Darkoos0410;11685745]
    Citation Envoyé par manzeki Voir le message

    Il met que le while n'est pas bon
    Dire que le while n'est pas bon c'est vague.

    Quel est le vrai message d'erreur présenté par php ?
    Faîtes juste un copie-collé du message exact

  8. #8
    Membre averti
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Points : 433
    Points
    433
    Par défaut
    Voici du code testé.

    connexion_bd.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    	$conn = new mysqli('localhost', 'root', '', 'tesla');
     
    	if ( $conn->connect_errno ){
    		trigger_error('Echec lors de la connexion à MySQL : ' . $conn->connect_error, E_USER_ERROR );
    	}
    ?>
    capteurs_data.php
    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
    <?php
    	$req1 = 'SELECT Num_capteurs, Num_boitiers, Date_Heure, PM0_3, PM0_5, PM1, PM2_5, PM5, PM10, Latitude, Longitude ';
    	$req1 .= 'FROM boitier_qae ';
    	$req1 .= 'ORDER BY Num_boitiers ASC';
     
    	$req2 = 'SELECT Num_capteurs, Num_boitiers ';
    	$req2 .= 'FROM boitier_qae ';
    	$req2 .= 'ORDER BY Num_boitiers ASC';
     
    	$capteurs1 = $conn->query( $req1 );
    	if ( $conn->error ){
    		trigger_error( $conn->error, E_USER_ERROR );
    	}
     
    	$capteurs2 = $conn->query( $req2 );
     
    	if ( $conn->error ){
    		trigger_error( $conn->error, E_USER_ERROR );
    	}
     
    	$conn->close();
    ?>

    capteurs_affichage.php
    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
    <html>
    <head><title>Liste des capteurs </title></head>
    <link href="style.css" rel="stylesheet" media="all" type="text/css">
    <body>
     
    	<h1>Liste des capteurs : </h1>
     
    	<form name="connexion" method="post" action="traite_formulaire.php"> 
    	<select name="Capteur">
    		<option>--Veuillez choisir un capteur--</option>
    		<?php if ( !empty($capteurs2)): ?>
    		<?php while($capteur = mysqli_fetch_object($capteurs2)): ?>
    			<option value="<?php echo $capteur->Num_capteurs ?>"><?php echo $capteur->Num_boitiers ?></option>
    		<?php endwhile ?>
    		<?php endif ?>
    	</select> 
    	<input type="submit" name="valider" value="OK" />
    	<input type="submit" name="annuler" value="ANNULER" />
    	</form>
     
    	<?php if ( !empty($capteurs1) ): ?>
    		<table class="paleBlueRows">
    		<?php while($capteur = mysqli_fetch_object($capteurs1)): ?>
    		<tr>
    			<td><?php echo $capteur->Num_capteurs ?></td>
    			<td><?php echo $capteur->Num_boitiers ?></td>
    			<td><?php echo $capteur->Date_Heure ?></td>
    			<td><?php echo $capteur->PM0_3 ?></td>
    			<td><?php echo $capteur->PM0_5 ?></td>
    			<td><?php echo $capteur->PM1 ?></td>
    			<td><?php echo $capteur->PM2_5 ?></td>
    			<td><?php echo $capteur->PM5 ?></td>
    			<td><?php echo $capteur->PM10 ?></td>
    			<td><?php echo $capteur->Latitude ?></td>
    			<td><?php echo $capteur->Longitude ?></td>
    		</tr>
    		<?php endwhile ?>
    		</table>
    	<?php endif ?>
     
    </body>
    </html>

    fichier final
    capteurs.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    	include 'connexion_bd.php';
    	include 'capteurs_data.php';
    	include 'capteurs_affichage.php';
    ?>

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/09/2018, 23h34
  2. Réponses: 2
    Dernier message: 14/09/2017, 17h22
  3. Réponses: 10
    Dernier message: 03/05/2016, 14h18
  4. Réponses: 7
    Dernier message: 14/05/2013, 14h57
  5. Faire une liste déroulante avec des drapeaux
    Par identifiant_bidon dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 25/04/2011, 23h04

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