Double Véfification

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Double Véfification

Re: Double Véfification

par devlop78 » 22 févr. 2011, 19:38

Oui, je te comprends, mais je reste contre ce nombre important de requête. Je ne sais pas ici ce que fait le script, mais en général il est suivi d'un insert.

Bref, ici on peut très bien récupérer pseudo et mail avec la requête que j'ai donnée. Je ne suis pas spécialiste en la matière et je trouve que l'exécution de requêtes SQL est rapide, toutefois, je pense que c'est assez gourmand. Il ne s'agit pas d'en être radin et de rendre le code immangeable, mais là, je pense qu'il est beaucoup moins couteux de faire cette requête, de récupérer le pseudo et le mail retourné, et de voir s'il correspond à ce que l'utilisateur a donné. En gros, c'est mieux pour SQL, c'est plus simple en PHP, c'est mieux pour tous.

Sinon, avec un insert, une méthode est de mettre les champs "nom", et "mail" en contrainte unique (ou index unique). On peut sans vérifier avec un select, insérer directement. Si le nom ou mail existe déjà, une erreur sortira, on peut la récupérer et l'analyser et afficher le message. On passe donc de 3 requêtes à 1. Le plus dur est l'analyse, j'ai moi-même fait cette requête en vérifiant un code SQL State, et c'est une erreur car ce code englobe trop d'erreurs. Mais avec un peu de recherche, je suis sûr que l'analyse de l'erreur de façon rapide et précise est possible. Mon message me retourne "violation de contrainte" (en gros), mais je suis certain qu'il est facile d'avoir un code plus précis (type de contrainte), et les champs concernés (ici, en l'occurence, si le pseudo et le mail sont en double, il risque de s'arrêter sur le premier, mais est-ce vraiment important).

Edit: aussi rajouter LIMIT 1 à la fin de la ou les requêtes pour que Mysql s'arrête de chercher dès qu'il en a trouvé un

Re: Double Véfification

par xTG » 22 févr. 2011, 19:18

Parce qu'il serait bien embêté avec le message d'erreur.
J'ai pour ma part horreur des sites qui te disent que tes informations sont incorrectes lors de l'inscription sans te citer quel est le champ qui pose problème...

Re: Double Véfification

par devlop78 » 22 févr. 2011, 19:17

Et pourquoi ne pas vérifier en une seule requete ???

select pseudo from membre where pseudo=\''.$pseudo_membre.'\' OR mail=\"$mail\"

Re: Double Véfification

par TRUNCKS » 22 févr. 2011, 19:05

Perfect, merci bien !

Re: Double Véfification

par xTG » 22 févr. 2011, 18:55

Un renommage pour $num_pseudo et $num_email ?
Ainsi tu peux faire quelque chose du genre :
if( ($num_pseudo + $num_email) != 0 )
  echo "erreur";

Double Véfification

par TRUNCKS » 22 févr. 2011, 18:49

Bonjour,

J'ai un formulaire qui vérifie que le pseudo n'existe pas déjà et que l'adresse mail n'est pas utilisée avant d'envoyer.
Mon problème, c'est qu'il faut que les deux conditions soit fausses, si l'un des deux est bonnes, il envoie.
Je n'arrive pas à le reformuler pour une double vérification:

Code : Tout sélectionner

// ON VERIFIE SI CE PSEUDO EXISTE DEJA $sq='select pseudo from membre where pseudo=\''.$pseudo_membre.'\''; $requete=mysql_query($sq ) or die('erreur sq1: '.mysql_error()); $num=mysql_num_rows($requete); if($num!=0) { echo htmlspecialchars("Ce pseudo existe déjà, veuillez en choisir un autre")."<br><br><a href=\"javascript:window.history.back()\">Retour</a>"; } /**/ // ON VERIFIE SI CE MAIL EXISTE DEJA $sq='select mail from membre where mail=\''.$mail_membre.'\''; $requete=mysql_query($sq ) or die('erreur sq1: '.mysql_error()); $num=mysql_num_rows($requete); if($num!=0) { echo htmlspecialchars("Cette adresse mail est déjà utilisée")."<br><br><a href=\"javascript:window.history.back()\">Retour</a>"; } /**/