Afficher une liste.

Résolu
cs_Kaeru Messages postés 26 Date d'inscription mercredi 28 mai 2003 Statut Membre Dernière intervention 3 décembre 2004 - 30 sept. 2004 à 19:22
cs_windu Messages postés 282 Date d'inscription vendredi 16 mai 2003 Statut Membre Dernière intervention 19 juillet 2006 - 6 oct. 2004 à 09:53
Je savais pas quoi mettre comme titre pour expliquer mon problème.

J'ai une table nommée Perso
Dans cette table se trouve plusieurs colones.
La colone qui m'interesse est la colone Race.

Le principe c'est que lorsque quelqu'un s'inscrit il choisi sa race.

Et ma question est de savoir comment fait un block ou il est écrit:
Race1 : tant
Race2 : tant
Etc..

J'ai ce code mais ça ne fonctionne pas.
Quelqu'un pourait m'aider svp? Merci

<?
$sql_serveur = 'localhost';
$sql_user = 'user';
$sql_password = 'pass';
$db2 = 'bdd';
$sql_table = 'PERSO';

$db = mysql_connect($sql_serveur, $sql_user, $sql_password) or die
('Erreur : '.mysql_error() );
mysql_select_db($db2) or die ('Erreur :'.mysql_error());
$query = "SELECT Race FROM Perso GROUP BY Race";
$result = mysql_query($query, $db) or die ("Requête invalide");
$count = mysql_num_rows($result);

mysql_close($db);

echo $count." Classement des races.";
?>

23 réponses

AkeluX Messages postés 113 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 9 mars 2007 2
1 oct. 2004 à 20:57
Je viens de tester mon code et il marche très bien chez moi en tout cas ....

<?
mysql_connect("localhost","test","test");
mysql_select_db("test");

$query = "SELECT Race, count( Race ) AS TotRace FROM TLT_Perso GROUP BY Race";
$result = mysql_query($query);
while($data=mysql_fetch_array($result))
{
echo "Nombre de " . $data["Race"] . " : " . $data["TotRace"] . "
";
}
?>


Il faut faire attention à quelques détails comme la sensibilité de la case des systèmes Linux pour les champs et les noms de table ... J ai pas d hébergement chez multimania donc je peux pas vraiment plus t aider ... dsl

AkeluX
3
cs_windu Messages postés 282 Date d'inscription vendredi 16 mai 2003 Statut Membre Dernière intervention 19 juillet 2006
1 oct. 2004 à 09:40
essaie plutot:
$query = "SELECT Race FROM Perso ORDER BY Race";

Tu peux meme enlever le GROUP BY Race s'il n'existe pas 2 races identiques...
Vérifie aussi l'orthographe, et la casse: respecte les majuscules/minuscules quoi....
Que la Force soit avec toi, Jeune Padawan!!!
0
cs_Kaeru Messages postés 26 Date d'inscription mercredi 28 mai 2003 Statut Membre Dernière intervention 3 décembre 2004
1 oct. 2004 à 12:11
Heu voila où j'en suis. Ca fonctione mais le code est gros.
Quelqu'un sait comment je peut réduire le code?

<?
$sql_serveur = 'localhost';
$sql_user = 'user';
$sql_password = 'pass';
$db2 = 'bdd';
$sql_table = 'TLT_Perso';

$db = mysql_connect($sql_serveur, $sql_user, $sql_password) or die
('Erreur : '.mysql_error() );
mysql_select_db($db2) or die ('Erreur :'.mysql_error());
$query1 = "SELECT Race FROM TLT_Perso WHERE Race='Humain'";
$query2 = "SELECT Race FROM TLT_Perso WHERE Race='Elfe'";
$query3 = "SELECT Race FROM TLT_Perso WHERE Race='Nain'";
$query4 = "SELECT Race FROM TLT_Perso WHERE Race='Gobelin'";
$result1 = mysql_query($query1, $db) or die ("Requête invalide");
$result2 = mysql_query($query2, $db) or die ("Requête invalide");
$result3 = mysql_query($query3, $db) or die ("Requête invalide");
$result4 = mysql_query($query4, $db) or die ("Requête invalide");
$count1 = mysql_num_rows($result1);
$count2 = mysql_num_rows($result2);
$count3 = mysql_num_rows($result3);
$count4 = mysql_num_rows($result4);

mysql_close($db);

echo "Nombre d'Humains: $count1
Nombre d'Elfes: $count2
Nombre de Nains: $count3
Nombre de Gobelins: $count4";

