Jump to content

[Résolu] Rendre un champ unique en base du formulaire d'inscription


Recommended Posts

Bonjour à tous,

 

J'ai créé un nouveau champ "Pseudo" dans mon formulaire d'inscription. Pas de souci, il apparait bien, la saisie s'effectue sans problème et je le retrouve bien dans le BO.

 

Je cherche cependant à le rendre unique, c'est à dire que 2 clients ne peuvent pas avoir le même pseudo. Quelqu'un a t'il une idée ?

 

J'ai modifié le fichier AuthController.php pour y ajouter dans la fonction " public function preProcess() " et dans le " if (Tools::isSubmit('submitAccount') " :

 

if (Customer::customerExists(Tools::getValue('pseudo')))

$this->errors[] = Tools::displayError('Le pseudo saisi est déjà utilisé. Veuillez en choisir un autre.');

Mais j'ai un plantage quand je valide le formulaire...

 

Je précise que j''ai bien rendu le champ pseudo unique en base. Quelqu'un peut il m'aider ?

 

Merci!

 

PS : je travaille sur la dernière version de Prestashop, la 1.4.5.1.

Link to comment
Share on other sites

Si dans ta base de données le champ est UNIQUE, tu devrais avoir une erreur SQL pour un même pseudo.

 

Si c'est pas le cas, c'est que tu t'es obligatoirement planté dans ta base de données. OU tu n’insères pas le pseudo.

Link to comment
Share on other sites

Et bien non même pas, si je met le champ pseudo unique en base sans faire aucun autre changement dans le code, j'ai l'erreur :

 

Il y a 1 erreur :

une erreur s'est produite pendant la création de votre compte

quand je valide le formulaire avec un pseudo déjà existant.

 

 

Sinon à chaque création de compte, le pseudo apparait bien dans la base, y a pas de problème de ce coté là.

 

Si j'insère le code suivant dans AuthController.php, j'ai une page blanche avec "Fatal error".

 

if (Customer::customerExists(Tools::getValue('pseudo')))

$this->errors[] = Tools::displayError('Le pseudo saisi est déjà utilisé. Veuillez en choisir un autre.');

 

C'est donc là qu'il doit y avoir un problème non ?

Link to comment
Share on other sites

Il faudrait que tu actives la gestion d'erreur dans : /config/config.inc.php en remplaçant ceci :

 

/* Debug only */
@ini_set('display_errors', 'off');
define('_PS_DEBUG_SQL_', false);

 

par cela :

 

/* Debug only */
@ini_set('display_errors', 'on');
define('_PS_DEBUG_SQL_', true);

 

L'erreur te sera affichée. Si tu n'y arrives toujours pas, merci de me montrer l'erreur. Si il n'y a pas d'erreur, dis le moi et je regarderais d'un peu plus près ton problème.

Link to comment
Share on other sites

J'ai modifié le fichier comme tu l'as précisé mais j'ai toujours le même message, sans rien de plus.

 

C'est pas Prestashop qui prend le dessus sur les erreurs SQL ?

 

Ce dont je suis sur, c'est que ce message (générique je pense) apparait car je saisie un pseudo déjà utilisé.

 

Je joins les captures d'écrans de la base et du message sur le FO, si cela peut t'aider à y voir plus clair.

 

Merci pour ton aide!

post-295501-0-52559000-1319124551_thumb.jpg

post-295501-0-60072200-1319124554_thumb.jpg

post-295501-0-76733000-1319124556_thumb.jpg

Link to comment
Share on other sites

Je regarde ça soit assez tard dans la soirée, soit demain matin et je te tiens au courant sûrement avant 12h00.

 

Je connais pas toutes les classes par cœur, la fonction customerExists a été réalisée par toi ou été déjà implémentée ? Si c'est par toi, merci de me copier le code, histoire que j'ai pas à te le demander !

Link to comment
Share on other sites

Cette fonction est déclarée dans Customer.php mais avec ta question je me rends compte qu'il faut que j'en crée une 2ème...

Car le bout de code que j'ai donné dans mon premier post n'est pas suffisant, ça fait appelle à cette fonction qui relève de l'email, alors que moi c'est sur le pseudo que je l'appelle.

 

Je pense que c'est là d'où vient l'erreur, je vais en créer une 2ème identique en changeant son nom bien sur et le champ concerné. Je te redis!

