Samantha66 Posted November 9, 2011 Share Posted November 9, 2011 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 More sharing options...
DevNet Posted November 9, 2011 Share Posted November 9, 2011 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 More sharing options...
Samantha66 Posted November 10, 2011 Author Share Posted November 10, 2011 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 More sharing options...
Samantha66 Posted November 10, 2011 Author Share Posted November 10, 2011 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 More sharing options...
Samantha66 Posted November 16, 2011 Author Share Posted November 16, 2011 Personne à une petite idée ? Link to comment Share on other sites More sharing options...
DevNet Posted November 16, 2011 Share Posted November 16, 2011 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 More sharing options...
coeos.pro Posted November 17, 2011 Share Posted November 17, 2011 +1 pour la réflexion de devnet, sinon je suis un peu surpris (encore et encore) que des développeurs web professionnels posent des questions aussi "basique", peut être devriez vous commencer par lire ceci et finir par cela Link to comment Share on other sites More sharing options...
Samantha66 Posted November 17, 2011 Author Share Posted November 17, 2011 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 More sharing options...
Sbizz Posted November 17, 2011 Share Posted November 17, 2011 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 More sharing options...
coeos.pro Posted November 17, 2011 Share Posted November 17, 2011 et si vous modifiez un tpl, pensez à vider le cache smarty. Link to comment Share on other sites More sharing options...
Samantha66 Posted November 17, 2011 Author Share Posted November 17, 2011 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 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