Résultats d'une table dans un tableau: question subcidiaire

Ce forum aborde toutes les questions qu'un codeur ou webmaster pourrait se poser, et n'ayant aucun rapport direct avec phpBB.
Tout ce qui peut concerner la récupération des sessions de phpBB sur votre site, doit se faire dans ce forum.

Modérateur: Equipe

Résultats d'une table dans un tableau: question subcidiaire

Messagede Gryffondor le 05 Sep 2008 à 11:34

Bonjour, considérons le problème suivant:

Une base de données ayant pour paramètre => localhost, root, pswd (host, username, password). Nom de la BDD: mybase. Nom de la table: mytable.
Cette base contient les données suivantes => Une table composé des champs suivants => id, ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8, ch9, ch10, ch11, ch12, ch13.

On souhaite afficher les résultats de cette table dans un tableau de 3 colonnes et autant de lignes néccéssaires à l'affichage de tous les résultats.
Dans notre cas, le tableau comportera 15 cellules soit 3 colonnes 5 lignes dont 14 cellules renverront un résultat.
Le résultat de chacun des champs de la table renvoi un chiffre.
Chaque cellule du tableau (les 14) devra afficher un résultat de la forme "nom du champs de la table: résultat de ce champs" grâce à la fonction echo en PHP

Comment porcederiez-vous pour mettre en place ce tableau sachant que seul les langages PHP et HTML sont tolérés?

Merci pour celui ou celle qui réglera ce petit exercice. :o
Dernière édition par Gryffondor le 08 Oct 2008 à 14:26, édité 2 fois.
Last Survivor: La fin du monde ne fait que commencer...: Jeu de rôle en ligne massivement multijoueur. Ouverture en exclusivité nationale le 15 novembre 2008!
... Et seulement en france!
Serez vous le Last Survivor?
http://www.last-survivor.com
Avatar de l’utilisateur
Gryffondor
Maître des floodeurs
Maître des floodeurs
 
Messages: 2142
Inscription: 31 Juil 2006 à 19:48
Localisation: A la recherches des reliques mortelles

Re: Résultats d'une table dans un tableau: question subcidiaire

Messagede spitfire pat le 05 Sep 2008 à 13:14

Code: Tout sélectionner
<?php
$connexion 
= mysql_connect("localhost","root","") or die("echec de la connexion au serveur");
mysql_select_db("mybase", $connexion) or die("echec de la connexion à la base");
$fields = array("id", "ch1", "ch2", "ch3", "ch4", "ch5", "ch6", "ch7", "ch8", "ch9", "ch10", "ch11", "ch12", "ch13");
//on aurait pu faire un SELECT COLUMNS FROM mybase et lister ainsi les noms des champs
$query = mysql_query("select * from mytable") or die(mysql_error());
$row = mysql_fetch_row($query);
echo '<table border="1">';
for(
$i=0; $i<15;$i++)
{
    if ($i%== 0)
    {
        echo'<tr>';
    }
    echo "<td>";
    echo ($row[$i]) ? $fields[$i] . ' : ' . $row[$i] : '&nbsp;';
    echo "</td>";
    if ($i%== 2)
    {
        echo "</tr>";
    }
}
echo "</table>";
?>
Avatar de l’utilisateur
spitfire pat
Superstar
 
Messages: 14453
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: Résultats d'une table dans un tableau: question subcidiaire

Messagede Gryffondor le 05 Sep 2008 à 15:56

T'y est presque mais il y a une érreur dans ton script :o
Egalement, le script doit fonctionné même si on rajoute des champs dans la table, dans ton cas, on ne peut l'utiliser que pour 15 champs (mais il est vrai que je ne l'avais pas précisé, maintenant c fait) :wink:
Last Survivor: La fin du monde ne fait que commencer...: Jeu de rôle en ligne massivement multijoueur. Ouverture en exclusivité nationale le 15 novembre 2008!
... Et seulement en france!
Serez vous le Last Survivor?
http://www.last-survivor.com
Avatar de l’utilisateur
Gryffondor
Maître des floodeurs
Maître des floodeurs
 
Messages: 2142
Inscription: 31 Juil 2006 à 19:48
Localisation: A la recherches des reliques mortelles

Re: Résultats d'une table dans un tableau: question subcidiaire

Messagede spitfire pat le 05 Sep 2008 à 17:21

