Page 1 sur 1

controler la valeur d'un champ facultatif

Posté : 28 mars 2007, 12:11
par pp51
Bonjour à tous,

Je suis plus ou moins bloqué...

J'ai un champ 'date_mariage' dans mon formulaire.
Ce champ est pour l'instant obligatoire:
- si pas de date: erreur champ non renseigné
- si date pas au format jj/mm/aaaa: erreur champ mal renseigné

Le code ci-dessous fonctionne parfaitement.

Mais je souhaite rendre maintenant ce champ facultatif.
Cela signifie que:
- si le champ est vide, je laisse passer, pas de contrôle
- si le champ est renseigné, mais pas au format jj/mm/aaaa, j'affiche un message d'erreur: erreur champ mal renseigné

Pourriez-vous m'aider à adapter mon code ci-dessous pour y parvenir ?

Merci pour vos conseils !

Voici mon php

Code : Tout sélectionner

if(($_POST['date_mariage']) && trim($_POST['date_mariage']) != '') //Si le champ est rempli { if(eregi("^([0-9]{2})/([0-9]{2})/([0-9]{4})$",$_POST['date_mariage'])) { $affich['date_mariage'] = htmlspecialchars($_POST['date_mariage']); // on enregistre la donnée } else { $Edate_mariagefaux = '<p class="error">Veuillez indiquer une date au format jj/mm/aaaa</p>'; //on prépare un message comme quoi l'email est incorrect } } else { $Edate_mariage = '<p class="error">Veuillez indiquer votre date de mariage</p>'; // on prépare un message comme quoi le champ est vide }
et mon html

Code : Tout sélectionner

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

Posté : 28 mars 2007, 12:38
par Ryle
A priori il te suffit juste de retirer le
else 
{ 
  $Edate_mariage = '<p class="error">Veuillez indiquer votre date de mariage</p>'; // on prépare un message comme quoi le champ est vide 
} 
si le champ n'est pas renseigné, tu ne rentre pas dedans, et donc pas de message d'erreur. Tu pourras aussi virer le
if(isset($Edate_mariage)) 
echo $Edate_mariage; 
qui du coup ne servira plus :)

Posté : 28 mars 2007, 12:39
par Expreg
Cross-posting avec phpscripts
Donc réponse identique :
<?php
<?php
$date_mariage=trim($_POST['date_mariage']);
if(!empty($date_mariage))
{
if(!preg_match('`^\d\d/\d\d/\d\d\d\d$`',$date_mariage))
{
echo 'date_mariage invalide';
}
else
{
echo $date_mariage;
}
}
else
{
echo 'date_mariage est vide';
}
?> 

Posté : 28 mars 2007, 14:51
par pp51
Merci pour vos réponses. J'arrive maintenant à tester la date.

Mais me reste un soucis: si je mets dans le champs date "1er septembre 2007", j'ai le message d'erreur qui apparait mais le formulaire est en même temps envoyé...

Si je mets 01/09/2007, le mail part mais là c'est normal....

Je suis pratiquement sûr qu'il faille ajouter un bout de code ici, mais sans doute pas empty puisque le champs peut être vide...

Code : Tout sélectionner

if(!empty($affich['nom']) && !empty($affich['prenom']) && !empty($affich['email']) && !empty($affich['ville']) && !empty($affich['cp']) && !empty($affich['newsletter'])) { $destinataire etc...
Preneur de conseils :wink:

Posté : 28 mars 2007, 14:55
par Ryle
Hmm.. tu peux tester si la variable $Edate_mariagefaux est définie, puisqu'elle n'est créée que lorsque le format de la date n'est pas bon. Si elle est définie c'est qu'il y a une erreur, et donc que le traitement ne doit pas se faire.

isSet($Edate_mariagefaux) // permet de tester si la variable est définie
!isSet($Edate_mariagefaux) // permet de constater qu'elle ne l'est pas :)

Posté : 28 mars 2007, 15:02
par pp51
oula, je le mets où exactement ce bout de code ?

Elle existe cette variable non dans le code ci-desous ?

Code : Tout sélectionner

if(($_POST['date_mariage']) && trim($_POST['date_mariage']) != '') //Si le champ est rempli { if(eregi("^([0-9]{2})/([0-9]{2})/([0-9]{4})$",$_POST['date_mariage'])) { $affich['date_mariage'] = htmlspecialchars($_POST['date_mariage']); // on enregistre la donnée } else { $Edate_mariagefaux = '<p class="error">Veuillez indiquer une date au format jj/mm/aaaa</p>'; //on prépare un message comme quoi la date est incorrecte } }
EDIT: si je mets ton code dans mon php, ça me fait un parse error :?

Posté : 28 mars 2007, 15:24
par Expreg
Arf ça vaut la peine de te venir en aide en te donnant une solu !
Je te montres une portion de code optimisée et tu ne modifie rien dans ton script.
Même pas gai ! :(

Posté : 28 mars 2007, 15:55
par pp51
Hello Expreg

C'est vrai que j'étais plus proche de ce que me proposait Ryle...

Mais j'avais en parallèle bien testé ton code :wink:

Et ça me fait le même effet. Ce qui me fait dire que le test de validité de la date fonctionne, mais qu'il y a un problème au niveau du POST non ?