8798 sujets

Développement web côté serveur, CMS

Pages :
Bonjour à tous,

Ce post fait suite au post créé ici au sujet d'un formulaire de contact:

Je souhaiterais maintenant tester la variable email via expression régulière comme conseillé par Koala Smiley cligne

J'ai "trouvé" ceci pour tester l'email:

!eregi("(^[a-z])(\.|-)?([0-9a-z]){0,}(\.|-)?([a-z0-9]+)((\.|-)?([a-z0-9]+)){0,}@([a-z0-9\-]+)\.([a-z]{2,4}$)"


Bon c'est une chose, mais je ne vois pas comment l'intégrer ici Smiley confused :

isset($_POST['email']) && trim($_POST['email']) != '' ?
$affich['email'] = htmlspecialchars($_POST['email']) :
$Eemail = '<p class="error">Veuillez indiquer votre email</p>';


En fait je pense qu'il faut que je crée une nouvelle variable de type $Eemailfaux et tester cette variable via l'expression régulière ci-dessus.
Je suis dans le vrai ? Smiley rolleyes
En plus de ce test, j'aimerai y affecté un message d'erreur du type:
$Eemailfaux = '<p class="error">Votre email n'est pas valide</p>';

L'HTML du champ email est le suivant:

<div>
<label for="email">Votre e-mail *</label>
<input class="textfield" type="text" name="email" id="email"
<?php
    if(isset($affich['email']))
       echo ' value="', $affich['email'], '"';			
?> 
title="Veuillez entrer votre e-mail" />
<?php
if(isset($Eemail))
echo $Eemail;
?>
</div>


Merci Smiley cligne
Modifié par pp51 (24 Mar 2007 - 18:06)
Modérateur
Salut, Smiley ravi

pp51 a écrit :
En fait je pense qu'il faut que je crée une nouvelle variable de type $Eemailfaux et tester cette variable via l'expression régulière ci-dessus.
Je suis dans le vrai ? Smiley rolleyes
Il y a des chances oui.

T'essayes ? Smiley smile
Hello Koala Smiley cligne

Ben tu vois, c'est clair dans ma tête, c'est un bon début Smiley lol

Est-ce qu'avec le code ci-dessous je m'en rapproche ?


if(($_POST['email']) && trim($_POST['email']) != '' ?
$affich['email'] = htmlspecialchars($_POST['email']) :
	{
		$Eemail = '<p class="error">Veuillez indiquer votre email</p>';
	}
	elseif(!eregi("(^[a-z])(\.|-)?([0-9a-z]){0,}(\.|-)?([a-z0-9]+)((\.|-)?([a-z0-9]+)){0,}@([a-z0-9\-]+)\.([a-z]{2,4}$)",$_POST["email"]))
	{
		$Eemailfaux = '<p class="error">Votre email n'est pas valide</p>';
	}


bon ensuite je sèche sur l'HTML mais je tente:


<div>
<label for="email">Votre e-mail *</label>
<input class="textfield" type="text" name="email" id="email"
<?php
    if(isset($affich['email']))
       echo ' value="', $affich['email'], '"';			
    else $Eemailfaux ;
?> 
title="Veuillez entrer votre e-mail" />
<?php
if(isset($Eemail))
echo $Eemail;
?>
</div>


OK je sors Smiley wingol
Modérateur
Ben tu ne tentes pas de savoir si ton champ est rempli ou s'il est syntaxiquement correct. Ce que tu veux, c'est qu'il soit rempli ET que la syntaxe soit juste.

Actuellement, si on met * dans le champ, ça passe... parce que c'est rempli et que tu ne demandes pas d'en vérifier la syntaxe. Smiley cligne
Modifié par koala64 (20 Mar 2007 - 14:59)
Modérateur
ouch... je n'avais pas fais gaffe ! Smiley biggol
Tu t'emmêles les pinceaux dans les if... else et la syntaxe raccourcie...

Avec des if...else, on met :
if(condition)
{
   instruction 1
}
else
{
   instruction 2
}


En raccourci, le même code donne :
condition ?
   instruction 1 :
   instruction 2;
j'avais bien dit "je me lance" Smiley ravi

bon alors, si je te suis, il faut que je place ma vérif dans le "if" (ce qui me parait logique...)


if(!eregi("(^[a-z])(\.|-)?([0-9a-z]){0,}(\.|-)?([a-z0-9]+)((\.|-)?([a-z0-9]+)){0,}@([a-z0-9\-]+)\.([a-z]{2,4}$)",$_POST["email"])&& trim($_POST['email']) != '' )
$affich['email'] = htmlspecialchars($_POST['email']) :

  $Eemail = '<p class="error">Veuillez indiquer votre email</p>';
  $Eemailfaux = '<p class="error">Votre email n'est pas valide</p>';


Je m'approche du but ? Smiley murf
Modifié par pp51 (20 Mar 2007 - 16:15)
Modérateur
arf... non... toujours pas ! Smiley lol

Le schéma est le suivant :
Si le champ est rempli
{
   Si la syntaxe est correcte
   {
      on enregistre la donnée
   }
   sinon
   {
      on prépare un message comme quoi l'email est incorrect
   }
}
sinon
{
   on prépare un message comme quoi le champ est vide
}


PS : Fais attention à la syntaxe de ton code... il semble que tu ne fermes pas correctement ton eregi et la virgule qui suit ne veut pas dire grand chose... Ce serait un && à la rigueur... Smiley cligne
Modifié par koala64 (20 Mar 2007 - 16:17)
Bon alors là, en plus du froid, ton schéma me glace le sang Smiley confus

J'ai donc repris ta structure,



if(($_POST['email']) && trim($_POST['email']) != '')  //Si le champ est rempli

{
if(!eregi("(^[a-z])(\.|-)?([0-9a-z]){0,}(\.|-)?([a-z0-9]+)((\.|-)?([a-z0-9]+)){0,}@([a-z0-9\-]+)\.([a-z]{2,4}$)" && $_POST["email"]))
   {
    $affich['email'] = htmlspecialchars($_POST['email']) // on enregistre la donnée
     }

     elseif {
     $Eemailfaux = '<p class="error">Votre email n'est pas valide</p>'; //on prépare un message comme quoi l'email est incorrect
  }

}
elseif {
   $Eemail = '<p class="error">Veuillez indiquer votre email</p>'; // on prépare un message comme quoi le champ est vide
}


Du mieux ou toujours à l'ouest ? Smiley lol
Modifié par pp51 (20 Mar 2007 - 17:18)
Modérateur
ben... traduction de ton code... Smiley lol

si le champ est rempli
{
   [#red]si l'email est incorrect et qu'il existe[/#]
   {
      on registre la donnée
   }
   [#red]ou bien si[/#]
   {
      on prépare un message comme quoi l'email est incorrect
   }
}
[#red]ou bien si[/#]
{
   on prépare un message comme quoi le champ est vide
}


a écrit :
Du mieux ou toujours à l'ouest ? Smiley lol
Barre à tribord... Smiley ravi
Hello Smiley cligne

C'est le printemps, changement de saison, changement de "méthode" Smiley lol

En espérant que ça vienne Smiley confused


if(!eregi("(^[a-z])(\.|-)?([0-9a-z]){0,}(\.|-)?([a-z0-9]+)((\.|-)?([a-z0-9]+)){0,}@([a-z0-9\-]+)\.([a-z]{2,4}$)") && ($_POST['email']) && trim($_POST['email']) != '')  //Si le champ est rempli et correctement rempli
$affich['email'] = htmlspecialchars($_POST['email']) // on enregistre la donnée

elseif {
$Eemailfaux = '<p class="error">Votre email n'est pas valide</p>'; //on prépare un message comme quoi l'email est incorrect
}
elseif {
$Eemail = '<p class="error">Veuillez indiquer votre email</p>'; // on prépare un message comme quoi le champ est vide
}
Après réflexion, je ne pense pas que ça marchera... Smiley rolleyes
Modifié par pp51 (21 Mar 2007 - 11:50)
Modérateur
salut,

non, effectivement. Smiley cligne

Lorsque tu mets !eregi, le point d'exclamation veut dire "not"... Autrement dit, tu dis : "si l'email est incorrect" au lieu de "si l'email est correct"... Il faut donc enlever ce point d'exclamation.

Lorsque tu mets un else if, il faut ajouter une condition derrière...
...
else if(condition)
{
   instruction;
}
mais là, ça ne te sert à rien, un simple else suffit... (sur le else, pas de condition puisqu'elle est sous-entendue).

En dehors de ça, tu pouvais conserver ta structure précédente.
Modifié par koala64 (21 Mar 2007 - 11:58)
a écrit :

Lorsque tu mets !eregi, le point d'exclamation veut dire "not"... Autrement dit, tu dis : "si l'email est incorrect" au lieu de "si l'email est correct"... Il faut donc enlever ce point d'exclamation.


C'est ça de recopier betement un code pris sur un site Smiley langue

Bon j'ai repris la structure d'avant, enlevé le ! et remplacer les elseif par else.


if(($_POST['email']) && trim($_POST['email']) != '')  //Si le champ est rempli

{
if(eregi("(^[a-z])(\.|-)?([0-9a-z]){0,}(\.|-)?([a-z0-9]+)((\.|-)?([a-z0-9]+)){0,}@([a-z0-9\-]+)\.([a-z]{2,4}$)" && $_POST["email"]))
   {
    $affich['email'] = htmlspecialchars($_POST['email']) // on enregistre la donnée
     }

     else {
     $Eemailfaux = '<p class="error">Votre email n'est pas valide</p>'; //on prépare un message comme quoi l'email est incorrect
  }

}
else {
   $Eemail = '<p class="error">Veuillez indiquer votre email</p>'; // on prépare un message comme quoi le champ est vide
}


Bref, toujours un truc : Parse error vers ici

if(eregi("(^[a-z])(\.|-)?([0-9a-z]){0,}(\.|-)?([a-z0-9]+)((\.|-)?([a-z0-9]+)){0,}@([a-z0-9\-]+)\.([a-z]{2,4}$)" && $_POST["email"]))
   {
    $affich['email'] = htmlspecialchars($_POST['email']) // on enregistre la donnée
     }
Modérateur
ben oui... regarde la syntaxe de ton eregi Smiley cligne

Tu ouvres les guillemets à l'intérieur de l'eregi et tu les fermes à l'extérieur... donc il ne comprend pas. De même, ton imbrication de parenthèses est mauvaise... Sans compter que tu ne lui dis pas ce qu'il doit vérifier... (Je ne sais pas où tu as récupéré ce code mais bon... bref Smiley langue )

Regarde la doc, ça t'en dira plus :

http://www.manuelphp.com/php/function.eregi.php

En fait, l'expression régulière est une chaîne texte ; l'entame de la chaîne est ^ et la fin est $. Smiley smile

Donc, quelquechose du genre :
eregi("^...$", $_POST['email'])


Bon sinon, je te conseille de te servir de preg_match plutôt que de eregi...

Reporte-toi sur le code indiqué sur cette page, c'est une meilleure base Smiley cligne :

http://www.expreg.com/pregmatch.php

Le $_POST['email'] qui suit ton eregi, quant à lui, ne sert à rien car tu as vérifié qu'il existait en amont... donc là, tu fais redondance. Smiley murf
Salut Smiley lol

Le Smiley boulet est de retour Smiley cligne

Alors, j'ai essayé de reprendre le code preg_match, je ne sais pas si je l'ai bien mis ?


if(($_POST['email']) && trim($_POST['email']) != '')  //Si le champ est rempli

{

preg_match('`^[[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]([-_.]?[[:alnum:]])*\.([a-z]{2,4})$`',$chaine); 
   {
    $affich['email'] = htmlspecialchars($_POST['email']) // on enregistre la donnée
     {

    else {
     $Eemailfaux = '<p class="error">Votre email n est pas valide</p>'; //on prépare un message comme quoi l'email est incorrect
  }
}
else {
   $Eemail = '<p class="error">Veuillez indiquer votre email</p>'; // on prépare un message comme quoi le champ est vide
}


Bon sinon j'ai toujours un parse error vers ici:

$affich['email'] = htmlspecialchars($_POST['email']) // on enregistre la donnée
     {


Smiley bawling Smiley bawling Smiley bawling
Modérateur
Salut, Smiley smile

pp51 a écrit :
Alors, j'ai essayé de reprendre le code preg_match, je ne sais pas si je l'ai bien mis ?
Non, pas tout à fait... T'as un peu tapé le copier/coller sans chercher à comprendre le code non ? Smiley ravi

Dans ton script, que cherches-tu à vérifier ? Ce qu'a posté l'utilisateur en tant qu'email non ? $chaine ne correspond à rien ici ; la vérif' doit se faire sur $_POST['email']...

Et pourquoi as-tu supprimé la condition pour écrire le preg_match ? Le preg_match aussi devrait se trouver dans cette condition car on enregistre la donnée que si l'adresse email est vérifiée. Smiley cligne
Modifié par koala64 (22 Mar 2007 - 15:48)
a écrit :

Non, pas tout à fait... T'as un peu tapé le copier/coller sans chercher à comprendre le code non ?


ah bah oui j'avoue Smiley confus

Je recommence et ....


if(($_POST['email']) && trim($_POST['email']) != '')  //Si le champ est rempli
{

if(preg_match('`^[[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]([-_.]?[[:alnum:]])*\.([a-z]{2,4})$`',($_POST['email']))) 
   {
    $affich['email'] = htmlspecialchars($_POST['email']) // on enregistre la donnée
    } 
    else {
     $Eemailfaux = '<p class="error">Votre email n est pas valide</p>'; //on prépare un message comme quoi l'email est incorrect
  }
}
else {
   $Eemail = '<p class="error">Veuillez indiquer votre email</p>'; // on prépare un message comme quoi le champ est vide
}


=> Parse error Smiley biggol
Modifié par pp51 (22 Mar 2007 - 15:57)
Modérateur
oui Smiley lol

Tu devrais veiller à bien ouvrir et fermer tes parenthèses et bien mettre les points virgules en fin d'instruction... Smiley ravi
Smiley biggol ahah !


if(($_POST['email']) && trim($_POST['email']) != '')  //Si le champ est rempli
{
   if(preg_match('`^[[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]([-_.]?[[:alnum:]])*\.([a-z]{2,4})$`', $_POST['email']))
   {
      $affich['email'] = htmlspecialchars($_POST['email']); // on enregistre la donnée
   }
   else
   {
      $Eemailfaux = '<p class="error">Votre email n est pas valide</p>'; //on prépare un message comme quoi l'email est incorrect
   }
}
else
{
  $Eemail = '<p class="error">Veuillez indiquer votre email</p>'; // on prépare un message comme quoi le champ est vide
}


J'ai rajouté le ; à $affich['email'] = htmlspecialchars($_POST['email']);

Tiens mon formulaire s'affiche à nouveau Smiley smile

Bon maintenant il s'agit de faire apparaitre le message d'erreur $Eemailfaux sur le formulaire si nécessaire... tu vois quand je dis que c'est clair dans mon esprit Smiley lol ... et là c'est le drame Smiley lol Ou que je place mon $Eemailfaux dans tout ce bazarre ?


<div>
<label for="email">Votre e-mail *</label>
<input class="textfield" type="text" name="email" id="email"
<?php
    if(isset($affich['email']))
       echo ' value="', $affich['email'], '"';			
?> 
title="Veuillez entrer votre e-mail" />
<?php
if(isset($Eemail))
echo $Eemail;
?>
</div>


Au fait, j'ai presque compris le code php de la vérif Smiley ravi
Modifié par pp51 (22 Mar 2007 - 16:18)
Modérateur
$Eemail est un paragraphe... donc tu l'affiches sous ton input...
$Eemailfaux est un paragraphe... donc... Smiley murf
Pages :