?>
0
cs_windu Messages postés 282 Date d'inscription vendredi 16 mai 2003 Statut Membre Dernière intervention 19 juillet 2006
1 oct. 2004 à 17:06
oui, tu peux remplacer toutes tes requetes ($queryX...) par une seule requete, eyt tu n'exécute qu'une seule fois le code que tu répéts X fois (car si des nouvelles races apparaissent, tu devras réécrire ton code...):
$query= "SELECT Race FROM TLT_Perso ORDER BY Race";
$result=mysql_query($query) or die ("Requête invalide");
while($data=mysql_fetch_array($result))
{
switch($data['Race'])
{
case "humains":
$tabRace['humain']++;
break;

case "elfes":
$tabRace['humain']++;
break;

case "Nains":
$tabRace['Nains']++;
break;

case "Gobelins":
$tabRace['Gobelins']++;
break;
}
}

Ensuite tu peux afficher ton tableau car il contient 1 case par race, et le nombre de perso de cette race...
Avantage de cette méthode: tu n'as qu'une requête SQL à faire au lieu d'une par Race

Que la Force soit avec toi, Jeune Padawan!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Kaeru Messages postés 26 Date d'inscription mercredi 28 mai 2003 Statut Membre Dernière intervention 3 décembre 2004
1 oct. 2004 à 19:47
D'accord. J'ai modifié le code mais il n'affiche pas le résultat.
J'ai peut être pas mis la commande pour les afficher.
Il faut que je fasse un echo?
0
AkeluX Messages postés 113 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 9 mars 2007 2
1 oct. 2004 à 19:53
$query = "SELECT Race, count( Race ) AS TotRace FROM TLT_Perso GROUP BY Race";
while($data=mysql_fetch_array(mysql_query($query)))
{
echo "Nombre de " . $data["Race"] . " : " . $data["TotRace"];
}

Avec cette requête, tu auras dans Race le nom de la race et dans TotRace le total de personne de la race ...

AkeluX
0
cs_Kaeru Messages postés 26 Date d'inscription mercredi 28 mai 2003 Statut Membre Dernière intervention 3 décembre 2004
1 oct. 2004 à 20:27
Non plus. Mais je commence à me demander si multimania n'a pas rien a voir dans tout ça. C'est possible?
0
cs_windu Messages postés 282 Date d'inscription vendredi 16 mai 2003 Statut Membre Dernière intervention 19 juillet 2006
1 oct. 2004 à 20:49
j'en doute... a partir du moment ou tu as une Base de données et que tu peux faire des requetes dessus... je ne vois pas en quoi il peut te brider sur le type de requete que tu effectue
Que la Force soit avec toi, Jeune Padawan!!!
0
cs_Kaeru Messages postés 26 Date d'inscription mercredi 28 mai 2003 Statut Membre Dernière intervention 3 décembre 2004
1 oct. 2004 à 20:57
Ok. Bah je sais pas trop pourquoi ça marche pas. Surement pour la simple raison que j'y connais rien :)
Merci en tout cas du temps passé à répondre.
0
cs_Kaeru Messages postés 26 Date d'inscription mercredi 28 mai 2003 Statut Membre Dernière intervention 3 décembre 2004
1 oct. 2004 à 21:28
Alors la... si je pouvait te faire la bise je le ferais :)

C'est vraiment très sympas.
Encore merci ça marche exactement comme je voulais que ça soit. Vraiment extra.
0
AkeluX Messages postés 113 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 9 mars 2007 2
1 oct. 2004 à 21:55
Mais de rien c tjs un plaisir ... bonne continuation ...

AkeluX
0
cs_Kaeru Messages postés 26 Date d'inscription mercredi 28 mai 2003 Statut Membre Dernière intervention 3 décembre 2004
3 oct. 2004 à 10:37
Une autre petite question en rapport.
J'ai fait le même principe pour afficher les joueurs dans l'ordre du plus riche au moin riche. Le tableau s'affiche mais je ne voi pas les cases. Quelqu'un pourait me dire la manipulation pour les afficher svp?
De plus, il y a un très grand espace entre la ligne echo "
Classement Richesses:
"; et echo "<gras>Nom |Or Cash |Or Banque |\";</gras> quand la page s'affiche.
Merci

Voici mon code:

echo \"
Classement Richesses:
\";
echo \"<table>----
Nom |Or Cash |Or Banque |\";
$query = \"SELECT Nom,PO,Banque FROM TLT_Perso ORDER BY PO Desc\";
$result = mysql_query($query);
while($data=mysql_fetch_array($result))
{
echo \"----
$num". $data[Nom] . ", <CENTER>" . $data[PO] . "</CENTER>, <CENTER>". $data[Banque] . "</CENTER>,
\";
}
echo "
";
0
AkeluX Messages postés 113 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 9 mars 2007 2
3 oct. 2004 à 15:45
echo "
Classement Richesses:";
echo "<gras># |</gras>Nom |Or Cash |Or Banque |\";
$query = \"SELECT Nom,PO,Banque FROM TLT_Perso ORDER BY PO Desc\";
$result = mysql_query($query);
while($data=mysql_fetch_array($result))
{
echo \"----
$num, ". $data[Nom] . ", <CENTER>" . $data[PO] . "</CENTER>, <CENTER>". $data[Banque] . "</CENTER>, \";
}
echo "
";

