Base de données, HTML: visualiser lrésultats

Résolu
Bonjour,
je voudrais visualiser mon formulaire (données entrés dans une base de donnée) sous forme de tableau html.
Je lance mon sritp sous root comme cela : php page.php je vous avoue que je ne sais si c'est comme cela que l'on procède!!!

qqn pourrait m'aider?

page.php
<html>
<body>
<table border="1">
<tr>
<th>Complex Name<th>
<th>Subunit Number<th>
<th>Subunit Name<th>
<th>Systematic Gene Name<th>
<th>Description<th>
<th>Stochiometrie<th>
</tr>

<?php

$servername = 'localhost';
$user = 'root';
$password = ''; //je n'ai pas de mot de passe root
$dbname = 'db';

$connexion= mysql_connect($servername,$user, $password) or die ("problème de connexion au serveur");
mysql_select_db($dbname,$connexion) or die ("problème :base de donnée non trouvé");

$requete=
"SELECT famille_name, famille_number
FROM famille";

$execution = mysql_query($requete) or die("erreur au niveau de la requête");
$ligne = mysql_fetch_array($execution);
while($ligne)
{
print "
<td>".$ligne['famille_name']."</td>
<td>".$ligne['famille_number']."</td>";

$requete2=
"SELECT enfant_age, enfant_yeux
FROM enfant, famille
WHERE famille.famille_id = enfant.famille_id";

$execution2 = mysql_query($requete2) or die("erreur au niveau de la requête2");
$ligne2 = mysql_fetch_array($execution2);
while($ligne2)
{
print "
<td>".$ligne['age']."</td>
<td>".$ligne['yeux']."</td>";
}
}
mysql_close($connexion);//déconnexion a la DB
?>
</table
</body>
</html>
Configuration: Linux
Firefox 2.0.0.6

43 réponses

Résumé de la discussion

Le sujet porte sur l'affichage des données d'une base de données dans un tableau HTML, avec PHP et MySQL, afin de présenter clairement les résultats des requêtes côté serveur. Des réponses proposent des exemples et corrections, notamment l'usage de boucles avec mysql_fetch_assoc, l'insertion correcte des balises et , et la gestion des cas sans ligne. Des conseils couvrent aussi l'organisation du code (séparer HTML et PHP, vérifier les connexions et l'usage de l'extension mysql) et la vérification du rendu côté serveur, en insistant sur la structure HTML et le doctype. Certains échanges évoquent l'utilisation de techniques (mysqli ou PDO) et des erreurs liées à l'initialisation des variables, à la fermeture de la connexion et à la fermeture des balises.

