Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1301 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [RESOLU] vérification si mail est déjà dans la bdd

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] vérification si mail est déjà dans la bdd

n°1281428
jereln
..elle est pas belle la vie...
Posté le 11-01-2006 à 15:48:34  profilanswer
 

tout est dans le titre !!! :)  
 
je n'arrive pas à vérifier lors d'une inscription si le mail existe déjà dans ma base de donnée. Comment pourrais je faire?
 
merci


Message édité par jereln le 12-01-2006 à 15:39:31

---------------
N'oubliez pas : je suis débutante en php et access !!! Merci.
mood
Publicité
Posté le 11-01-2006 à 15:48:34  profilanswer
 

n°1281439
sircam
I Like Trains
Posté le 11-01-2006 à 16:00:16  profilanswer
 

[:kiki]
 
Le genre de question qui tue, mais qui tue...


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1281441
sircam
I Like Trains
Posté le 11-01-2006 à 16:00:49  profilanswer
 

Suis-je bête : je suis dans la cat PHP. [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1281444
j_lecruel
☀ ☁ ☂
Posté le 11-01-2006 à 16:02:54  profilanswer
 

Salut,
 
plutôt difficile de t'aider sans avoir la structure de ta table...  
 
En gros, en admettant que l'email que tu veuille vérifier sois dans la variable $email,... tu exécute une requête du style :  
 

Code :
  1. $res = mysql_query("SELECT COUNT(email) as nb FROM nomDeTaTable WHERE champEmail='".$email."'" );


 


---------------
♈ ♋ ♌ ♍ ♎ ♏ - Agora Fidelio | Galerie d'art Toulousaine
n°1281448
Arjuna
Aircraft Ident.: F-MBSD
Posté le 11-01-2006 à 16:08:52  profilanswer
 

alter table truc add unique constraint prout on (email);
 
et si quand tu fais insert ça plante, ben c'est que l'email existe déjà
 
simple, rapide, efficace, et charge la plus faible pour le SGBD

n°1281451
omega2
Posté le 11-01-2006 à 16:14:11  profilanswer
 

Arjuna > A par que s'il s'amuse à mettre une autre colone en unique, il saura pas laquelle a bloqué la requette. ;)

n°1281504
Arjuna
Aircraft Ident.: F-MBSD
Posté le 11-01-2006 à 16:49:56  profilanswer
 

Normalement le message d'erreur est formatté de façon connue, et contient le nom de la contrainte qui a levé l'exception :p
 
Donc s'il gère correctement l'exception, il doit être capable de savoir ce qui cloche

Message cité 1 fois
Message édité par Arjuna le 11-01-2006 à 16:50:25
n°1281594
sircam
I Like Trains
Posté le 11-01-2006 à 18:18:09  profilanswer
 

Plutôt dirty. :o


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1281606
omega2
Posté le 11-01-2006 à 18:41:09  profilanswer
 

Arjuna a écrit :

Normalement le message d'erreur est formatté de façon connue, et contient le nom de la contrainte qui a levé l'exception :p
 
Donc s'il gère correctement l'exception, il doit être capable de savoir ce qui cloche


Je suis pas sur que ca soit plus propre de devoir analyser un message d'erreur sous forme de texte pour savoir le pourquoi d'une erreur.

n°1281662
Arjuna
Aircraft Ident.: F-MBSD
Posté le 11-01-2006 à 19:58:28  profilanswer
 

Bah si le connecteur à la base possède un meilleur moyen pour renvoyer le détail de l'erreur, why not, mais bon... Moi j'utilise que ADO, et y'a pas à tortiller, c'est du texte :spamafote:

mood
Publicité
Posté le 11-01-2006 à 19:58:28  profilanswer
 

n°1281710
The_magici​en
Posté le 11-01-2006 à 21:33:17  profilanswer
 

Rien de très compliqué... si par exemple tu récupère la donnée à partir d'un formulaire qui est dans une page précédente, tu met ça :

