Classement : tableau éparpillé après insertion du PHP...

Eléphant du PHP | 93 Messages

09 oct. 2005, 23:41

Bonjour,

je ne sais pas si mon problème vient du PHP et de ma façon de l'intégrer à mon XHTML, ou du HTML lui-même, donc j'en parle ici :oops: :

dans un jeu de rôle, voulant faire un tableau de classement des 10 premiers dans 8 catégories ( fortune, intelligence, force, ..... ) je dois aller chercher dans la BDD les infos.

Code : Tout sélectionner

$sql = "SELECT login FROM informations ORDER BY argent DESC LIMIT 0,10";
Là, je peux afficher très clairement les 10 premiers login, en terme de fortune.

MAIS si je laisse juste cette donnée-là, je vais l'afficher en vertu de la fortune dans tout le tableau !

DONC, je dois avant chaque ligne, finalement, retrouver l'info concernant le classement à faire.
Ce que j'ai fait, mais mon tableau a une forme bizarre à la sortie.
( je montre après )
Je pense que c'est parce que j'ai trop coupé le HTML par du PHP, et ça a créé des espaces apparemment...
D'où une déstabilisation du tableau...

Que faire ?[/b]

Code : Tout sélectionner

<? // on se connecte à MySQL $db = mysql_connect('', '', ''); // on sélectionne la base mysql_select_db('colons',$db); ?> <table class="tableau"> <tr> <th colspan="8">CLASSEMENT en temps réel ( 10 premiers )</th> </tr> <tr> <td>FORTUNE</td> <td >INTELLIGENCE</td> <td>FORCE</td> <td>CHARISME</td> <td>REPUTATION</td> <td>ELOQUENCE</td> <td>MILITAIRE</td> <td>POPULARITE</td> </tr> <? // on crée la requête SQL $sql = "SELECT login FROM informations ORDER BY argent DESC LIMIT 0,10"; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on affiche les informations de l'enregistrement en cours while($row = mysql_fetch_assoc($req)) { ?> <tr> <td><font face='Verdana' size='2'><?php echo($row['login']);?></font></td> <?} // on crée la requête SQL $sql = "SELECT login FROM informations ORDER BY intelligence LIMIT 0,10"; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on affiche les informations de l'enregistrement en cours while($row = mysql_fetch_assoc($req)) { ?> <td><font face='Verdana' size='2'><?php echo($row['login']);?></font></td> <?} // on crée la requête SQL $sql = "SELECT login FROM informations ORDER BY puissance LIMIT 0,10"; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on affiche les informations de l'enregistrement en cours while($row = mysql_fetch_assoc($req)) { ?> <td><font face='Verdana' size='2'><?php echo($row['login']); ?></font></td> <?} // on crée la requête SQL $sql = "SELECT login FROM informations ORDER BY charisme LIMIT 0,10"; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on affiche les informations de l'enregistrement en cours while($row = mysql_fetch_assoc($req)) { ?> <td><font face='Verdana' size='2'><?php echo($row['login']); ?></font></td> <?} // on crée la requête SQL $sql = "SELECT login FROM informations ORDER BY reputation LIMIT 0,10"; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on affiche les informations de l'enregistrement en cours while($row = mysql_fetch_assoc($req)) { ?> <td><font face='Verdana' size='2'><?php echo($row['login']); ?></font></td> <?} // on crée la requête SQL $sql = "SELECT login FROM informations ORDER BY eloquence LIMIT 0,10"; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on affiche les informations de l'enregistrement en cours while($row = mysql_fetch_assoc($req)) { ?> <td><font face='Verdana' size='2'><?php echo($row['login']); ?></font></td> <?} // on crée la requête SQL $sql = "SELECT login FROM informations ORDER BY armee LIMIT 0,10"; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on affiche les informations de l'enregistrement en cours while($row = mysql_fetch_assoc($req)) { ?> <td><font face='Verdana' size='2'><?php echo($row['login']); ?></font></td> <?} // on crée la requête SQL $sql = "SELECT login FROM informations ORDER BY popularite LIMIT 0,10"; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on affiche les informations de l'enregistrement en cours while($row = mysql_fetch_assoc($req)) { ?> <td><font face='Verdana' size='2'><?php echo($row['login']); ?></font></td> </tr> </table> <?} // on ferme la connexion à mysql mysql_close(); ?>
Voilà l'image !
( on voit que le tableau a perdu sa forme première... )

