Hello les gens, je me suis inscrit sur ce site en espérant que vous pouvez m'aider sur le problème suivant.
Je l'ai déjà soumis à commentcamarche.net mais il n'y a pas eu de résolutions.
voici le soucis :
J'ai un problème avec mes "actions" du formulaires.
je prend l'exemple de mon formulaire dont le lien se présente sous cette forme :
" http:// localhost/Fuegotec/pages/admin_produits.php?idProd=Aj " ( sans l'esapce après http:// )
cette page a pour fonction d'ajouter un produit de la société dans la base de données.
Ma méthode consiste à, lorsque j'appuie sur le bouton "envoyer", qu'il soit redirigé sur cette même page.
Et que je fais un test "if(isset($_POST["btnAjouterProduit"])), il appelle une fonction allant tester les valeurs entrés dans le formulaire qui est dans une autre page.
Je met donc dans les paramètre de mon formulaire : action="admin_produits.php?idProd=Aj"
mais, et c'est ici que vous intervenez ^^, il me met le message suivant :
en mettant simplement un lien qui n'a pas de "id" get, (action="admin_produits.php" la redirection fonctionne, mais bien entendu, le traitement ne se fait pas puisque le formulaire ne le redirige pas sur la bonne page.
en faisant avec "document.href" de javascript en faisant avec "$_SERVER["PHP_SELF"];
je ne sais pas comment faire. Pourtant lors d'un de mes travaux précédent, cela fonctionnait à merveille. Même s'il y avait un " ?id " dans le lien ...
J'en ai donc conclu que ça doit être une configuration de Wamp qui n'est pas paramétré selon mon envie.
Si ça peut aider, le problème est exactement pareil sur IE 6 que sur Firefox (dernière version. je sais plus laquelle c'est)
La version du wamp que j'utilise est le 2.0
En vous remerciant d'avance, je vous souhaite une bonne après-midi
"admin_produits.php?idProd=Aj" se teste avec $_GET['idProd'], pas avec $_POST['idProd']. Éventuellement, vous pourriez utiliser $_REQUEST['idProd'] qui cumule, entre autres, GET et POST.
Otomatic, Touriste a "idProd" dans son URL mais tente de récupérer "btnAjouterProduit" avec $_POST.
Touriste, tu ne pourrais pas mettre un exemple de ton code pour voir ce que tu fais ? Dans ton formulaire, tu as method="post" ? Sinon, suit les recommandations d'Otomatic.
À part ça, méfies-toi de "commentcamarche pas net"... leur forum est modéré par des gamins qui n'y connaissent rien en informatique et qui tentent d'installer des virus sur les PCs des utilisateurs qui ont des problèmes.
Hello, merci olivier pour le conseil, je ne savais pas concernant commentçamarche
alors voici le bout de code en question :
//Si l'id correspond au clic d'ajouter un produit if($_GET["idProd"] == "Aj" { // On affiche le formulaire adéquat print(' <br> <form action="admin_produits.php?idProd=Aj" name="frm_ProduitsAjout" method="post" enctype="multipart/form-data"> <table width="400" border="0" align="center"> <tr> <td><div align="right" class="StyleContenuGras" >Modèle :</div></td> <td><input name="txtModeleProd" size="30" type="text" /></td> </tr> <tr> <td><div align="right" class="StyleContenuGras">Descriptif en français :</div></td> <td><textarea name="txtDescriptionFrProd" cols="33" rows="2"></textarea></td> </tr> <tr> <td><div align="right" class="StyleContenuGras">Descriptif en allemand :</div></td> <td><textarea name="txtDescriptionDeProd" cols="33" rows="2"></textarea></td> </tr>
etc...
</table> </form>
//Si le bouton "Ajouter" a été appuyé if(isset($_POST["btnAjouterProd"])) { //Variables prenant les valeurs du formulaire $Modele = addslashes($_POST["txtModeleProd"]); $DescriptifFr = addslashes($_POST["txtDescriptionFrProd"]); $DescriptifDe = addslashes($_POST["txtDescriptionDeProd"]); $DescriptifIt = addslashes($_POST["txtDescriptionItProd"]); $DescriptifEn = addslashes($_POST["txtDescriptionEnProd"]); $Categorie = $_POST["lstCategorieProd"]; $Nouveau = $_POST["chxNouveauProd"];
//Utile que pour la partie modification du produit $IDModifProd = "0";
//Permet d'identifier la page d'ajout à la page de modif lors du traitement final du formulaire $idPage = "Ajout";
//Appel de la fonction du traitement des comptes d'admin TraiterProduits($IDModifProd, $Modele, $DescriptifFr, $DescriptifDe, $DescriptifIt, $DescriptifEn, $Categorie, $Nouveau, $idPage); } //if
Voilà. Le formulaire, et la récupération des variables lors du clic sur le bouton.
J'ai essayé un tas d'autres façons pour ce qui est du chemin, et quand j'en mettais un sans le "?idProd" la redirection fonctionnait mais pas le traitement puise que l'appel au traitement se fait à la page contenant l'idProd.
Ce que je ne comprend pas, c'est que lorsque je travaillais aux cours avec wamp server, se problème n'est pas apparu. Je me suis donc dit, que c'est peut être un paramètre de wamp server à changer
J'ai pas encore essayé ta méthode Otomatic. J'essaierais cet après-midi, mais je doute que ce soit la résolution de mon problème
Si tu utilises php5.3, alors il se pourrait que ce soit un bug qui fait planter Apache avec la fonction mysql_close... Vérifies que tu utilises bien un paramètre avec la fonction..
J'ai pas encore testé ton code, mais vu que tu as method="post", tout semble correctde ce côté là. Testes d'abord ce que t'as indiqué toumimi, c'est bien possible que ce soit ça (j'oublie tout le temps ce bug...).
Par contre, j'ai quelques remarques par rapport à ton code 1) prends toujours l'habitude de vérifier que l'utilisateur ne t'envoi pas n'importe quoi... en utilisant les fonctions filter_*() de PHP Exemple : if ( isset()===false ) { exit('Traiter l\'erreur correctement'); }
//TOUJOURS utiliser "===" et pas "==", //"===" permet aussi de tester que le type est le même des deux côtés (dans ce cas : 'string') //pour l'instant je n'ai jamais rencontré de cas où j'avais besoin de "==" if($idProd === "Aj" { echo 'OK'; }
Le même test, mais pour un int : if ( filter_var($_GET['id'], FILTER_VALIDATE_INT) === false ) { exit('Traiter l\'erreur correctement'); }
2) ne pas utiliser addslashes, tu vas galérer et te retrouver avec des slashes partout sur ton site (voir n°3). utiliser les fonctions filter_* ( et en particulier filter_var() ) qui t'encoderas ' en ' et " en " De plus filter_var permet de valider les adresses mail, utiliserd es regex,...
3) si tu fais un nouveau site, ne JAMAIS utiliser les fonctions mysql_* ou mysqli_*, utiliser PDO ( [fr.php.net] ) à la place. ça t'éviteras les problèmes liés à addslashes + ça t'éviteras les injections SQL (chercher sur Google si tu ne sais pas ce que c'est).
4) tu dis "lorsque je travaillais aux cours avec wamp server", tu suis des cours de programmation ? et ton prof ne t'apprend pas les bonnes pratiques ? Dis lui de ma part qu'il ne mérite certainement pas d'être prof si en 2009 il n'apprend pas à ses élèves à utiliser entre autres PDO et filter_*. et s'il n'apprend pas les bases de la sécurité à ses élèves. C'est grâce à des mecs comme ça qu'il y a pleins d'applications bugguées, mal coddées et qui sont ensuite attaquées par des pirates ou des bots. Sécuriser ton code, c'est la base de tout, sinon ça ne sert à rien de faire un site web dynamique :-/ (ou alors tu auras surement des problèmes)
merci énormément toumimi, c'était bien ça qui ne jouait pas ^^
ohlala, quel soulagement
Merci beaucoup, Olivier, je ne connaissais pas le "filter" je vais y jeter un oeil dessus.
C'est vrai que la sécurité sur un site web dynamique c'est super important. Merci beaucoup, je vais scruter tout ça, modifier la structure de mes pages