> Tous les forumsForum des Webmasters

 Je n'arrive tojorus pas à compter !!urgent
Statut du sujet : NON RESOLU Imprimer
 cekica
  Posté le 10/02/2007 @ 13:42  
 Petit astucien

492 Messages

Bonjour tous le monde !!

Voilà je souhaite compterl e nombre de champs dans mon forum mais ca n'affiche rien et j'ai besoin de votre aide pour savoir où st l'erreur dans mes requetes:

$html = "SELECT COUNT(*) FROM forum_tbl WHERE forum = html";
$css = "SELECT COUNT(*) FROM forum_tbl WHERE forum = css";
$javascript = "SELECT COUNT(*) FROM forum_tbl WHERE forum = javascript";
$flash = "SELECT COUNT(*) FROM forum_tbl WHERE forum = flash";
$php = "SELECT COUNT(*) FROM forum_tbl WHERE forum = php";
$asp = "SELECT COUNT(*) FROM forum_tbl WHERE forum = asp";
$net = "SELECT COUNT(*) FROM forum_tbl WHERE forum = .net";
$cgi = "SELECT COUNT(*) FROM forum_tbl WHERE forum = cgi";
$editeur = "SELECT COUNT(*) FROM forum_tbl WHERE forum = editeur";
$graphiques = "SELECT COUNT(*) FROM forum_tbl WHERE forum = graphiques";
$ftp = "SELECT COUNT(*) FROM forum_tbl WHERE forum = ftp";
$serveur = "SELECT COUNT(*) FROM forum_tbl WHERE forum = serveur";

$rhtml = mysql_query($html);
$rcss = mysql_query($css);
$rjava = mysql_query($javascript);
$rflash = mysql_query($flash);
$rphp = mysql_query($php);
$rasp = mysql_query($asp);
$rnet = mysql_query($net);
$rcgi = mysql_query($cgi);
$rediteur = mysql_query($editeur);
$rgraph = mysql_query($graphiques);
$rftp = mysql_query($ftp);
$rserv = mysql_query($serveur);

$afhtml = @mysql_num_rows($rhtml);
$afcss = @mysql_num_rows($rcss);
$afjava = @mysql_num_rows($rjava);
$afflash = @mysql_num_rows($rflash);
$afphp = @mysql_num_rows($rphp);
$afasp = @mysql_num_rows($rasp);
$afnet = @mysql_num_rows($rnet);
$afcgi = @mysql_num_rows($rcgi);
$afediteur = @mysql_num_rows($rediteur);
$afgraph = @mysql_num_rows($rgraph);
$afftp = @mysql_num_rows($rftp);
$afserv = @mysql_num_rows($rserv);

Je vous remerci de vos éventuelles réponses.

 Afficher le profil de cekicaEnvoyer un message privé à cekica
 
 
Publicité
 Malcolm  Posté le 11/02/2007 à 00:17  
  Astucien


7306 Messages

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 :

  1. dans le cas d'une requête sur un utilisateur, tu rapatries son mot de passe ... Bonjour la sécurité ;
  2. 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 ;
  3. 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 :

  1. 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)
  2. 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).

Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de la page
 cekica  Posté le 11/02/2007 à 11:40  
Petit astucien

492 Messages

Merci de chez Merci Malcolm.

J'essaye ca tous de suite.

Afficher le profil de cekicaEnvoyer un message privé à cekica
  Revenir en haut de la page
Haut de la page 
Inscrivez-vous !
- Posez vos questions

- Résolvez vos problèmes

- Aidez les autres

- Participez et créez vos discussions

- Dialoguez en privé avec d'autres membres

- Suivez vos sujets préférés

- Affichez les signatures des membres

TOUT EST GRATUIT !

Je crée mon compte



Vous avez besoin d'aide ?
Des centaines d'experts sont à votre disposition sur les forums PC Astuces pour vous aider gratuitement, 24h/24, 7j/7.

Les derniers sujets résolus !
 

 > Tous les forumsForum des Webmasters

 
Forum PC Astuces© 1997-2008 WebastucesAller en haut de la page