ce n'est pas une bonne idée de faire un SELECT *... A priori, cette commande ne devrait jamais être utilisée. Pour 3 raisons :
- dans le cas d'une requête sur un utilisateur, tu rapatries son mot de passe ... Bonjour la sécurité ;
- si ta table comporte une vingtaine de champs et que ta condition renvoie 20 enregistrements, ça te fait 400 (voire 800 même selon que tu fasses un fetch array ou un fetch row) valeurs retournées, et je ne parle même pas de la taille intrinsèque de ces valeurs ... => potentielle surcharge du serveur SQL, à défaut d'une surcharge réseau ;
- si jamais tu modifies la structure de ta table, et que "demain", elle comporte 30 tables, ça sera 30 * 20 = 600 (voire 1200) réponses ramenées, donc pas cool ...
Qu'il s'agisse d'un SELECT, d'un INSERT ou encore d'un UPDATE, l'idéal est toujours de préciser sur quels champs tu travailles.
Ici pour compter le nombre d'occurences ça ne sert strictement à rien de faire un SELECT *
je te montre UN exemple, tu adapteras pour les autres. Je considère que ta table a sa clé primaire qui est un champ nommé "id".
$html = "SELECT COUNT(id) AS nb_html FROM forum_tbl WHERE forum = html";
$rhtml = mysql_query($html);
$afhtml = mysql_fetch_array($rhtml);
echo "<p>Il y a ".$afhtml['nb_html']." message(s) dans le forum HTML.</p>";
Ce que tu faisais ne marchait pas pour 2 raisons :
- tu rapatriais des enregistrements, mais mysql_num_rows ne marche que si tu retournes des lignes, et non pas une sommme seule (or tu as fait un COUNT)
- tu as mis un @ devant la fonction qui empêche l'affichage d'un message d'erreur. Si tu avais pensé à les laisser pour le développement, tu aurais sûrement eu un morceau de réponse ...
Tiens j'ai même eu une idée qui pourrait te simplifier le travail ... Faire une "moulinette". L'idée est de ne faire qu'une seule requête mais de changer juste l'intitulé du forum, et de stocker le résultat dans un tableau. Voici à vue d'oeil de minuit ce que je ferais :
<?php
$array_forums = array();
$array_forums = array(
'html' => 0,
'css' => 0,
'javascript' => 0,
'flash' => 0,
'php' => 0,
'asp' => 0,
'.net' => 0,
'cgi' => 0,
'editeur' => 0,
'graphiques' => 0,
'ftp' => 0,
'serveur' => 0);
// On effectue les requêtes
foreach($array_forums as $forum => $nb_msg)
{
$req_nbmsg = sprintf("SELECT COUNT(id) AS nb_mess FROM forum_tbl WHERE forum = '%s';",$forum);
$ds_nbmsg = mysql_query($req_nbmsg) or die($req_nbmsg."<br/>".mysql_error());
$dr_nbmsg = mysql_fetch_array($ds_nbmsg);
// mise à jour du tableau
$array_forums[$forum] = $dr_msg['nb_mess'];
}
// Lecture du tableau : toutes les valeurs
foreach($array_forums as $forum => $nb_msg)
{
echo "<p>Il y a ".$nb_msg." message"; echo ($nb_msg > 1) ? 's' : ''; echo "dans le forum ".$forum."</p>";
}
// Lecture du tableau : une valeur en particulier
echo "<p>Il y a ".$array_forums['html']." message"; echo ($array_forums['html'] > 1) ? 's' : ''; echo "dans le forum HTML.</p>";
?>
et pour ajouter un forum, tu n'as qu'à ajouter une ligne au tableau du début
(pour la lecture, j'ai fait un peu plus complexe puisque j'ai pris en compte l'éventuel pluriel pour éviter une faute d'orthographe).