Traitement formulaires

Eléphant du PHP | 187 Messages

03 oct. 2008, 21:00

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

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

03 oct. 2008, 22:01

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.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 19672 Messages

03 oct. 2008, 23:03

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é.
:-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

03 oct. 2008, 23:32

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.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 2937 Messages

04 oct. 2008, 01:25

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.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

04 oct. 2008, 01:49

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.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

ViPHP
ViPHP | 4674 Messages

05 oct. 2008, 15:12

Hey :),

Ou sinon, pour ne pas s'em****er avec le nom de la page, on peut écrire :

Code : Tout sélectionner

<form action="#">
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 :).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 187 Messages

05 oct. 2008, 23:25

Hey :),

Ou sinon, pour ne pas s'em****er avec le nom de la page, on peut écrire :

Code : Tout sélectionner

<form action="#">
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

ViPHP
ViPHP | 4674 Messages

05 oct. 2008, 23:45

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 :).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
ViPHP | 3607 Messages

05 oct. 2008, 23:51

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

Mammouth du PHP | 19672 Messages

06 oct. 2008, 07:21

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

06 oct. 2008, 07:40

ou alors :
<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" id="monFormulaire"> 
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 19672 Messages

06 oct. 2008, 07:42

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 4674 Messages

06 oct. 2008, 15:54

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 :).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 185 Messages

06 oct. 2008, 18:07

Moi j'ai un autre argument valable.
Les codes de Cyrano et sadeq présentent une jolie faille XSS ! :D