claudiaak64 Posted April 29, 2014 Share Posted April 29, 2014 Bonjour, Je suis actuellement entrain de réaliser un site vendant des produits qui sont interdits aux moins de 18 ans. Je souhaiterais donc lors de l'inscription d'un nouveau client interdire les inscriptions des mineurs lors de la saisie de la date de naissance. Pour cela, j'ai modifié le fichier Validate.php (situé dans le dossier classes). Version Prestashop 1.5.6.2 J'ai remplacé les lignes suivantes (ligne 487 à 504) : /** * Check for birthDate validity * * @param string $date birthdate to validate * @return boolean Validity is ok or not */ public static function isBirthDate($date) { if (empty($date) || $date == '0000-00-00') return true; if (preg_match('/^([0-9]{4})-((?:0?[1-9])|(?:1[0-2]))-((?:0?[1-9])|(?:[1-2][0-9])|(?:3[01]))([0-9]{2}:[0-9]{2}:[0-9]{2})?$/', $date, $birth_date)) { if ($birth_date[1] > date('Y') && $birth_date[2] > date('m') && $birth_date[3] > date('d')) return false; return true; } return false; } Par /** * Check for birthDate validity * * @param string $date birthdate to validate * @return boolean Validity is ok or not */static public function isBirthDate($date) { if (empty($date)) return true; if (preg_match('/^([0-9]{4})-((0?[1-9])|(1[0-2]))-((0?[1-9])|([1-2][0-9])|(3[01]))( [0-9]{2}:[0-9]{2}:[0-9]{2})?$/ui', $date, $birthDate)) { if ($birthDate[1] >= date('Y') - 17) return false; return true; } return false; } J'ai bien un message d'erreur lorsque qu'une personne essaye d'indiquer une date de naissance en dessous de 18 ans et donc l'inscription n'est pas valide. Mais mon problème, c'est que si j'indique par exemple une date tel que le 31 octobre 1996 alors que l'on est en avril l'inscription est valide alors que le client n'a pas encore 18 ans. Est ce que quelqu'un à une solution ? Merci Bonne journée Link to comment Share on other sites More sharing options...
Romain28 Posted May 9, 2014 Share Posted May 9, 2014 (edited) Ton code vérifies uniquement l'année Si tu prends pas en compte le mois et le jour c'est tout à fait normal EDIT : public static function isBirthDate($date) { if (empty($date) || $date == '0000-00-00') return false; if (preg_match('/^([0-9]{4})-((?:0?[1-9])|(?:1[0-2]))-((?:0?[1-9])|(?:[1-2][0-9])|(?:3[01]))([0-9]{2}:[0-9]{2}:[0-9]{2})?$/', $date, $birth_date)) { if ((floor((time() - strtotime($date))/31556926))<18) return false; if ($birth_date[1] > date('Y') && $birth_date[2] > date('m') && $birth_date[3] > date('d')) return false; return true; } return false; } source du code : ici Fonctionnel sur 1.5.6.2 Edited May 9, 2014 by Romain28 (see edit history) Link to comment Share on other sites More sharing options...
claudiaak64 Posted May 13, 2014 Author Share Posted May 13, 2014 Bonjour Romain, Merci beaucoup pour ta réponse. Et désolée je n'avais pas vu qu'il y avait déjà eu un topic à ce sujet. Merci Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now