Page 1 sur 2
Traitement formulaires
Posté : 03 oct. 2008, 21:00
par netsupra
Bonsoir,
je me pose une grande question depuis que je code en php (ca commence à faire un bout de temps) mais les sources sur ce sujet sont contradictoires.
Vaut-il mieux effectuer le traitement du formulaire dans la page qui contient celui-ci ou dans une page séparée ?
Argumentez, s'il vous plait votre réponse afin que je puisse comprendre ce choix.
Merci,
Netsupra
Posté : 03 oct. 2008, 22:01
par sadeq
Mon choix est fait : séparer php du HTML pour favoriser l'usage de template HTML et pouvoir séparer le design de la programmation.
Cette méthode permet au programmeur de ne pas trop utiliser des "echo" de code HTML qui normalement pollue le script PHP. Elle permet aussi d'acquérir une approche orientée framework.
Posté : 03 oct. 2008, 23:03
par Cyrano
Personnellement, j'utilise la même page tout simplement parce que techniquement c'est plus simple à gérer. Si en effet la validation échoue, je n'ai pas à gérer un retour vers une page du formulaire différente.
Ceci étant, je gère la validation de deux manières. La première en PHP obligatoire pour filtrer correctement les données. La seconde coté client en JavaScript : j'obtiens alors coté serveur des données déjà valides et la validation PHP est plus rapidement faite. Si le JavaScript est désactivé, la validation PHP est là en sécurité.
Ça ne m'empêche nullement de séparer le PHP du HTML. Le code HTML du formulaire sera externe et je ferai l'inclusion selon le besoin : le formulaire tout seul, des messages d'erreur + le formulaire, ou bien le message approprié voire une redirection ailleurs si tout s'est correctement déroulé.

Posté : 03 oct. 2008, 23:32
par sadeq
Tout à fait, Cyrano. Je fais aussi comme ça. Un formulaire dans une page HTML à part, sans clause "action" qui fait donc un submit réflexif et qui est inclus par un include() dans la page principale du script PHP de traitement. Avec ça on garde la séparation entre php/HTML.
Posté : 04 oct. 2008, 01:25
par Victor BRITO
Un formulaire dans une page HTML à part, sans clause "action"
Attention ! l'absence d'attribut action dans l'élément form invalide le code (X)HTML, cet attribut étant obligatoire.
Posté : 04 oct. 2008, 01:49
par sadeq
Ok, pour respecter le standard, on peut mettre dans la clause "action" le nom de la page PHP qui fait l'include() ça fera le même effet.
Posté : 05 oct. 2008, 15:12
par Hywan
Hey

,
Ou sinon, pour ne pas s'em****er avec le nom de la page, on peut écrire :
L'ancre signifie : la même page. Ça peut poser des soucis si on a des règles de réécriture d'URL mal construites, mais ça ne met jamais arrivé.
Sinon, j'utilise les formulaires dans un contexte MVC, donc j'ai une classe qui représente un formulaire et qui est stockée dans les modèles. Je traite le formulaire dans la couche contrôleur, et je l'affiche dans la vue. Tout simple, on ne se prend pas la tête, c'est un objet, on le trimbale comme on veut

.
Posté : 05 oct. 2008, 23:25
par netsupra
Hey

,
Ou sinon, pour ne pas s'em****er avec le nom de la page, on peut écrire :
L'ancre signifie : la même page. Ça peut poser des soucis si on a des règles de réécriture d'URL mal construites, mais ça ne met jamais arrivé.
Sinon, j'utilise les formulaires dans un contexte MVC, donc j'ai une classe qui représente un formulaire et qui est stockée dans les modèles. Je traite le formulaire dans la couche contrôleur, et je l'affiche dans la vue. Tout simple, on ne se prend pas la tête, c'est un objet, on le trimbale comme on veut

.
Mieux encore, vous pouvez ne rien mettre du tout dans la clause action, comme ca, pas de probleme avec l'url rewriting.
Sinon, a la vue de vos reponses, je vais dorenavant, pour chaque formulaire, creer 2 pages : une contenant le formulaire en html pur, l'autre contenant le bloc de traitement duf ormulaire.
Ces deux pages seront incluses dans la page principale.
Merci,
Netsupra
Posté : 05 oct. 2008, 23:45
par Hywan
L'interprétation d'une action vide dépend du navigateur, alors que l'interprétation de l'ancre reste logique face à sa signification de base. Un dièse symbolise une ancre, et si l'ancre est vide (c'est à dire si elle n'est pas suivit d'un identifiant), alors elle désigne l'élément dont elle fait partie. Ceci ne dépend pas de l'interprétation du navigateur mais est standardisé. C'est donc plus cohérent. On aura moins de surprise. À préférer donc

.
Posté : 05 oct. 2008, 23:51
par jojolapine
Sinon y a aussi le "?" vous le faite jamais? c'est vrai qu'après ça met les GET en branle pour pas grand chose mais bon...
Posté : 06 oct. 2008, 07:21
par Cyrano
Pour un formulaire qui doit pointer sur la page elle-même, ça coûte pas cher de faire :
<form method="post" action="<?php echo($_SERVER['REQUEST_URI']); ?>" id="monFormulaire">
C'est portable quelle que soit l'url, paramètres compris.
Posté : 06 oct. 2008, 07:40
par sadeq
ou alors :
<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" id="monFormulaire">
Posté : 06 oct. 2008, 07:42
par Cyrano
ou alors :
<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" id="monFormulaire">
Oui, à condition de n'avoir pas de paramètres à passer dans l'url, ça marche aussi.
Posté : 06 oct. 2008, 15:54
par Hywan
Je considère ma méthode un brin plus efficace car elle ne dépend pas de PHP, fonctionne avec toutes les URL, et on a un seul caractère à écrire. J'ai simplement prévenu que pour des réécritures d'URL très très compliquées et mal faites, on est susceptible d'avoir des problèmes. Je l'utilise partout et je n'ai jamais rencontré de soucis

.
Posté : 06 oct. 2008, 18:07
par savageman
Moi j'ai un autre argument valable.
Les codes de Cyrano et sadeq présentent une jolie faille XSS !
