Jump to content

[RESOLU] Problème envoi $_POST page product.php


Recommended Posts

Bonjour,

 

Je suis sous Prestashop 1.4.5, sur ma page produit (product.tpl) j'ai créé un formulaire de devis.

 

Dans le fichier ProductController.php j'essaye désespérément de récupérer les valeurs de mes champs passés en $_POST mais sans succés, je suis automatique redirigé vers la page product.php et j'ai droit à l'erreur "produit introuvable", ce qui est normal vu que l'id_product n'est plus passé en paramètre $_GET.

 

Pourtant dans mon formulaire j'ai bien mis

<form method="post" action="{$smarty.server.PHP_SELF}?id_product={$product->id}">

Et j'ai même rajouter un petit input hidden au cas ou :

<input type="hidden" name="id_product" value="{$product->id}" />

Mais rien n'y fait...j'ai aussi commenter la ligne

public $php_self = 'product.php';

 

Mais c'est toujours pareil.

 

Quelle est la bonne méthode pour créer un formulaire de devis ?

Merci.

Link to comment
Share on other sites

Bonsoir,

 

Première chose, dans le contrôleur ne commentez pas

public $php_self = 'product.php';

 

Deuxième chose, vous pouvez utiliser ce code pour poster votre formulaire :

<form action="{$link->getPageLink('product.php', true)}?id_product={$product->id}" method="post">

 

Troisième chose, soit vous faites le choix de passer en GET votre variable id_product={$product->id} , soit vous choisissez de passer en POST :

<input type="hidden" name="id_product" value="{$product->id}" />

Mais il est inutile de faire les 2.

Vous pouvez donc écrire ceci :

 

<form action="{$link->getPageLink('product.php', true)}" method="post">
<input type="hidden" name="id_product" value="{$product->id}" />

 

Et enfin, pour récupérer votre contenu POST depuis le contrôleur, utilisez impérativement l'encapsulation et le contrôle de sécurité de la méthode Tools::getValue() disponible dans le noyau. Quelle soit GET ou POST, la récupération de ces données seront sécurisées (surtout pour éviter les injections de codes). Dans votre cas :

Tools::getValue('id_product')

 

Bien cordialement

Link to comment
Share on other sites

Toujours pareil...je suis redirigé vers product.php et j'ai donc l'erreur produit introuvable.

 

J'ai testé en faisant passer id_product en GET ou en POST comme vous me l'avez conseillé, mais j'ai toujours la même erreur.

 

Apparemment dans la fonction preProcess() du ProductController il passerai dans le if :

 

if (!Validate::isLoadedObject($this->product))
{
         header('HTTP/1.1 404 Not Found');
         header('Status: 404 Not Found');
}

 

pourtant je récupère bien un $id_product avec la ligne :

 

if ($id_product = (int)Tools::getValue('id_product'))

 

et $this->product est bien un objet...donc je vois pas pourquoi il passe dans ce if.

 

Si quelqu'un a une idée...

Link to comment
Share on other sites

Bon apparemment ça ne serait pas dans la fonction preProcess() que ça tournerait mal, mais plutôt dans process(), si je fait un print_r($this->product) juste au dessous de parent::process() lorsque je valide mon formulaire il ne me retourne rien.

 

J'ai testé de rajouter la ligne :

 

if ($id_product = (int)Tools::getValue('id_product'))
  $this->product = new Product($id_product, true, self::$cookie->id_lang);

 

et de faire un echo de $id_product mais il me retourne 0.

Link to comment
Share on other sites

Personne à une petite idée ?

 

Bonsoir,

 

En même temps, la discussion aurai pu continuer, mais j'avoue qu'après vous avoir proposer une première piste assez copieuse, il n'en résulte aucun remerciement de votre part.

 

Bien cordialement

Link to comment
Share on other sites

Désolé, il est vrai que sans avoir fait attention j'ai oublié de vous remercier pour votre réponse.

Merci aussi à coeos.pro pour les deux liens.

 

Et désolé mais il n'y a pas de forum "Débutant", je pensais être au bon endroit pour poster ma question même si elle est basique.

Link to comment
Share on other sites

Bonjour.

 

Vous devriez tester étape par étape.

 

Vous ne nous avez pas dit par quel moyen vous avez effectué les modifications : coeur ou override ? Vous n'avez pas précisé quelle fonction vous avez modifié : preProcess(), process() ou autre ? preProcess() conviendrait plus à vos attentes.

 

Ensuite, via votre formulaire, vous devriez avoir un SUBMIT. Il faudrait tester son existence à l'aide, encore une fois, de Tools::getValue('submit'). Cela vous permettrait déjà de savoir si votre formulaire est bien envoyé.

 

Pour finir, il serait bon d'avoir les modifications que vous avez apporté, car les méthodes que DevNet vous a précisé devrait marcher sans aucun problème.

Link to comment
Share on other sites

Merci Sbizz pour votre réponse, ça a résolut mon problème, en fait j'essayais de récupérer les valeurs de mon formulaire dans la fonction Process() du fichier ProductController.php et lorsque j'ai tenté la même chose mais cette fois ci dans la fonction preProcess() cela a fonctionné correctement.

 

Merci à tous de votre aide !

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