Les Allergies
Alimentaires
Posez votre question Signaler

Controle de saisie d'une date ? [Résolu]

trik59 242Messages postés 9 décembre 2003Date d'inscription 17 mai 2012Dernière intervention - Dernière réponse le 17 juin 2010 à 10:51
Bonjour, voila j'ai un formulaire html et je programme en php
en fait j'ai une date limite (de nom de variable "date")


la chose que n'arrive pa a faire ou trouver c'est comment je peut faire pour controler la date, au cas apar ex: ou l'utilisateur saisie une date eroné ex 11/11/1111 ou voir s'il ne saisie rien:

moi j'ai reussi a trouver cmt affiché le message mais je n'arive plu apres!

je fait appel a votre aide svp
merci d'avabce !




Si le jour sert à voir, il sert aussi a etre vue...
Lire la suite 

Controle de saisie d'une date »

9 réponses
Réponse
+6
moins plus
Yo les gars, bienvenu en 2010 ! Enfin en 2003 même.

function verifierDate($month, $day, $year) {
if (checkdate($month, $day, $year) == true)
{ return "Date valide calendrier grégorien."; }
else
{ return "C'est quoi ce truc qui est pas une date !?"; }
}

echo verifierDate(02, 31, 2010)."<br>";
echo verifierDate(3, 5, 2009)."<br>";



Donc un date du style 31 février ne passera pas par exemple :) !
Ajouter un commentaire
Réponse
+3
moins plus
tu peut déjà tester si le texte fournir est bien dans la forme voulu (pour ne pas avoir 2005-02-03 alors que tu veut 03/02/2005) avec la fonction ereg()

if(ereg('([0-9]{2})/([0-9]{2})/([0-9]{4})',$date,$regs)){
  //La date est correct
} else {
  //la date est incorrect
}


Après tu peut tester indépandemment les valeur de la date, car elles sont dans la variables $regs:
$regs[1] => le jour
$regs[2] => le mois
$regs[3] => l'année
Ajouter un commentaire
Réponse
+3
moins plus
j'avais adapté ma fonction à ta question et j'avais enlevé le début car il ne me semblait pas utile.
Cette fonction accepte les date au format : JJ/MM/AAAA ou AAAA-MM-JJ pour les dates anglaises
// vérifie si la date est correcte. 
function verifdate($date)
{
	$tmp=false;
	// cas de la date vide 
	if($date == '') return $tmp;
	// choix du traitement de la date suivant son format
	// 2 possibilité pour le format : AAAA-MM-JJ ou JJ/MM/AAAA
	$tab = explode('-', $date, 3);
	// 1ère possibilité : on vérifie s'il y a des tirets dans la date.
	if((!isset($tab[1])) && (!isset($tab[2]))) {
		$trad = $date;
	} else {
	// la seconde : il s'agit d'un date au format fr.
		$trad = $tab[2].'/'.$tab[1].'/'.$tab[0];
	}
	// séparation des jours, mois et année pour la vérification de la date
	$tab = explode('/', $trad, 3);
	// on traite l'annÈe qui doit Ítre contenu dans un entier simple,
	// il n'y a pas de chiffre nÈgatif.
	if((!isset($tab[1])) || (!isset($tab[2]))) return $tmp;
	if(($tab[2] >= 1) && ($tab[2] <= 32767)) {
		$tmp = true;
	} else {
		$tmp = false;
		return $tmp;
	}
	// en fonction du mois on dÈtermine si le nombre de jour est correct.
	switch ($tab[1])
	{
		case (1) :		// janvier
		case (3) :		// mars
		case (5) :		// mai
		case (7) :		// juillet
		case (8) :		// ao&#730;t
		case (10) :		// octobre
		case (12) :		// dÈcembre
			// ces 7 mois ont 31 jours
			if(($tab[0] >= 1) && ($tab[0] <= 31)) {
				$tmp = true;		// le numÈro du jour est contenu entre 1 et 31
			} else {
				$tmp = false;		// le numÈro du jour n'est pas contenu entre 1 et 31
				return $tmp;		// renvoie de la valeur 'faux', il n'est pas nÈcÈssaire de continuer les tests
			}
			break;
		case (4) :		// avril
		case (6) :		// juin
		case (9) :		//  septembre
		case (11) :		// novembre
			// ces 4 mois ont 30 jours
			if(($tab[0] >= 1) && ($tab[0] <= 30)) {
				$tmp = true;		// le numÈro du jour est contenu entre 1 et 30
			} else {
				$tmp = false;		// le numÈro du jour n'est pas contenu entre 1 et 30
				return $tmp;		// renvoie de la valeur 'faux', il n'est pas nÈcÈssaire de continuer les tests
			}
			break;
		case 2 :		// fÈvrier
			if($tab[2]%4 == 0){		// On regarde s'il s'agit d'une annÈe bixetile ou non en regardant le modulo de la division du nombre d'annÈe par 4
				if(($tab[0] >= 1) && ($tab[0] <= 29)) {		// 
					$tmp = true;	
				} else {
					$tmp = false;
					return $tmp;
				}
			} else {
				if(($tab[0] >= 1) && ($tab[0] <= 28)) {
					$tmp = true;
				} else {
					$tmp = false;
					return $tmp;
				}
			}
			break;
		default :
			$tmp = false;
			return $tmp;
			break;
	}
	
	if ($tmp) {
		return true;
	} else {
		return false;
	}
}
Ajouter un commentaire
Réponse
+2
moins plus
voila ske j'ai fait :



if (validation_date($dlivr) == false){
$err=1;
$lerr=$lerr."Date non Valide. \\n";




Si le jour sert à voir, il sert aussi a etre vue...
Ajouter un commentaire
Réponse
+1
moins plus
pardon la variable c'est pas $dlivr mais $date


:)

Si le jour sert à voir, il sert aussi a etre vue...
Ajouter un commentaire
Réponse
+1
moins plus
je souhaite connaître comment tester les valeurs de $regs
smdl - 13 mars 2008 à 23:51
Tu peux utiliser la fonction checkdate à laquelle tu vas passer les postes du tableau $regs :
Par exemple :

if (!checkdate($regs[2],$regs[3],$regs[1])) {
//Le texte de la fonction qui gère l'erreur de date. Par exemple :
echo "<b>$regs[0]</b> n'est pas une date valide !"
}
Ajouter un commentaire
Réponse
+1
moins plus
j'ai essayé la check date mais elle ne marche pas. je met bien les paramètres trouvé ici : http://fr.php.net/manual/fr/function.checkdate.php soit :
bool checkdate  ( int $month  , int $day  , int $year  )


par contre j'ai refais une fonction qui fonctionne très bien pour toutes les dates de l'année et gère l'année bixetil ainsi que les fin de moi à 30 ou 31 jours :

function verifdate($date)
{
	$tab = explode('/', $trad, 3);
	$tmp=false;

	if(($tab[2] >= 1) && ($tab[2] <= 32767)) {
		$tmp = true;
	} else {
		$tmp = false;
		return true;
	}

	switch ($tab[1])
	{
		case (1) :
		case (3) :
		case (5) :
		case (7) :
		case (8) :
		case (10) :
		case (12) :
			if(($tab[0] >= 1) && ($tab[0] <= 31)) {
				$tmp = true;
			} else {
				$tmp = false;
				return $tmp;
			}
			break;
		case (4) :
		case (6) :
		case (9) :
		case (11) :
			if(($tab[0] >= 1) && ($tab[0] <= 30)) {
				$tmp = true;
			} else {
				$tmp = false;
				return $tmp;
			}
			break;
		case 2 :
			if($tab[2]%4 == 0){
				if(($tab[0] >= 1) && ($tab[0] <= 29)) {	
					$tmp = true;	
				} else {
					$tmp = false;
					return $tmp;
				}
			} else {
				if(($tab[0] >= 1) && ($tab[0] <= 28)) {
					$tmp = true;
				} else {
					$tmp = false;
					return $tmp;
				}
			}
			break;
		default :
			$tmp = false;
			return $tmp;
			break;
	}
	
	if ($tmp) {
		return true;
	} else {
		return false;
	}
}
9 mm - 14 oct. 2009 à 10:46
j'ai essayer ta fonction( qui se trouve dans le dernier message) mais j'ai eu des erreurs les voici:

Notice: Undefined variable: trad in /opt/lampp/htdocs/conceptionqcm/admin/sizou.php on line 7

Notice: Undefined offset: 2 in /opt/lampp/htdocs/conceptionqcm/admin/sizou.php on line 10

je constate qu'il y a des variables non déclarées
Tu peut me dire à quoi correspond ces variables
De plus ta fonction ne contient qu'un paramètre
vraiment bizare quand tu dis que ça marche
Ajouter un commentaire
Ce document intitulé « Controle de saisie d'une date ? » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?