Omaley Posted February 2, 2016 Share Posted February 2, 2016 Bonjour, je souhaite envoyer dans ma base de donnée la valeur d'un bouton radio. Tout est créé mais cependant je n'arrive pas a insérer dans ma base la valeur du bouton choisis. (Il y a aucune erreur, une fois le bouton valider cliquer, la page se recharge) Voici mon .tpl : <form method="POST" id="myModule" action="" > Allez vous bien ? <input type="radio" name="mymodule" value="oui"> oui <input type="radio" name="mymodule" value="non"> non<br> <input type="submit" value="Envoyer" name="submitMyModule"> </form> Et le code de mon module : public function trie() { if (Tools::isSubmit('submitMyModule')) $var = $_POST['mymodule']; $query = "INSERT INTO`ps_sondage' ('champ1') VALUES ('{$var}'); "; Db::getInstance()->execute($query); } private function _prepareHook($params) { if (Tools::isSubmit('submitMyModule')) $this->trie(); } La table "ps_sondage" existe bien. Merci Link to comment Share on other sites More sharing options...
franckm1000 Posted February 2, 2016 Share Posted February 2, 2016 (edited) Es-tu sûr de passer dans ta fonction trie() ? Mets: public function trie(){ if(Tools::isSubmit('submitMyModule')){ //Je tracke pour voir si je passe bien en postProcess pour mettre à jour echo 'Ok je passe en modif'; $var = $_POST['mymodule']; $query = "INSERT INTO`ps_sondage' ('champ1') VALUES ('{$var}'); "; Db::getInstance()->execute($query); } } Ta requête INSERT me semble également bizarre. Je comprends pas ce que viennent faire ces accolades ? En outre, tu devrais faire au moins un retour si la méthode d'insert te renvoie false. public function trie(){ if(Tools::isSubmit('submitMyModule')){ //Je tracke pour voir si je passe bien postProcess pour mettre à jour echo 'Ok je passe en modif'; $var = $_POST['mymodule']; $query = "INSERT INTO ps_sondage (champ1) VALUES ('$var')"; $lRetour = Db::getInstance()->execute($query); if(!$lRetour){ echo "j'ai un problème d'insertion..."; } } } Edited February 2, 2016 by franckm1000 (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted February 2, 2016 Share Posted February 2, 2016 Pour info, un bouton radio ne renvoie pas de valeur, juste 1 ou ON (suivant les navigateurs) s'il est coché, autrement il ne renvoie rien. Il suffit donc de vérifier si vous avez un retour ou pas^^ Link to comment Share on other sites More sharing options...
Omaley Posted February 2, 2016 Author Share Posted February 2, 2016 Merci franckm1000 pour ton aide Cependant cela ne fonctionne pas, outre le fait que je ne reçois rien dans ma table sondage, le message d'erreur/succes ne s'affiche pas. Je continue de chercher ! Link to comment Share on other sites More sharing options...
franckm1000 Posted February 2, 2016 Share Posted February 2, 2016 (edited) un bouton radio ne renvoie pas de valeur, juste 1 ou ON Comme il l'a écrit, le bouton renverra bien oui ou non. Le bouton radio accepte bien des valeurs et renvoie bien le "value" du radio sélectionné Par contre, rassures-moi, tu sélectionnes au moins une des deux lignes au moins ? Parce que sinon, c'est sûr que tu récupères rien. Au pire, mets ça pour l'instant: <form method="POST" id="myModule" action="" > Allez vous bien ? <input type="radio" name="mymodule" value="oui" checked="checked"> oui <input type="radio" name="mymodule" value="non"> non<br> <input type="submit" value="Envoyer" name="submitMyModule"> <!-- Note: un input devrait toujours se fermer comme ça ; /> car sinon la balise n'est pas fermée --> </form> Ensuite côté serveur, fais simplement ça: public function trie(){ if(Tools::isSubmit('submitMyModule')){ //Je tracke pour voir si je passe bien postProcess pour mettre à jour die('Ok je passe en modif'); $var = $_POST['mymodule']; $query = "INSERT INTO ps_sondage (champ1) VALUES ('$var')"; $lRetour = Db::getInstance()->execute($query); if(!$lRetour){ echo "j'ai un problème d'insertion..."; } } } Si tu passes dans le code, alors ton script doit s'arrêter et afficher une simple page blanche avec "Ok je passe en modif" Si le script ne s'arrête pas, c'est que tu ne passes pas en postProcess. Au passage le action="" de la balise form, c'est pas TOP je trouve (même si je suppose qu'on doit recharger la page en cours et que ton script s'y trouve déjà ?) Edited February 2, 2016 by franckm1000 (see edit history) Link to comment Share on other sites More sharing options...
coeos.pro Posted February 2, 2016 Share Posted February 2, 2016 (edited) - +1 pour le 1 et 0 au lieu de oui et non - on évite $_POST, il vaut mieux utiliser Tools::getValue - inutile de vérifier 2 fois submitMyModule - au lieu de faire Db::getInstance()->execute, mieux vaux utiliser Db::getInstance()->insert (un peu de lecture : https://www.prestashop.com/blog/fr/les-bonnes-pratiques-de-la-classe-db-sur-prestashop-1-5/) - la sécurité !!! tu insères directement dans la bdd quelque chose sans le vérifier, ni le sécuriser, utilise pSQL() ou autre en fonction de la valeur. Voici un exemple de ce que je ferais : <form method="POST" id="myModule" action=""> Allez vous bien ? <input type="radio" name="mymodule" value="1"> oui <input type="radio" name="mymodule" value="0"> non<br/> <input type="submit" value="Envoyer" name="submitMyModule"> </form> public function trie() { $var = (int)Tools::getValue('mymodule', 0); // ici pas besoin de pSQL comme je met (int), le 0 c'est la valeur par défaut si la variable mymodule n'est pas récupérable Db::getInstance()->insert('sondage', array('champ1' => $var)); } private function _prepareHook($params) { if (Tools::isSubmit('submitMyModule')) $this->trie(); } EDIT : 1- Perso :Je préfère 0 et 1 par "simplicité", c'est juste une question de gout 2- dans le code public function trie() { if (Tools::isSubmit('submitMyModule')) $var = $_POST['mymodule']; $query = "INSERT INTO`ps_sondage' ('champ1') VALUES ('{$var}'); "; Db::getInstance()->execute($query); }si on a pas submitMyModule alors une insertion se fait quand même et $var n'existe pas, ça renvoi une erreur, il faut mettre des accolade, et pas autour de $var Edited February 2, 2016 by coeos.pro (see edit history) 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