Les trucs en gras vont pêtre améliorer la chose sinon j ai aussi supprimer 2
dans ton code ...

AkeluX
0
cs_Kaeru Messages postés 26 Date d'inscription mercredi 28 mai 2003 Statut Membre Dernière intervention 3 décembre 2004
3 oct. 2004 à 17:19
Oui il n'y a plus le gros espace mais le tableau n'a tjs pas de cases.
0
AkeluX Messages postés 113 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 9 mars 2007 2
3 oct. 2004 à 19:40
Tu es sûr que ta requête retourne quelque chose ?

AkeluX
0
cs_Kaeru Messages postés 26 Date d'inscription mercredi 28 mai 2003 Statut Membre Dernière intervention 3 décembre 2004
3 oct. 2004 à 19:48
Oui elle retourne. Mais j'ai trouvé la solution. Tout se qui est gras sont les modifs:

echo "
Classement Richesses:";
print(" |Nom |Or Cash |Or Banque |\");
$query = \"SELECT Nom,PO,Banque FROM TLT_Perso ORDER BY PO Desc\";
$result = mysql_query($query);
while($data=mysql_fetch_array($result))
{
print(\"----
, ". $data[Nom] . ", <CENTER>" . $data[PO] . "</CENTER>, <CENTER>". $data[Banque] . "</CENTER>, \");
}
print("
");
0
AkeluX Messages postés 113 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 9 mars 2007 2
3 oct. 2004 à 19:51
Ah j avais rien compris à la question, je pensais qu il n y avait rien qui s afficher mais c était juste la bordure que tu voulais ...

Les print doivent rien changer par rapport au echo normalement ...

AkeluX
0
cs_Kaeru Messages postés 26 Date d'inscription mercredi 28 mai 2003 Statut Membre Dernière intervention 3 décembre 2004
4 oct. 2004 à 00:36
wé en fait c'est juste le table border='1' :)
Merci pour l'aide :)

J'aurais une autre question mais je pense pas que sa soit réalisable.
Dans le jeu que je fait, le systeme de date n'est pas le même que le notre. 24h par jour, 10 jours par moi et 10 mois par cycle (année).
En fait j'aurais voulu savoir si c'était possible que lorsque le visiteur se connect sur le site, au lieu de voir la date réel de notre monde, il vois la date de l'univers du jeu.
0
cs_windu Messages postés 282 Date d'inscription vendredi 16 mai 2003 Statut Membre Dernière intervention 19 juillet 2006
4 oct. 2004 à 08:55
Tu peux faire ca... Il faut que tu définisse ton temps 0 (par exemple 1° janvier 2000) et que tu calcules combien de jours de décalage cela te crée par rapport au temps Unix.
Ainsi lorsque quelqu'un se connecte tu récupère le Temps Unix (le vrai temps, dont le 0 est le 1° janvier 1970...) et tu compare à TON temps 0:
Aujourd'hui nous sommes le 4 Octobre 2004, il y a donc X jours écoulés depuis le début de ton système (=le nombre jours sous Unix - décalage du 1° janvier 2000. J'ai trop la flemme de faire le calcul).
Tu convertis X jours (qui est toujours sous le format normal: 24h/31j/12m) en secondes (car je suppose que ca ne change pas...) et tu reconvertis Y (c'est le nombre de secondes écoulés depuis le 1° janvier 2000) en temps de ton jeu (tu divise par 3600 pour les heures, puis par 10 pour les jours, puis par 10 encore pour les années)
Je sais pas si j'ai été très clair??? :question)
Bonne chance et dis nous ce que ca donne...
P.S.:évite jusqte de poster une nouvelle question dans un forum qui a déjà eu une réponse favorable... le gens ne vont pas forcément venir voir!

Que la Force soit avec toi, Jeune Padawan!!!
0
cs_windu Messages postés 282 Date d'inscription vendredi 16 mai 2003 Statut Membre Dernière intervention 19 juillet 2006
4 oct. 2004 à 09:00
Petite correction:
_ Le temsp Unix est donné en secondes! pas besoin de faire de conversion jours->secondes
_ La division par 10, c'était pour les mois et non pour les années...

Que la Force soit avec toi, Jeune Padawan!!!
0
Rejoignez-nous