Probleme avec

christclamard Messages postés 20 Date d'inscription mardi 4 janvier 2005 Statut Membre Dernière intervention 6 septembre 2008 - 4 mai 2008 à 18:07
christclamard Messages postés 20 Date d'inscription mardi 4 janvier 2005 Statut Membre Dernière intervention 6 septembre 2008 - 5 mai 2008 à 12:37
j'ai utiliser la fonction javascript pour  empeché la validation du formulaire  lorsque certain caractere(/ ,//, [ , ],url )sont entré  cela  fonctionne lorsque l'on entre les caractere interdit dans le formulaire une alerte est envoyé et le formulaire n'est pas validé mais a ma grande surprise je constate que des spam se retrouve quand meme dans ma base de donnée depuis un moment, je sais pas comment ca se peut. pour ca j'ai donc decidé d'utiliser la fonction eregi() de php cela  fonctionne bien car franchement j'etais bombarder par des spam pas possible mais je vois que depuis ca a disparu. Seulement le soucis est que une fois le formulaire valider sans caractere interdit je recoit une erreur du genre :

Warning: eregi() [function.eregi]: REG_EBRACK in /hsphere/local/home/yoanchri/abidjandjafoule.com/forum_djafoule.php on line 22

Warning: Cannot modify header information - headers already sent
by (output started at
/hsphere/local/home/yoanchri/abidjandjafoule.com/forum_djafoule.php:22)
in /hsphere/local/home/yoanchri/abidjandjafoule.com/forum_djafoule.php on line 55
 
voici le code qui cause probleme
if (eregi('//',$message) OR eregi('[',$message)OR eregi(']',$message) OR eregi('/',$message) OR eregi('url',$message) OR eregi('www',$message)){
   die('<style type="text/css">

body,td,th {
color: #732494;
}
body {
    background-color: #732494;
}
.Style1 {
    color: #FFFFFF;
    font-weight: bold;
}

</style>&lt;&lt;[javascript:history.back() Retour]

      ----

      Ce message est considéré comme du spam
     

     

       

     

     

     

     

   ,
   
 

');

5 réponses

Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
4 mai 2008 à 21:07
Hello,

n'utilise pas la fonction eregi, mais plutôt strpos( ) et tu règleras le problème.

cf php.net

à+
0
christclamard Messages postés 20 Date d'inscription mardi 4 janvier 2005 Statut Membre Dernière intervention 6 septembre 2008
4 mai 2008 à 21:50
salut Evangun , bon faut dire que je viens a peine de me plongé dans le php et je ne suis pas assez fort la. donc je serais tres heureux si tu me donnais un example un peu clair avec la variable message qui est censé contenire tout le texte du formulaire a verifier.
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
4 mai 2008 à 23:05
Et bien c'est la même chose que ce que tu as fait, tu remplaces juste la fonction eregi par la fonction strpos, c'est tout.
Va sur php.net et cherche strpos, tu trouveras la syntaxe (qui est peut-être bien la même).
à+
0
gibozsec Messages postés 318 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 11 mars 2010
5 mai 2008 à 00:00
Bonjour,

Evangun c'est pas bien de dissuader les gens d'utiliser les expressions régulières  :p

Christclamard, le problème que tu rencontres se situe au niveau de ton expression pour tester les crochets (] et [). Ces deux caractères sont utilisés pour définir des 'plages' de caractères. Par exemple, si tu veux un chiffre tu notes  [0-9] dans ta regexp, ça signifie "n'importe quel chiffre de 0 à 9".

Puisque tu veux trouver le caractère [, tu dois faire une petite manipulation que je t'explique plus bas.

De plus, tu peux utiliser les "ou" dans l'expression directement plutôt que plusieurs appels à eregi grace au caractère '|' (pipe).

En bref, tu peux faire ton test de cette manière :

if (eregi('[]/[]|//|www|url',$message)){

l'expression régulière se construit de cette manière :

1) On veut  'matcher'  une série de caractères précis, on les places donc dans une liste entre crochets :

[a] => capture la lettre 'a'
[/] => Capture le caractère '/'
[adr]=> Capture les caractères a, d et r
...

Pour capturer des crochets, il faut mettre le crochet fermant ']' au début de la liste et le crochet ouvrant '[' à la fin. Ce qui donne :

[]a] => Capture la lettre 'a' et le crochet fermant
[]/[] => Capture les caractères '[', '/' et ']'

2) ensuite à l'aide du 'ou' noté '|', on ajoute les autres possibilités :

'[]/[]|//|www|url' => Capture les chaines qui contiennent un caractère '[', '/' ou ']' ou les chaines  '//', 'url' ou 'www'

Petite remarque, si ton message contient '//', il contient forcement le caractère '/', tu peux donc te passer de tester le double slash. Par contre, puisque tu veux juste empêcher e spam et plus précisement les url, interdire le '/' n'est pas pertinant et peut être gênant. Il vaut mieux tester seulement le double slash. Je laisse comme ça pour que tu puisse adapter à ta guise.

Il y a énormement de possibilités avec les expressions régulières, tu pourrait en écrire une qui vérifie qu'un message contient bien un lien et pas seulement les caractères composant ton lien. Visiblement, tu cherches à bloquer les messages contenant "[url]www.monsite.com/url". Tu peux écrire une expression qui correspond à ça exactement.

Dans certains cas un strpos est plus "pratique" mais il y en a d'autres pour lesquels il ne faut pas hésiter. Pour savoir quand utiliser l'un ou l'autre, le mieux est de les connaitres.

Tu trouvera plus d'infos sur les regexp sur pas mal de sites (google te fournira des tutoriel assez facilement). Pour strpos, php.net est sufisant, c'est une fonction basique.

Quand à ton problème de départ (le javascript qui ne bloquait pas les spams), à mon avis les robots qui te spament n'ont pas le JS et donc ne sont pas bloqués. Ou alors, ils postent directement en appelant la page de validation sans passer par ton formulaire.

Bonne continuation.

Grrrrrrrrrrr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
christclamard Messages postés 20 Date d'inscription mardi 4 janvier 2005 Statut Membre Dernière intervention 6 septembre 2008
5 mai 2008 à 12:37
eh bien merci tous les deux pour votre soutien , mais la j'ai essayer de faire avec la fonction strpos que j'ai voir sur php.net j'ai adapter une exemple a mon cas bon je vais voir si il passe encore des spam toute fois je vais bien approfondir la lecture du message de gibezsec , faut dire que tous les deux vous m'avez beaucoup aider . je repose dans le forum si ca spam de nouveau voici le code que j'ai modifié. encore une fois je suis pas tres classe en php pas trop de rigueur merci:

$findme='url';
$pos=strpos($message,$findme);
if(!$pos===false){ die ('votre message contien des caracteres non autorisés');}
$findme2='http';
$pos2=strpos($message,$findme2);       
if(!$pos2===false){ die ('votre message contien des caracteres non autorisés');}
$findme3='[';
$pos3=strpos($message,$findme3);
if(!$pos3===false){ die ('votre message contien des caracteres non autorisés');}
$findme4='/';
$pos4=strpos($message,$findme4);
if(!$pos4===false){ die ('votre message contien des caracteres non autorisés');}
$findme5=']';
$pos5=strpos($message,$findme5);
if(!$pos5===false){ die ('votre message contien des caracteres non autorisés');}
0
Rejoignez-nous