8768 sujets

Développement web côté serveur, CMS

Salut à tous , j'ai créé un script avec php et html qui me permet d'afficher le contenu d'une table présente dans ma base de données cependant j'aimerai bien savoir comment faire pour pouvoir sélectionner des éléments dans ce tableau et les récupérer afin de pouvoir les insérer dans une autre table (je débute avec PHP) voici mon code
 <pre>
<html>
<body>
<h1> Table Service </h1>

<?php

mysql_connect("localhost","root","") or die("Impossible de se connecter");;
mysql_select_db("supervision") or die("pas possible de trouver la base");

$result = mysql_query("SELECT * FROM service");
$nblignes = mysql_numrows($result);
    
echo "<table border=1 cellpadding=5 cellspacing=1>";
for ($i=0;$i<$nblignes;$i=$i+1) {
	
      while ($ligne = mysql_fetch_array($result)) {
	  
   	echo "<tr><td>" . $ligne['id_service'] . "</td><td>". $ligne['nom_du_service']. "</td></td>" . "</td><td>". $ligne['port']. "</td></td>" . "</td><td>". $ligne['adresse_ip'].  "</td></td>" . "</td><td>". $ligne['nom_hote']. "</td></tr>" ;
      }
      echo "</table>";
}
echo "</table>";
mysql_close();


?>
</body>
</pre>
</html>
   
Bonjour,

Tout d'abord il semble y avoir un problème avec tes boucles, il doit en avoir une de trop, tu peux virer le "for" à mon avis.

Ensuite tu peux mettre tes résultats dans un tableau puis les re-utiliser quand tu veux (Il serait plus propre de séparer complètement le code de chargement des données et de génération du visuel):

$lines = array();
while ($ligne = mysql_fetch_array($result)) 
{
	$lines [] = $ligne;
}

if (isset($lines))
foreach ($lines as $line)
{
   	echo "<tr><td>" . $ligne['id_service'] . "</td><td>". $ligne['nom_du_service']. "</td></td>" . "</td><td>". $ligne['port']. "</td></td>" . "</td><td>". $ligne['adresse_ip'].  "</td></td>" . "</td><td>". $ligne['nom_hote']. "</td></tr>" ;
}


if (isset($lines))
foreach ($lines as $line)
{
	//code pour la 2e table
}
Sinon, tu peux aussi remettre ton pointeur à 0 grâce à mysql_data_seek();

Et tu peux en effet supprimer ton for, le while qui parcourt les résultats fait très bien son travail ^^ et donc avoir un code de ce genre-là :

<?php mysql_connect("localhost","root","") or die("Impossible de se connecter");;
mysql_select_db("supervision") or die("pas possible de trouver la base");

$result = mysql_query("SELECT * FROM service");
mysql_close();
?>
<!doctype html>
  <html>
     <head>
     </head>
     <body>
         <table border=1 cellpadding=5 cellspacing=1>
<?php while ($ligne = mysql_fetch_array($result)) : ?>
	  <tr>
                    <td><?php echo $ligne['id_service'];?></td>
                    <td><?php echo $ligne['nom_du_service'];?></td>
                    <td> </td>
                    <td><?php echo $ligne['port'];?></td>
                    <td> </td>
                    <td><?php echo $ligne['adresse_ip'];?></td>
                    <td> </td>
                    <td><?php echo $ligne['nom_hote'];?></td>
	  </tr>
<?php endwhile ?>
         </table>
<?php mysql_data_seek($result,0);
while ($ligne = mysql_fetch_array($result)) : ?>
    /* 2ème traitement de tes données */
<?php endwhile ?>
     </body>
</html>



Par contre fait attention dans ton code html, il y a plein d'erreur :
-> absence de doctype
-> des balises qui se ferment n'importe quand (si tu relis bien ton code, à chaque fois que tu as un " . ", tu fermes la balise <td> deux fois avant et une fois après.
-> tu fermes plein de fois la table (vu qu'elle est dans le for)

En conseil, vu que tu débutes :
-> passe sous mysqli_ ou PDO au plus vite, avant de prendre de mauvaises habitudes; l'extension mysql_ est dépréciée depuis PHP 5 et obsolète depuis PHP 5.5. (et en cadeau, un tutoriel pour passer de mysql_ à mysqli_ en Français)
-> on met le PHP dans le html à l'idéal, pas le html dans le php. En gros, on limite les echos aux variables et on n'hésite pas à ouvrir et fermer php
-> Tout ce qui ne concerne pas l'affichage directement (requêtes sql, calcul, algorythmique,...) doit sortir du code html et se met devant. Ca permet deux choses : de pouvoir mettre des redirections en php et de rendre le code plus lisible.


Enfin, ça vaut le coup de tester si ton serveur gère les shorcut, ils te permettent de remplacer
<?php echo $var; ?>
par
<?=$var?>
^^
Modifié par Lothindil (10 Apr 2014 - 09:58)