Page 1 sur 2
Erreur dans function fetch() on a non-objec
Posté : 18 avr. 2010, 16:37
par diabless6
Bonjour,
Alors j'ai une erreur, mais je ne vois pas où c'est malheureux ça
X Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\Php\mysql_pdo\modif.php on line 17
Je suspicione le quote qui remplace de stripslash mais j'en sais rien.
<?php
if(!empty($_POST["id"]))//vérifier si une saisie
{
include("mysqlconnex.inc.php");//connexion à la base de donnée
//requête
$id_con=connPDO();
$id=$id_con->quote($_POST["id"]);
$requete="SELECT * FROM personne WHERE id='$id'";
$result=$id_con->query($requete);
$coord=$result->fetch(PDO::FETCH_NUM); X
print_r($coord);
echo'<br/><br/>';
echo'<form action="'.$_SERVER['PHP_SELF'].'" method="post" enctype="application/x-www-form-urlencoded">';
echo'<fieldset><legend>Modification de l\'id: <b>'.$coord[0].' </b></legend>';
echo'<input type="hidden" name="id" value="'.$coord[0].'"/>';
echo'Nom: <input type="text" name="nom" value="'.$coord[1].'" size="40"/><br/>';
echo'Prénom: <input type="text" name="prenom" value="'.$coord[2].'" size="40"/><br/>';
echo'Mail: <input type="text" name="mail" value="'.$coord[3].'" size="40"/><br/>';
echo'<input type="submit" name="submit" value="Modifier"/>';
echo'</fieldset></form>';
$result->closeCursor();
$id_con=NULL;
}
Merci
Re: Erreur dans function fetch() on a non-objec
Posté : 18 avr. 2010, 16:41
par devlop78
$requete="SELECT * FROM personne WHERE id='$id'";
Verifie que la requête fonctionne avec PhpmyAdmin car si elle te retourne false, elle ne te retourne pas un objet ... d'ou l'erreur
Re: Erreur dans function fetch() on a non-objec
Posté : 18 avr. 2010, 16:53
par diabless6
$requete="SELECT * FROM personne WHERE id='$id'";
Verifie que la requête fonctionne avec PhpmyAdmin car si elle te retourne false, elle ne te retourne pas un objet ... d'ou l'erreur
Effectivement :
SELECT * FROM personne WHERE id=''82''
J'ai des doubles cotes.
Faut que je modifie ça :
$id=$id_con->quote($_POST["id"]); sans " " ?
A l'origine j'avais une fonction mysql_real_escape_string, je me pose la question si il fallait l'enlevée

Re: Erreur dans function fetch() on a non-objec
Posté : 18 avr. 2010, 16:58
par devlop78
Franchement, rien ne me choque dans ton code. Mais je ne vois pas tout
As-tu choisi la bonne base de données ? Si quote() fonctionne, j'imagine que ta connexion PDO s'est correctement effectuée. Peut-être as-tu une fonction PDO qui permet d'afficher l'erreur SQL ou autre ? Mais $_POST['id'] ou $_POST["id"] les deux fonctionnent normalement, et pour SQL c'est pareil
Re: Erreur dans function fetch() on a non-objec
Posté : 18 avr. 2010, 17:06
par diabless6
Sisi ça vient bien de quote.
$requete="SELECT * FROM personne WHERE id=$id ";
J'ai enlevé les ' ' autour de $id
Là ça marche

Re: Erreur dans function fetch() on a non-objec
Posté : 18 avr. 2010, 17:11
par devlop78
Lol ... le pire c'est que j'y ai pensé. Je suis allé sur mon phpmyadmin, j'ai crée un champ en INT, et j'ai fait le test. id='5' fonctionnait chez moi ... mais c'est vrai que comme c'est un integer, je trouve ça plus logique de ne pas mettre de quotes. Par contre vérifie bien que c'est un int. Parce que si quelqu'un mets dans ton formulaire ou url '5', même avec ta fonction quote() tu auras surement une erreur. Et pire il pourra peut-être complété ta requête SQL avec autre chose ... Par sécurité, la possibilité de mettre entre quote est logique. Je suis quand même étonné ...
Re: Erreur dans function fetch() on a non-objec
Posté : 18 avr. 2010, 17:13
par devlop78
Ah Ah Ah ça m'apprendra à lire trop vite !
PDO::quote place des guillemets simples autour d'une chaîne d'entrées (si nécessaire) et échappe les caractères spéciaux présents dans la chaîne d'entrées, en utilisant le style de protection approprié au driver courant.
J'avais pas vu le "place des guillemets simples autour d'une chaîne d'entrées ".
Oui alors tout s'explique. Il a rajouté des ' ' autour de ton id, alors ça provoquait une erreur ... C'est vicieux comme fonction

