Saisie de date : PAs d'erreur si 31 février (prive/formulaire/dater.php)
Bonjour à tous,
Il ne s'agit pas d'un grand problème à priori, juste du fait qu'un message d'erreur serait peut-être plus appréciable.
La vérification des dates sur les articles (date de publication, date de rédaction antérieur). Utilise la fonction mktime pour vérifier la validité d'une date. Le problème c'est que la fonction mktime accepte une date comme '31/02/2017', qu'elle corrige automatiquement en 03/03/2017. Mais n'est-il pas mieux d'avertir l'utilisateur - qui ici voudrait prévoir une publication pour fin février - de son erreur ?
Voici la fonction en cause (prive/formulaires/dater.php - ligne 217 sur SPIP 3.0)
function dater_recuperer_date_saisie($post, $quoi="date") { if (!preg_match('#^(?:(?:([0-9]{1,2})[/-])?([0-9]{1,2})[/-])?([0-9]{4}|[0-9]{1,2})#', $post, $regs)) return ''; if ($quoi=="date_redac") { if ($regs[3]<>'' AND $regs[3] < 1001) $regs[3] += 9000; return array($regs[3],$regs[2],$regs[1]); } else { $t = mktime(0,0,0,$regs[2],$regs[1],$regs[3]); // si la date n'est pas valide selon mktime, la refuser if (!$t) return ''; return array(date('Y',$t),date('m',$t),date('d',$t)); } }
Je propose d'ajouter un appel à checkdate() dans la fonction ci-dessus (qui vérifie aussi les année bisextiles)
function dater_recuperer_date_saisie($post, $quoi="date") { if (!preg_match('#^(?:(?:([0-9]{1,2})[/-])?([0-9]{1,2})[/-])?([0-9]{4}|[0-9]{1,2})#', $post, $regs)) return ''; if ($quoi=="date_redac") { if ($regs[3]<>'' AND $regs[3] < 1001) $regs[3] += 9000; return array($regs[3],$regs[2],$regs[1]); } else { if ( checkdate($regs[2],$regs[1],$regs[3]) ) { $t = mktime(0,0,0,$regs[2],$regs[1],$regs[3]); // si la date n'est pas valide selon mktime, la refuser if (!$t) return ''; /* Le ligne ci-dessus ne servirait plus à rien du coup ? */ return array(date('Y',$t),date('m',$t),date('d',$t)); } else { return ''; } } }