Jump to content

Interdire l'inscription au moins de 18 ans


Recommended Posts

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

  • 2 weeks later...

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 by Romain28 (see edit history)
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...