Bobot (l’IA à votre service)
  1. Merci beaucoup beaucoup cela marche.
    J'aurais dû penser a regarder le résultat du code rendu par le server.
    Toujours le même problème avec les quotes.

    En tout cas merci encore Dalida
    1. Contributeur
      ta variable '$num_rows2' n'est pas interprétée par le serveur.
      <tr><td align =center rowspan="$num_rows2">Dupond</td>
      <td align =center rowspan="$num_rows2">

      c'est un problème de 'quote' :
      print('<td align center rowspan="'.$num_rows2.'">'.$row['famille_name'].'</td>
      	<td align center rowspan="'.$num_rows2.'">'.$row['famille_number'].'</td>');
      1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">

        <head>
        <title>resumé</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        </head>
        <body>
        <style type ="type/css">
        </style>
        </body>
        <table border='1' cellspacing='0' cellpadding='0'align=center >
        <!--<caption>pour le titre du tableau-->
        <caption>Summarized complex present in the database<br><br></caption>
        <tr>
        <th>Famille Name</th>
        <th>Famille Number</th>
        <th>Enfant Name</th>
        <th>Enfant yeux</th>
        <th>enfant age</th>
        </tr>

        Le nombre d'enfant pour la famille Dupond est de :3<br>
        <tr><td align =center rowspan="$num_rows2">Dupond</td>
        <td align =center rowspan="$num_rows2">3</td><td align =center>Thomas</td>
        <td align =center>marron</td>
        <td align =center>18</td></tr><td align =center>Isabelle</td>
        <td align =center>marron</td>
        <td align =center>16</td></tr><td align =center>Sophie</td>
        <td align =center>noir</td>
        <td align =center>10</td></tr>Le nombre d'enfant pour la famille Durand est de :2<br>
        <tr><td align =center rowspan="$num_rows2">Durand</td>
        <td align =center rowspan="$num_rows2">2</td><td align =center>Chantal</td>
        <td align =center>marron</td>
        <td align =center>r15</td></tr><td align =center>Marc</td>
        <td align =center>noir</td>
        <td align =center>rmarron</td></tr> </table>
        1. Contributeur
          peux-tu me faire un copier/coller du code rendu par le serveur ?
          1. Ca ne marche toujours pas.
            La j'ai mon décalage même pour $num_rows2=2. et j'ai la fusion de ma troisième et quatrième colonnes
            1. Contributeur
              et avec quelque chose comme ça :
              <?php
              while ($row = mysql_fetch_assoc($execution))
              {
              	$requete2="SELECT enfant_yeux, enfant_age
              	FROM enfant
              	WHERE famille_id=".$execution['famille_id'];
              
              	execution2 = mysql_query($requete2) or die("erreur au niveau de la requête");
              	$num_rows2 = mysql_num_rows($execution2);
              
              	if ($num_rows2 == 0)
              	{
              		print("Aucune ligne trouvée pour ma requete");
              		exit;
              	}
              
              	print("<tr>");
              	print('<td align center rowspan="$num_rows2">'.$row['famille_name'].'</td>
              	<td align center rowspan="$num_rows2">'.$row['famille_number'].'</td>');
              
              	$inline = true;
              
              	while ($ligne = mysql_fetch_assoc($execution2))
              	{
              	
              	    if($inline == true)
              	 	{
              			print('<td>'.$ligne['enfant_yeux'].'</td><td>'.$ligne['enfant_age'].'</td>'); 
              			print("</tr>");
              			$inline = false;
              		}
              		else
              		{
              			print("<tr>");
              			print('<td colspan="3">'.$ligne['enfant_yeux'].'</td>
              			<td colspan="3">'.$ligne['enfant_age'].'</td>');
              			print("</tr>");
              		}
              	}
              }
              ?>
              

              par contre il faudrait ajouter le '</tr>' dans le cas ou il n'y a pas d'enfant.
              1. Contributeur
                heu, oui…
                mais j'ai rempli au pif, par contre l'info peut avoir son importance pour l'algo.
                1. Bonjour,
                  Oui c'est tout a fait cela .
                  Sauf que pour les familles suivantes par exemple Barottzi si tu met 9 pour famille_number , alors il faut que tu aient 9 lignes correspondant pour les deux colonnes enfant_yeux et enfant_age. Là tu as mis q'une ligne.
                  1. Contributeur
                    salut,

                    est-ce quelque chose comme ce tableau ?
                    je n'ai pas le temps de me pencher sur l'algo, mais ça me permettra d'y réfléchir.
                    j'essaie de repasser dans la journée.
                    1. Bonjour,
                      cela fait deux jours que je suis sur mon problème et je ne trouve toujours pas de solution quelqu'un aurait-il une idée ou une solution a me suggérer?

                      Je veux que X lignes (dépend du nombre d'enfants ,soit dans mon script $num_rows2) de mes deux premières colonnes soit fusionnés.
                      Cependant a partir de $num_rows2≤=3, j'ai un décalage pour ma troisième lignes de 2 colonnes (d'après l'exemple ci-dessus : marron se trouve dans la colonne famill_name et 14 se trouve dans la colonne famille_number).

                      j'aimerais avoir cela :(fusion des 2 colonnes famille_name et famille_number et ensuite avoir sur chaque ligne les caractéristique pour chaque enfant. Le nombre de lignes dépend du nombre d'enfants)
                      famille_name famille_number enfant_yeux enfant_age
                      bleu 18
                      dupond 3 marron 16
                      marron 14

                      voiçi mon script :
                      <table border="1">
                      <tr>
                      <th>Famille Name<th>
                      <th>Famille Number<th>
                      <th>Yeux enfant<th>
                      <th>Age enfant<th>
                      </tr>

                      <?php

                      <--connexion a la base de donnée , requête -->

                      while ($row = mysql_fetch_assoc($execution))
                      {
                      $requete2="SELECT enfant_yeux, enfant_age
                      FROM enfant
                      WHERE famille_id=".$execution['famille_id'];

                      execution2 = mysql_query($requete2) or die("erreur au niveau de la requête");
                      $num_rows2 = mysql_num_rows($execution2);

                      if ($num_rows2 == 0)
                      {
                      print("Aucune ligne trouvée pour ma requete");
                      exit;
                      }

                      print("<tr>");
                      print('<td align center rowspan="$num_rows2">'.$row['famille_name'].'</td>
                      <td align center rowspan="$num_rows2">'.$row['famille_number'].'</td>');

                      while ($ligne = mysql_fetch_assoc($execution2))
                      {
                      print('<td>'.$ligne['enfant_yeux'].'</td>
                      <td>'.$ligne['enfant_age'].'</td>');

                      print("</tr>");
                      }
                      }
                      mysql_close($connexion);
                      ?>
                      </table>
                      1. Bonjour,

                        en fesant cela je n'ai pas la fusion de mes lignes et j'ai un décalage de 2 colonnes vers la gauche.

                        Je veux que X lignes (dépend du nombre d'enfants soit dans mon script $num_rows2) de mes deux premières colonnes soit fusionnés.
                        1. Il doit te manquer des balises <tr> </tr> dans ta boucle while ($ligne = mysql_fetch_assoc($execution2))

                          pour que le tableau avec rowspan marche il faut qu'il ait cette structure:

                          <table>
                          <tr>
                          <td rowspan="2"> A</td>
                          <td>A11</td>
                          <td>A12</td>
                          </tr>
                          <tr>
                          <td>A21</td>
                          <td>A22</td>
                          </tr>
                          
                          </table>
                          


                          alors essayes:

                          print('</tr>');
                           while ($ligne = mysql_fetch_assoc($execution2))
                          {
                          print('<tr><td>'.$ligne['enfant_yeux'].'</td>
                          <td>'.$ligne['enfant_age'].'</td>');
                          
                          print("</tr>");
                          } 
                          1. Merci c'est une faute de frappe pour $.

                            Oui mes titres sont bien dans les même balises <table></table> que le résultat de tes requettes.

                            <table border="1">
                            <tr>
                            <th>Famille Name<th>
                            <th>Famille Number<th>
                            <th>Yeux enfant<th>
                            <th>Age enfant<th>
                            </tr>
                            <?php

                            <--les requêtes ci-dessus -->

                            mysql_close($connexion);
                            ?>
                            </table>

                            Ce qui est étonnat c'est que ce décalage intervient a partir d'un nombre d'enfants supérieur ou égal à 3. (càd $num_rows2>=3).
                            Pour 2 pas de souci!!!
                            1. execution2 = mysql_query($requete2) or die("erreur au niveau de la requête");

                              il manque le $ au début de la ligne.

                              Pour le décalage est ce que les titres des colonnes famille_name famille_number enfant_yeux enfant_age sont bien dans les même balises <table></table> que le résultat de tes requettes ? tu n'as pas deux tableaux séparés ?

                              Au passage mets des <th> au lieu des <td> pour les titres ça te les met en gras.
                              1. Bonjour,

                                Oui j'ai réussi a faire tourner mon server tous marche.

                                A partir de 3 enfants j'ai un affichage décalé pour mon tableau HTML.En effet, j'ai un décalage au niveau de mon alignement.
                                Voiçi un exemple :
                                Au lieu d'avoir cela :
                                famille_name famille_number enfant_yeux enfant_age
                                dupond 3 bleu 18
                                dupond 3 marron 16
                                dupond 3 marron 14

                                j'aimerais avoir cela :(pour une même famille fusion des 3 lignes pour les champs famille_name et famille_number)
                                famille_name famille_number enfant_yeux enfant_age
                                bleu 18
                                dupond 3 marron 16
                                marron 14

                                Or après avoir lancé mon script j'obtiens :
                                famille_name famille_number enfant_yeux enfant_age
                                bleu 18
                                dupond 3 marron 16
                                marron 14

                                la troisième ligne est décalé de un champ vers la gauche!!

                                Dans mon script je fais une fusion des lignes en fonction du nombre d'enfants.

                                while ($row = mysql_fetch_assoc($execution))
                                {
                                $requete2="SELECT enfant_yeux, enfant_age
                                FROM enfant
                                WHERE famille_id=".$execution['famille_id'];

                                execution2 = mysql_query($requete2) or die("erreur au niveau de la requête");
                                $num_rows2 = mysql_num_rows($execution2);

                                if ($num_rows2 == 0)
                                {
                                print("Aucune ligne trouvée pour ma requete");
                                exit;
                                }

                                print("<tr>");
                                print('<td align center rowspan="$num_rows2">'.$row['famille_name'].'</td>
                                <td align center rowspan="$num_rows2">'.$row['famille_number'].'</td>');

                                while ($ligne = mysql_fetch_assoc($execution2))
                                {
                                print('<td>'.$ligne['enfant_yeux'].'</td>
                                <td>'.$ligne['enfant_age'].'</td>');

                                print("</tr>");
                                }
                                }
                                1. Contributeur
                                  as-tu réussi à faire tourner ton serveur ?

                                  pour le formulaire tu peux le faire avec $_POST mais par $_GET ce sera bien plus simple, d'autant que les infos transitant ne sont pas sensibles (id de la famille).

                                  il suffit de modifier le lien vers la famille.
                                  while ($row= mysql_fetch_assoc($execution))
                                  {
                                  
                                  print ('<td align =center><a href="http:/apache2-default/tableau.php?id='.$row['famille_id'].'">'.$row['famille_name'].'</a></td>');
                                  print('</tr>');
                                  } 

                                  ce qui donnera un lien du type : "http:/apache2-default/tableau.php?id=16"

                                  dans ton script 'tableau.php' tu récupèreras l'info par :
                                  if(isset( $_GET['id']) && !empty( $_GET['id']))
                                  {
                                          $famille_id = $_GET['id'];
                                  }
                                  1. Merci.

                                    Les différentes infos saisies lors de mon formulaire (formulaire a plusieurs pages) ont été stockés dans ma base de donnée.
                                    Maintenant j'aimerais qu'une partie de ces infos apparaissent dans mon formulaire sous forme d'une liste . Et lorsque je clique sur un élément de cette liste je dois voir apparaitre le tableau associé a cet élément.

                                    formulaire.php :
                                    Dans mon formulaire je peux sélectionner un nom de famille et pour chaque nom de famille j'ai un lien cliquable.

                                    while ($row= mysql_fetch_assoc($execution))
                                    {

                                    print ('<td align =center><a href="http:/apache2-default/tableau.php">'.$row['famille_name'].'</a></td>');
                                    print('</tr>');
                                    }

                                    Jusqu'ici tout va bien.

                                    Mais comment indiquer que pour l'élément que j'ai cliqué je veux un tableau HTML qui lui est associé. ???

                                    Si je fais
                                    Dans tableau.php :

                                    $requete="SELECT famille_id, famille_name, famille_number
                                    FROM famille;

                                    $requete2="SELECT enfant_nom, enfant_age, enfant_yeux
                                    FROM enfant
                                    WHERE famille_id=$execution['famille_id'];

                                    Alors là, quel que soit le nom que je clique j'obtiens le même tableau HTML.

                                    Je pense que je ne peux pas passer par $_POST pour récupérer la valeur de la variable famille_name pour pouvoir ensuite l'insérer dans mes requêtes.
                                    1. Contributeur
                                      crée un fichier php dans ton local par défaut que tu nommes index.php.
                                      dedans tu colles :
                                      <?php phpinfo() ?>


                                      et tu actualises http://localhost/ dans FF, en vidant le cache avec [ Ctrl ] + [ F5 ].
                                      1. Re-salut,

                                        J'ai trouvé la solution a mon problème j'avais mal défini mes balises elle n'était pas dans le bon ordre
                                        <body>
                                        <style>
                                        </style>
                                        </body>
                                        <table>
                                        </table>
                                        1. Merci beaucoup pour ta patience Dalida.

                                          Serait tu pourquoi je n'arrive pas a visualiser mon tableau HTML?
                                          Pour que mon script PHP soit interpreté par Apache2 et que le résultat HTML soit "visible", je lance mon script depuis un navigateur Fire Fox.
                                          Mon script est dans le répertoire var/www/apache2-default
                                          Donc je lance http://localhost/apache2-default/script.php mais je n'obtiens rien; ma page est vide.

                                          Si je tapes dans firefox:http://localhost/
                                          je tombe bien sur la page d'acceuil Apache

                                          Ma distribution est ubuntu
                                          • 1
                                          • 2
                                          • 3