Verification du format de date

Eléphant du PHP | 169 Messages

12 sept. 2007, 15:19

Slt tous le monde

je suis entrains de mettre en place un procédure qui vas permettre de vérifier le bon format de la date insérer dans un formulaire.

dans mon formulaire j'ai un champs "date debut" :
<?php  
if (!session_is_registered(erreur_date_debut)) { ?>
<input name="date_debut" type="text" id="date_debut" value="<? echo $_SESSION[date_debut]; ?>" maxlength="10" />

<?php } else { ?>
<input name="date_debut" type="text" id="date_debut" value="" maxlength="10" />
<span class="erreur"><strong>ERREUR DE SAISIE</strong><br />
Le format de la date doit &ecirc;tre jour/mois/annee</span>
<?php } ?>
et un champ "date_fin":
<?php  if (!session_is_registered(erreur_date_fin)) { ?>
<input name="date_fin" type="text" id="date_fin" value="<? echo $_SESSION[date_fin]; ?>" maxlength="10" />

<?php } else { ?>
<input name="date_fin" type="text" id="date_fin" value="" maxlength="10" />
<span class="erreur"><strong>ERREUR DE SAISIE</strong><br />
Le format de la date doit &ecirc;tre jour/mois/annee </span>
<?php } ?>

L'action du formulaire pointe sur une page ajout.php.
dans cette page j'ai une partie de code qui vas vérifier le bon format des dates de début et de fin
if (preg_match("#^[0-9]{2}\/{1}[0-9]{2}\/{1}[0-9]{4}$#", $debut_congres))
{
// SI la valeur saisie est correcte on décompose $debut_congres 
list ($jour_debut_congres, $mois_debut_congres, $annee_debut_congres) = explode ("/",$debut_congres);
					
// on donne la composition de la variable $_SESSION[date_fin], pour que l'on puisse afficher le bon format dans le cas ou il y aurais une erreur
$_SESSION[date_debut] = $jour_debut_congres.'/'.$mois_debut_congres.'/'.$annee_debut_congres;
				
// on donne la composition de la variable SESSION[date_fin_sql] pour quelle soit au format americain 2007-05-12
$_SESSION[date_debut_sql] = $annee_debut_congres.'-'.$mois_debut_congres.'-'.$jour_debut_congres;
}
			
else
{
session_register("erreur_date_debut"); // renvoie sur l'erreur
header("Location:../agenda/ajout_congres.php"); // renvoie sur la page du formulaire
exit();
}
Et juste en dessous de celle-ci la même chose mais pour la date de fin :
if (preg_match("#^[0-9]{2}\/{1}[0-9]{2}\/{1}[0-9]{4}$#", $fin_congres))
{
// on decompose $debut 
list ($jour_congres_fin, $mois_congres_fin, $annee_congres_fin) = explode ("/",$fin_congres); 
			
// on donne la composition de la variable $_SESSION[date_fin], pour que l'on puisse affichier le bon format dans le cas ou il y aurais une erreur
$_SESSION[date_fin] = $jour_congres_fin.'/'.$mois_congres_fin.'/'.$annee_congres_fin;
			
// on donne la composition de la variable SESSION[date_fin_sql] pour quelle soit au format americain 2007-05-12
$_SESSION[date_fin_sql] = $annee_congres_fin.'-'.$mois_congres_fin.'-'.$jour_congres_fin;
}			

else
{
session_register("erreur_date_fin"); // Enregistre une variable dans une session  
header("Location:../agenda/ajout_congres.php"); // rediriger sur le formulaire
exit();
}
Le problème est que lorsque je fais une test :

1) avec la date de début au mauvais format et la date de fin au bon format.
je me retrouve avec le message d'erreur qui s'affiche au niveau de la date de fin et de début ???
chose qui ne devrait pas faire, logiquement je voudrais qu'il affiche juste le message pour la date de début?

2) alors que si j'ai la date de début au bon format et la date de fin au mauvais format
je me retrouve avec le message d'erreur qui s'affiche au niveau de la date de fin.
ce qui est correcte

savez vous pourquoi ?

merci de votre aide
--
Kweb

d0m
Mammouth du PHP | 1141 Messages

12 sept. 2007, 15:30

première chose, tu as oublié des quotes quand tu enregistres tes variables en session.
Sinon, tu ne fais jamais de session_unregistred si la date est correcte?
Cela expliquerai peut être qu'il pourrait garder l'erreur en session et donc considérer que la date est fausse après une première saisie fausse.

Eléphant du PHP | 169 Messages

12 sept. 2007, 15:49

Lorsque tu me parle d'oubli de cote c'est celle-ci ?
$_SESSION['date_debut'] =...... 
Etant débutant dans le php, je n'ai jamais pensé a utilisé la "session_unregister()" . si je l'utilise,
faut il que je la mette au niveau de mon formulaire ou bien dans la page ajout.php ?

merci pour + de précision, cela m'aidera a avancé dans mon apprentissage.
--
Kweb

d0m
Mammouth du PHP | 1141 Messages

12 sept. 2007, 16:03

et de celles ci :
session_is_registered('erreur_date_fin')
c'est toujours mieux de préciser quand c'est une chaine de caractère qu'on manipule.

pour le session_unregistred, pour savoir où le placer il faut étudier les cas :
prenons le cas d'une erreur sur la date de début :
- on entre une mauvaise date de début et une bonne date de fin
- le test indique que la date de début est fausse, la date de fin est bonne
- on enregistre en session 'erreur_date_debut' mais pas 'erreur_date_fin'
- message d'erreur pour la date de début mais pas pour la date de fin
- on entre une bonne date de début
- le teste indique que la date de début est bonne, la date de fin aussi

C'est donc quand le teste de la date de début est vrai qu'il faut enlever un potentiel 'erreur_date_debut' en session