Moi j'utilise Mysqli alors ...
Re: Erreur dans function fetch() on a non-objec
Posté : 18 avr. 2010, 17:18
par diabless6
C'est vicieux, mais bien pratique la PDO.
ça rajoute des quotes et ça échappe en même temps. C'est très pratique !
quote((integer)$_POST["id"]);
J'ai rajouté integer, comme ça je dois avoir un entier !
Merci

Re: Erreur dans function fetch() on a non-objec
Posté : 18 avr. 2010, 17:23
par devlop78
Perso je n'aime pas mais chacun son truc

Mais du coup (mais tant mieux si tu l'as mis), il est moins utile de vérifier que c'est un integer car si il entre 'je veux hacker l'système', avec quote() ça va échapper le ' et pas de pb. Mais deux mesures valent mieux qu'une

Re: Erreur dans function fetch() on a non-objec
Posté : 18 avr. 2010, 18:06
par diabless6
Par contre j'ai un autre soucis dans la suite de mon script
//enregistrement
if(isset($_POST["nom"]) && isset($_POST["prenom"]) && isset($_POST["mail"]))
{
$id_con=connPDO();
//requete
$id=$id_con->quote($_POST["id"]);
$nom=$id_con->quote($_POST["nom"]);
$prenom=$id_con->quote($_POST["prenom"]);
$mail=$id_con->quote($_POST["mail"]);
$requete="UPDATE personne SET nom=$nom,prenom=$prenom,mail=$mail WHERE id=$id";
echo $requete;
$result=$id_con->exec($requete);
if($result!=1)
{
echo'<br/>Une erreur '.$id_con->errorCode().' '.$id_con->errorInfo();
}
else
{
echo'<br/><br/>modifications enregistrées !';
echo "<script type=\"text/javascript\">setTimeout(\"window.location='"."affichage.php'\",3000)</script>";
}
$id_con=NULL;
}
else
{
echo "<br/>Merci de compléter !";
}
?>
</body>
</html>
Mon dernier Else ne marche pas, même si rien n'a été modifier en cliquant sur le bouton Modifier : j'ai cette erreur : Une erreur 00000 Array
Comment je pourrais faire pour valider le formulaire même sans changement ?
Merci
Re: Erreur dans function fetch() on a non-objec
Posté : 18 avr. 2010, 18:10
par devlop78
Je comprends pas trop la question ... et quelle est exactément l'erreur ?
Re: Erreur dans function fetch() on a non-objec
Posté : 18 avr. 2010, 18:27
par diabless6
Je comprends pas trop la question ... et quelle est exactément l'erreur ?
Erreur c'est ça : Une erreur 00000 Array
dès que j'appuie sur le bouton modifier et si seulement je ne modifie rien. Par contre, si je modifie les données du formulaire ça va.
Re: Erreur dans function fetch() on a non-objec
Posté : 18 avr. 2010, 18:36
par diabless6
Faut entrer un ID puis Modifier.
Puis on arrive à Modification de l'id: XX
Et sans modifier, mais en appuyant sur modifier j'ai l'erreur.
Re: Erreur dans function fetch() on a non-objec
Posté : 18 avr. 2010, 18:41
par devlop78
C'est pire que ça ... si tu modifies, que tu cliques sur Modifier, et que tu recliques 50 fois sur modifier, il te remet un coup l'ancienne version, un coup la nouvelle ^^
Re: Erreur dans function fetch() on a non-objec
Posté : 18 avr. 2010, 18:42
par devlop78
Peux-tu écrire var_dump($id_con->errorInfo()); stp ?