Bonjour, petit soucis une erreur bete je pense

[Résolu]
Signaler
Messages postés
14
Date d'inscription
samedi 21 février 2009
Statut
Membre
Dernière intervention
9 octobre 2009
-
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
-
Bonjour,
Pouvez-vous m'éclairer ?
J'ai une erreur mais je ne met pas le doigt dessus, voyez ci-dessous

voici l'erreur trouvé :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in gestion.php on line 19


et voici mon code :

<?php
session_start();
require ('config.php');
?>
Id |
Nom |
Prénom |
Mail |
Téléphone |

<?php
mysql_connect($serveur, $utilisateur, $mdp);
mysql_select_db($bdd);
$result = mysql_query(\"SELECT * FROM jerome ORDER BY ID DESC\");

while ($row = mysql_fetch_array($result))
{
?>
----

<?php echo $row[0]; ?>,
<?php echo $row[1]; ?>,
<?php echo $row[2]; ?>,
<?php echo $row[3]; ?>,
<?php echo $row[4]; ?>,

<?php
}
?>

14 réponses

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Euh... Mon code n'est pas "bourré" de fautes, il n'y en a qu'une : j'ai oublié de fermer la parenthèse de la boucle while.
Et puis le formattage de code a supprimé mes majuscules (E_USER_ERROR qui devait être en capitales)
Maintenant ça dépend peut-être aussi du code que tu as avant... Bref...

J'ai fait ça à l'arrache sans tester, l'idée était surtout de donner une piste sur la manière de coder proprement pour éviter les erreurs impossibles a déboguer.
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
C'est normal : si tu utilises des caractères qui ne sont pas alphanumériques, tu dois protéger le nom de la table avec des guillemets simples inversés :

select * from `jerome-table` order by id desc

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Salut,

C'est assez simple en réalité : la variable $result n'est pas une ressource de type mysql result. A tout les coup, $result vaut FALSE voire NULL.
Plusieurs causes possibles :
- La connexion au serveur de bases de données a échoué
- La base de données mentionnée n'existe pas (faute de frappe ?)ou l'utilisateur n'a pas les droits requis dessus
- La requête a échoué
Pour savoir ce qui se passe, il faut :
- activer l'affichage de TOUTES les erreurs : error_reporting(E_ALL & E_STRICT)
- vérifier que les fonctions que tu utilises sont correctement exécutées et retournent une valeur que tu pourras exploiter.

Basiquement et de manière assez crade (mais suffisante pour le debug), tu peux te contenter de quelque chose comme ça :
mysql_connect($serveur, $utilisateur, $mdp) or die(mysql_error());

Mais ça, c'est crade, parce que ça affiche l'erreur à l'écran pour tout le monde.
Tu peux aussi contrôler l'exécution des fonctions et ne passer à la suite que si tout se déroule bien.
$error = FALSE;
if (FALSE ($dbh mysql_connect($serveur, $utilisateur, $mdp))) {
  trigger('Erreur lors de la connexion à mysql', E_USER_ERROR);
}
if ($error || !mysql_select_db($bdd)) {
  trigger_error('Une erreur est survenue lors de l\'accès à la base de données', E_USER_ERROR);
}
// Exécution de la requête :
if (FALSE !($result mysql_query("select * from jerome order by id desc"))) {
  // La requête a été exécutée, on peut traiter le résultat
  while (FALSE !($row mysql_fetch_array($result)) {
    // Bla bla bla
  }
}
else {
  // DEBUG UNIQUEMENT !
  die(mysql_error());
}


Bon, je ne résiste pas à l'envie de signaler qu'utiliser l'extension mysql de nos jours ça commence à être limite obsolète...
L'extension mysqli() permet quand même de produire du code plus propre (notamment orienté objet pour l'accès à la base de données), sans parler de PDO qui domine les trois (c'est un point de vue qui m'appartient).
Mais bon, quitte à utiliser des vieilles fonctions, autant les utiliser correctement, hein ;)
Messages postés
14
Date d'inscription
samedi 21 février 2009
Statut
Membre
Dernière intervention
9 octobre 2009

bonjour,

Très gentil de part, mais ton code est bourré de fautes du moins c'est ce que me dit la page quand je me sert de ton code et que je test sur mon hébergeur
erreur T IF erreur syntax, mais je vais voir ce que je peux faire avec ton idée, encore merci
Messages postés
14
Date d'inscription
samedi 21 février 2009
Statut
Membre
Dernière intervention
9 octobre 2009

re coucou,

merci pour ton aide j'ai trouvé mon erreur, il y avais un soucis avec les cotes choses quand même bizarre :

J'ai mis juste ceci :
$result = mysql_query('select * from jerome order by id desc');

A la place de ceci :
$result = mysql_query("select * from jerome order by id desc");


Il y a des fois ou je ne comprends vraiment pas cette histoire de cotes !

en tous cas merci pour ton aide c'est gentil.
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Euh ouais, c'est étonnant ça...
Ta requête est rigoureusement identique à celle que tu écris ici ? Y'a pas une variable dedans ?

Bon c'est étrange, mais l'important c'est que ton code fonctionne ^^
Messages postés
14
Date d'inscription
samedi 21 février 2009
Statut
Membre
Dernière intervention
9 octobre 2009

Ben ouais c'est juste a la place des "" j'ai mis '' je ne sais pas vraiment ce que sa change mais maintenant sa fonctionne, si quelqu'un pouvais m'expliquer la différence entre '' et "" je pense que j'y verrais plus clair


@ plus

et merci
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Ben justement, a priori, ça ne change rien dans le cas présent.

Les guillemets doubles indiquent à PH qu'il doit interpréter la chaîne de caractères : si la chaîne contient une variable, celle-ci sera interprétée et remplacée par sa valeur. Les guillemets simples au contraire indiquent à PHP que la chaîne de caractères doit être traitée sans être interprétée. Les $bidule restent tels quels, même s'ils correspondent à une variable dans le reste du script.

MAIS : les deux syntaxes définissent une chaîne de caractères, la différence s'arrête à l'évaluation des variables dans celle-ci. Donc, il n'y a aucune raison pour que l'une fonctionne et pas l'autre si ta requête ne contient pas de variable mais uniquement du texte statique...
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,

Comme le dit Neigedhiver il n'y a aucune raison qu'il y ait une différence dans ton cas (ou du moins elle m'échappe)

Es tu certain de n'avoir aucune erreur affichée lors de l'exécution du script ?
As tu suivi ce que préconisé Neige pour les erreurs ?

Cordialement,



Kohntark -
Messages postés
14
Date d'inscription
samedi 21 février 2009
Statut
Membre
Dernière intervention
9 octobre 2009

Bonjour kohntark,

oui j'ai bien utiliser ce que m'as dit neige il m'as été d'une grande aide

je viens de me rendre compte d'une chose
dans ma variable :
$result = mysql_query('select * from jerome order by id desc');


si je met :
$result = mysql_query('select * from jerome-table order by id desc');


sa ne fonctionne plus je ne comprend plus rien lol
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
oui j'ai bien utiliser ce que m'as dit neige il m'as été d'une grande aide
Je me permettais de te poser la question car je ne vois nul part, dans le code que tu fournis, un quelconque "false !($result mysql_query ...", "die(mysql_error..." comme l'indiquait Neige.

Si j'étais toi je ne me contenterai pas de me dire "je remplace les ["] par des ['] et ça fonctionne, donc c'est bon", mais je chercherai à comprendre pourquoi.
$result = mysql_query('select * from jerome order by id desc');

doit fonctionner, ainsi que
$result = mysql_query("select * from jerome order by id desc");

Si ce n'est pas le cas il y a un pb quelque part que tu retrouveras tôt ou tard dans ton développement.

Si tu remplaces :
$result = mysql_query("select * from jerome order by id desc");

par
if (false $result mysql_query("SELECT * FROM jerome ORDER BY id DESC")) die('erreur requête : '.mysql_error());


est ce qu'une erreur est affichée ?

Pourquoi changer le nom de la table au fait ?

Cordialement,

Kohntark -
Messages postés
14
Date d'inscription
samedi 21 février 2009
Statut
Membre
Dernière intervention
9 octobre 2009

le nom de la table change car je fais un espace membre avec la possibilité pour chaque membres de gérer des envoies mail a leur prospects

donc je leur donne la possibilité de créer une bdd sur le serveur.

oui il y a une erreur la voici

erreur requête : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-table' at line 1

voici le code complet :
if (false $result mysql_query("SELECT * FROM jerome-table ORDER BY id DESC")) die('erreur requête : '.mysql_error());


et quand je met :
if (false $result mysql_query("SELECT * FROM jerome ORDER BY id DESC")) die('erreur requête : '.mysql_error());

sa fonctionne
Messages postés
14
Date d'inscription
samedi 21 février 2009
Statut
Membre
Dernière intervention
9 octobre 2009

merci neige

effectivement si je met des guillemets inversés sa fonctionne merci a vous
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
et quand je met :

if (false $result mysql_query("select * from jerome order by id desc")) die('erreur requête : '.mysql_error());

sa fonctionne

donc il n'y a pas de différence entre l'utilisation de guillemets simples(') et les doubles ("), les 2 fonctionnent ??
j'ai du mal à suivre.

donc je leur donne la possibilité de créer une bdd sur le serveur

une bdd pour chaque membre !!!! Tu dois avoir une belle structure de serveurs pour permettre ça (idem pour 1 table/membre)

Cordialement,


Kohntark -