Problème avec mysql_fetch_array ?

Résolu/Fermé
Jimmyx - 10 oct. 2011 à 16:39
 Jimmyx - 11 oct. 2011 à 17:15
Bonjour,

J'ai récemment récupéré la gestion d'un site web, et me retrouve confronté à ce que je pense être un problème de paramétrage :) !

Sur la page principale du site se trouve une liste déroulante, en cliquant sur un des choix nous sommes redirigés vers une page, composée d'un fond d'écran, ainsi que de renseignements actualisés par une tierce personne toutes les semaines.

Je dois ajouter un nouveau choix dans la liste déroulante, jusque là tout se passe bien, mais quand je clique sur le choix en question apparait le message suivant :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /homez.17/cadetsde/www/conv/convu13c.php on line 31

J'ai donc été voir le fichier convu13c.php en question, identique à tous les autres fichiers correspondants aux autres choix de la liste déroulante. Donc je pense que le problème ne vient pas de là.

Les éléments remplis par la tierce personne sont enregistrés dans une BDD mysql. Lorsque la personne remplit les renseignements en ligne et qu'elle clique sur Envoyer, apparait le message suivant :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /homez.17/cadetsde/www/conv/convu13cs.php on line 53.

Idem, j'ai donc été voir le fichier convu13cs.php en question, identique à tous les autres fichiers correpondants à la saisie des renseignements pour les autres choix de la liste déroulante. De même, je pense que le problème ne vient pas de là.

Le problème serait-il du à quelque chose à changer dans la BDD ?

Merci d'avance, désolé pour la longueur du message, je ne suis pas parvenu à faire plus court :) !


1 réponse

arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
Modifié par arthezius le 10/10/2011 à 16:48
Tu dois avec fait ta requête d'une manière plus ou moins similaire à celle-ci:
$sql='SELECT * FROM table WHERE id="'.mysql_real_escape_string($var).'"'; 
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
$data = mysql_fetch_array($req);

Pour vérifier que ta requête est envoyé correctement (avec les bonnes valeurs et sans erreur), je t'invite à placer un echo de ta requête juste après de la manière suivante:
echo $sql;

L'ajout de cette ligne te permettra sans doute d'en savoir un peu plus sur ce qui se passe réellement. Tu pourras l'enlever quand tu auras trouvé la source du problème.

En cas de problème, n'hésite pas à nous mettre l'extrait de code PHP correspondant à ta requête.
« La recherche commence là où s'arrête la connaissance. »
0
J'ai essayé d'insérer l'écho comme suit :


mysql_connect("serveur", "base", "mot_passe");

mysql_select_db("base");

$reponse = mysql_query("SELECT * FROM convu13c ORDER BY ID DESC LIMIT 0,1");

echo $sql;

while ($donnees = mysql_fetch_array($reponse))

mysql_close();



Cela n'a rien changé, l'ai-je mal inséré ?
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
10 oct. 2011 à 18:27
Pour afficher une variable il faut d'abord la déclarer:
$sql='SELECT * FROM table WHERE id="'.mysql_real_escape_string($var).'"'; 
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
$data = mysql_fetch_array($req);
echo $sql; 


Donc dans ton cas il faut réadapter comme suis:
$sql='SELECT * FROM convu13c ORDER BY ID DESC LIMIT 0,1'; 
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
echo $sql;
while ($donnees = mysql_fetch_array($req)) 
{

Le champ ID de ta bdd est-il bien en majuscule? Autrement dit, ton champ est nommé "id" ou "ID"?
0
Comme cela ?


$sql='SELECT * FROM convu13c ORDER BY ID DESC LIMIT 0,1';

$reponse = mysql_query("SELECT * FROM convu13c ORDER BY ID DESC LIMIT 0,1");

echo $sql;

while ($donnees = mysql_fetch_array($reponse))
0
Désormais s'affiche le message suivant lorsque je clique sur le choix du menu déroulant :

SELECT * FROM convu13c ORDER BY ID DESC LIMIT 0,1
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /homez.17/cadetsde/www/conv/convu13c.php on line 35

Aïe aïe aïe, cela est plus compliqué que ce que je pensais :) !
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
Modifié par arthezius le 10/10/2011 à 23:07
Je te proposais initialement de vérifier ta requête avec un echo pour que tu puisses vérifier visuellement que ta requête envoyé est bien comme tu le veux.
C'est particulièrement intéressant quand tu y met des variables ce qui n'est pas ton cas.

Tu n'as pas bien compris toutefois ce que j'essayais de te faire faire.
Dans ton cas, tu places directement la requête dans la fonction qui l'exécute.
$reponse = mysql_query("SELECT * FROM convu13c ORDER BY ID DESC LIMIT 0,1"); 

Dans mon cas, je la place dans une variable:
$sql='SELECT * FROM convu13c ORDER BY ID DESC LIMIT 0,1';

Puis ensuite je l'execute et affiche dans le cas où il y aurait une erreur le message qui va avec:
$reponse = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());



Autrement dit, toi tu utilises ce code pour ta requête:
$reponse = mysql_query("SELECT * FROM convu13c ORDER BY ID DESC LIMIT 0,1"); 

Moi celui là:
$sql='SELECT * FROM convu13c ORDER BY ID DESC LIMIT 0,1'; 
$reponse = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

Dans les deux cas, tu enchaines avec la ligne qui va permettre d'afficher les résultats:
while ($donnees = mysql_fetch_array($reponse))


Vérifie toutefois qu'il n'y a pas d'erreur dans le nom de ta table SQL: convu13c
Et que le champ ID est bien présent dans celle-ci et nommé en majuscule.
0