2mdee Posted November 6, 2015 Share Posted November 6, 2015 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 More sharing options...
coeos.pro Posted November 6, 2015 Share Posted November 6, 2015 à quoi va servir ce code ? sinon si c'est pour identifier un client, tu peux toujours récupérer les 10 premiers caractères du md5 de l'id_customer (avec sel et poivre si besoin est) Link to comment Share on other sites More sharing options...
Fernand WAFO Posted November 6, 2015 Share Posted November 6, 2015 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, 1 Link to comment Share on other sites More sharing options...
2mdee Posted November 6, 2015 Author Share Posted November 6, 2015 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 More sharing options...
2mdee Posted November 6, 2015 Author Share Posted November 6, 2015 Le md5 de l'id client aussi me parait bien. Sauf que MD5 sur 32 caractères, j'ai peur d'avoir des doublons en ne prenant que les 10 premiers caracteres Link to comment Share on other sites More sharing options...
coeos.pro Posted November 6, 2015 Share Posted November 6, 2015 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 More sharing options...
2mdee Posted November 6, 2015 Author Share Posted November 6, 2015 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 More sharing options...
Fernand WAFO Posted November 6, 2015 Share Posted November 6, 2015 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 More sharing options...
coeos.pro Posted November 6, 2015 Share Posted November 6, 2015 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 More sharing options...
2mdee Posted November 6, 2015 Author Share Posted November 6, 2015 Merci pour tous vos posts. Merci de me dire sur quels fichiers Prestashop je dois intervenir, je veux pas casser la machine... :mellow: Link to comment Share on other sites More sharing options...
2mdee Posted November 6, 2015 Author Share Posted November 6, 2015 Merci si je comprends bien j'ai pas besoin de vérifier si le code est déjà attribué? Link to comment Share on other sites More sharing options...
Fernand WAFO Posted November 6, 2015 Share Posted November 6, 2015 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 Link to comment Share on other sites More sharing options...
2mdee Posted November 6, 2015 Author Share Posted November 6, 2015 Autre chose où se situe la fonction qui envoie le mail après l'inscription, je veux lui envoyer son code. Merci Link to comment Share on other sites More sharing options...
2mdee Posted November 6, 2015 Author Share Posted November 6, 2015 Allez répondez SVP les experts, je veux aussi le voir dans le panneau d'admin en readonly. Thanks ! Link to comment Share on other sites More sharing options...
2mdee Posted November 17, 2015 Author Share Posted November 17, 2015 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 More sharing options...
2mdee Posted November 17, 2015 Author Share Posted November 17, 2015 je pense que je peux mettre l'assignation figée en début de la fonction add. Je pense, merci de confirmer. 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