xRJx Posted October 20, 2011 Share Posted October 20, 2011 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 More sharing options...
Sbizz Posted October 20, 2011 Share Posted October 20, 2011 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 More sharing options...
xRJx Posted October 20, 2011 Author Share Posted October 20, 2011 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 More sharing options...
Sbizz Posted October 20, 2011 Share Posted October 20, 2011 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 More sharing options...
xRJx Posted October 20, 2011 Author Share Posted October 20, 2011 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! Link to comment Share on other sites More sharing options...
Sbizz Posted October 20, 2011 Share Posted October 20, 2011 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 More sharing options...
xRJx Posted October 21, 2011 Author Share Posted October 21, 2011 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 More sharing options...
Sbizz Posted October 21, 2011 Share Posted October 21, 2011 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 More sharing options...
xRJx Posted October 21, 2011 Author Share Posted October 21, 2011 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 More sharing options...
Sbizz Posted October 21, 2011 Share Posted October 21, 2011 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 More sharing options...
xRJx Posted October 21, 2011 Author Share Posted October 21, 2011 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 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