il n'y a pas d'erreur, mais un énoncé mal exposé
voilà qui devrait être indépendant, et du nombre de champs, et du nombre de lignes
Code: Tout sélectionner
<?php
$connexion = mysql_connect("localhost","root","") or die("echec de la connexion au serveur");
mysql_select_db("mybase", $connexion) or die("echec de la connexion à la base");
$fields=array();
$sql = "SHOW COLUMNS FROM mytable";
$result = mysql_query($sql) or die(mysql_error());
while($row=mysql_fetch_assoc($result))
{
   $fields[] = $row['Field'];
}
$nb_fields=sizeof($fields);
$sql = "select * from mytable";
$result = mysql_query($sql) or die(mysql_error());
$i=0;
echo '<table border="1">';
while($row = mysql_fetch_row($query))
{
   for($j=0; $j<($nb_fields-1);$j++)
   {
      if ($i%3 == 0)
      {
         echo'<tr>';
      }
      echo "<td>";
      echo ($row[$j]) ? $fields[$j] . ' : ' . $row[$j] : '&nbsp;';
      echo "</td>";
      if ($i%3 == 2)
      {
         echo "</tr>";
      }
   }
   $i++;
}
echo "</table>";
?>
Avatar de l’utilisateur
spitfire pat
Superstar
 
Messages: 14453
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: Résultats d'une table dans un tableau: question subcidiaire

Messagede Gryffondor le 05 Sep 2008 à 22:55

Encore presque mais la c'est un problème html et non php car dans ton script, chaque cellule est renvoyé à la ligne pour finalement constitué un tableau 1 colonne * X lignes et non un tableau à 3 colonnes. :wink:

A mon avis soit la variable $i ne sert à rien, soit c'est la variable $j qui ne sert pas. Mais on peut pas utiliser les 2 car dans ton cas $i qui ne se trouve pas dans la boucle while ne s'écrémente pas et vaut toujours 0. Alors je pense qu'il faudrait alors remplacer $j par $i ou l'inverse et supprimer le $i=0 hors de la boucle.
Last Survivor: La fin du monde ne fait que commencer...: Jeu de rôle en ligne massivement multijoueur. Ouverture en exclusivité nationale le 15 novembre 2008!
... Et seulement en france!
Serez vous le Last Survivor?
http://www.last-survivor.com
Avatar de l’utilisateur
Gryffondor
Maître des floodeurs
Maître des floodeurs
 
Messages: 2142
Inscription: 31 Juil 2006 à 19:48
Localisation: A la recherches des reliques mortelles

Re: Résultats d'une table dans un tableau: question subcidiaire

Messagede spitfire pat le 06 Sep 2008 à 06:22

$i++ mal placé, ça m'apprendra à répondre sans tester
Code: Tout sélectionner
<?php
$connexion = mysql_connect("localhost","root","") or die("echec de la connexion au serveur");
mysql_select_db("mybase", $connexion) or die("echec de la connexion à la base");
$fields=array();
$sql = "SHOW COLUMNS FROM mytable";
$result = mysql_query($sql) or die(mysql_error());
while($row=mysql_fetch_assoc($result))
{
   $fields[] = $row['Field'];
}
print_r($fields);
$nb_fields=sizeof($fields);
$sql = "select * from mytable";
$result = mysql_query($sql) or die(mysql_error());
$i=0;
echo '<table border="1">';
while($row = mysql_fetch_row($result))
{
   for($j=0; $j<($nb_fields);$j++)
   {
      if ($i%3 == 0)
      {
         echo'<tr>';
      }
      echo "<td>";
      echo  $fields[$j] . ' : ' . $row[$j] ;
      echo "</td>";
      if ($i%3 == 2)
      {
         echo "</tr>";
      }
      $i++;
   }
}
echo "</table>";
?>
Avatar de l’utilisateur
spitfire pat
Superstar
 
Messages: 14453
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: Résultats d'une table dans un tableau: question subcidiaire

Messagede Gryffondor le 06 Sep 2008 à 18:53

Ok sa me plait sa ^^
Très bien. Dernière petite question afin de paufiner un peu cette fonction.
Admettons que je ne veuille pas utiliser le premier champs et donc retourner tous les résultats de la table dans le tableau en omettant le premier champs. Quel modification faudrait t-il faire?
Last Survivor: La fin du monde ne fait que commencer...: Jeu de rôle en ligne massivement multijoueur. Ouverture en exclusivité nationale le 15 novembre 2008!
... Et seulement en france!
Serez vous le Last Survivor?
http://www.last-survivor.com
Avatar de l’utilisateur
Gryffondor
Maître des floodeurs
Maître des floodeurs
 
