Page 1 sur 1

pdo verif email

Posté : 24 sept. 2015, 12:42
par laplumaencre
Salut à tous !
J'ai voulu faire une fonction simple qui vérifie si l’émail (du futur inscrit) existe déjà dans ma base de donnée, et ça marche pas bien sur :-)...
En fait je maîtrise pas PDO, avant (php4) je faisais mes requêtes facilement, mais bon maintenant qu'il faut arrêter avec mysql query, et passer a PDO, ça se complique, bref, voici la fonction.

Code : Tout sélectionner

function verif_email($email) { $query = "SELECT * FROM inscription WHERE email = ".$email.";"; $res = $bdd->query($query)->fetch(); if ($res) { /* Si déjà un pseudo, alors Ce pseudo est déjà utilisé"*/ return false; } // Sinon le résultat est nul ce qui veut donc dire qu il ne contient aucun pseudo else { return true; } }
Bien sur j'ai un fichier config inclus de connexion qui créer l'objet pdo dans $bdd
Je tourne en rond depuis hier entre lire des doc, faire des essais...mais non ca marche pas...

Re: pdo verif email

Posté : 24 sept. 2015, 13:27
par xTG
1/ Protection contre les injections SQL à ajouter => PDO::quote()
2/ Actives les erreurs PDO pour savoir ce qui ne lui convient pas.

Re: pdo verif email

Posté : 24 sept. 2015, 13:36
par laplumaencre
salut xTG de m'aider
Pour la protections je le fait bien avant l'appel de la fonction dans mon script inscription, et j'ai deja activer les erreurs.
Donc je viens de comprendre deja une erreur, c'est que l'appel de $bdd ne marche pas car il est à l'interieur de ma fonction, j'ai donc ajouté le code de cnx à la bdd à l'intérieur de ma fonction et il ne semble plus bloque sur $bdd, mais j'ai une erreur plus loin. Voici le message d'erreur =>
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 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 '@dfdg.com' at line 1' in /home/jeremy/www/site_web/xxxx/function.php:57 Stack trace: #0 /home/jeremy/www/site_web/xxxxx/function.php(57): PDO->query('SELECT * FROM i...') #1 /home/jeremy/www/site_web/xxxx/traitement_inscription.php(70): verif_email('[email protected]') #2 /home/jeremy/www/site_web/xxxx/index.php(3): include('/home/jeremy/ww...') #3 {main} thrown in /home/jeremy/www/site_web/xxxx/function.php on line 57
Le @dfdg.com est le contenu de $email appelé dans la fonction verif-email($email), d'ailleurs je sais pas pourquoi il en manque un bout en route...
Je redonne mon code modifié=>

Code : Tout sélectionner

//***************************************************************************** //Fonction verif si email existe deja******************************* //***************************************************************************** function verif_email($email) { try { $bdd = new PDO ('mysql:host=localhost;dbname=xxxxxx;charset=utf8', 'root', 'xxxx'); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $query = "SELECT * FROM inscription WHERE email = ".$email.""; $res = $bdd->query($query)->fetch(); if ($res) { /* Si déjà un pseudo, alors Ce pseudo est déjà utilisé"*/ return false; } // Sinon le résultat est nul ce qui veut donc dire quil ne contient aucun pseudo, donc on insère else { return true; } }

Re: pdo verif email

Posté : 24 sept. 2015, 14:08
par laplumaencre
bon j'ai trouvé l'erreur de syntaxe, il manquait des guillements là =>

Code : Tout sélectionner

$query = "SELECT * FROM inscription WHERE email =' ".$email."'";
Par contre même si j'ai plus d'erreur, ma fonction ne fonctionne pas car j'ai retenter en mettant le même émail, il l'enregistre quand même comme si elle n'existait pas déjà dans la bdd....

Re: pdo verif email

Posté : 24 sept. 2015, 14:31
par laplumaencre
bon maintenant il n'ajoute dans ma bdd un email qui existe mais j'ai un message d'erreur quand meme concernant pdo
mon code =>

Code : Tout sélectionner

function verif_email($email) { try { $bdd = new PDO ('mysql:host=localhost;dbname=xxxx;charset=utf8', 'root', 'xxxxx'); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $query = "SELECT * FROM inscription WHERE email =' ".$email."'"; $res = $bdd->query($query); if ($res==1) { /* Si déjà un pseudo, alors Ce pseudo est déjà utilisé"*/ return false; } // Sinon le résultat est nul ce qui veut donc dire quil ne contient aucun pseudo, donc on insère else { return true; } }

et l'erreur =>
Notice: Object of class PDOStatement could not be converted to int

Re: pdo verif email

Posté : 24 sept. 2015, 15:17
par laplumaencre
EDIT : ET bien non, en fait ça marche pas, car c'est l'inverse il m'envois toujours q'il existe dejà quelque soit l'email !!!!

un var_dump me donne le contenu de $res
=>
object(PDOStatement)#3 (1) { ["queryString"]=> string(55) "SELECT * FROM inscription WHERE email =' [email protected]'" } NULL
Donc $res ne récupere l'email....


Code : Tout sélectionner

//***************************************************************************** //Fonction verif si existe deja******************************* //***************************************************************************** function verif_email($email) { try { $bdd = new PDO ('mysql:host=localhost;dbname=xxxxx;charset=utf8', 'root', 'xxxx'); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $query = "SELECT * FROM inscription WHERE email =' ".$email."'"; $res = $bdd->query($query); if (!empty($res)) { /* Si déjà un pseudo, alors Ce pseudo est déjà utilisé"*/ return false; } // Sinon le résultat est nul ce qui veut donc dire quil ne contient aucun pseudo, donc on insère else { return true; } }

Re: pdo verif email

Posté : 24 sept. 2015, 17:56
par laplumaencre
Voila cette fois c'est OK ça marche
voici le code pour aider les autres, et ba put...PDO c'est pas simple, je regrette le bon vieux mysql_query :-D

Code : Tout sélectionner

//***************************************************************************** //Fonction verif si existe deja******************************* //***************************************************************************** function verif_email($email) { try { $bdd = new PDO ('mysql:host=localhost;dbname=xxxx;charset=utf8', 'root', 'xxxxx'); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $res = $bdd->prepare("SELECT * FROM inscription WHERE email =:email "); $res->bindValue('email', $email, PDO::PARAM_STR); $res->execute(); if ($res->rowCount() === 1) { $util = $res->fetch(PDO::FETCH_ASSOC); if ($util['email']) { /* Si déjà un pseudo, alors Ce pseudo est déjà utilisé"*/ return true; } // Sinon le résultat est nul ce qui veut donc dire qu'il ne contient aucun pseudo, donc on insère else { return false; } } }

Re: pdo verif email

Posté : 25 sept. 2015, 21:43
par moogli
Modération :
Si ta question est résolue, pense à l'indiquer pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.
Tu peux réaliser cette opération toi-même en cliquant sur le bouton "Résolu" situé en haut de la page.