Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Check date() et messages d'alerte ?

4 réponses
Avatar
paul
Bonjour,

je teste les données saisies dans des input texte. Elles doivent être
des dates avec ce format : jj-mm-aaaa

j'ai ajouté "is_numeric" à check date() parce qu'autrement une date
comme 02-12-20o6 passait en local !


list($jour1, $mois1, $annee1) = explode('-', $date1);

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 ?
;-)

4 réponses

Avatar
Florian Sinatra
*paul* @ 13/12/2006 13:00 :
Bonjour,


Bonsoir,

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.

Avatar
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

Avatar
Olivier Miakinen

if(checkdate($mois1,$jour1,$annee1) && (is_numeric($jour1)) &&
(is_numeric($mois1)) && (is_numeric($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))
{
...
}

Avatar
F Laupretre
'@checkdate' devrait supprimer l'affichage du message d'erreur.