Afficher une liste. [Résolu]

Signaler
Messages postés
26
Date d'inscription
mercredi 28 mai 2003
Statut
Membre
Dernière intervention
3 décembre 2004
-
Messages postés
282
Date d'inscription
vendredi 16 mai 2003
Statut
Membre
Dernière intervention
19 juillet 2006
-
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

Messages postés
113
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
9 mars 2007

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
Messages postés
282
Date d'inscription
vendredi 16 mai 2003
Statut
Membre
Dernière intervention
19 juillet 2006

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!!!
Messages postés
26
Date d'inscription
mercredi 28 mai 2003
Statut
Membre
Dernière intervention
3 décembre 2004

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";

?>
Messages postés
282
Date d'inscription
vendredi 16 mai 2003
Statut
Membre
Dernière intervention
19 juillet 2006

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!!!
Messages postés
26
Date d'inscription
mercredi 28 mai 2003
Statut
Membre
Dernière intervention
3 décembre 2004

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?
Messages postés
113
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
9 mars 2007

$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
Messages postés
26
Date d'inscription
mercredi 28 mai 2003
Statut
Membre
Dernière intervention
3 décembre 2004

Non plus. Mais je commence à me demander si multimania n'a pas rien a voir dans tout ça. C'est possible?
Messages postés
282
Date d'inscription
vendredi 16 mai 2003
Statut
Membre
Dernière intervention
19 juillet 2006

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!!!
Messages postés
26
Date d'inscription
mercredi 28 mai 2003
Statut
Membre
Dernière intervention
3 décembre 2004

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.
Messages postés
26
Date d'inscription
mercredi 28 mai 2003
Statut
Membre
Dernière intervention
3 décembre 2004

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.
Messages postés
113
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
9 mars 2007

Mais de rien c tjs un plaisir ... bonne continuation ...

AkeluX
Messages postés
26
Date d'inscription
mercredi 28 mai 2003
Statut
Membre
Dernière intervention
3 décembre 2004

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 "
";
Messages postés
113
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
9 mars 2007

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
Messages postés
26
Date d'inscription
mercredi 28 mai 2003
Statut
Membre
Dernière intervention
3 décembre 2004

Oui il n'y a plus le gros espace mais le tableau n'a tjs pas de cases.
Messages postés
113
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
9 mars 2007

Tu es sûr que ta requête retourne quelque chose ?

AkeluX
Messages postés
26
Date d'inscription
mercredi 28 mai 2003
Statut
Membre
Dernière intervention
3 décembre 2004

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("
");
Messages postés
113
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
9 mars 2007

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
Messages postés
26
Date d'inscription
mercredi 28 mai 2003
Statut
Membre
Dernière intervention
3 décembre 2004

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.
Messages postés
282
Date d'inscription
vendredi 16 mai 2003
Statut
Membre
Dernière intervention
19 juillet 2006

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!!!
Messages postés
282
Date d'inscription
vendredi 16 mai 2003
Statut
Membre
Dernière intervention
19 juillet 2006

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!!!