problème de version de serveur???

Eléphant du PHP | 139 Messages

06 sept. 2007, 15:32

Quelqu'un pourrait m'expliquer pourquoi la requête suivante fonctionne sur easyphp 2.0.0.0 mais pas sur mon serveur linux mandrake 10.1...

Code : Tout sélectionner

$rq = " SELECT nom, groupe, COUNT(motif) FROM rapports AS t INNER JOIN liste_eleves AS s ON t.id_eleve=s.id_eleve WHERE motif = 'retard' GROUP BY nom ORDER BY COUNT(motif) DESC "; $result = mysql_query ($rq);
Si j'enlève le COUNT, ça passe!
Si c'est une question de version de serveur, y a t-il une solution autre qu'une mise à jour de celui-ci car j'ai peur de tout bousiller si j'y touche parce que tout le reste fonctionne. Est-ce que je pourrais juste modifier ma requête ?

ViPHP
ViPHP | 5924 Messages

06 sept. 2007, 16:22

"ne pas fonctionner" ca ne veut rien dire. Donne nous l'erreur ou le problème.

Eléphant du PHP | 139 Messages

06 sept. 2007, 16:41

Bien sûr.... mon erreur!

Voici le message d'erreur!
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/html/gestion/afficher_classement_retard.php on line 36
Nom de l'élève Groupe Nombre de retards
et voici la fameuse ligne 36
36...... $bg = '#dddddd';
37...... while ($ligne = mysql_fetch_array($result, MYSQL_NUM))
... {
$cp=($ligne[0]);
$bg = ($bg=='#dddddd' ? '#ffffff' : '#dddddd');
echo ' <tr bgcolor="'.$bg, '">
<td align="left">'.$ligne[0],'</td>
<td align="center">'.$ligne[1],'</td>
<td align="center">'.$ligne[2],'</td>
</tr>
';
}

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 sept. 2007, 17:18

Faisons confiance à php.. s'il dit que $result n'est pas une ressource mysql valide, y a de grande chance que $result ne soit pas une ressource mysql valide. Il faut donc aller voir ce que contient $result, à savoir : $result = mysql_query ($rq);

On peut donc supposer que mysql_query() n'a pas retourné de ressource mysql valide. On peut donc se demander s'il n'y a pas eu une erreur lors de l'exécution de la requête, et le plus simple pour le vérifier c'est d'utiliser or die(mysql_error()) ou d'afficher la requête génétée et de la jouer dans mysql ou phpmyadmin.

A vérifier si la connexion à la base à aboutie, si les tables existes, si les champs sont présents, et s'il n'y a pas d'ambiguité quant à la table dans laquelle ils se trouvent... On peut aussi regarder la requête et voir entre autre qu'il manque le champ "groupe" présent dans le select mais pas dans le group by, alors qu'aucune fonction de groupe ne lui est appliquée.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 139 Messages

06 sept. 2007, 17:58

J'ai trouvé. Il fallait mettre des ' à la clause ORDER BY. ce qui donne
$rq = " SELECT nom, groupe, COUNT(motif)
FROM rapports AS t
INNER JOIN liste_eleves AS s
ON t.id_eleve=s.id_eleve
WHERE motif = 'retard'
GROUP BY nom
ORDER BY 'COUNT(motif)' DESC
";
$result = mysql_query ($rq);
Merci pour l'aide!

ViPHP
ViPHP | 5924 Messages

06 sept. 2007, 20:56

J'ai trouvé. Il fallait mettre des ' à la clause ORDER BY. ce qui donne
Laisse moi en douter. Vérifie les résultats parce que je pense que tu vas avoir des résultats erronés…

Eléphant du PHP | 139 Messages

06 sept. 2007, 21:03

merci, je vais vérifier ce soir!

ViPHP
ViPHP | 5924 Messages

06 sept. 2007, 21:10

Et sinon, c'est réglé ce sujet ?

Eléphant du PHP | 139 Messages

06 sept. 2007, 21:12

oui! enfin, pour mon application!

ViPHP
ViPHP | 5924 Messages

07 sept. 2007, 01:05

Ce sont tes élèves qui vont être contents :mrgreen: