Previous Next
Insertion d'un webbug "phpOpenTracker" Organisation des fichiers PHP

Choix du "action" dans les forms

Il existe plusieurs façon de recevoir l'information d'un form mais le problème principal apparaît surtout lorsqu'il faut retourner de l'information (messages d'erreur, confirmation, etc) et surtout re-remplir le formulaire avec les valeurs choisies. Ce document tente de documenter les pour et contres des approches connues.

Antoine Beaupré

$PHP_SELF

Méthode longtemps utilisé, elle semble poser des problèmes sur certaines versions de IExplorer. Le problème s'affiche soit en ne montrant pas les messages d'erreurs supplémentaires parce qu'il reloaderait la page de sa cache (puisque c'est la même), soit en n'envoyant carrément pas l'information contenue dans le form.

Mis à part ce bug non confirmé, la méthode PHP_SELF est très pratique car des browsers comme Mozilla vont automatiquement remplir le formulaire avec les données soumises puisque c'est la même page. Ceci facilite énormément la tâche à l'utilisateur puisque celui-ci n'a pas à re-remplir tout le formulaire.

Il semble que cette méthode soit la moins fiable et la plus difficile à débugger, mais celle montrant la plus grande transparance lorsqu'elle fonctionne.

Notons aussi qu'elle peut générer des problèmes avec les include_paths lorsque le script de backend est inclus avec un require(), comme suggéré plus bas.

script "bin" et "back button"

Dans cette méthode, la tâche est confiée à un script isolé du formulaire. Le script imprime les messages d'erreurs ou de confirmation dans une page simple et demande à l'usager d'utiliser le bouton "back" de son browser pour faire les corrections nécessaires (si applicable). La page peut aussi afficher un lien "back" contenant le javascript "back()" qui devrait normalement accomplir le même effet.

Mozilla semble à nouveau bien se comporter dans cet environnement. La page précédente reloade sans problèmes avec toutes les données nécessaires. Explorer fonctionne souvent moins bien. Parfois, il efface carrément toutes les données de l'ancien formulaire lorsque l'on fait "back".

Donc cette méthode fonctionne bien, mais pas toujours. Elle est très utile lors du développement car elle est très simple à implanter et peut être transformée en méthode PHP_SELF lorsque le script "bin" est intégré à la page du formulaire avec un require().

script "bin" et redirect

Similaire à la méthode précédente, celle-ci est un peu plus complexe à utiliser. Le script bin est encore une fois isolé du formulaire, mais cette fois il retoure l'information directement au formulaire en envoyant un header "Location", passant les messages d'erreur ou de confirmation en GET.

Par contre, nous faisons encore face au problème du remplissage du formulaire. Ici, la page du formulaire risque d'être rechargée non pas de la cache (avec tous les champs remplis correctement), mais du serveur puisque le URL est différent, les messages étant passés par le URL. Une solution possible est de passer toutes les valeurs des champs en paramètre par le GET. Mais ceci devient très laborieux à implanter et donne des URLs affreux dès que l'on dépasse un certain nombre de champs.

Il y a aussi le problème de trouver où rediriger l'usager. HTTP_REFERER? Ce ne sont pas tous les browsers qui l'envoient. Une valeur fixe? On a des problèmes lorsque l'on a plusieurs formulaires pointant vers le même script.

Conclusion

J'aimerais pouvoir tester et débugger complètement la méthode PHP_SELF car c'est elle qui apporte les meilleurs résultats et permet un plus grande flexibilité, le script de backend s'évaluant dans le même script que le formulaire.

Previous Next
Insertion d'un webbug "phpOpenTracker" Organisation des fichiers PHP

Documentation generated on Tue, 11 Jan 2005 01:38:16 -0500 by phpDocumentor 1.3.0RC3