Erreur dans function fetch() on a non-objec

Eléphant du PHP | 250 Messages

18 avr. 2010, 16:37

Bonjour,

Alors j'ai une erreur, mais je ne vois pas où c'est malheureux ça :roll:

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: &nbsp;&nbsp;<input type="text" name="nom" value="'.$coord[1].'" size="40"/><br/>';
echo'Prénom: &nbsp;&nbsp;<input type="text" name="prenom" value="'.$coord[2].'" size="40"/><br/>';
echo'Mail: &nbsp;&nbsp;<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
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

devlop78
Invité n'ayant pas de compte PHPfrance

18 avr. 2010, 16:41

$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

Eléphant du PHP | 250 Messages

18 avr. 2010, 16:53

$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 :evil:
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

devlop78
Invité n'ayant pas de compte PHPfrance

18 avr. 2010, 16:58

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

Eléphant du PHP | 250 Messages

18 avr. 2010, 17:06

Sisi ça vient bien de quote.
$requete="SELECT * FROM personne WHERE id=$id ";
J'ai enlevé les ' ' autour de $id

Là ça marche :wink:
Modifié en dernier par diabless6 le 18 avr. 2010, 17:15, modifié 2 fois.
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

devlop78
Invité n'ayant pas de compte PHPfrance

18 avr. 2010, 17:11

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é ...

devlop78
Invité n'ayant pas de compte PHPfrance

18 avr. 2010, 17:13

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 ...

Eléphant du PHP | 250 Messages

18 avr. 2010, 17:18

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 ! :twisted:

Merci :wink:
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

devlop78
Invité n'ayant pas de compte PHPfrance

18 avr. 2010, 17:23

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 ;)

Eléphant du PHP | 250 Messages

18 avr. 2010, 18:06

Par contre j'ai un autre soucis dans la suite de mon script :roll:

//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 ? #-o

Merci
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

devlop78
Invité n'ayant pas de compte PHPfrance

18 avr. 2010, 18:10

Je comprends pas trop la question ... et quelle est exactément l'erreur ?

Eléphant du PHP | 250 Messages

18 avr. 2010, 18:27

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.
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Eléphant du PHP | 250 Messages

18 avr. 2010, 18:36

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.
Modifié en dernier par diabless6 le 18 avr. 2010, 19:08, modifié 1 fois.
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

devlop78
Invité n'ayant pas de compte PHPfrance

18 avr. 2010, 18:41

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 ^^

devlop78
Invité n'ayant pas de compte PHPfrance

18 avr. 2010, 18:42

Peux-tu écrire var_dump($id_con->errorInfo()); stp ?