Vos avis: Comment passer des données au callback à la fin d'un form_submit ?

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Je voulais savoir si vous aviez un avis sur la meilleure manière de passer des données à la fin d'un form_submit(). J'utilise l'API form de Drupal 5.1.

Mon but est tout simple : faire un formulaire qui effectue des calculs et affiche une page avec les resultats.

J'en suis à la partie où j'effectue bien les calculs dans form_submit() mais celui-ci se termine sur une redirection et c'est la que le bat blesse : comment transmettre mes résultats ?

J'ai pensé à deux solutions :

1 - passer les données dans l'URL, cad si l'URL de callback est défini a "formulaire/resultats", je retourne "formulaire/resultats/$a/$b/$c" avec $a, $b, $c comme données.
C'est un peu moche vu que ca fait apparaitre les données dans l'URL.

2 - stocker les données dans la superglobale $_SESSION : $_SESSION['results'] = array($a, $b, $c).
C'est mieux, mais si l'utilisateur a desactivé les cookies, game over (je n'ai que des utilisateurs anonymes).

L'idéal serait un compromis, comme la solution 1 mais en passant les données de manière cachée.

Est-ce qu'il n'est pas possible de dire à Drupal : "je ne veux pas de redirection, affiche moi ce contenu là dans le form_submit()" ? Ca m'éviterait tout ce bazar...

Bref, comment resolvez-vous en pratique ce problème tout bête de générer une page de résultat après un formulaire ?

Merci à tous :)
Pierre

Forum : 
Version de Drupal : 

Bon pour repondre a ta question, j'ai pas d'idee, par contre je me souviens que dans Drupal 4.7 (ou ptet avant), lorsque tu finissais de t'enregistrer, l'ecran t'affichait ton mot de passe temporaire, donc il doit y avoir un moyen nan ?

Hello,

C'est marrant, cette question correspond exactement à un exercice que l'on fait dans la formation Drupal.

Si tu veux simplement afficher le résultat à l'utilisateur, sans mise en forme particulière, le plus simple est d'utiliser la fonction drupal_set_message(). Cette fonction "résiste" aux redirections, dans le sens où elle garde en mémoire (dans la session, en réalité) les textes qui lui sont passés jusqu'à ce qu'elle ait l'occasion de les afficher.

Sinon, tu as raison : il n'y a pas d'autre solution que de passer les valeurs dans l'URL ou la session. C'est ce que fait par exemple le moteur de recherche de Drupal (après avoir lancé une recherche, les termes de la recherche continuent à apparaître dans le champ de recherche, alors qu'il y a bien eu une redirection).

Merci à tous pour vos réponses :)

Je pense que si on désactive la redirection, on revient en effet sur la page du formulaire (je n'ai pas testé).

Il n'y a pas de moyen de générer du contenu sans rediriger sur un autre callback de menu. Donc, $_SESSION reste indispensable...

Pour information drupal_set_message() utilise cette technique.

Apparement, si un utilisateur désactive les cookies et bien tant pis.
D'un autre côté, quelqu'un d'assez geek pour aller les désactiver sera assez geek pour les réactiver... :)
Peut-être que je pourrais afficher un message si les cookies sont désactivés, il faut que je recherche comment faire.

Merci encore.