ERREUR mysql_fetch_objet

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : ERREUR mysql_fetch_objet

par mystic666 » 24 mars 2008, 16:10

wouhou merci a tout le monde pour ces reponses

j'ai tout teste et la solution de orgerix a fonctionne :)

je vous remercie tous pour ces reponses nombreuses rapides et precises

par orgerix » 24 mars 2008, 15:10

  $sql = "SELECT * FROM user WHERE nom = ".$id ; 
Le champ nom doit contenir du texte. Il faut donc mettre les valeurs dans des quotes. Cette requete marchera mieux
  $sql = "SELECT * FROM user WHERE nom = '".$id."''; 
Et en utilisant mysql_real_escape_string() pour éviter les injections, ca donne
  $sql = "SELECT * FROM user WHERE nom = '".mysql_real_escape_string($id,$cnx)."''; 

par zeus » 24 mars 2008, 14:53

Nous ne sommes toujours pas au bon endroit puisque le message d'erreur indique que le paramètre passé à mysql_fetch_object() est invalide.
Cet argument est $requete, qui est le retour de mysql_query().

Pour une raison x ou y, le résultat de la requête est invalide et c'est ce retour qu'il faut tester avant tout.

un mysql_num_rows() donnerais la même erreur puisqu'il utilise également la valeur de retour de la requête.

Il n'en reste pas moins que les test unitaires sont une bonne pratique ;)

et si tu n'as aucun résultat ?

par animithra » 24 mars 2008, 14:33

Bonjour.

En fait le problème est assez classique lorsque l'on écrit ce genre de code :
//requete de selection
$sql = "SELECT * FROM table";
//envoi requête
$req = mysql_query($sql);
//récupération résultat
$data = mysql_fetch_assoc($req);
et si on n'a pas de résultat ?

bang, supplied argument is not valid.

of course puisque $req contient un élément innatendu !

il faut penser au petit test magique :
//si la table retourne au moins un enregistrement
if(mysql_num_rows($req)!=0) {
//récupération des données
}
//sinon
else {
//message à l'utilisateur
print("aucun enregistrement ne correspond à vos critères de recherche");

Que vous utilisiez des langages procéduraux (comme PHP) ou orientés objets (comme JAVA) il est utile (et c'est une excellente habitude à prendre) de réaliser ce que l'on appelle des tests unitaires.
Un test unitaire permet de vérifier qu'une fonction ne donnera pas d'erreur ou que les erreurs seront gérées : ici mysql_fetch_assoc($req) ne sera appelée que si $sql retourne au moins un enregistrement, mais cela peut aussi être employé pour tester si un utilisateur n'a pas entré une lettre là où vous auriez voulu des chiffres, ou un code sans caractères spéciaux.

Bon courage et bonne programmation à tous.

Julie

par zeus » 24 mars 2008, 13:36

Si je peux me permettre quelques critiques au code de hakazizi
  • Il vaut mieux mettre les requêtes dans des variables que directement dans mysql_query()
  • On extrait les variables des chaines
Du coup, le code d'origine est mieux que le tiens :?

Sinon, il faut effectivement protéger les données provenant de l'extérieur (GET, POST, ...)
Et, pour finir, il faut que tu testes le résultat de l'exécution de la requête ($requete)

par hakazizi » 24 mars 2008, 13:19

<?php 
mysql_connect($co_host,$co_user,$co_mdp)or die("erreur de connexion au serveur $host"); 
    //sélection de la base de données: 
mysql_select_db('ma_bdd', $cnx)or die("erreur de connexion à la base");     
  //récupération de la variable d'URL, 
  //qui va nous permettre de savoir quel enregistrement modifier 
  $id  = $_GET["nom"] ; 
  //requete SQL: 
  //exécution de la requete: 
    $requete = mysql_query( "SELECT * FROM user WHERE nom = '$id'") ; 
  //affichage des données: 
    if( $result = mysql_fetch_object( $requete ) ) 
    { 
  ?> 
//formulaire en html 
  <?php 
  }//fin if  
  ?> 
essaye sa a tout hazard j'ai un peu modifier ton script.
j'ai également remarqué que tu ne protèege pas ton ton entrée url nom.
attention à la securité.

par mystic666 » 24 mars 2008, 13:15

merci je vais essaye tout ceci en esperant que ca va resoudre mon probleme

par zeus » 24 mars 2008, 13:04

ERREUR mysql_fetch_objet

par mystic666 » 24 mars 2008, 12:58

bonjour,

je suis nouvelle ici et je poste deseperement un sujet pour demander de l aide.
je suis en train de faire une formulaire de modification de donnees dans ma base de donnees (je me suis inspiree d exemples trouves sur le net) et j ai une erreur dont je ne trouve pas la solution si quelqu un pouvait m aider ca serait sympas.
je met le bout de code en question
   <?php
$cnx = mysql_connect($co_host,$co_user,$co_mdp)or die("erreur de connexion au serveur $host");
    //sélection de la base de données:
    $db = mysql_select_db('ma_bdd', $cnx)or die("erreur de connexion à la base");	
  //récupération de la variable d'URL,
  //qui va nous permettre de savoir quel enregistrement modifier
  $id  = $_GET["nom"] ;
  //requete SQL:
  $sql = "SELECT * FROM user WHERE nom = ".$id ;
  //exécution de la requete:
    $requete = mysql_query( $sql, $cnx ) ;
  //affichage des données:
    if( $result = mysql_fetch_object( $requete ) )
    {
  ?>
//formulaire en html
  <?php
  }//fin if 
  ?>
et voila l erreur que j ai a chaque fois "mysql_fetch_object(): supplied argument is not a valid MySQL result resource" j ai essaye avec mysql_fetch_row et mysql_fetch_array avec le meme resultat

donc si quelqu un peut m aider ca serait super cool merci d avance