Probleme lors de la lecture de données

Signaler
Messages postés
40
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
20 novembre 2008
-
Messages postés
40
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
20 novembre 2008
-
Salut tout le monde,

Dans le script que je suis en train de programmer, j'effectue une opération simple: la lecture dans une base MySQL. Malgré tout, j'ai un message d'erreur qui apparait lors de l'execution, je ne vois pas vraiment pourquoi.

Voici le passage qui provoque un message d'erreur:

$sql = "SELECT idlive, match, minute, com1, com2, com FROM nuke_live_live order by `idlive` desc";
$result = $db->sql_query($sql);
while (list($idlive, $match, $minute, $com1, $com2, $com)=mysql_fetch_array($result)){
if ($com=="") {
echo(''.$minute.',
'.$com1.',
'.$com2.'
');
}
else {
echo(''.$com.'
');
}
}

il s'agit en fait d'un live texte pour un match de foot, les données correspondent à:
$idlive > Pour identifier le commentaire
$match > Pour identifier le match du commentaire (j'ai une autre table qui gere les caracteristiques du match, c'est a dire, les equipes et le score)
$minute > Indique le temps de jeu pour le comentaire
$com1 > Commentaire pour l'equipe 1
$com2 > Commentaire pour l'equipe 2
$com > Commentaire neutre (pour par exemple anoncer la mi temps, etc).
Je fais donc en sorte, dans l'extrait de script ci dessus que si $com est nul, cela affiche un tableau à 3 colonnes ($minute, $com1 et $com2), sinon creer un tableau à 2 colonnes (une vide, pour garder la forme, et $com centré).
Maintenant vous savez ce que je souhaite faire avec mon script.

Pour finir, voila le message d'erreur qui apparait:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/web43/html/kidlogis.com/modules/Live3/index.php on line 47

Quelqu'un a une idée?
Merci beaucoup d'avance, parce que là, je comprends pas trop...

23 réponses

Messages postés
1250
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
30 septembre 2007
1
salut,

je connais pas ta syntaxe ici : $result = $db->sql_query($sql);

essai de la remplacer par ca : $result = mysql_query($sql);



Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
Messages postés
40
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
20 novembre 2008

Merci tucsoufle, mais le résultat est le même. J'ai oublié de préciser deux choses:
1/ J'utilise Php Nuke
2/ Dans la même page, je fais appel à une autre table avec exactement le même script que celui que je vous ai passé (afin d'obtenir les noms des deux equipes et les scores), et cela marche.

Pour voir ce que cela donne, voici le lien direct: http://www.chaudron-vert.com/modules.php?name=Live3

Si vous desirez avoir le code complet (partie admin comprise, faites moi signe), par ailleurs, si vous desirez que je vous donne temporairement les droits d'accès à l'administration du module pour voir le resultat, aucun soucis. La partie d'admin a 3 rubriques. Nouveau match, editer un match, et gerer le live. Ces trois rubriques fonctionnent parfaitement.
Messages postés
1250
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
30 septembre 2007
1
le probleme dans ce cas doit venir de ta requete, verifie qu'elle est bien formuler

si ce n'est pas ça, je ne vois pas, désolé

Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
Messages postés
40
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
20 novembre 2008

ok merci c'est pas grave
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

bah...file la classe qui contient la fonction membre sql_query

file aussi ma structure de ta table nuke_live_live

enfin, pourquoi idlive est il entre quote ? Ce n'est pas la peine a priori.

cette erreur indique que mysql a un probleme soit avec la query, soit avec la fonction appelant la query (sql_query dans ton cas). Visiblement, si tu as suivi les conseils de tucsouffle, c'est que ca vient de ta query. Ta query est correcte hormis le 'idlive' mais ca ne doit pas causer d'erreur a priori. Donc, c'est que la table a un soucis, ou plutot que ta query n'est pas en accord avec ta table. File donc la structure de ta table, et, sait-on jamais, toute la classe a laquelle appartient sql_query(), on y verra plus clair.
Messages postés
40
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
20 novembre 2008

vous trouverez toutes les sources à http://www.chaudron-vert.com/live.zip (10ko)
Encore merci
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Re,

ecoute, tu as l'air sympa, mais je ne vais perso pas me taper 10ko de source a lire pour trouver ton probleme...donne juste la structure de ta base et eventuellement ta classe, et ca devrait suffire.
Messages postés
40
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
20 novembre 2008

D'acord pas de soucis, j'ai mis le lien vers la source complete juste au cas où qqn desirais voir la source complete. Je tiens juste à signaler que la page permettant la lecture pese 2ko (l'admin etant la plus grosse).

Pour ce qui est de la base nuke_live_live, voici sa structure:

Champ Type Null Défault Extra

Idlive tinyint(4) Non auto_increment
match varchar(10) Non
minute char(2) Oui NULL
com1 varchar(255) Oui NULL
com2 varchar(255) Oui NULL
com varchar(255) Oui NULL
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Ok...



ben mets Idlive avec un I masjucule dans ta query et ca devrait aller mieux ;-) Petite faute d'inattention a mon avis.



$sql = "SELECT Idlive, match, minute, com1, com2, com FROM nuke_live_live order by Idlive desc";
Messages postés
40
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
20 novembre 2008

aouch désolé, en fait c'est sur le forum que j'ai fait une faute d'inattention. Je viens de verifier, il n'y a pas de majuscule à idlive.
Retour à la case départ
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Ah merde lol...

Bon ca va, je regarde de plus pres lol. Mais demain, la je vais partir desole. Peut-etre que qqu'un d'autre aura une reponse d'ici la :-)
Messages postés
40
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
20 novembre 2008

merci c'est sympa :)

Sinon je pourrais effectuer ma lecture par quel autre moyen? (peux m'importe le moyen utilisé, si au final je peux afficher mes données correctement) :)

La seule chose que je trouve bizar, c'est que la requete que je vous ai passé ci dessus est mise sur la meme page juste au dessus mais pour une autre table et cela marche sans probleme. Je vais vous passer le script complet de la page ça vous aidera peut-etre mieux?

<?php
if (!eregi("modules.php", $_SERVER['PHP_SELF'])) {
die ("vous ne pouvez pas acceder a ce fichier directement...");
}


$module_name = basename(dirname(__FILE__));
$pagetitle = " - Live";


$index = 0;



function live(){
echo('<style type="text/css">.Style7 {font-family: "Comic Sans MS"; font-size: 36px; }</style>');
include("header.php");
OpenTable();
$sql = "SELECT idmatch, equipe1, score1, equipe2, score2 FROM nuke_live_match order by `idmatch` desc limit 1";
$result = $db->sql_query($sql);
while (list($idmatch, $equipe1, $score1, $equipe2, $score2)=mysql_fetch_array($result)){
echo ("<td class='Style7'><center>".$equipe1."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".$score1." - ".$score2."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".$equipe2."</td></center>");
}
CloseTable();
OpenTable();
$sql = "SELECT idlive, match, minute, com1, com2, com FROM nuke_live_live order by `idlive` desc";
$result = $db->sql_query($sql);
while (list($minute, $com1, $com2, $com)=mysql_fetch_array($result)){
if ($com=="") {
echo(''.$minute.',
'.$com1.',
'.$com2.'
');
}
else {
echo(''.$com.'
');
}
}
CloseTable();
include("footer.php");
}


live();
break;


?>

Vuos allez surement me dire, pourquoi faire appel à une fonction live si elle est seule, ben c'est parce qu'au futur, je souhaiterais mettre en place une fonction archives ;)
pour ceux qui ne connsaissent pas vraiment le principe de phpnuke, le script de la page commence à partir du function live() , et la requete doit etre entre des OpenTable et CloseTable afin de pouvoir l'afficher dans un "cadre". Vous pouvez en avoir un exemple sur http://www.chaudron-vert.com/modules.php?name=Live3 , les equipes et le score du match sont dans un Open/Close Table
Messages postés
1250
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
30 septembre 2007
1
je ne sais pas si il y a un rapport mais dans ton list
while (list($minute, $com1, $com2, $com)=mysql_fetch_array($result)){

tu n'a pas le meme nombre de variable que le nombre de champs que tu recupere et tu ne les recupere pas dans le bonne ordre!!!

alors est ce que ce n'est pas ça qui pose probleme ???



Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
Messages postés
40
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
20 novembre 2008

hum en effet, je n'avais pas fait attention à ce détail...
Je viens de le corriger, j'ai toujours le même message d'erreur.
J'ai oublié de vous préciser quelque chose (qui est quand même relactivement important), le message d'erreur que j'obtiens me donne un numero de ligne. La ligne correspondant à ce numero est:

while (list($idlive, $match, $minute, $com1, $com2, $com)=mysql_fetch_array($result)){

C'est à dire, la ligne où il manquait deux variables
Messages postés
1250
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
30 septembre 2007
1
bon ben je ne vois pas vraiment non plus d'ou vient ton probleme !!!??!!!

comme on voit des choses bizarre en info, essai de changer le nom de tes variables pour la seconde requete, on ne sait jamais



sinon, essai de remplacer ta requete et son affichage par ceci :

OpenTable();
$sql = "SELECT idlive, match, minute, com1, com2, com FROM nuke_live_live order by `idlive` desc";
$result = mysql_query($sql);
while ($res=mysql_fetch_object($result)){
if ($res->com=="") {
echo(''.$res->minute.',
'.$res->com1.',
'.$res->com2.'
');
}
else {
echo(''.$res->com.'
');
}
}
CloseTable();




voila, j'espere que ca va etre bon

Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
Messages postés
40
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
20 novembre 2008

non ça ne passe toujours pas :( Merci quand même

Le message que j'obtiens etant

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/web43/html/kidlogis.com/modules/Live3/index.php on line 47

J'en conclus donc que c'est le mysql_fetch_object() qui a du mal à passer... Je vais essayer de changer le nom de la table ainsi que celui des variables...

Sinon n'existe t il pas un autre moyen d'obtenir des données sur une base MySQL?
Messages postés
1250
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
30 septembre 2007
1
c'est toujours des methodes qui se ressemble beaucoup...

mais je pense que ca vient plutot de ta requete, est ce que tu a tester
de l'utiliser directement sous phpmyadmin pour voir si elle est bonne

d'apres moi ca vient de là, autrement oui essai de modifier les noms des different champ???

Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
Messages postés
40
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
20 novembre 2008

Bon, le plus simple, je vais refaire carement ma table avec de nouveaux noms. Au niveau de la requete, celle que tu m'a passé tucsoufle fonctionne? Histoire que je reparte sur de bonnes bases avec une requete qui fontionne. Enfin, au niveau du contenu de la table, est ce que j'ai choisi les bonnes options? (je prefere demander, car une erreur d'inattention est vite arrivée):

Champ Type Null Défault Extra

idlive tinyint(4) Non auto_increment
match varchar(10) Non
minute char(6) Oui NULL
com1 varchar(255) Oui NULL
com2 varchar(255) Oui NULL
com varchar(255) Oui NULL

idlive doit afficher un nombre qui est unique pour chaque commentaire
match correspond au numero du match (qui est caracterisé par idmatch sur une autre table)
minute doit etre un champ avec 5~6 caracteres (de façon à pouvoir afficher 45+1 lorsqu'il y a du temps aditionnel
com1 doit contenir du texte, il correspond au commentaire de l'equipe 1, je l'ai fait relativement grand (255)
com2 pareil que com1 mais pour l'equipe 2
com pareil sauf que c'est pour les commentaires généraux, comme pour parler du public, ou autres
Il faut que puissent être nuls minute, com1, com2 et com
La valeur de match est fixée par une requete lors de l'ecriture d'un commentaire, qui lit la valeur de l'autre table pour la transferer sur celle ci.

Merci encore pour votre aide
Messages postés
1250
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
30 septembre 2007
1
pour le match vu que c'est une id,

tu peut mettre un tinyint ou smallint, ca depend du nombre d'enregistrement
et met la meme chose que dans ton autre table

si c'est trop galere a changer, tu peut laisser la meme chose



pour le reste, ca me semble Ok

Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
Messages postés
40
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
20 novembre 2008

d'accord merci beaucoup à tous ceux qui m'ont aidé :)

Je vous tiens au courant