expressions regulieres regex

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 : expressions regulieres regex

Re: expressions regulieres regex

par @rthur » 03 mars 2015, 23:50

Ravi d'avoir pu aider ! :)

Re: expressions regulieres regex

par Cassandra » 03 mars 2015, 20:07

Ah oui, c'est super je viens de tester ! et j'ai enfin compris :oops:


encore merci :-D

Re: expressions regulieres regex

par Ryle » 03 mars 2015, 19:23

C'est normal, car à l'ouverture de ta page, aucune valeur n'est transmise par le formulaire, du coup $_POST['reponse'] n'existe pas. Quand tu demandes à php d'afficher sa valeur, il te répond "NULL" (c'est pas une insulte, c'est juste que la valeur est null :p)

Si tu essayes de saisir la valeur "TEST" dans ton formulaire et que tu la soumets il t'affichera : string(4) "TEST" pour te dire que la variable contient une chaîne (string), de quatre caractères (4) et qui est "TEST".

Cela te permet ainsi de constater visuellement les données reçues et de t'assurer que ton code les interprète bien. Par exemple une fois le formulaire envoyé, si tu vois encore la valeur NULL alors que tu as renseigné autre chose, c'est qu'il y a un problème dans le nom de ta variable ou dans le nom de ton champ ... et tu peux ainsi debugger ton code étape par étape.

Re: expressions regulieres regex

par Cassandra » 03 mars 2015, 18:11

J'ai donc essayé

<?php
$reponsefausse = '';
var_dump($_POST['reponse']);
if (preg_match("#le ?d(?:e|é)jeuner ?sur ?l.herbe#i", $_POST['reponse'])) {
header ("Location:bravo.php?adresse=03burton");
exit;
} else {
$reponsefausse= htmlspecialchars($_POST['reponse']);
}
?>

et cela note NULL sur le côté gauche en haut

voir ici http://enigmes.cassandra.perso.sfr.fr/F ... UGAZ02.php

Re: expressions regulieres regex

par Cassandra » 03 mars 2015, 18:01

Un grand merci pour toutes ces explications très instructives Ryle :pouce:

:love4:

Re: expressions regulieres regex

par Ryle » 03 mars 2015, 17:50

Hello !

L'intérêt de fonctions telles que var_dump() ou print_f() est simplement de vérifier le contenu des variables manipulées :)

Il se peut en effet que ton code soit bon, mais que la donnée que tu reçois ne soit pas la bonne, ou qu'elle ait été altérée au moment où tu veux l'exploiter (par exemple si la directive magic_quotes est activée sur le serveur, là où tu attends une apostrophe, celle-ci peut être précédée d'un antislash. Il est donc parfois utile de s'assurer des valeurs qui sont transmises et utilisées.

Pour s'en servir un simple var_dump($taVariable) avant de l'utiliser te permet de l'afficher afin vérifier sa valeur, son type... Le var_dump() ne sert naturellement qu'au débugage et est à supprimer après usage :)
$reponsefausse = '';
var_dump($_POST['reponse']); // affiche à l'écran la valeur reçue par php 
if  (preg_match("#le ?d(?:e|é)jeuner ?sur ?l.herbe#i", $_POST['reponse'])) {
header ("Location:bravo.php?adresse=03burton");
exit;
} 
..

Re: expressions regulieres regex

par Cassandra » 03 mars 2015, 17:35

Ne pas tenir compte du message précédent car ça marche avec le dernier code qu' @rthur a donné.

un grand merci =D> :D

par contre je ne sais toujours pas comment utiliser var_dump :oops:
Mais bon ce n'est pas grave .

Encore merci pour tout :love4: et pour le grand nettoyage sur ma formule

Re: expressions regulieres regex

par Cassandra » 03 mars 2015, 17:01

bonjour PortgasDKiba

Je sais que je suis nulle mais je ne sais pas comment utiliser cette fonction ! :oops:

var_dump($_POST['reponse']);

devant preg_match, donc comme ceci dessous ?

<?php
$reponsefausse = '';
if var_dump($_POST['reponse']); (preg_match("#le ?d(?:e|é)jeuner ?sur ?l.herbe#i", $_POST['reponse'])) {
header ("Location:bravo.php?adresse=03burton");
exit;
} else {
$reponsefausse= htmlspecialchars($_POST['reponse']);
}
?>

et ensuite je le teste avec mon hébergeur ?
et qu'est ce qu'il doit se passer normalement

