Jump to content

[Module] Envoyer La Valeur Du Bouton Radio Dans Bdd


Recommended Posts

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

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 by franckm1000 (see edit history)
Link to comment
Share on other sites

 

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 by franckm1000 (see edit history)
Link to comment
Share on other sites

- +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 by coeos.pro (see edit history)
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...