Aller au contenu

Récupération de données d'un formulaire : plusieurs méthodes ?


aspeum

Sujets conseillés

Bonjour,

Je travaille au sein d'une structure associative, et je suis notamment chargé de réaliser les sites web. Par nécessité, j'ai appris PHP sur le tas, et plus j'avance, plus j'ai l'impression que certaines de mes bases sont mauvaises pour avancer. A commencer par quelque chose de tout simple : la récupération de données d'un formulaire !

La méthode que j'utilise actuellement - et qu'on m'avait présenté comme particulièrement élégante - était de faire le formulaire et la récupération/analyse des données dans un seul fichier. En gros, le fichier commence par un "if" pour voir si le bouton a été validé, et si oui, il analyse les données, si non, il affiche le formulaire.

Mais à l'usage, je trouve ça incroyablement compliqué, d'autant plus que ce formulaire est particulièrement long. Et comme je dois aussi rajouter des tests sur les données soumises par l'utilisateur pour lui réafficher le formulaire en cas d'erreur, j'arrive à un fichier final que j'ai peur de modifier...

Que pensez-vous de cette méthode ? Est-elle pertinente ? Existe-t-il d'autres méthodes ?

Merci d'avance pour toute réponse.

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Oui c'est la méthode que j'utilise également.

En fait lorsque l'envoi du formulaire est validé, tu peux utiliser la fonction header si tu veux alléger ta page et des variables de session pour transmettre tes variables de page en page.

D'une manière générale, je te conseille de regrouper au maximum les actions (vérification des données postées, affichage des messages d'erreur, etc.) et d'utiliser des fonctions que tu pourras réutiliser plus tard pour gagner du temps.

L'important finalement, ce n'est pas tellement les méthodes quer tu choisis, c'est que tu t'y retrouves et que tu arrives à faire ce que tu veux. ^^

Lien vers le commentaire
Partager sur d’autres sites

D'un côté, tu me rassures, je n'utilise pas une méthode absurde... D'un autre, ça m'inquiète, puisque je rame un peu...

Je pense effectivement que je n'automatise pas assez certaines fonctions...

Qu'entends-tu par "utiliser la fonction header si tu veux alléger ta page et des variables de session pour transmettre tes variables de page en page" ?

Lien vers le commentaire
Partager sur d’autres sites

Merci pour ce document. A le lire, j'ai l'impression que je suis sur la bonne voie, pourtant...

Deux questions :

- Contrôler des champs via du JavaScript ou de l'AJAX (y a-t-il une différence ?), ça pourrait m'être utile... Une ressource pour débuter là-dedans ?

- Mettons que je reste en PHP pur. J'ai un premier formulaire, court, qui donne accès à un deuxième formulaire, plus long, qui dépend des données du premier formulaire (les champs sont différents). Dans les deux formulaires, j'ai des contrôles (en PHP, donc après validation) sur certains champs, qui font réafficher le questionnaire en cas d'erreur de saisie. J'ai toujours l'impression que certaines valeurs se perdent en route... Y a-t-il des astuces pratiques ? A chaque fois que je trouve des tutoriels, c'est sur des exemples très simples, mais ma configuration l'est beaucoup moins...

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Ce qui est important dans ton fichier, c'est de bien séparer les différentes zones.

Par exemple :

if (formulaire envoyé)

elseif (page 2)

else (= page 1)

Ensuite, n'hésite pas à faire des gros blocs de commentaires entre chaque partie pour bien séparer...

Quitte à faire un pavé de # :

###########################################################

###########################################################

########## Partie 2 du formulaire ######################

###########################################################

###########################################################

Après, tu te repères assez bien dans ton programme, et ce qui te paraissait long et compliqué à modifier devient finalement plus sectionné, donc plus agréable à travailler.

Ensuite, dans ton traitement en PHP, tu dois essayer aussi de bien fractionner chaque petite vérification. A chaque fois, mets un commentaire pour une relecture très rapide de ton programme.

Au final, tu as quelque chose qui sera peut-être de 25ko de texte, mais qui sera assez lisible pour le modifier aisément. ;)

Lien vers le commentaire
Partager sur d’autres sites

Pour la première question, faire un contrôle sur les données entrées est très facile mais cela dépend de ce que l'on contrôle, s'il faut faire des vérifications dans une base de données, il faudrait utiliser Ajax + PHP.

Sinon, un exemple:

HTML:

onclick="mafonction(this)"

JavaScript

function mafonction(element)

{

var x = element.monid;

if(x < 1 || x > 5) alert("la valeur doit être comprise entre 1 et 5");

}

Pour la seconde question, on peut utiliser un include, on ne perdra aucune donnée.

Lien vers le commentaire
Partager sur d’autres sites

Qu'entends-tu par "utiliser la fonction header si tu veux alléger ta page et des variables de session pour transmettre tes variables de page en page" ?

Pour la fonction Header, c'est simple, le code suivant te permet de changer de page : <?php header("location: autrepage.php"); ?>.

Tu auras plus d'infos à cette adresse : php.net/header.

(Juste une précaution pour cette fonction, il ne faut pas mettre de code html avant, pour que ça marche.)

Pour comprendre les sessions je te conseille l'article du site du zéro sur le sessions php. D'ailleurs je te conseille les cours php de ce site.

Lien vers le commentaire
Partager sur d’autres sites

_AT_sarc :

D'accord. Le sentiment que j'ai vient peut-être de l'absence de clarté de mon document, c'est vrai... Pour le moment, les deux parties de mon formulaire sont en fait deux fichiers distincts : c'est une erreur ?

Lien vers le commentaire
Partager sur d’autres sites

Ce n'est pas une "erreur", l'important est que tu et retrouves dans tes fichiers, et qu'il soit clairement possible pour toute autre personne (même si tu comptes pas céder ton site) de pouvoir relire et comprendre ton programme !

Il est aussi possible d'utiliser la fonction "include" pour ajouter les parties du formulaire qui t'intéressent, et mettre ces deux parties dans d'autres fichiers, pour alléger la taille du fichier...

Bref, tout est possible ! Par contre, j'ai déjà vu quelqu'un qui a fait un formulaire en 6 programmes, et j'ai trouvé ça un petit peu abusé. Mais bon...

Lien vers le commentaire
Partager sur d’autres sites

_AT_xunil :

D'accord, merci pour l'exemple du JavaScript.

_AT_Keyser :

Je croyais que les variables de session n'étaient utilisables qu'en cas de connexion via login + mot de passe. Et c'est ce que semble indiquer le cours du site du zéro... J'ai mal compris ?

Merci en tous cas pour les conseils, je vais essayer d'améliorer tout ça.

Ah, une autre question, pas tant technique qu'ergonomique : pour indiquer à l'utilisateur qu'un champ n'a pas été rempli, ou qu'il contient une erreur, quel est la manière la plus efficace ? Un message d'alerte JavaScript ? Une insertion de texte HTML ? Une autre manière dont j'ignore l'existence ?

Lien vers le commentaire
Partager sur d’autres sites

Un ensemble des deux ?

Si la personne n'a pas le javascript activé, il ne verrait rien si tu ne mets que du javascript... En même temps, ça peut être utile de balancer un message "Vous n'avez pas rempli le champ X" et de laisser la page, pour qu'il puisse finir. Mais de toute façon, un traitement en PHP est obligatoire après coup, pour tout vérifier... Donc si en PHP tu te rends compte que le champ est vide, tu n'hésites pas à l'écrire en HTML clairement, et de réafficher le formulaire (pré-rempli avec ses anciens choix, si possible) pour qu'il puisse corriger. ;)

Lien vers le commentaire
Partager sur d’autres sites

n'hésite pas à faire des gros blocs de commentaires entre chaque partie pour bien séparer... Quitte à faire un pavé de #

Oui je confirme, ça clarifie vraiment les choses et ça ne ralentit pas le programme.

Je croyais que les variables de session n'étaient utilisables qu'en cas de connexion via login + mot de passe. Et c'est ce que semble indiquer le cours du site du zéro... J'ai mal compris ?

Non ce n'est pas obligé, du moment que tu indiques le session_start en haut des pages, ça marche. ;)

Modifié par Keyser
Lien vers le commentaire
Partager sur d’autres sites

Ce n'est pas une "erreur", l'important est que tu et retrouves dans tes fichiers, et qu'il soit clairement possible pour toute autre personne (même si tu comptes pas céder ton site) de pouvoir relire et comprendre ton programme !

Il est aussi possible d'utiliser la fonction "include" pour ajouter les parties du formulaire qui t'intéressent, et mettre ces deux parties dans d'autres fichiers, pour alléger la taille du fichier...

Bref, tout est possible ! Par contre, j'ai déjà vu quelqu'un qui a fait un formulaire en 6 programmes, et j'ai trouvé ça un petit peu abusé. Mais bon...

_AT_sarc :

D'accord, je comprends. C'est bien ce côté "tout-est-possible" qui me pose problème :) J'ai parfois du mal à y voir clair sur la meilleure méthode à adopter... Dans mon cas, c'est pas la taille du fichier qui m'effraie, mais la "complexité" du formulaire. Le nombre de paramètres qui varient fait que j'oublie toujours un cas particulier qui finit par poser problème...

Lien vers le commentaire
Partager sur d’autres sites

Si la personne n'a pas le javascript activé, il ne verrait rien si tu ne mets que du javascript... En même temps, ça peut être utile de balancer un message "Vous n'avez pas rempli le champ X" et de laisser la page, pour qu'il puisse finir. Mais de toute façon, un traitement en PHP est obligatoire après coup, pour tout vérifier...

Le JavaScript ne sera donc qu'un "plus", si je comprends bien, pour avertir tout de suite l'utilisateur.

Donc si en PHP tu te rends compte que le champ est vide, tu n'hésites pas à l'écrire en HTML clairement, et de réafficher le formulaire (pré-rempli avec ses anciens choix, si possible) pour qu'il puisse corriger. ;)

Dans mon cas, c'est indispensable de réafficher le formulaire avec les données remplies, sinon, je doute que l'utilisateur aie le courage de tout re-remplir à nouveau ! Mais comment faire ?

Lien vers le commentaire
Partager sur d’autres sites

Quand un formulaire est mal rempli, j'affiche une liste stylée "erreur" (rouge sombre), avec les éléments à préciser.

Dans la mesure du possible, je mets les éléments à remplir en valeur (couleur rouge également).

Cette liste, tu la mets en haut du formulaire, c'est ça ?

Mais pour les éléments à remplir, comment fais-tu ? Tu attribues une nouvelle classe CSS à ces éléments ?

Lien vers le commentaire
Partager sur d’autres sites

Pour pré-remplir le formulaire, il suffit d'utiliser les attributs "value" qui servent à ça.

L'intérêt d'avoir ton traitement PHP du formulaire en début de ton programme, c'est que pour ton formulaire tu peux mettre ça :

echo '<input name="coucou" machintruc value="'.$_POST['coucou'].'">';

Comme ça, le formulaire est pré-rempli avec tout ce qui a été envoyé avant.

Ensuite, tu peux toujours jouer sur la valeur... Par exemple, si une valeur est fausse, moi je la supprime (comme ça il n'a pas besoin de le faire), certains comme Captain les mettent en rouge... Après, à toi de voir comment tu veux le mettre, mais en tout cas c'est peu compliqué une fois que tes variables sont bien rangées.

Lien vers le commentaire
Partager sur d’autres sites

OK, c'est exactement comme ça que je fais. Bon, ce n'est définitivement pas un problème de "méthode" employée, alors, juste de rigueur... Merci beaucoup pour l'aide, je vais replancher dessus.

Lien vers le commentaire
Partager sur d’autres sites

echo '<input name="coucou" machintruc value="'.$_POST['coucou'].'">';

je n'affiche pas directement le contenu de la valeur du _POST, mais après un post traitement, ça évite les problèmes de faille XSS

Et ne pas oublier qu'un pré traitement en js est bien, mais le seul vrai traitement sécurisé ne peut se faire que sur le serveur, pas sur le navigateur de l'internaute

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...