Au lieu de se mettre en colonnes dans le tableau, comme le fait bien le premier, ça part dans en une seul ligne horizontale...

Modération (Cyrano) : molo les images grande taille, ça nout met en l'air la mise en page ! Image supprimée, mets un lien vers une page en ligne si tu tiens à nous montrer quelque chose de cette taille.

Mammouth du PHP | 19672 Messages

10 oct. 2005, 00:19

Normal que ça aligne tout sur une ligne: tu ouvres la ligne (<tr) avec le premier et tu la fermes avec le dernier. Entre temps, tu crées des cellules pour chaque résultat: au bout tu compte, une seule immense ligne.

Méthode de correction : enregistrer les classements dans des tableaux indexés et ensuite générer les lignes:
<?
// on se connecte à MySQL
$db = mysql_connect('', '', '');

// on sélectionne la base
mysql_select_db('colons',$db);
?>
<table class="tableau">
  <tr>
    <th colspan="8">CLASSEMENT en temps réel ( 10 premiers )</th>
  </tr>
  <tr>
    <td>FORTUNE</td>
    <td>INTELLIGENCE</td>
    <td>FORCE</td>
    <td>CHARISME</td>
    <td>REPUTATION</td>
    <td>ELOQUENCE</td>
    <td>MILITAIRE</td>
    <td>POPULARITE</td> 
  </tr>
<?
// on crée la requête SQL
$sql = "SELECT login FROM informations ORDER BY argent DESC LIMIT 0,10";
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$top_argent = array();
// on affiche les informations de l'enregistrement en cours
while($row = mysql_fetch_assoc($req))
{
    $top_argent[] = $row['login'];
}
// on crée la requête SQL
$sql = "SELECT login FROM informations ORDER BY intelligence LIMIT 0,10";
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
// on affiche les informations de l'enregistrement en cours
$top_intelligence = array();
while($row = mysql_fetch_assoc($req))
{
    $top_intelligence[] = $row['login'];
}
// on crée la requête SQL
$sql = "SELECT login FROM informations ORDER BY puissance LIMIT 0,10";
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
// on affiche les informations de l'enregistrement en cours
$top_puissance = array();
while($row = mysql_fetch_assoc($req))
{
    $top_puissance[] = $row['login'];
}
// on crée la requête SQL
$sql = "SELECT login FROM informations ORDER BY charisme LIMIT 0,10";
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
// on affiche les informations de l'enregistrement en cours
$top_charisme = array();
while($row = mysql_fetch_assoc($req))
{
    $top_charisme[] = $row['login'];
}
// on crée la requête SQL
$sql = "SELECT login FROM informations ORDER BY reputation LIMIT 0,10";
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
// on affiche les informations de l'enregistrement en cours
$top_reputation = array();
while($row = mysql_fetch_assoc($req))
{
    $top_reputation[] = $row['login'];
}
// on crée la requête SQL
$sql = "SELECT login FROM informations ORDER BY eloquence LIMIT 0,10";
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
// on affiche les informations de l'enregistrement en cours
$top_eloquence = array();
while($row = mysql_fetch_assoc($req))
{
    $top_eloquence[] = $row['login'];
}
// on crée la requête SQL
$sql = "SELECT login FROM informations ORDER BY armee LIMIT 0,10";
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
// on affiche les informations de l'enregistrement en cours
$top_armee = array();
while($row = mysql_fetch_assoc($req))
{
    $top_armee[] = $row['login'];
}
// on crée la requête SQL
$sql = "SELECT login FROM informations ORDER BY popularite LIMIT 0,10";
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
// on affiche les informations de l'enregistrement en cours
$top_popularite = array();
while($row = mysql_fetch_assoc($req))
{
    $top_popularite[] = $row['login'];
}
// on ferme la connexion à mysql
mysql_close();
// On compte le nombre de ligne des tableaux en comptant le premier:
$nb = count($top_argent)
?>
<?php
for($i = 0; $i < $nb; $i++)
{
?>
  <tr>
    <td><font face='Verdana' size='2'><?php echo($top_argent[$i]); ?></font></td>
    <td><font face='Verdana' size='2'><?php echo($top_intelligence[$i]); ?></font></td>
    <td><font face='Verdana' size='2'><?php echo($top_puissance[$i]); ?></font></td>
    <td><font face='Verdana' size='2'><?php echo($top_charisme[$i]); ?></font></td>
    <td><font face='Verdana' size='2'><?php echo($top_eloquence[$i]); ?></font></td>
    <td><font face='Verdana' size='2'><?php echo($top_eloquence[$i]); ?></font></td>
    <td><font face='Verdana' size='2'><?php echo($top_armee[$i]); ?></font></td>
    <td><font face='Verdana' size='2'><?php echo($top_popularite[$i]); ?></font></td>
  </tr>
<?php
}
?>
</table>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 93 Messages

