probleme avec ereg

Mammouth du PHP | 558 Messages

12 avr. 2008, 23:29

Le probleme que j'ai c'est que ereg() ne filtre rien.
il verifie seulement que le champs n'est pas vide.
ce petit bout de code fonctionne tres bien sous easyphp(php4)
mais pas chez celeonet(php5)
qui ne m'affiche le message d'erreur que si le champs nl est vide.
que ce soit dans le bon format ou pas sa passe c'est d'autant plus embettant que si je met un <script>code_malveillant</script> sa passe
et si je met une adresse mail valide sa passe aussi.
je ne comprend pas ou est mon erreur.
j'ai lu et relu le tuto ereg(); mais je n'ai pas trouvé de solution.
if(ereg("[A-Za-z0-9._-]{1,100}@[A-Za-z0-9._-]{1,100}.[a-z]{2,4}",$_POST['nl']))
{ 
$nl=$_POST['nl'];
 }
if($nl==NULL)
{ echo'Votre adresse mail n'est pas du bon format o&ugrave; le champs est vide'; exit(); }
merci.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 avr. 2008, 00:01

ton code correspond à un "if() else" et non2 if()... dans la logique tout du moins

Refait un test avec preg_match()... que des avantages

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

13 avr. 2008, 10:39

D'accord avec truc sur le fait qu'il faut utiliser preg_match() par rapport à ereg (qui, soit dit en passant, va disparaitre avec l'arrivée de PHP6)

Sinon, ereg() retourne soit un entier, soit false. Essaye de vérifier cette valeur de retour avec un var_dump() pour savoir s'il s'agit bien d'une erreur dans l'ER ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 558 Messages

13 avr. 2008, 11:32

et voila cela fonctionne tres bien pour recupere l'inscription a une news-letter.
mais reste un petit soucis c'est la loi informatique et liberté je sait pas trop ajouté un lien qui supprimerais l'adresse l'adresse mail avec un code en get et les deux ensemble permettebt la suppression de l'adresse mail.
si vous avez une meilleur idée.
j'ai trouver la syntaxe preg_match() sur php.net mais il n'yaurait pas un moyens de simplifier tous cela?
<?php
include"php/connectionbd.php";
if(preg_match("/^([A-Za-z0-9]([A-Za-z0-9_-]*\.?[A-Za-z0-9])*)(\+[A-Za-z0-9]+)?@([A-Za-z0-9]([A-Za-z0-9-_]*[A-Za-z0-9])*\.)*([A-Za-z0-9]([A-Za-z0-9-_]*[A-Za-z0-9]+)*)\.[A-Za-z]{2,6}$/",$_POST['nl']) OR $POST['nl']!=NULL)
{ 
mysql_query("INSERT INTO nl (mail) VALUES ('$nl')") OR die('vous &ecirc;tes d&eacute;j&agrave inscrit avec cette adresse mail');
echo'vous &ecirc;tes bien inscrit &agrave; notre news-letter<br>
avec l'adresse mail: '.$nl.'';
}
else
{ 
echo'Votre adresse mail n'est pas du bon format o&ugrave; le champs est vide';
}
?>