Messages: 2142
Inscription: 31 Juil 2006 à 19:48
Localisation: A la recherches des reliques mortelles

Re: Résultats d'une table dans un tableau: question subcidiaire

Messagede spitfire pat le 06 Sep 2008 à 21:15

faudrait remplacer
Code: Tout sélectionner
for($j=0; $j<($nb_fields);$j++)
par
Code: Tout sélectionner
for($j=1; $j<($nb_fields);$j++)
Avatar de l’utilisateur
spitfire pat
Superstar
 
Messages: 14453
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: Résultats d'une table dans un tableau: question subcidiaire

Messagede Gryffondor le 07 Sep 2008 à 11:20

Une toute dernière question.
Comment a présent, omettre le premier et le dernier champs dans ma table dans mon tableau?
J'avais pensé à cette condition:

Code: Tout sélectionner
if ($j=$nb_fields)
{
    echo "" // N'affiche rien pour le dernier résultat
}


Mais je doute que cette condition rime bien avec le reste du code précédent puisqu'elle n'afficherait pas le dernier champs dans le tableau mais afficherait qund même une céllule vide ce qui n'est pas très esthétique. :o
Last Survivor: La fin du monde ne fait que commencer...: Jeu de rôle en ligne massivement multijoueur. Ouverture en exclusivité nationale le 15 novembre 2008!
... Et seulement en france!
Serez vous le Last Survivor?
http://www.last-survivor.com
Avatar de l’utilisateur
Gryffondor
Maître des floodeurs
Maître des floodeurs
 
Messages: 2142
Inscription: 31 Juil 2006 à 19:48
Localisation: A la recherches des reliques mortelles

Re: Résultats d'une table dans un tableau: question subcidiaire

Messagede spitfire pat le 07 Sep 2008 à 12:35

dans ce cas il faudrait mettre
Code: Tout sélectionner
for($j=1; $j<($nb_fields-1);$j++)
Avatar de l’utilisateur
spitfire pat
Superstar
 
Messages: 14453
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: Résultats d'une table dans un tableau: question subcidiaire

Messagede Gryffondor le 07 Sep 2008 à 15:01

OK, ba voila le script obtenu au complet:

Code: Tout sélectionner
<?php
if (isset($_GET['el']))
{   
   $element = $_GET['el'];
   $query_apt_distrib = mysql_query("SELECT distribution FROM aptitudes WHERE pseudo='Fondateur'") or die(mysql_error());
   $apt_distrib = mysql_fetch_array($query_apt_distrib);
   $apt_distrib = $apt_distrib['distribution'];
   
   mysql_query("UPDATE aptitudes SET distribution='".$apt_distrib."'-1 WHERE pseudo='Fondateur'") or die(mysql_error());
   echo "Point ajouté avec succès";
   
   echo $_SESSION['aptitude_name'];
   
   $sql_ary = array(
   $element => array('field' => $_SESSION['aptitude_name'], 'lect'=> $_SESSION['aptitude_name'])
   );
   
   mysql_query("UPDATE aptitudes SET " . $sql_ary[$element]['field'] . "=". result_champs($sql_ary[$element]['lect']). "+1 WHERE pseudo='Fondateur'") or die(mysql_error());
}
else
{
echo "<div id='action_result'></div>";
echo aptitude_distrib();

$fields=array();
$sql = "SHOW COLUMNS FROM aptitudes";
$result = mysql_query($sql) or die(mysql_error());
while($row=mysql_fetch_assoc($result))
{
   $fields[] = $row['Field'];
}
$nb_fields=sizeof($fields);
$sql = "select * from aptitudes";
$result = mysql_query($sql) or die(mysql_error());
$i=0;
echo '<table border="1">';
while($row = mysql_fetch_row($result))
{
   for($j=1; $j<($nb_fields -1);$j++)
   {
      if ($i%3 == 0)
      {
         echo'<tr>';
      }
      echo "<td>";
     $_SESSION['aptitude_name'] = $fields[$j];
      echo $_SESSION['aptitude_name'] . ': <span class="progressBar" id="element' . $j . '">' . $row[$j] . '</span>' . addpoints() . '</span>';
      echo "</td>";
      if ($i%3 == 2)
      {
         echo "</tr>";
      }
      $i++;
   }
}
echo "</table>";
//echo "<table width='100%' border='1'>";
//$query_aptitudes2 = mysql_query("SELECT * FROM aptitudes") or die(mysql_error());
//$nbr_aptitudes = mysql_num_fields($query_aptitudes2);
//$nbr_aptitudes = $nbr_aptitudes - 1; // Compte le nombre d'aptitudes dans la table (-1 pour le champs pseudo).
//for ($num_aptitude = 1; $num_aptitude < $nbr_aptitudes; $num_aptitude++)
//{
   //$query_aptitudes = mysql_query("SELECT * FROM id_aptitudes WHERE id=$num_aptitude") or die(mysql_error());
   //$aptitude = mysql_fetch_array($query_aptitudes);
   //$aptitude = $aptitude['aptitude']; // Nom de l'aptitude

?>
  <!-- <tr> -->
   <!-- <td> --> <?php //echo $aptitude; ?><!-- <span class="progressBar" id="element --><?php //echo $num_aptitude; ?><!-- "> --><?php //$element = $num_aptitude;  echo aptitude_points($aptitude); ?><!-- </span> --><?php //echo addpoints(); ?><!-- </td>
  </tr> -->
<?php
//}
//?>
<!-- </table> -->
<br />
<?php } ?>


Code: Tout sélectionner
// Lecture des points redistribuable
function aptitude_distrib()
{
   $query_apt_distrib = mysql_query("SELECT distribution FROM aptitudes WHERE pseudo='Fondateur'") or die(mysql_error());
   $apt_distrib = mysql_fetch_array($query_apt_distrib);
   $apt_distrib = $apt_distrib['distribution'];
   if ($apt_distrib > 0)
   {
      $distribtext = "Vous pouvez ajouter <div id='distrib'>$apt_distrib</div> points à vos caractéristiques d'aptitudes afin de les améliorer";
   }
   else
   {
      $distribtext = "";
   }
   return $distribtext;

   mysql_free_result($query_apt_distrib);
   unset($query_apt_distrib);
   unset($apt_distrib);
   unset($distribtext);
}

// Ajout de points redistribuable
function addpoints()
{
   global $j;
   $query_apt_distrib = mysql_query("SELECT distribution FROM aptitudes WHERE pseudo='Fondateur'") or die(mysql_error());
   $apt_distrib = mysql_fetch_array($query_apt_distrib);
   $apt_distrib = $apt_distrib['distribution'];
   if ($apt_distrib > 0)
   {
      ?>
      <span class="options"><a href="#" onclick="element_update('<?php echo 'element'.$j; ?>');return false;"><img src="images/icons/add.gif" alt="" title="" /></a></span>
      <?php
   }
   else
   {
      echo "";
   }
}

// Mise a jour des points d'aptitudes
function result_champs($result)
{
   $query_result_champs = mysql_query("SELECT ".$result." FROM aptitudes WHERE pseudo='Fondateur'") or die(mysql_error());
   $result_champs = mysql_fetch_array($query_result_champs);
   $result_champs = $result_champs[$result];
   echo 'total'.$result_champs;
   return $result_champs;
}


?>


2 petits soucis, le premier esthétique:
addpoints() qui renvoi une image se positionne a gauche du texte en non après comme je le voudrais.
Enfin, l'ajout des points ne focntionne pas car $_SESSION['aptitude_name'] garde la même valeure, celle du dernier champs lu. et non celle de $fields[$j]; dans la boucle à tel valeure de $j.

Dur dur.
Last Survivor: La fin du monde ne fait que commencer...: Jeu de rôle en ligne massivement multijoueur. Ouverture en exclusivité nationale le 15 novembre 2008!
... Et seulement en france!
Serez vous le Last Survivor?
http://www.last-survivor.com
Avatar de l’utilisateur
Gryffondor
Maître des floodeurs
Maître des floodeurs
 
Messages: 2142
Inscription: 31 Juil 2006 à 19:48
Localisation: A la recherches des reliques mortelles

Re: Résultats d'une table dans un tableau: question subcidiaire

Messagede spitfire pat le 08 Sep 2008 à 07:22

pour le problème esthétique, c'est peut être dû au fait qu'il y a un </span> en trop dans cette ligne
echo $_SESSION['aptitude_name'] . ': <span class="progressBar" id="element' . $j . '">' . $row[$j] . '</span>' . addpoints() . '</span>';
ou alors c'est lié au codage de la class progressBar dans ton CSS
EDIT tudieu, j'avais oublié que c'était en rapport avec ta progressbar spéciale