10 oct. 2005, 00:28


UN GRAND MERCI !!

Quelle rapidité de réponse !

Je n'ai jamais vu un forum comme ça, vous êtes vraiment très forts !

Vraiment, j'espère qu'un jour, je serai aussi expérimenté pour aider comme vous le faites....

Sinon, ça MARCHE !
MERCI...

J'étais un peu sur la voie, regarde ce que j'étais en train de tester, lol...
Moi, ça mettait uniquement la dernière personne sur les 10, mais le tableau était redevenu normal, déjà...

Je vais bien regarder comment tu as fait, pour bien comprendre mes erreurs !
MERCI encore...


Code : Tout sélectionner

<? // on se connecte à MySQL $db = mysql_connect('localhost', 'root', ''); // on sélectionne la base mysql_select_db('colons',$db); ?> <table class="tableau"> <tr> <th colspan="8">CLASSEMENT en temps réel ( 10 premiers )</th> </tr> <tr> <td>FORTUNE</td> <td >INTELLIGENCE</td> <td>FORCE</td> <td>CHARISME</td> <td>REPUTATION</td> <td>ELOQUENCE</td> <td>MILITAIRE</td> <td>POPULARITE</td> </tr> <? // on crée la requête SQL $sql = "SELECT login FROM informations ORDER BY argent DESC LIMIT 0,10"; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on affiche les informations de l'enregistrement en cours while($row = mysql_fetch_assoc($req)) { $_SESSION['login_argent1'] = $row['login']; } // on crée la requête SQL $sql = "SELECT login FROM informations ORDER BY intelligence DESC LIMIT 0,10"; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on affiche les informations de l'enregistrement en cours while($row = mysql_fetch_assoc($req)) { $_SESSION['login_intelligence'] = $row['login']; } // on crée la requête SQL $sql = "SELECT login FROM informations ORDER BY puissance DESC LIMIT 0,10"; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on affiche les informations de l'enregistrement en cours while($row = mysql_fetch_assoc($req)) { $_SESSION['login_puissance'] = $row['login']; } // on crée la requête SQL $sql = "SELECT login FROM informations ORDER BY charisme DESC LIMIT 0,10"; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on affiche les informations de l'enregistrement en cours while($row = mysql_fetch_assoc($req)) { $_SESSION['login_charisme'] = $row['login']; } // on crée la requête SQL $sql = "SELECT login FROM informations ORDER BY reputation DESC LIMIT 0,10"; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on affiche les informations de l'enregistrement en cours while($row = mysql_fetch_assoc($req)) { $_SESSION['login_reputation'] = $row['login']; } // on crée la requête SQL $sql = "SELECT login FROM informations ORDER BY eloquence DESC LIMIT 0,10"; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on affiche les informations de l'enregistrement en cours while($row = mysql_fetch_assoc($req)) { $_SESSION['login_eloquence'] = $row['login']; } // on crée la requête SQL $sql = "SELECT login FROM informations ORDER BY armee DESC LIMIT 0,10"; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on affiche les informations de l'enregistrement en cours while($row = mysql_fetch_assoc($req)) { $_SESSION['login_armee'] = $row['login']; } // on crée la requête SQL $sql = "SELECT login FROM informations ORDER BY popularite DESC LIMIT 0,10"; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on affiche les informations de l'enregistrement en cours while($row = mysql_fetch_assoc($req)) { $_SESSION['login_popularite'] = $row['login']; } ?> <tr> <td><font face='Verdana' size='2'><?php echo($_SESSION['login_argent']);?></font></td> <td><font face='Verdana' size='2'><?php echo($_SESSION['login_intelligence']);?></font></td> <td><font face='Verdana' size='2'><?php echo($_SESSION['login_puissance']); ?></font></td> <td><font face='Verdana' size='2'><?php echo($_SESSION['login_charisme']); ?></font></td> <td><font face='Verdana' size='2'><?php echo($_SESSION['login_reputation']); ?></font></td> <td><font face='Verdana' size='2'><?php echo($_SESSION['login_eloquence']); ?></font></td> <td><font face='Verdana' size='2'><?php echo($_SESSION['login_armee']); ?></font></td> <td><font face='Verdana' size='2'><?php echo($_SESSION['login_popularite']); ?></font></td> </tr> <tr> <td><font face='Verdana' size='2'><?php echo($_SESSION['login_argent']);?></font></td> <td><font face='Verdana' size='2'><?php echo($_SESSION['login_intelligence']);?></font></td> <td><font face='Verdana' size='2'><?php echo($_SESSION['login_puissance']); ?></font></td> <td><font face='Verdana' size='2'><?php echo($_SESSION['login_charisme']); ?></font></td> <td><font face='Verdana' size='2'><?php echo($_SESSION['login_reputation']); ?></font></td> <td><font face='Verdana' size='2'><?php echo($_SESSION['login_eloquence']); ?></font></td> <td><font face='Verdana' size='2'><?php echo($_SESSION['login_armee']); ?></font></td> <td><font face='Verdana' size='2'><?php echo($_SESSION['login_popularite']); ?></font></td> </tr> </table> <? // on ferme la connexion à mysql mysql_close(); ?>

Mammouth du PHP | 19672 Messages

10 oct. 2005, 00:33

Le principe est relativement simple: pour chaque catégorie, tu auras le même nombre de lignes. Partant de là, en enregistrant chaque catégorie en ordre décroissant selon tes requêtes, j'aurai 8 tableaux indexés qui auront le même nombre d'éléments. Donc quand tous les tableaux sont initialisés, il reste à faire une boucle pour créer les lignes du tableau html en prenant pour chaque ligne l'élément correspondant au même index pour la ligne en cours.

Je ne sais pas si c'est très clair, mais si tu coinces, reviens poser des questions.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 93 Messages

10 oct. 2005, 00:57

Je te remercie Cyrano.

C'est tellement logique !

Et moi, je cherche toujours à faire compliqué...

Ainsi , pour les paiements, je cherchais à créer une ligne avec IF alors qu'il en existait déjà une, et qu'il m'a suffi finalement d'ajouter un AND tout au bout ! :oops: :P

Bref...
Merci encore.

( Euh... :oops: ... C'est vrai qu'il a un grand nez quand même... )

Mammouth du PHP | 19672 Messages

10 oct. 2005, 08:18

( Euh... :oops: ... C'est vrai qu'il a un grand nez quand même... )
:langue:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: