verif mail tou bête

verif mail tou bête - PHP - Programmation

Marsh Posté le 24-05-2006 à 11:37:58    

juste :  
 
if (($_POST["email"])=="" )
     {
      echo "email invalide";
     }
et rajouter si $_POST['email'] ne contient pas @
 
donc if (($_POST["email"])=="" || LE CODE DE VERIF)
 
j'ai trouvé essentiellement des fonctions toute faite mais ya pas juste une ligne de code à rajouter comme je veux faire ici ?

Reply

Marsh Posté le 24-05-2006 à 11:37:58   

Reply

Marsh Posté le 24-05-2006 à 11:40:29    

Reply

Marsh Posté le 24-05-2006 à 11:41:51    

regarde du cote de strpos
edit : grillé


Message édité par flo850 le 24-05-2006 à 11:42:02

---------------

Reply

Marsh Posté le 24-05-2006 à 11:54:13    

a noter, ce n'est pas parce qu'il y a un @ que l'adresse est valide ...

Reply

Marsh Posté le 24-05-2006 à 11:58:38    

ok, j'ai bien compris la fonction strpos() mais juste un truc, dans l'exemple il disent ceci qui m'interpelle :  
 

Code :
  1. $mystring = 'abc';
  2. $findme  = 'a';
  3. $pos = strpos($mystring, $findme);
  4. // Notez l'utilisation de ===.  Un simple == ne donnerait pas le résultat escompté
  5. // car la lettre 'a' est à la position 0 (la première).
  6. if ($pos === false) {
  7. bla bla bla }


 
pourquoi le '===' ?
 strpos vérifie que la chaine 'abc' contient 'a' ok mais vérifie la position de a dans la chaine aussi ?? je ne comprend pas. car dans mon cas, si je fais un $test_mail = strpos($_POST['email'] , @) , je ne peux pas deviner l'emplacement du @ vu que je ne connais pas l'email de la personne. donc moi je dois faire quoi là
if ($test_mail == false) suffira ?

Reply

Marsh Posté le 24-05-2006 à 12:01:07    

jedebute75 a écrit :

:  
pourquoi le '===' ?


 
Ca permet de vérifier que les types des deux opérandes, et pas seulement les valeurs, sont égales. Par exemple, FALSE == 0 renvoie vrai (deux valeur "équivalentes" ) mais FALSE === 0 renvoie faux.
 

Citation :

strpos vérifie que la chaine 'abc' contient 'a' ok mais vérifie la position de a dans la chaine aussi ?? je ne comprend pas. car dans mon cas, si je fais un $test_mail = strpos($_POST['email'] , @) , je ne peux pas deviner l'emplacement du @ vu que je ne connais pas l'email de la personne. donc moi je dois faire quoi là
if ($test_mail == false) suffira ?


 
strpos cherche la position, s'il ne trouve le @ nulle part, il renvoie FALSE, donc oui, ça suffit. Ceci dit c'est effectivement assez limité comme détection de la validité d'un mail.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 24-05-2006 à 12:07:36    

aaah ok, merci pour le '==='!!
sinon pour le test @ donc ça marche.*existe t'il un moyen de tester si le serveur à pu envoyer le mail:  
je m'explique, si le mail n'est pas partit parceque l'adresse n'existe pas (elle peut avoir l'air valide mais ne pas exister... totoafroidaupied@hotmail.fr va passer le test du mail valide par exemple), y a t(il moyen de renvoyer un message du genre : l'email que vous avez fournis n'existe pas ?

Reply

Marsh Posté le 24-05-2006 à 12:17:36    

non ce n'est pas possible tout ce dont tu disposes via la fonction mail, c'est http://fr.php.net/manual/fr/function.mail.php

Citation :


Valeurs de retour
Retourne TRUE si le mail a été accepté pour livraison, FALSE sinon.
 
Il est important de noter que ce n'est pas parce que le mail a été accepté pour livraison qu'il arrivera à destination.


 
Et de toute façon tu n'as pas forcément le mail de retour t'informant que l'adresse n'existe pas dans l'instant.
 
C'est pour ça que sur de nombreux systèmes, un lien dans le mail envoyé "active" effectivement le compte de l'utilisateur.

Reply

Marsh Posté le 24-05-2006 à 12:24:11    

oui, je m'en doutais un peu, vu que l'envoie ne se fait pas forcément dans la seconde!!!
tant pis pour les infos.

Reply

Marsh Posté le 24-05-2006 à 12:26:26    

un conseil : remplace    
 
$_POST["email"])==""
 
par
 
empty($_POST["email"])    cette méthode teste si email est déclaré et si pas vide

Reply

Marsh Posté le 24-05-2006 à 12:26:26   

Reply

Marsh Posté le 24-05-2006 à 13:51:36    

Et pour la validité du mail, pourquoi pas tout simplement une regex ?


Message édité par $man le 24-05-2006 à 13:51:48
Reply

Marsh Posté le 24-05-2006 à 14:01:04    

merci nemoph!!
$man oui une regex mais je sais pas pourquoi ça marche pas chez moi ???, il renvoie toujours false même quand l'adresse est valide...

Reply

Marsh Posté le 24-05-2006 à 14:43:38    

T'utilises quoi comme regexp ?


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 24-05-2006 à 15:01:34    

Petite question, en passant, quelqu'un a déjà essayé de d'établir une connexion avec le serveur indiqué dans l'adresse e-mail pour vérifier la l'existance de celui-ci?
 
Je demande parce qua franchement je l'ai jamais fait de peur qu'il mette trop de temps à répondre par exemple et que je me mange un timeout...

Reply

Marsh Posté le 24-05-2006 à 15:02:03    

Code :
  1. function validation()
  2.         {
  3.             var email     = document.formulaire.EMAIL.value;
  4.                var verif     = /^[^@]+@(([w-]+.){1,4}[a-zA-Z]{2,4}|(([01]?d?d|2[0-4]d|25[0-5]).){3}([01]?d?d|2[0-4]d|25[0-5]))$/
  5.                if (verif.exec(email) == null)
  6.             {
  7.                 alert("Votre email est incorrecte" );
  8.                 return false;
  9.             }
  10.             else
  11.             {
  12.                 alert("Votre email est correcte" );
  13.                 return true;
  14.             }   
  15.  
  16.  
  17.         }


 
renvoie toujours false  (et j'en ai essayé plusieurs)  c dingue!!!
 
sinon j'ai fait ça juste pour tester l'@ :
 

Code :
  1. if (!empty($_POST['email'])) {
  2. $test_email = strpos ($_POST['email'] , '@') ;  }
  3. et quand je fais un if ($test_mail == false; {echo 'email invalide'}
  4. else {j'envoie le mail}


bah toujours il envoie le mail même si pas d'@ dans le mail (du coup horrible message d'erreur à la validation forcément : Warning: mail(): SMTP server response: 550 unknown user <bb> in...
 
bon, je ne comprend pas trop mais bon...
 
 

Reply

Marsh Posté le 24-05-2006 à 15:24:33    

Regarde ceci, ça devrait pouvoir t'aider : http://www.expreg.com/voir1

Reply

Marsh Posté le 24-05-2006 à 15:40:54    

hum, ça fait un peu copié collé mais bon :  
 

Code :
  1. if(!ereg("^[[:alnum:]]([-_.]?[[:alnum:]])*@
  2. [[:alnum:]]([-.]?[[:alnum:]])*\.([a-z]{2,4})$",$_POST['email']))
  3.     {
  4.      echo 'mail invalide'     }


 
devrait donner à l'ecran avec saisie du champs email = vvvv
 
mail invalide
 
ou je perd la tête :-(
 
parceque la c'est le else {tout baigne tu peux envoyer le mail} qui s'execute  ??????

Reply

Marsh Posté le 24-05-2006 à 15:48:59    

heuu je délire c toujours false qui est renvoyé pardon

Reply

Marsh Posté le 24-05-2006 à 15:49:12    

enfin le même soucis qu'au debut quoi

Reply

Marsh Posté le 24-05-2006 à 16:03:00    

Code :
  1. if(!preg_match('`^[[:alnum:]]([-_.]?[[:alnum:]])*
  2. @[[:alnum:]]([-.]?[[:alnum:]])*\.([a-z]{2,4})$`',$_POST['email'])  ||( $_POST['email'] == "" ))


 
renvoie false avec email =  moi.b@laposte.net ??????

Reply

Marsh Posté le 24-05-2006 à 16:13:19    

Le code qu'ils donnent marche très bien chez moi avec l'adresse moi.b@laposte.net. Montre un peu plus de code,  parce que je vois pas ce  qui ne va pas!

Reply

Marsh Posté le 24-05-2006 à 16:13:35    

donc je laisse tomber les regex :-((( et j'opte  pour strpos

Reply

Marsh Posté le 24-05-2006 à 16:15:23    

Sinon tu fait deux explode sur ton adresse e-mail, un avec le @ et l'autre avec le . et tu vérifie les trois valeurs que tu obtiens. c'est ce que je faisais avant de découvrire les regex et ça marche très bien.

Reply

Marsh Posté le 24-05-2006 à 16:19:54    

Du genre :

Code :
  1. $mail = "moi@eux.ext";
  2. $temp = explode("@",$mail);
  3. $temp2 = explode(".",$temp[1]);
  4. if ( $mail == $temp[0]."@".$temp2[0].".".$temp2[1] && strlen($temp2[1]) <= 6 && strlen($temp2[1]) > 0 )
  5.      echo "ok ok";
  6. else echo "non c pas bon!!";

Mais c'est quand même mieux avec une regex!

Message cité 1 fois
Message édité par dwogsi le 24-05-2006 à 16:21:19
Reply

Marsh Posté le 24-05-2006 à 16:21:13    

Code :
  1. if(isset($_POST["post"])) {
  2. $message= "ok";
  3. if(!preg_match('`^[[:alnum:]]([-_.]?[[:alnum:]])* @[[:alnum:]]([-.]?[[:alnum:]])*\.([a-z]{2,4})$`',$_POST['email'])  ||( $_POST['email'] == "" ))  {
  4. $message= 'email invalide';   }
  5. if ( traitement de autres champs du formulaire )
  6. if ($message = "ok" ) ' {
  7. envoie du mail
  8. mail($_Post['email'], $subject, $messages, $h);
  9. }


 
donc juste avec le test if $_POST['email'] == "" ça fonctionne.
avec le strpos ça marche aussi (mais moins fiable je pense)
mais alors avec ce code toujours false

Reply

Marsh Posté le 24-05-2006 à 16:22:52    

Ligne 10 : if ( $message = "ok" )...
C'est pas == que tu voulais mettre???


Message édité par dwogsi le 24-05-2006 à 16:23:11
Reply

Marsh Posté le 24-05-2006 à 16:24:34    

dwogsi a écrit :

Mais c'est quand même mieux avec une regex!


 
 
bah oui heinnn c'est pour ça que j'ai insité mais bon... ça veut vraiment pas chez moi et pourtant!!!

Reply

Marsh Posté le 24-05-2006 à 16:25:57    

oui pour la ligne 10 c une erreur de frappe!!!

Reply

Marsh Posté le 24-05-2006 à 16:41:25    

et le bou de code que je t'ai donné ne fonctionne-t-il pas?

Reply

Marsh Posté le 24-05-2006 à 16:46:45    

:-)))) ouaip ça marche MERCI.    
 
bah adieu regex mais tu vois c bizzard que ça marche pas chez moi... si le même code marcge chez toi

Reply

Marsh Posté le 24-05-2006 à 16:47:54    

explode je connaissais pas  ;-)
d'autant que je cherchais dernièrement à récupérer des données d'un tableau dans un même champ d'une BBD et ça me semble parfait pour faire ça...


Message édité par jedebute75 le 24-05-2006 à 16:50:51
Reply

Marsh Posté le 24-05-2006 à 16:53:27    

Au fait, pour le TLD dans la regex qu'ils donne il définissent un max de 4 caractère et il semblerait que cela soit faux.

Reply

Marsh Posté le 24-05-2006 à 17:01:51    

hum, oui alors je vais être honnête pour le regex je l'ai copié collé et je n'y dechiffre pas grand chose , j'ai juste compris qu'il testait le mail, que tout les caractères obligatoire étaient présent et à la bonne place :-))
donc : "le TLD dans la regex qu'ils donne il définissent un max de 4 caractère"  hum ???

Reply

Marsh Posté le 24-05-2006 à 17:09:08    

Je parlais de "l'extension" du domaine si tu préfére et si l'on en croit cett page http://fr.wikipedia.org/wiki/Tld on se rend compte que la longueure de celle-ci ne se limite plus à 4 caractères.

Reply

Marsh Posté le 24-05-2006 à 17:28:46    

ah oui effectivement, ça doit en passer à la trappe du coup!!! merci pour l'info, dans mon cas le regex a pas marché donc ... mais pour ceux qui passe par là, pensez à modifier ;-)
 
MERCI dwogsi

Reply

Marsh Posté le 24-05-2006 à 18:08:01    

Mais de rien, et en passant le code que je t'ai donné (avec explode) vérifie bien la longueure de l'extension.

Reply

Marsh Posté le 24-05-2006 à 18:19:47    

oui, j'y ai pensé aussi ;-)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed