if(checkdate($mois1,$jour1,$annee1) && (is_numeric($jour1)) &&
(is_numeric($mois1)) && (is_numeric($annee1))) {
$date1_valide = true;
}
else {
$msg = $date1." : le jour n'a pas un format valide";
}
L'inconvénient c'est qu'une fois en ligne quand je rentre une mauvaise
donnée pour tester, il n'y a pas que mon script à le remarquer !
Et je récupère en plus ce message :
Warning: checkdate() expects parameter 2 to be long, string given in
/home.2/f/e/r/feree/www/reservation.php on line 176
On peut éviter cette apparition de message d'erreur ?
Ou vous connaissez un meilleur script de détection de validité du champ
date ?
;-)
je teste les données saisies dans des input texte. Elles doivent être des dates avec ce format : jj-mm-aaaa
Tu peux utiliser les expressions rationnelles :
function check_date($date) { return preg_match("@d{2}-d{2}-d{4}@",$date) !== 0; }
retourne true si $date correspond au format et false sinon.
Cf * http://fr.php.net/manual/fr/ref.pcre.php * et www.expreg.com mais qui redirige pour l'instant vers le manuel PHP.
John GALLET
Tu peux utiliser les expressions rationnelles :
L'énorme avantage de checkdate() c'est qu'elle détectera les dates réellement incohérentes comme le 29 février d'une année non bissextile. C'est l'une des rares fonctions de gestion des dates vraiment utile en PHP.
Son comportement de warning est totalement idiot, elle n'a qu'à faire la conversion toute seule et voir si le résultat est valide ou non, atoi() c'est pas fait pour les chiens, mais c'est pas écrit comme ça.
C'est l'un des cas où le casting sauvage permet de résoudre un comportement incohérent du langage :
$valid_date=checkdate((int)$month, (int)$day, (int)$year)); // et voila, ellel est contente, plus de warning 100% inutile
Il est inutile de passer par des is_numeric() avant le casting, checkdate() se débrouillera avec.
a++; JG
Tu peux utiliser les expressions rationnelles :
L'énorme avantage de checkdate() c'est qu'elle détectera les dates
réellement incohérentes comme le 29 février d'une année non bissextile.
C'est l'une des rares fonctions de gestion des dates vraiment utile en
PHP.
Son comportement de warning est totalement idiot, elle n'a qu'à faire la
conversion toute seule et voir si le résultat est valide ou non, atoi()
c'est pas fait pour les chiens, mais c'est pas écrit comme ça.
C'est l'un des cas où le casting sauvage permet de résoudre un
comportement incohérent du langage :
$valid_date=checkdate((int)$month, (int)$day, (int)$year));
// et voila, ellel est contente, plus de warning 100% inutile
Il est inutile de passer par des is_numeric() avant le casting,
checkdate() se débrouillera avec.
L'énorme avantage de checkdate() c'est qu'elle détectera les dates réellement incohérentes comme le 29 février d'une année non bissextile. C'est l'une des rares fonctions de gestion des dates vraiment utile en PHP.
Son comportement de warning est totalement idiot, elle n'a qu'à faire la conversion toute seule et voir si le résultat est valide ou non, atoi() c'est pas fait pour les chiens, mais c'est pas écrit comme ça.
C'est l'un des cas où le casting sauvage permet de résoudre un comportement incohérent du langage :
$valid_date=checkdate((int)$month, (int)$day, (int)$year)); // et voila, ellel est contente, plus de warning 100% inutile
Il est inutile de passer par des is_numeric() avant le casting, checkdate() se débrouillera avec.
Outre les excellentes réponses qui t'ont été données, et qui devraient t'éviter d'utiliser la fonction is_numeric, note que l'opérateur « && » se lit de gauche à droite et que (en principe) l'interprétation stoppe au premier résultat faux.
Donc : if (is_numeric($jour1) && is_numeric($mois1) && is_numeric($annee1) && checkdate($mois1,$jour1,$annee1)) { ... }
Outre les excellentes réponses qui t'ont été données, et qui devraient
t'éviter d'utiliser la fonction is_numeric, note que l'opérateur « && »
se lit de gauche à droite et que (en principe) l'interprétation stoppe
au premier résultat faux.
Donc :
if (is_numeric($jour1) &&
is_numeric($mois1) &&
is_numeric($annee1) &&
checkdate($mois1,$jour1,$annee1))
{
...
}
Outre les excellentes réponses qui t'ont été données, et qui devraient t'éviter d'utiliser la fonction is_numeric, note que l'opérateur « && » se lit de gauche à droite et que (en principe) l'interprétation stoppe au premier résultat faux.
Donc : if (is_numeric($jour1) && is_numeric($mois1) && is_numeric($annee1) && checkdate($mois1,$jour1,$annee1)) { ... }
F Laupretre
'@checkdate' devrait supprimer l'affichage du message d'erreur.
'@checkdate' devrait supprimer l'affichage du message d'erreur.