Jump to content

Attribuer à chaque nouvel inscrit un code


Recommended Posts

Salut à tous !

J'aimerai attribuer à chaque nouvel inscrit un code avec des chiffres et des lettres, mais ce code doit être unique, donc à chaque génération aléatoire je dois vérifier si ce code n'est pas déjà attribué.

J'ai déjà le code, mais où le placer, et comment appeler les select et insertion en BD je sèche un peu.

Merci pour toute aide.

 

CODE :

 

$characts = 'abcdefghijklmnopqrstuvwxyz';
$characts .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$characts .= '1234567890';
$code_aleatoire = '';

for($i=0;$i < 10;$i++)
{
$code_aleatoire .= $characts[ rand() % strlen($characts) ];
}
echo $code_aleatoire;

Link to comment
Share on other sites

Bonjour,

 

Code unique : Il faut associer l'id du client

 

Où le placer :  Il faut surcharger la classe Customer avec la méthode add (et tu fais donc ce traitement après l'ajout du client) et là tu n'as pas besoin du sélect

 

Comment : Ca dépend! La meilleure méthode est de faire une table à part de sorte à ne pas modifier la table de base de prestashop. Mais la méthode la moins conseillée et d'ajouter un champs dans la table ps_customer

 

Cordialement,

  • Like 1
Link to comment
Share on other sites

Merci pour ta réponse, mais comment associer l'id du client, si votre solution est la plus rapide merci de détailler.

En fait pour le select je pensais, faire des vérifications à chaque génération du random pour vérifier que le code n'est pas déjà attribué, j'aurai donc une boucle while, en tout cas c'est ce que j'avais prévu de faire, si possible je veux gérer ça séparément , une exigence du client même si farfelue, je lui ai dis que l'email suffit mais il s'entête.

 

Je compte ajouter un champ dans ps_customer, je ferai pas migrer cette version de Prestashop (1.6.1.1)

 

Merci encore pour vos futures réponses.

 

PS: j'ai bien raison de vérifier si le code n'est pas attribué?par un select count, si existant je refais le random sinon je l'attribue????

Link to comment
Share on other sites

16^10 = mille milliards de combinaisons... tu as le temps de voir... sinon prends les 32 caractères (300.000.000.000.000.000.000.000.000.000.000.000.000 de combinaisons)

 

mais il sert à quoi ce code ? les clients de la boutique en auront besoin ? c'est juste un identifiant ?

Link to comment
Share on other sites

C'est une idée du propriétaire du site, il tient à ce code sur n caractères, j'aurai choisi l'email mais bon, c'est lui le boss,en fait dans mon site j'ai un système de parrainage et ce code sert à désigner le parrain.

Dis moi juste là où je dois intervenir je vais me débrouiller.

Merci encore

Link to comment
Share on other sites

Vous pouvez alors faire la boucle vu qu'il y aura moins de change de tomber sur le même code. Surtout que vous ne voulez que 6 caractères. Sinon, il y a uniqid mais qui génère aumoins 13 caractères

 

Mais aussi, voici un code plus optimisé (la chance d'avoir 2 codes semblables est de l'ordre de 1/9999999999)

 

$string = "";

$chaine = "abcdefghijklmnpqrstuvwxy";
srand((double)microtime()*1000000);
for($i=0; $i<$car; $i++) {
$string .= $chaine[rand()%strlen($chaine)];
}
Link to comment
Share on other sites

j'aurais dit comme toi 2mdee, il faut utiliser le mail, il est déjà présent dans la bdd, et il est unique, pourquoi s’embêter à créer un autre identifiant ?

De plus, si un nouveau client arrive sur la boutique il aura plus vite fait de s'inscrire et de mettre le mail d'un ami qu'un code à x caractères

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour dîtes moi juste comment initialiser le code généré, ce code n'est pas visible à l'utilisateur, y a cleandev qui me dit de surcharger la classe Customer, comme je modifie directement cette classe, je veux savoir à quel niveau placer mon assignation var_code=code_genere

Merci.

Ci-après le code add de Costumer :

 

    public function add($autodate = true, $null_values = true)
    {
        $this->id_shop = ($this->id_shop) ? $this->id_shop : Context::getContext()->shop->id;
        $this->id_shop_group = ($this->id_shop_group) ? $this->id_shop_group : Context::getContext()->shop->id_shop_group;
        $this->id_lang = ($this->id_lang) ? $this->id_lang : Context::getContext()->language->id;
        $this->birthday = (empty($this->years) ? $this->birthday : (int)$this->years.'-'.(int)$this->months.'-'.(int)$this->days);
        $this->secure_key = md5(uniqid(rand(), true));
        $this->last_passwd_gen = date('Y-m-d H:i:s', strtotime('-'.Configuration::get('PS_PASSWD_TIME_FRONT').'minutes'));

        if ($this->newsletter && !Validate::isDate($this->newsletter_date_add)) {
            $this->newsletter_date_add = date('Y-m-d H:i:s');
        }

        if ($this->id_default_group == Configuration::get('PS_CUSTOMER_GROUP')) {
            if ($this->is_guest) {
                $this->id_default_group = (int)Configuration::get('PS_GUEST_GROUP');
            } else {
                $this->id_default_group = (int)Configuration::get('PS_CUSTOMER_GROUP');
            }
        }

        /* Can't create a guest customer, if this feature is disabled */
        if ($this->is_guest && !Configuration::get('PS_GUEST_CHECKOUT_ENABLED')) {
            return false;
        }
        $success = parent::add($autodate, $null_values);
        $this->updateGroup($this->groupBox);
        return $success;
    }

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...