Problème PHP : expression régulière

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 : Problème PHP : expression régulière

par Sékiltoyai » 02 juil. 2007, 13:54

au lieu de récupérer la valeur en GET, il fallait que je la récupère en REQUEST !
Pas exactement. $_REQUEST est le regrouppement des variables $_GET, $_POST, et $_COOKIE. Si tu envoie un formulaire et que tu n'arrives pas à en récupérer les données par $_GET mais par $_REQUEST, alors cela veut dire que tu les as envoyées par méthode post (puisque $_COOKIE ne vient pas des formulaires). Par conséquent, tu ne peut en vouloir qu'à toi même d'avoir omi de vérifier ou de spécifier la méthode par laquelle tu envoies ton formulaire.
Enfin, je te conseille d'utiliser $_POST plutôt que $_REQUEST dans ton cas, si tu ne veux pas avoir de problèmes de conflits de variable un de ces jours...

par VinS » 02 juil. 2007, 11:06

Youpi j'ai trouvé !

au lieu de récupérer la valeur en GET, il fallait que je la récupère en REQUEST !

Voilà le code (qui marche chez moi) pour ceux qui veulent faire la même chose :

Code : Tout sélectionner

include ("conndb.inc.php"); loginDB(); $emailx=$_REQUEST['email2']; $result = mysql_query ("SELECT email FROM newsletter WHERE email='".mysql_real_escape_string($emailx)."'"); if ($req = mysql_fetch_assoc($result) || preg_match('/pouet/', $emailx) ) { echo "<center>Erreur : E-mail périmé ou déjà existant</center>"; } else{ blabla }

par VinS » 02 juil. 2007, 10:48

J'essaye d'aller à la page 2, mais erreur 404
j'écris une réponse test pour voir ^^

par Ryle » 29 juin 2007, 16:54

Au temps pour moi :) .... mais t'avais qu'à y mettre les balises [ php ] ... et pis t'inscrire avant de poster pour pouvoir éditer ton message ... et ... et ... bon j'ai compris, j'vais le faire ;)

Quelle valeur donnes tu à $_GET['email2'] ? Bon ceci dit, tu peux faire un test rapide pour voir si et quand ton ereg, strpos ou preg_match fonctionne ou pas :
$str = '[email protected]';
echo preg_match("/pouet/i", $str); 
S'il te retourne 1, c'est qu'il le trouve bien... :)

par VinS » 29 juin 2007, 16:47

tu peux même utiliser strpos() si tu ne veux pas t'encombrer d'expressions régulières :)
Alors si je reprend le code et que je change eregi :

Code : Tout sélectionner

$emailx=$_GET['email2']; $result = mysql_query ("SELECT email FROM newsletter WHERE email='".mysql_real_escape_string($emailx)."'"); if ($req = mysql_fetch_assoc($result) || eregi('pouet', $emailx) ) { echo "<center>Erreur : E-mail périmé ou déjà existant</center>"; }
Ben ça marche pas !
looooooool

par VinS » 29 juin 2007, 16:43

Je dirais que dans la mesure ou tu n'as à priori pas de else ni de clause pour interrompre le traitement
Hum.... relis le tout 1er message ^^
j'allais pas remettre le else 25 fois
:wink:

par Ryle » 29 juin 2007, 16:36

Je dirais que dans la mesure ou tu n'as à priori pas de else ni de clause pour interrompre le traitement, le fait que "pouet" soit trouvé ne déclenche que l'affichage du message, le reste du code continuera à s'exécuter normalement, pouet ou pas pouet ;)

Quant à la recherche d'une chaine exacte de caractère, c'est pourtant ce qu'il y a de plus simple, que ce soit avec ereg() et preg_*() ... tu peux même utiliser strpos() si tu ne veux pas t'encombrer d'expressions régulières :)

par VinS » 29 juin 2007, 16:23

preg_match() et tous ses petits copains ne fonctionnent pas.
J'ai l'impression qu'une suite de caractère est plutôt difficile à localiser dans un ensemble de caractères.
Un z ou un 1 est simple mais 'pouet', ça parait plus compliqué ^^

Mais qq'un a déja du faire ce genre de codage ?
Merci a lui lol

par orgerix » 29 juin 2007, 15:05

regarde preg_match(), avec les exemples...

par VinS » 29 juin 2007, 14:55

Merci de ta réponse !

Mais je pense que eregi() ne fonctionne pas, car 'pouet' est quand même accepté.

S'il qq'un peut transformer un eregi (ou ereg) en ex. régulière, ça serait perfect !!

merci ^^

par orgerix » 29 juin 2007, 14:45

Ta variable $_GET['mail2'] ne change pas au cours de ton traitement PHP... elle est redéfini uniquement en cas d'un appel de la page.

Ton problème est (en parti) un problème d'accolade. De plus, tu extrait toutes les adresses pour voir si l'adresse est dans la base de donnée, ce qui est un gaspillage de ressource inutile.

Une simple clause WHERE email = $_GET['email2'] fait tout le travail et plus rapidement.

Ensuite, au lien de faire une boucle, tu peux seulement tester si elle retourne, ce qui donne un script
$emailx=$_GET['email2']; 
$result = mysql_query ("SELECT email FROM newsletter WHERE email='".mysql_real_escape_string($emailx)."'"); 
if ($req = mysql_fetch_assoc($result) ||  eregi('pouet', $emailx) ) 
{ echo "<center>Erreur : E-mail périmé ou déjà existant</center>"; 
}




Par contre, je ne suis pas du tout au point sur les expressions régulières donc je ne pourrais pas t'aider.

EDIT : en fait, regarde du coté de preg_match().

par VinS » 29 juin 2007, 14:43

Non, pcre = expressions régulières compatibles PERL. Les expressions régulières PHP sont les REGEXP (ereg, eregi, ...)
:(
lol

je suis un php noob, désolé lol

merci de votre aide en tout cas :lol:

encore un peu de souffrance et on aura la solution !

par Sékiltoyai » 29 juin 2007, 14:41

Non, pcre = expressions régulières compatibles PERL. Les expressions régulières PHP sont les REGEXP (ereg, eregi, ...)

par VinS » 29 juin 2007, 14:34

Par contre, je ne vois pas trop le rapport avec les expressions réqulières, tel que le code est écrit.
PCRE : expressions régulières
:D

par Sékiltoyai » 29 juin 2007, 14:20

Regarde du côté de la fonction eregi() (et notamment l'exemple qui va avec la doc ;) ):
http://fr.php.net/eregi
Je t'arrête, ereg est obsolète, il faut utiliser les PCRE maintenant...