Count avec PDO
Résolu
MichaelOfCourse
Messages postés
87
Date d'inscription
Statut
Membre
Dernière intervention
-
MichaelOfCourse Messages postés 87 Date d'inscription Statut Membre Dernière intervention -
MichaelOfCourse Messages postés 87 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
ça fait 2 heures que je cherchais comment compter le nombre d'entrée dans la colonne "email" qui avait pour valeur une certaine valeur $email, vous l'aurez compris, pour vérifier que l'email n'est pas déjà enregistré :)
Sauf que ce que je savais faire avant ne marche pas en PDO, et a force de voir des solutions sur google, qui aucune n'ont marché, je me tourne vers vous !
Que dois-je rajouter après ça pour connaitre le nombre de lignes ?
Merci
ça fait 2 heures que je cherchais comment compter le nombre d'entrée dans la colonne "email" qui avait pour valeur une certaine valeur $email, vous l'aurez compris, pour vérifier que l'email n'est pas déjà enregistré :)
Sauf que ce que je savais faire avant ne marche pas en PDO, et a force de voir des solutions sur google, qui aucune n'ont marché, je me tourne vers vous !
$emailalready=$connexion->prepare('SELECT COUNT (*) AS Email FROM Users WHERE Email=\'' . $email . '\''); $emailalready->execute();
Que dois-je rajouter après ça pour connaitre le nombre de lignes ?
Merci
A voir également:
- Pdo select count
- Please select boot device - Forum Windows 7
- Reboot and select proper boot device - Forum Windows
- Select boot mode android - Guide
- Reboot and select proper boot device or insert boot media in selected boot device and press a key ✓ - Forum PC portable
- Problème de démarrage - boot device and press a key ✓ - Forum Windows 10
14 réponses
Bonjour
D'abord, jamais d'espace entre le nom d'une fonction et la parenthèse ouvrante avec mysql :
Ensuite, pour récupérer ton nombre de lignes :
D'abord, jamais d'espace entre le nom d'une fonction et la parenthèse ouvrante avec mysql :
COUNT(*) et non pas COUNT (*)
Ensuite, pour récupérer ton nombre de lignes :
$res=$emailalready->fetch(); if ($res['Email']>0) { ... cet adresse existe déjà } else { elle n'existe pas déjà }
L'echo me renvoit en effet toujours 0, alors que la BDD contient bien mon inscription Quel echo ? il n' en a pas dans le code que tu montres. Au vu du reste, je parie que tu ne l'avais pas fait au bon endroit.
Tu n'as pas pris le test dans le bon sens.
Au lieu d'interdire l'insertion si l'Email existe déjà, tu ne l'autorises que s'il existe déjà !
Tu n'as pas pris le test dans le bon sens.
Au lieu d'interdire l'insertion si l'Email existe déjà, tu ne l'autorises que s'il existe déjà !
D'abord merci :) Puis les mauvaises nouvelles : ça ne marche pas, en effet lorsque je m'inscris, mon compte est bien dans la BDD, mais si je veux me réinscrire une 2eme fois avec la même adresse, eh bien je peux me réinscrire autant de fois que je veux avec la meme adresse en fait :/ à croire que $res['Email'] vaut toujours + de 0...
Je ne sais pas comment est fait ton script.
Tout ce que je peux dire, ce que le code que je t'ai proposé teste bien si un mail est ou n'est pas déjà dans la table
à croire que $res['Email'] vaut toujours + de 0... Pourquoi le croire ? Tu n'as qu'à faire un echo $res['Email']; et au lieu de croire, tu sauras.
Montre ton code pour voir où est l'erreur.
Tout ce que je peux dire, ce que le code que je t'ai proposé teste bien si un mail est ou n'est pas déjà dans la table
à croire que $res['Email'] vaut toujours + de 0... Pourquoi le croire ? Tu n'as qu'à faire un echo $res['Email']; et au lieu de croire, tu sauras.
Montre ton code pour voir où est l'erreur.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
L'echo me renvoit en effet toujours 0, alors que la BDD contient bien mon inscription...
Et je précise que ma table contient bien une colonne Email (oui de toute façon vu que j'arrive à écrire dedans)
if($email == $email2) { $emailalready=$connexion->prepare('SELECT COUNT(*) AS Email FROM Users WHERE Email=\'' . $email . '\''); $emailalready->execute(); $res=$emailalready->fetch(); if ($res['Email']>0) { $reqprep=$connexion->prepare("INSERT INTO Users SET Prenom='$prenom', Nom='$nom', Email='$email', Pass='$pass'"); $reqprep->execute(); } else { } } else { $ERRMSG = 8; }
Et je précise que ma table contient bien une colonne Email (oui de toute façon vu que j'arrive à écrire dedans)
Sisi j'ai fait le test avec l'echo, seulement je n'en ai pas vraiment besoin dans le code en lui même, mais fais moi confiance, il était au bon endroit et m'indiquait toujours 0 ;)
je vais voir ce que tu m'a dit et modifier, merci :)
je vais voir ce que tu m'a dit et modifier, merci :)
Bon en fait je me suis réjoui trop vite, le code ne vérifie pas en effet si il y a deja cette adresse d'inscrite mais tout simplement si il y a dejà une adresse d'inscrite dans la BDD, donc je ne peux avoir qu'un seul inscrit quoi :O
mon code actue :
Si quelqu'un pouvait m'aider :)
mon code actue :
$emailalready=$connexion->prepare('SELECT COUNT(*) AS Email FROM Users'); $emailalready->execute(); $res=$emailalready->fetch(); if ($res['Email']>0) { $ERRMSG = 10; } else { //inscription dans BDD}
Si quelqu'un pouvait m'aider :)
J'attendais que tu reviennes. C'était évident que ça ne pouvait pas marcher sans le WHERE, je ne comprends même pas que tu aies essayé.
Où est le problème maintenant ? Si tu remets le code d'inscription (qui marchait puisqu'avant tu avais des inscriptions multiples) dans le else, ça devrait marcher.
Eventuellement, pour diagnostiquer, remets un echo $res['Email'] juste après le $res=$emailalready->fetch();
Où est le problème maintenant ? Si tu remets le code d'inscription (qui marchait puisqu'avant tu avais des inscriptions multiples) dans le else, ça devrait marcher.
Eventuellement, pour diagnostiquer, remets un echo $res['Email'] juste après le $res=$emailalready->fetch();
En fait si j'ai éssayé c'est pour 2 bonnes raisons : 1 je ne m'y connais pas encore beaucoup en php (mais normalement assez pour savoir que j'aurais du le laisser !) et 2, il était tard ;)
Maintenant je suis un peu perdu, j'ai donc rajouté
Maintenant je suis un peu perdu, j'ai donc rajouté
WHERE Email=\'' . $email . '\'');mais je peux toujours m'inscrire doublement :/
Aucune de tes raisons n'est bonne, car ce WHERE est une question de SQL, pas de PHP, et l'heure n'a rien à voir là-dedans.
Bon, c'était juste histoire de te taquiner.
Bon, c'était juste histoire de te taquiner.
$emailalready=$connexion->prepare('SELECT COUNT(*) AS Email FROM Users WHERE Email=\'' . $email . '\''); $emailalready->execute(); $res=$emailalready->fetch(); echo $email,' ',$res['Email']; // juste pour vérifier if ($res['Email']>0) { $ERRMSG = 10; } else { //inscription dans BDD $reqprep=$connexion->prepare("INSERT INTO Users SET Prenom='$prenom', Nom='$nom', Email='$email', Pass='$pass'"); $reqprep->execute(); }
Je viens d'essayer chez moi et ça marche.
Mais je ne sais pas ce que fait ton code, ni avant, ni après ce bout que tu montres.
Peux-tu me dire ce qu'affiche le
echo $email,' ',$res['Email']; // juste pour vérifier
que je t'ai fait mettre dans le dernier script que je t'ai proposé ?
En fait, j'arrive à reproduire ton problème si me mets une apostrophe dans l'email et en supprimant l'affichage des erreurs Cette apostrophe provoque une erreur parce que tu utilises mal PDO (qui est fait précisément pour éviter ce genre d'erreur). Mais je doute qu'il y ait une apostrophe dans ton adresse email.
Je note une autre anomalie : tu utilise pour la COUNT un alias (Email) qui est le même que le nom de la colonne qui apparaît dans le WHERE ! C'est super ambigu comme façon de faire ! Ton WHERE porte sur le COUNT ou le champ ? Mais bon, le WHERE porte bien sur le champ et le résultat est (devrait être) correct.
En résumé :
1 - Que dit le echo ?
2 - Utilises-tu une apostrophe ou tout autre caractère bizarre dans l'email ?
3 - peux tu montrer le code complet de la page (en particulier la connexion pdo, en cachant les identifiants bien sûr)
Mais je ne sais pas ce que fait ton code, ni avant, ni après ce bout que tu montres.
Peux-tu me dire ce qu'affiche le
echo $email,' ',$res['Email']; // juste pour vérifier
que je t'ai fait mettre dans le dernier script que je t'ai proposé ?
En fait, j'arrive à reproduire ton problème si me mets une apostrophe dans l'email et en supprimant l'affichage des erreurs Cette apostrophe provoque une erreur parce que tu utilises mal PDO (qui est fait précisément pour éviter ce genre d'erreur). Mais je doute qu'il y ait une apostrophe dans ton adresse email.
Je note une autre anomalie : tu utilise pour la COUNT un alias (Email) qui est le même que le nom de la colonne qui apparaît dans le WHERE ! C'est super ambigu comme façon de faire ! Ton WHERE porte sur le COUNT ou le champ ? Mais bon, le WHERE porte bien sur le champ et le résultat est (devrait être) correct.
En résumé :
1 - Que dit le echo ?
2 - Utilises-tu une apostrophe ou tout autre caractère bizarre dans l'email ?
3 - peux tu montrer le code complet de la page (en particulier la connexion pdo, en cachant les identifiants bien sûr)