Code :
  1. {
  2. $rq123 = "select email from nom_de_ta_table where pseudo=\"".$_POST['email']."\";";
  3. $result = mysql_query($rq123);
  4. if (mysql_num_rows($result) >= 1) {
  5. echo "email déjà utilisé"; exit;
  6. }


Et sinon, je vois pas la solution...  :(  
 
P.S: biensûr, il faut que tu rentres les infos de connection MYSQL, mais bon c'est un détail!  ;)


Message édité par The_magicien le 11-01-2006 à 21:34:24
n°1281720
Arjuna
Aircraft Ident.: F-MBSD
Posté le 11-01-2006 à 21:50:37  profilanswer
 

faut un petit limit 1 histoire de pas parcourir toute la table pour rien :)

n°1281724
Ricco
Retour au pays
Posté le 11-01-2006 à 21:52:09  profilanswer
 

Toi tu vas te faire tomber dessus par les anti-injection SQL :D


---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
n°1281731
jereln
..elle est pas belle la vie...
Posté le 11-01-2006 à 22:09:34  profilanswer
 

le truc c'est que j'ai déjà une vérification pour voir si le pseudo existe déjà, commen cumuler les deux?
 

Code :
  1. connecter();
  2. $query="SELECT * FROM `Membre` WHERE `pseudo` LIKE '$pseudo' ";
  3. $result=@mysql_query($query);
  4. $num=@mysql_num_rows($result);
  5. if($num==0){
  6. $query="INSERT INTO `Membre` VALUES ...


 
je pesnse que cela doit être à ce niveau, mais je n'y arrive pas.


---------------
N'oubliez pas : je suis débutante en php et access !!! Merci.
n°1281761
Ricco
Retour au pays
Posté le 11-01-2006 à 23:09:50  profilanswer
 

"SELECT * FROM `Membre` WHERE `pseudo` LIKE '$pseudo' OR email LIKE  $email " ?


---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
n°1281766
masklinn
í dag viðrar vel til loftárása
Posté le 11-01-2006 à 23:14:21  profilanswer
 

Personnellement je serais quand même de l'avis d'Arjuna, le fait qu'un email soit unique sur l'intégralité des enregistrements fait partie des contraintes sur la donnée, et la BDD est parfaitement capable de gérer correctement ce genre de conneries. Pire, c'est son boulot (de manager l'intégrité des données).
 
Je vois pas l'intérêt de rajouter des couches par dessus qui tentent de faire le boulot de la BDD en moins bien, en moins efficace et en moins sûr [:pingouino]


Message édité par masklinn le 11-01-2006 à 23:15:10

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1281769
omega2
Posté le 11-01-2006 à 23:17:11  profilanswer
 

Même si on régle les contraintes comme il faut au niveau de la base de donnée (ca, je suis ok à 100%), je ne penses pas qu'il faille se baser sur les retour d'erreur de cette derniére pour savoir quelle contrainte à bloqué.

n°1281772
masklinn
í dag viðrar vel til loftárása
Posté le 11-01-2006 à 23:27:26  profilanswer
 

omega2 a écrit :

Même si on régle les contraintes comme il faut au niveau de la base de donnée (ca, je suis ok à 100%), je ne penses pas qu'il faille se baser sur les retour d'erreur de cette derniére pour savoir quelle contrainte à bloqué.


[:petrus dei] [:pingouino]
 
Si c'est elle qui gère l'intégrité de la donnée, c'est elle qui renvoie les erreurs significatives hein, ça me semble quand même logique personnellement [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1281891
omega2
Posté le 12-01-2006 à 10:39:44  profilanswer
 

Dans la même optique, php génére une erreur quand on tente une division par zéro. Pour autant, j'imagine que tu vérifie la valeur du diviseur avant l'opération plustôt qu'attendre l'erreur généré par php.
 
Moi, dans les deux cas, je code de la même maniére : en vérifiant au préalable les données afin d'éviter au maximum les erreurs plustôt que de baser le bon fonctionnement sur la gestion des erreurs.

n°1281897
masklinn
í dag viðrar vel til loftárása
Posté le 12-01-2006 à 10:47:16  profilanswer
 

omega2 a écrit :

Dans la même optique, php génére une erreur quand on tente une division par zéro. Pour autant, j'imagine que tu vérifie la valeur du diviseur avant l'opération plustôt qu'attendre l'erreur généré par php.


Je fais pas de PHP, et je catche l'exception qui va bien quand il y a un risque de division par 0 [:dawa]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1281952
Manu la Sc​ience
...la science ... pas toujours
Posté le 12-01-2006 à 11:50:42  profilanswer
 

Juste en passant... Pour des questions de "sécurité" et pour lutter contre le spam, ne faut-il pas stocker les emails décomposés dans une base de données, c'est-à-dire dans plusieurs champs...
 
C'est beaucoup plus lourd, j'en convient... Mais c'est juste une question comme ça...


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°1281963
masklinn
í dag viðrar vel til loftárása
Posté le 12-01-2006 à 11:56:28  profilanswer
 

Manu la Science a écrit :

Juste en passant... Pour des questions de "sécurité" et pour lutter contre le spam, ne faut-il pas stocker les emails décomposés dans une base de données, c'est-à-dire dans plusieurs champs...


À moins que ton site ait suffisament de failles pour permettre aux robots d'attaquer directement ta BDD, je ne vois pas trop quel intérêt ça aurait [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1281975
omega2
Posté le 12-01-2006 à 12:05:36  profilanswer
 

Je suis d'accord avec masklinn, normalement, aucun robos n'aura d'accés direct à ta base de donnée. C'est plustôt à l'affichage qu'il ne faut pas afficher les email en clair surtout dans les pages accéssible sans login.

n°1282214
jereln
..elle est pas belle la vie...
Posté le 12-01-2006 à 15:38:54  profilanswer
 

ça y est ; j'ai enfin trouvé, et ça marche !!! :bounce:  
Pour ceux que ça intéresse, j'ai en fait mis deux "if" l'un après l'autre.
 
Merci à tous pour votre aide. :hello:


---------------
N'oubliez pas : je suis débutante en php et access !!! Merci.
n°1282255
sircam
I Like Trains
Posté le 12-01-2006 à 16:12:31  profilanswer
 

masklinn et Arjuna >
 
C'est dirty de se baser sur le message texte de retour, car c'est entièrement dépendant du connecteur. Même sans parler de changer de DBMS - ce qui est peu réaliste, surtout avec du PHP "standard", passons - une simple mise à jour du connecteur ou un changement de langue risque de casser ton code.
 
De plus, commencer à parser ce que renvoit le DBMS, c'est écrire de la plomberie bas niveau. Car ne rêvons pas : on aura pas un bel objet avec une belle méthode qui renvoie le nom de la contrainte violée.
 
En cas de changement de la contrainte au niveau DB, p.e. parce qu'une contrainte nomée changerait de nom, ou qu'on déciderait de la remplacer par un trigger, ou qu'on déciderait de s'en passer pour je ne sais pas quelle bonne ou moins bonne raison, même problème.
 
En théorie, c'est votre approche qui est la bonne : le DBMS devrait faire le boulot et annoncer le résultat. Plus logique et plus efficace. Mais en pratique, que voulez-vous madame, on fait avec ce qu'on a.
 
[:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1282626
Arjuna
Aircraft Ident.: F-MBSD
Posté le 12-01-2006 à 23:35:07  profilanswer
 

Autre solution alors : un trigger qui gère l'exception standard, et renvoie une jolie phrase. Et alors on affiche l'exception renvoyée par le SGBD, ce qui correspond à la phrase :)
 
Si on couple avec une plage dédiée aux numéros d'erreur utilisateur, on peut gérer le cas de l'erreur inconnue sans risque aussi.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [RESOLU] vérification si mail est déjà dans la bdd

 

Sujets relatifs
Mettre en forme le message d'un mail [RESOLU][Résolu]Ubuntu et Makefile
script mail - Envoi à deux destinatairesTaille de page apres publipostage à contraindre(Resolu)
Gestion des erreur(Resolu)[resolu] recuperer nom utilisateur en vba
appel Macro via UserForm(Resolu)Mail sous Outlook...
Comment runner un macro automatiquement(Resolu) 
Plus de sujets relatifs à : [RESOLU] vérification si mail est déjà dans la bdd


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR