Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/07/2007, 19h43   #1
Membre du Club
 
Inscription : février 2007
Messages : 274
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 274
Points : 53
Points : 53
Par défaut Utilisation de preg_match

bonjour

j'ai un première problème suite a problème de spam incessant j'ai décider de changer le système

Code php :
1
2
3
4
5
 
elseif((preg_match("#viagra|^cialis$|cialis</a>|levitra|<a | http:// | www |<img #i" , $message)) == true)
   {
   $erreur[] = 'spam interdit';
   }
maitenant si je met une adresse donc http ou www ben le code ne réagit pas :s

un autre problème le membre peu s'il veut laisser sont adresse mail
mais avec la conditions
Code php :
1
2
3
4
5
elseif(isset($email)) 
 {
 if(strchr($email,"@") == FALSE)
 {
		$erreur[] = 'mettre une vrai adresse mail';
la nous somme obliger de mettre une adresse mail je ne comprend pas pourquoi ???

merci de m'aider schats
schats est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2007, 21h06   #2
Nouveau Membre du Club
 
Homme
Inscription : janvier 2006
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2006
Messages : 44
Points : 26
Points : 26
Envoyer un message via MSN à Nicolas N.
Bonjour,

Je pense que vous avez simplement oublié les anti-slash ainsi que les paranthèses. J'ai testé le code suivant, et il fonctionne :

Code :
1
2
3
4
5
 
elseif((preg_match("#(viagra|^cialis$|cialis<\/a>|levitra|<a|http:\/\/|www|<img)#i" , $message)) == true)
   {
   $erreur[] = 'spam interdit';
   }
Pour votre deuxième problème, le script vérifie la présence du '@' dans le cas où le champs 'email' est rempli grâce à la fonction isset(); donc si le champs 'email' n'est pas rempli, il ne vérifie rien .

Nico.
Nicolas N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2007, 21h22   #3
Membre du Club
 
Inscription : février 2007
Messages : 274
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 274
Points : 53
Points : 53
bonjours ,
Citation:
Pour votre deuxième problème, le script vérifie la présence du '@' dans le cas où le champs 'email' est rempli grâce à la fonction isset(); donc si le champs 'email' n'est pas rempli, il ne vérifie rien .
voila c'est ca que je veut mais la il me met
Code php :
$erreur[] = 'mettre une vrai adresse mail';
même si on a pas mit d'adresse mail
schats est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2007, 22h48   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par Nicolas N.
Je pense que vous avez simplement oublié les anti-slash ainsi que les paranthèses. J'ai testé le code suivant, et il fonctionne
Les parenthèses sont inutiles ici car elles n'ont aucun rôle à jouer, que ce soit pour la capture ou dans l'expression. Les slashs n'ont pas non plus besoin d'être échappés pour la simple et bonne raison que ce ne sont ni des métacaractères ni utilisés comme séparateur.

Citation:
Envoyé par schats
Code php :
1
2
3
4
5
 
elseif((preg_match("#viagra|^cialis$|cialis</a>|levitra|<a | http:// | www |<img #i" , $message)) == true)
   {
   $erreur[] = 'spam interdit';
   }
Les espaces sont volontaires ?

Citation:
Envoyé par schats
un autre problème le membre peu s'il veut laisser sont adresse mail
mais avec la conditions
Code php :
1
2
3
4
5
elseif(isset($email)) 
 {
 if(strchr($email,"@") == FALSE)
 {
		$erreur[] = 'mettre une vrai adresse mail';
La variable $email elle sort d'où ? N'y aurait-il pas confusion avec la fonction empty ? Je pense qu'on peut également trouver mieux que strchr (une expression régulière par exemple) ...
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2007, 11h15   #5
Membre du Club
 
Inscription : février 2007
Messages : 274
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 274
Points : 53
Points : 53
Code php :
1
2
3
4
elseif((preg_match("#viagra|^cialis$|cialis</a>|levitra|<a | http:// | www |<img #i" , $message)) == true)
   {
   $erreur[] = 'spam interdit';
   }
non les espace sont volontaire enfin c'est pour voir un peu clair :s

la variable email est
Code php :
1
2
3
4
5
6
7
8
9
if(!empty($_POST) ) // le form a été soumis
{
  // servira à enregistrer les messages pour les erreurs rencontrées
   $_POST = array_map('trim', $_POST);
   $erreur = array();
 
   $pseudo = mysql_real_escape_string($_POST['pseudo']);
   $email = mysql_real_escape_string($_POST['email']);
   $message = mysql_real_escape_string($_POST['message']);
schats est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2007, 11h54   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par schats
non les espace sont volontaire enfin c'est pour voir un peu clair :s
Justement sans l'option x vos espaces seront considérés comme faisant partie du masque !

sera toujours vrai à partir du moment où le formulaire où est défini le champ email est soumis ...
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2007, 12h47   #7
Membre du Club
 
Inscription : février 2007
Messages : 274
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 274
Points : 53
Points : 53
euh alors comment faire ???
schats est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2007, 18h33   #8
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par schats
euh alors comment faire ???
Je vous l'ai dit

Code php :
1
2
3
4
5
 
elseif((preg_match("#viagra|^cialis$|cialis</a>|levitra|<a | http:// | www |<img #i" , $message)) == true)
   {
   $erreur[] = 'spam interdit';
   }
vous supprimez les espaces sans signification ou vous utilisez l'option x.

Code php :
elseif(isset($email))
a priori vous devez remplacer isset par !empty
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 14h50   #9
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
a partir du moment ou tu fais un
$toto = quelquechose
$toto sera considéré comme défini. Meme si ton quelque chose est une chaine vide, NULL ou FALSE.

pour tester la chaine vide, utilise empty()
pour tester NULL utilise is_null()
et pour false, un if suffit (puisque c'est déja un booléen).
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h09.


 
 
 
 
Partenaires

Hébergement Web