Link to comment
Share on other sites

Bon.

 

La raison est simple : tu n'as pas regardé quels étaient les paramètres de la fonction customerExists ! Du coup, tu lui envoies de mauvaises données et le problème que tu as rencontré c'est que cette fonction, lorsque tu lui envoies de mauvais paramètres*, et bien elle fait un die mais sans aucun message. Donc difficilement compréhensible.

 

Étant donné que tu as rajouté un champ, tu vas devoir rajouter une fonction de préférence dans Customer.php, de préférence² en overriding qui va faire pareil que la fonction customerIdExistsStatic (mais tu la nommeras par exemple customerPseudoExistsStatic par exemple) mais pour le pseudo..

 

Edit: je vois qu'on a posté ensemble et que tu as été plus rapide que moi ^^

Link to comment
Share on other sites

Oui en effet bien joué ;)

 

C'était bien ça le problème j'ai déclaré une nouvelle fonction customerExists2 dans Customer.php et ça fonctionne maintenant. J'ai bien un message d'erreur quand le pseudo est déjà pris et ça passe quand il est libre!

 

Juste une question, pourquoi la fonction customerIdExistsStatic ? et en overriding ? La fonction customerExists ne suffit pas ?

 

EN tout cas merci bcp pour ton intérêt, sans toi j'aurais galéré!

Link to comment
Share on other sites

En fait, customerIdExistsStatic se rapproche le plus de ce que tu veux faire, entre guillemet. Je fais parti des gens qui aiment bien avoir des noms explicites et je trouve que customerExists n'est pas explicite ; la preuve, tu l'as utilisé sans savoir qu'il fallait envoyé en paramètre une adresse email. Or, si cette fonction s'était nommé customerEmailExists, tu aurais tout de suite compris ton erreur (je pense même que tu n'aurais pas fait d'erreur).

 

Concernant l'overriding : tu as dû remarquer que Prestashop a eu une mise à jour récemment. Avec cette mise à jour, tu aurais perdu ces modifications (ou tu aurais du faire tout un tas de manœuvre pour remettre en ordre tes modifications). Or, Prestashop t'offre la possibilité de surcharger (override) les class, via le dossier /override/classes/ ou /override/controllers/*. De ce fait, avec une mise à jour, tu n'as qu'à faire un copier/coller complet du dossier override et c'est terminé. Pour finir, cela te permet de bien séparer tes modifications du cœur de Prestashop.

Personnellement, au début de mon dév. sur Prestashop, je n'ai fait que modifier le cœur de Prestashop. Je te garanti que c'est IMPOSSIBLE de retrouver mes modifications et/ou de comprendre quelque chose ou même de vouloir importer mes modifications sur un autre site. Maintenant, je refais un module propre (mon projet est assez gros, ce n'est pas un simple module de news de quelques fichiers...). Le mec qui veut mon module : il fait deux cliques : charger / installer. Et il a un module complet. Toi, le mec tu vas devoir lui faire un readme.txt car il faudra faire des modifications dans des fichiers.

 

Bon, tout ce que je te dis, c'est dans un environnement professionnel (je suis stagiaire). Mais ayant fait l'erreur, je préfère prévenir. Tu peux te dire que ce que tu fais c'est juste pour ce site, mais crois moi, c'est la grosse galère si y'a une mise à jour ou si tu dois déplacer tes modifications sur un autre site.

 

/3615 mylife

 

PS: Je te conseil pour finir, le tutoriel de Nethercott Constructions. En anglais, mais facilement compréhensible.

 

* tu as des exemples, du style le fichier _MySQL.php dans /override/classes/. Il suffit d'enlever le "_" pour que ces fichiers prennent effets. Par exemple, ce fichier te permet de rajouter des fonctions et des variables pour pouvoir compter le nombre de requêtes que ton site fait au final, le temps que ça prend, quelles requêtes ont pris du temps à se charger, combien de fois, etc.

Link to comment
Share on other sites

Ok merci bien pour ces explications. Concernant les mises à jour, jusqu'à présent je me suis toujours noté dans un coin les modifs que j'ai apporté pour pouvoir les refaire ultérieurement. Mais j'avoue que c'est pas pratique.

 

Je vais voir ça pour l'override, merci encore!

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