merci

Re: expressions regulieres regex

par PortgasDKiba » 03 mars 2015, 16:12

Bonjour Cassandra,

Ce que @rthur te recommande faire c'est de mettre juste avant preg_match la ligne suivante :

var_dump($_POST['reponse']);

Cela te permettra de voir ce qui est posté comme "reponse".

Re: expressions regulieres regex

par Cassandra » 03 mars 2015, 16:06

Je ne voudrais pas paraitre "casse pied" mais je ne sais pas comment faire le test avec var_dump :oops:
Dois je faire le test avec wamp ?
Comment l'as tu testé ?

Et pour le code allégé que tu m'as donné
<?php
$reponsefausse = '';
if (preg_match("#le ?d(?:e|é)jeuner ?sur ?l.herbe#i", $_POST['reponse'])) {
header ("Location:bravo.php?adresse=03burton");
exit;
} else {
$reponsefausse= htmlspecialchars($_POST['reponse']);
}

je ne dois pas mettre ?> à la fin ?

je l'ai mis en ligne avec et sans mais cela ne marche pas avec l'accent !

Encore merci pour tout :D

Re: expressions regulieres regex

par @rthur » 03 mars 2015, 14:15

J'ai copié-collé ton code à l'identique et il fonctionne sans problème chez moi.
Essaye de faire un var_dump($_POST['reponse']); juste avant le preg_match() pour voir si ta variable est bien transmise correctement.


Et sinon, je te conseille de faire un petit peu de nettoyage dans ton code pour ne conserver que ce qui est nécessaire :
<?php
$reponsefausse = '';
if (preg_match("#le ?d(?:e|é)jeuner ?sur ?l.herbe#i", $_POST['reponse'])) {
    header ("Location:bravo.php?adresse=03burton");
    exit;
} else {
     $reponsefausse= htmlspecialchars($_POST['reponse']);		
}

Re: expressions regulieres regex

par Cassandra » 03 mars 2015, 12:49

Encore merci de bien vouloir me venir en aide :D

j'ai utilisé le code que tu m'as donné
donc cela donne ceci
<?php
$reponsefausse = ''; // initialisation variable
if (isset($_POST['reponse']))
{
$_POST['reponse'] = htmlspecialchars($_POST['reponse']); // On rend inoffensives les balises HTML que le visiteur a pu rentrer

	// Chaine de caractères pour la réponse
   if (preg_match("#le ?d(?:e|é)jeuner ?sur ?l.herbe#i", $_POST['reponse']))  
	{header ("Location:bravo.php?adresse=03burton"); // Transmission adresse à la page bravo
	exit;
	?>
<?php
	}
    	else
	{
        $reponsefausse= $_POST['reponse'];		
    }
}
?>
Cela ne fonctionne toujours pas ! :oops:

Re: expressions regulieres regex

par @rthur » 03 mars 2015, 12:30

Alors ça c'est curieux...
Effectivement, j'ai testé ton code et ça ne fonctionne pas... le problème semble venir de l'accent mais je ne comprends pas pourquoi...

Voici une alternative qui fonctionne :
preg_match("#le ?d(?:e|é)jeuner ?sur ?l.herbe#i"

Et il faut que tu vérifies mais sur ton 2ème exemple, j'ai l'impression qu'il renvoie toujours vrai donc il y a probablement la même manip à faire.

Re: expressions regulieres regex

par cassandra » 03 mars 2015, 11:53

Bonjour

Merci de m'avoir répondu :D
J'ai donc essayé d'enlever le pipe et cela donne
if (preg_match("#le ?d[eé]jeuner ?sur ?l.herbe#i", $_POST['reponse']))

mais cela ne marche toujours pas !
constatez par vous même ici sur mon site http://enigmes.cassandra.perso.sfr.fr/F ... UGAZ02.php

réponse à entrer : le déjeuner sur l'herbe

la réponse avec accent n'entre pas ; il ne marque pas que la réponse n'est pas valide mais reste sur la page :oops:

par contre cela marche avec celle ci http://enigmes.cassandra.perso.sfr.fr/F ... OUXM11.php

réponse à entrer : inès de castro

merci d'avance pour votre aide :D

Re: expressions regulieres regex

par @rthur » 02 mars 2015, 21:33

Bonjour,

Il semblerait que tu aies un pipe "|" en trop dans ta première regex :
https://regex101.com/r/cE4vH9/1