Doug37 Posted June 24, 2011 Share Posted June 24, 2011 Bonjour, Je développe un module pour mon entreprise, dans lequel il y a besoin, sur la page de configuration, d'intégrer dans la base de donnée certaines informations rentrées dans des champs de la page de config.Mon soucis est qu'avec la balise Javascript, le module est considéré comme contenant des erreurs.Auriez vous une solution sachant que je n'ai jamais développé de module ?Merci d'avance.Doug Link to comment Share on other sites More sharing options...
Broceliande Posted June 24, 2011 Share Posted June 24, 2011 Bonjour, Je développe un module pour mon entreprise, dans lequel il y a besoin, sur la page de configuration, d'intégrer dans la base de donnée certaines informations rentrées dans des champs de la page de config.Mon soucis est qu'avec la balise Javascript, le module est considéré comme contenant des erreurs.Auriez vous une solution sachant que je n'ai jamais développé de module ?Merci d'avance.Doug Salut,tu dois nécessairement avoir des problèmes d'échappement du code html retourné .Le javascript passe nickel en BO , si dans la fonction getContent() , tu fais un return $html , et que tu as un truc du genre : $html = '[removed]var mavar = 'toto';[removed]'; tu auras obligatoirement une erreur de parsing (seulement affichée si tu as display error à on dans config.inc.php )Dans ce bout de code ci dessus par exemple ... tu devrais avoir échappé tous les ' du fait que ta variable est entre deux ' : $html = '[removed]var mavar = \'toto\';[removed]'; Link to comment Share on other sites More sharing options...
Doug37 Posted June 24, 2011 Author Share Posted June 24, 2011 Bonjour, et merci de l'aide que tu me propose.Je vais te copier mon code, étant en BTS IRIS, je n'ai pas spécialement beaucoup de notions, surtout sur Prestashop que je découvre . <?php class Blocsondage extends Module { function __construct() { $this->name = 'blocsondage'; $this->tab = 'Mes modules'; $this->version = 0.1; $this->displayName = $this->l('Bloc Sondage'); $this->description = $this->l('Insere un bloc sondage dans votre site'); parent::__construct(); } function install() { if (!parent::install()) return false; if (!$this->registerHook('rightColumn')) return false; return true; } public function uninstall() { if (!parent::uninstall()) return false; } public function getContent() { echo " Administration du module Sondage : <form method='post' name='creer' action=''> Créer un nouveau Sondage : Nom du Sondage : <input id='creer' name='nomsondage' type='text' /> <input method='post' name='submitcreer' type='submit' value='Envoyer' onClick='nouveauSondage(document.getElementById(\"nomsondage\");'/> </form> <form method='post' name='modif' action=''> Modifier un Sondage : Aucun <input name='submitmodif' type='submit' value='Envoyer' /><br> </form> <form method='post' name='reinit' action=''> Réinitialiser un Sondage : Aucun <input name='submitreinit' type='submit' value='Envoyer' /><br> </form> <form method='post' name='suppr' action=''><h3>Supprimer un Sondage : Aucun <input name='submitsuppr' type='submit' value='Envoyer' /><br> </form> <form method='post' name='radiopublic' action=''> Résultats de Sondage publics : <input type='radio' name='public' value='oui' checked>Oui <input type='radio' name='public' value='non'>Non </form></br> <form method='post' name='votepublic' action=''> Autoriser seulement un vote par Sondage par : <input type='radio' name='vote' value='jour'>Jour <input type='radio' name='vote' value='mois'>Mois <input type='radio' name='vote' value='seul'>Autoriser un seul vote <input type='radio' name='vote' value='tous' checked>Autoriser tous les votes </form></br> <input name='submitsave' type='submit' value='Sauvegarder' class='button'/></center> "; } function nouveauSondage($nomsondage) { Db::getInstance()->ExecuteS("CREATE TABLE IF NOT EXISTS ps_sondage_lang (id_sondage int(11) AUTO_INCREMENT, nom_sondage text, PRIMARY KEY (id_sondage))"); Db::getInstance()->ExecuteS("CREATE TABLE IF NOT EXISTS ps_sondage_reponse_lang (id_reponse int(11) AUTO_INCREMENT, id_sondage int(11),nom_reponse text, ip_client varchar(20), date date, PRIMARY KEY (id_reponse))"); Db::getInstance()->ExecuteS("INSERT INTO ps_sondage_lang VALUES ('', '".$nomsondage."'"); } function hookRightColumn($params) { return $this->display(__FILE__, 'blocsondage.tpl'); } } ?> En fait, j'ai essayé de créer une fonction, comme pour les "pages normales". Mais visiblement, ça ne fonctionne pas comme ça ^^'. Link to comment Share on other sites More sharing options...
Broceliande Posted June 24, 2011 Share Posted June 24, 2011 hmm , à vue de nez pas d'erreur ? et du côté du cache ??? Link to comment Share on other sites More sharing options...
Doug37 Posted June 24, 2011 Author Share Posted June 24, 2011 Cet a dire ? x).Ici, la fonction n'est pas exécutée, pas de nouvelle table dans la base, pas de nouveau "champs" ... Link to comment Share on other sites More sharing options...
dfede Posted June 24, 2011 Share Posted June 24, 2011 public function install() { if(!parent::install() || !$this->registerHook('rightColumn') || !$this->installDB()) return false; return true; } public function installDb() { Db::getInstance()->ExecuteS("CREATE TABLE IF NOT EXISTS ps_sondage_lang (id_sondage int(11) AUTO_INCREMENT, nom_sondage text, PRIMARY KEY (id_sondage))"); Db::getInstance()->ExecuteS("CREATE TABLE IF NOT EXISTS ps_sondage_reponse_lang (id_reponse int(11) AUTO_INCREMENT, id_sondage int(11),nom_reponse text, ip_client varchar(20), date date, PRIMARY KEY (id_reponse))"); return true; } Link to comment Share on other sites More sharing options...
Doug37 Posted June 24, 2011 Author Share Posted June 24, 2011 Ok, et sinon, pour effectuer les requêtes d'insersion ? Link to comment Share on other sites More sharing options...
dfede Posted June 24, 2011 Share Posted June 24, 2011 $sql= 'INSERT INTO `'._DB_PREFIX_.'nomtable` VALUES("","'.$_POST['nom'].'","'.$_POST['prenom'].'")'; Db::getInstance()->Execute($sql); Link to comment Share on other sites More sharing options...
Doug37 Posted June 24, 2011 Author Share Posted June 24, 2011 C'est exactement ce que je fais déjà, si tu regarde bien. Mais merci quand même ps: public function installDb() { Db::getInstance()->ExecuteS("CREATE TABLE IF NOT EXISTS ps_sondage_lang (id_sondage int(11) AUTO_INCREMENT, nom_sondage text, PRIMARY KEY (id_sondage))"); Db::getInstance()->ExecuteS("CREATE TABLE IF NOT EXISTS ps_sondage_reponse_lang (id_reponse int(11) AUTO_INCREMENT, id_sondage int(11),nom_reponse text, ip_client varchar(20), date date, PRIMARY KEY (id_reponse))"); return true; } Ne marche pas. Link to comment Share on other sites More sharing options...
Nommam Posted June 24, 2011 Share Posted June 24, 2011 Doug, pour te guider, tu peux epluché le module point de fidelite qui travail avec un bdd.y a rien de mieux pour comprendre comment faire !par contre sis je peut me permettre, un truc con, mais la fuction d'install, elle est seulement executée a l'installation du module, donc desinstal le et reinstal le pour l'executer Link to comment Share on other sites More sharing options...
Broceliande Posted June 24, 2011 Share Posted June 24, 2011 C'est exactement ce que je fais déjà, si tu regarde bien. Mais merci quand même ps: public function installDb() { Db::getInstance()->ExecuteS("CREATE TABLE IF NOT EXISTS ps_sondage_lang (id_sondage int(11) AUTO_INCREMENT, nom_sondage text, PRIMARY KEY (id_sondage))"); Db::getInstance()->ExecuteS("CREATE TABLE IF NOT EXISTS ps_sondage_reponse_lang (id_reponse int(11) AUTO_INCREMENT, id_sondage int(11),nom_reponse text, ip_client varchar(20), date date, PRIMARY KEY (id_reponse))"); return true; } Ne marche pas. Pas tout à fait d'accord , ce n'est pas ce que tu fais ...Je n'ai pas prêté attention au fait que tu créais une table , mais ici ta table doit être crée dans install idéalement, et non faire un create if not exists ... chaque fois que tu veux insérer un élément .Reprends le code donné par dfede , il est clair que c'est plus propre.De plus tu fais tes inserts direct dans ps_nomdetable ... Es tu certain que le préfix de ton install est bien PS ??? Link to comment Share on other sites More sharing options...
Broceliande Posted June 24, 2011 Share Posted June 24, 2011 Doug, pour te guider, tu peux epluché le module point de fidelite qui travail avec un bdd.y a rien de mieux pour comprendre comment faire !par contre sis je peut me permettre, un truc con, mais la fuction d'install, elle est seulement executée a l'installation du module, donc desinstal le et reinstal le pour l'executer ben oui mais t'as vu , sa fonction install ne fait rien dans la bdd ?! function install() { if (!parent::install()) return false; if (!$this->registerHook('rightColumn')) return false; return true; } Mais dis moi ta réponse est tout de même claire et sensée. ! oulala tu couves un truc nommam , tu couves un truc ! Link to comment Share on other sites More sharing options...
Doug37 Posted June 24, 2011 Author Share Posted June 24, 2011 Merci à vous, effectivement, c'est plus propre, et enfin les tables sont créées, par contre, le problème de la requête au clic sur "Envoyer" n'est pas résolu, elle ne s’exécute toujours pas. ps : Oui, je suis sur que le préfixe de mes table est 'ps_' Link to comment Share on other sites More sharing options...
Nommam Posted June 24, 2011 Share Posted June 24, 2011 il faut quand meme dire que tu ne l'envoie pas bien loint ton formulaire : <form method='post' name='radiopublic' action=''> Link to comment Share on other sites More sharing options...
dfede Posted June 24, 2011 Share Posted June 24, 2011 bon j'ai envi de dire :http://www.siteduzero.com/tutoriel-3-14543-transmettre-des-donnees-avec-les-formulaires.htmlhttp://www.siteduzero.com/tutoriel-3-14514-ecrire-des-donnees.htmlhttp://www.siteduzero.com/tutoriel-3-232176-la-programmation-orientee-objet.html Link to comment Share on other sites More sharing options...
Broceliande Posted June 24, 2011 Share Posted June 24, 2011 bon j'ai envi de dire :http://www.siteduzero.com/tutoriel-3-14543-transmettre-des-donnees-avec-les-formulaires.htmlhttp://www.siteduzero.com/tutoriel-3-14514-ecrire-des-donnees.htmlhttp://www.siteduzero.com/tutoriel-3-232176-la-programmation-orientee-objet.html J'ai un peu envie de te suivre .... Bon ben alors +1 Link to comment Share on other sites More sharing options...
Doug37 Posted June 25, 2011 Author Share Posted June 25, 2011 http://www.krys.com/ . Ceci dit, je commence un module, je vais pas tout faire, pour m’apercevoir que ça ne marche pas, donc, forcément, je commence par tester, c'est pour ça que les autres formulaires sont "vides".<input method='post' name='submitcreer' type='submit' value='Envoyer' onClick="nouveauSondage(document.getElementById('creer').value)"> j'ai testé en faisant : <input method='post' name='submitcreer' type='submit' value='Envoyer' onClick="alert(document.getElementById('creer').value)"> Et, là, ça marche, j'ai l'affichage en alert de la valeur rentrée dans le champ.Mais, quand je fais appel a ma fonction nouveauSondage, aucun champ n'est créé dans la base. function nouveauSondage($nomsondage) { Db::getInstance()->ExecuteS("INSERT INTO ps_sondage_lang VALUES ('', '".$nomsondage."')"); } Link to comment Share on other sites More sharing options...
dfede Posted June 25, 2011 Share Posted June 25, 2011 exemple: if(isset($_POST['ajout'])) { nouveauSondage($_POST['nomvariable']); } <form action="'.$_SERVER["REQUEST_uri"].'" method="POST"> <input type="text" name="nomvariable"> <input type="submit" name="ajout"> </form> je t'épargne les Tools Get isset de presta et Tools Get value .. Link to comment Share on other sites More sharing options...
Doug37 Posted June 28, 2011 Author Share Posted June 28, 2011 Merci bien, je testerais une fois que j'aurais fini mon boulot du moment 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