pour le second problème, je n'ai pas vu de
Code: Tout sélectionner
session_start();
dans ton script ?
Avatar de l’utilisateur
spitfire pat
Superstar
 
Messages: 14453
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: Résultats d'une table dans un tableau: question subcidiaire

Messagede Gryffondor le 08 Sep 2008 à 14:09

Pour le problème 1. J'avais déja retiré le span en trop mais l'image est toujours avant le texte.
Pour le problème 2: Le session_start() est bien présent, c'est juste que j'avais pas jugé utile de mettre la partie avant mon header:

Code: Tout sélectionner
include ('common.php');
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript" src="js/jsProgressBarHandler.js"></script>
<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/functions_javascript.js"></script>
<title>Vos apptitudes</title>
</head>


Je pense savoir pourquoi ma variable de session 'aptitude' prend la dernière valeure: car la boucle ne s'arrête qu'au dernier listing des champs de ma table et $_SESSION['aptitude_name'] change tout le temps avec pour dernière valeur le dernier champs de ma table soit 'dernierchamps'.
Mais c'est pas comment obtenir la bonne valeur de $_SESSION['aptitude_name'] lorsque dans la bloucle $j vaut tel ou tel valeur.
Last Survivor: La fin du monde ne fait que commencer...: Jeu de rôle en ligne massivement multijoueur. Ouverture en exclusivité nationale le 15 novembre 2008!
... Et seulement en france!
Serez vous le Last Survivor?
http://www.last-survivor.com
Avatar de l’utilisateur
Gryffondor
Maître des floodeurs
Maître des floodeurs
 
Messages: 2142
Inscription: 31 Juil 2006 à 19:48
Localisation: A la recherches des reliques mortelles

Re: Résultats d'une table dans un tableau: question subcidiaire

Messagede spitfire pat le 08 Sep 2008 à 16:00

oui, mais quelel valeur cette variable de session est-elle censée prendre ?
Avatar de l’utilisateur
spitfire pat
Superstar
 
Messages: 14453
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: Résultats d'une table dans un tableau: question subcidiaire

Messagede Gryffondor le 08 Sep 2008 à 17:55

Ba comme marqué dans le code:
Code: Tout sélectionner
$nb_fields=sizeof($fields);
$sql = "select * from aptitudes";
$result = mysql_query($sql) or die(mysql_error());
$i=0;
echo '<table border="1">';
while($row = mysql_fetch_row($result))
{
   for($j=1; $j<($nb_fields -1);$j++)
   {
      if ($i%3 == 0)
      {
         echo'<tr>';
      }
      echo "<td>";
     $_SESSION['aptitude_name'] = $fields[$j];
      echo $_SESSION['aptitude_name'] . ': <span class="progressBar" id="element' . $j . '">' . $row[$j] . '</span>' . addpoints() . '</span>';
      echo "</td>";
      if ($i%3 == 2)
      {
         echo "</tr>";
      }
      $i++;
   }
}
echo "</table>";


donc:
Code: Tout sélectionner
$_SESSION['aptitude_name'] = $fields[$j];

Donc le soucis est que je veux que lorsque je fait appel ma fonction addpoints(), il faut que $_SESSION['aptitude_name'] = $fields[$j] avec $j= 1 ou 2 ou 3 ou 4 ou etc...
Mais la $j=8 (dernier champs de ma table).
Pour être plus explicite, voici le code générer sur mon serveur: http://last-survivor.com/test/game/aptitudes.php

Quand tu clic sur le bouton '+', c'est le mauvais champs de ma table qui est incrémenté de +1 en loccurence le dernier lister par la boucle for, soit 'maçon'
Last Survivor: La fin du monde ne fait que commencer...: Jeu de rôle en ligne massivement multijoueur. Ouverture en exclusivité nationale le 15 novembre 2008!
... Et seulement en france!
Serez vous le Last Survivor?
http://www.last-survivor.com
Avatar de l’utilisateur
Gryffondor
Maître des floodeurs
Maître des floodeurs
 
Messages: 2142
Inscription: 31 Juil 2006 à 19:48
Localisation: A la recherches des reliques mortelles

Suivante

Retourner vers Coding, Webmastering et Sécurité informatique

Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot], Yahoo [Bot] et 0 invités

Liens : phpBB.biz • phpBBHacks.com • phpBB-Seo.com • EzCom-fr.com • phpBB-Services.com • phpBB3 Styles • phpBB podpora • Net Avenir • PromoBenef • Ticket Gagnant •