tester l'adresse email

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 : tester l'adresse email

par troudball » 09 août 2005, 15:30

çà y est enfin, la réponse est

!^[A-Za-z]{3,}+$! (Reconnaissance une chaîne de caractères non-numériques)

(punaise 2 heures pour y arriver #-o ), sinon ouckileou "je veux des lettres" n'est pas comme "je ne veux pas des chiffres" mais plutot "je ne veux pas des chiffres, ni , ni. ni-, ni!$/&"£$)?!)!$£&, etc...", je me suis planté au début, il fallait se focaliser sur l'exclusivité des lettres....

A+, je met résolu! merci à tous =D>

par ouckileou » 09 août 2005, 13:41

ben en disant "je veux des lettres" ça revient à dire "donc pas de chiffres" :)

es-tu allé voir ce testeur ? www.lumadis.be
ici tu peux mettre au point tranquillement tes regex

et il y a un lien vers le tuto de Ripat, et celui de Naholyr aussi :)

par troudball » 09 août 2005, 13:38

bien bien bien, encore merci pour tout!
Au fait les regex, c'est facile à comprendre, mais beaucoup moins à mettre en pratique :
Je voudrai (pour m'entrainer tester le champ "nom" d'un formulaire, donc je veux des lettres, pas de chiffres et au moins 3 caractères : j'ai essayé ![a-zA-Z^0-9]{3,}! mais çà ne semble pas marcher :( le problème est que je n'arrive pas à séparer "je veux des lettres" et "je ne veux pas de chiffres" tout en disant que je veux les deux. . .
Un p'tit coup de pouce :D après je vous le promet, je vous laisse tranquille (au moins pour l'heure du déjeuner ( et oui en Italie c'est 14heure...)

par ouckileou » 09 août 2005, 13:29

oui tu peux utiliser une fonction dans une autre, donc la fonction de la page précédente fonctionne ;)

par troudball » 09 août 2005, 13:12

Bon encore, çà va, je ne suis pas arrivé très loin... :D

Au fait pouvez-vous aller voir mon dernier message de la page précédente pour me dire ce que vous en pensez de la fonction erreurmail???

A+ et merci pour tout!!

par Cyrano » 09 août 2005, 13:06

Exactement :)

par troudball » 09 août 2005, 12:58

donc au lieu de déclarer :

$X=$HTTP_POST_VARS['X']

Il est fortement conseillé de déclarer :

$X=$_POST['X'] ??? :(

par ouckileou » 09 août 2005, 12:54

pour s'assurer une plus grande polyvalence sur les serveurs (au cas ou un server ne reconnaisse pas le style medium ou abbrégé) et pour utiliser des variable à nom court...
ce n'est pas qu'une question de nom :
Cette variable est une 'superglobal', ou globale automatique. Cela signifie qu'elle est simplement disponible dans tous les contextes d'exécution (fonctions ou méthodes). Vous n'avez pas besoin de faire global $_POST; pour y accéder, comme vous le faisiez avec $HTTP_POST_VARS.

$HTTP_POST_VARS contient les mêmes informations, mais n'est pas autoglobale. (Notez que $HTTP_POST_VARS et $_POST sont des variables différentes et que PHP les traite comme tel)
tu as donc tout intérêt maintenant à utiliser $_POST, et les autres nouvelles écritures ;)

par troudball » 09 août 2005, 12:48

OK, la confusion était venu du fait que dans le livre que j'utilise par apprendre le php, on déclare systématiquement les variables :
$X=$HTTP_POST_VARS['X']
pour s'assurer une plus grande polyvalence sur les serveurs (au cas ou un server ne reconnaisse pas le style medium ou abbrégé) et pour utiliser des variable à nom court... Et j' avais justement déclaré $email=$HTTP_POST_VARS['email'], c'est pour çà que je ne comprennais pas tu l'utilisais pour la fonction testmail() :lol: , maintenant, tout est clair!!! Merci encore pour ton aide :wink:

Dis moi juste en retournant une valeur booléenne comme tu dit, on peut aussi créer d'autres fonctions utilisant l'autre fonction ? un exmple est peut-etre meilleur pour me faire comprendre :

J'ai essayé (çà semble fonctionner :-" !!!) :
function erreurmail ($X)
{

 if (!testmail($X))
{
    echo '<SPAN class=fwhite2>email invalido<BR /></SPAN>';
}

    }
il y a de l'idée ou je part sur une fauss route?

par ouckileou » 09 août 2005, 12:43

pour ce qui est du retour de fonction aussi :

pour l'instant tu affiches directement un message d'erreur si ton adrese est fausse

mais un jour tu auras peut-être envie de valider un forum, avec une adresse email mais aussi d'autres champs.
Et tu voudras n'afficher qu'un seul message global, quelque soit le problème (sur l'adresse email ou sur un autre champ)

en utilisant un retour booléen dans ta fonction, tu pourras la réutiliser, car c'est en récupérant ce retour que tu pourras choisir quoi faire

bon ok cette fonction se modifiera rapidement, mais si elle était plus longue et que tu affichais beaucoup de messages, ce serait plus embêtant ;)

par ouckileou » 09 août 2005, 12:34

Il y a une chose que je ne comprends pas, $_POST["email"], $HTTP_POST_VARS['email']; et $email ne sont-ils pas au bout du compte la meme chose avec des nomenclatures différentes (style abrégé, medium, long)???
- $HTTP_POST_VARS['variable'] est l'ancienne écriture de $_POST['variable'], que l'on n'utilise plus. Elles symbolisent toutes les deux une variable envoyée par POST (par un formulaire le plus souvent)
- $email représente une variable quelconque.
J'ai un peu de mal à comprendre pourquoi dans ton exemple tu utilise la variable $email pour la fonction testmail et dans ta structure conditionnelle, tu utilises testmail avec $_POST["email"]... :?
dans la déclaration de la fonction, au niveau des paramètres, tu définis simplement le nom du paramètre au niveau local.
en faisant ça :
function testEmail($adresseEmail) { }
je pourrais utiliser dans ma fonction la variable $adresseEmail, qui n'existera que dans celle-ci et dont la valeur sera fournie à l'appel de cette fonction

quand je l'appelle :
$valide = testEmail($_POST['email']);
je donne à mon paramètre $adresseEmail la valeur de $_POST'email'], mais je pourrais lui donner la valeur d'une autre variable, par exemple une adresse récupérée en base de données

donc mettre $_POST['email'] directement dans la déclaration de la fonction n'a pas vraiment de sens ;)

est-ce que c'est plus clair ? :)

par troudball » 09 août 2005, 12:18

salut ouckileou et grand merci pour ton aide,

J'ai fait :
$email=$HTTP_POST_VARS['email'];

function testmail($email)
 {
 $verifmail="!^[a-zA-Z0-9._-]+@[a-z0-9._-]{2,}\.[a-zA-Z]{2,4}$!";
   if (!preg_match($verifmail, $email))
    {
        echo '<SPAN class=fwhite2>email non correcte<BR /></SPAN>';
    }
    else
    {
        echo '<SPAN class=fwhite2>email valide<BR /></SPAN>';
    } 
  }
et ensuite je rappèle (quand j'en ai besoin :) ) testmail($email); et après quelques tests, tout semble fonctionnait comme je le souhaite ...

Il y a une chose que je ne comprends pas, $_POST["email"], $HTTP_POST_VARS['email']; et $email ne sont-ils pas au bout du compte la meme chose avec des nomenclatures différentes (style abrégé, medium, long)??? J'ai un peu de mal à comprendre pourquoi dans ton exemple tu utilise la variable $email pour la fonction testmail et dans ta structure conditionnelle, tu utilises testmail avec $_POST["email"]... :?

par ouckileou » 09 août 2005, 11:27

- pourquoi passer $verifMail en paramètre ? c'est une variable locale de ta fonction, que tu définies par la suite
- le paramètre "adresse email" n'est pas $_POST["email"] : tu donnes le nom de la variable que tu va utiliser par la suite, et c'est dans l'appel que tu décides de la variable qui contient l'adrese à vérifier. Elle peut être POST ou non
- il est préférable de faire un retour de fonction à VRAI ou FAUX plutôt que d'afficher directement le résultat, tu n'auras peut-être pas tjrs envie d'afficher ça :)

voici comment je verrais la chose d'après ton code :
<?php
Function testmail ($email) {
	// la Regex mis dans une variable
	$verifmail="!^[a-zA-Z0-9._-]+@[a-z0-9._-]{2,}\.[a-zA-Z]{2,4}$!";
	
	// la condition
	if (!preg_match($verifmail, $email))
	{
		return false;
	} 
	else
	{
		return true;
	}
}


if (!testmail($_POST["email"]))
{
	echo "Vous devez entrer un email valide";
}
else
{
	echo "OK !";
}
?>

par troudball » 09 août 2005, 11:07

çà donnerait quelque chose comme çà la fonction :

Code : Tout sélectionner

<?php Function testmail ($verifmail, $_POST["email"]) { // la Regex mis dans une variable $verifmail="!^[a-zA-Z0-9._-]+@[a-z0-9._-]{2,}\.[a-zA-Z]{2,4}$!"; // la condition if (!preg_match($verifmail,$_POST["email"])) { echo "Vous devez entrer un email valide"; } else { echo "OK !"; } }
C'est çà? :)

par ouckileou » 09 août 2005, 10:24

Je voudrai juste savoir s'il est possible de mettre le code de David96 sous forme d'une fonction que je n'aurai qu'à rappeler si nécéssaire (sans les problèmes de variable globale mentionnés par invité ?
oui, et ce serait même une bonne idée
pour le problème de l'accessibilité des variables, il suffit des les passer en paramètre