Page 1 sur 2
formulaire avec 2 actions
Posté : 04 mai 2005, 15:39
par Darkbibou
Je voudrais savoir comment faire pour creer un formulaire double action cad dire qui envoit ses données à deux script php différents selon le bouton que l'utilisateur clic.
(attention ces fichiers seront sur serveur donc pas de javascript svp)
Merci d'avance pour vos idées :D
Posté : 04 mai 2005, 15:43
par BFH
J'aurais besion de plus de précision stp pour te répondre correctement.
Est ce que tu veux un bouton qui t'envoie vers la page suivante et un autre qui renvoie à la page d'avant ou autre chose, dis moi!
Posté : 04 mai 2005, 15:44
par Cyrano
Peux-tu confirmer l'interprétation que je fais de ta demande : tu as un formulaire et en fonction du bouton cliqué, que la destination soit traitement _1.php OU traitement_2.php : Donc deux boutons submit, c'est bien ça ?
Posté : 04 mai 2005, 15:48
par Darkbibou
Je voudrait que quand je clic sur le bouton submit "afficher structure" le formulaire envoi ses variables au script "structure.php" et que si je clic sur le bouton submit "afficher données" le formulaire envoi ses variables au script "donnees.php".
Je sait pas si je suis clair :?
Posté : 04 mai 2005, 16:03
par Cyrano
C'est bien ce que je pensais : deux boutons submit.
Personnellement, je traite un formulaire sur une seule et même page. J'utilise un gestionnaire d'évènement dans les boutons submit.
J'ajoute d'abord un champ caché avec une valeur="". Dans les boutons submit, j'ajoute l'évènement onclick qui modifie la valeur du champ caché: au rechargement de la page, je teste cette valeur et en fonction du résultat obtenu, j'utilise le premier ou le second traitement.
Comme tes pages de traitement sont déjà prêtes en externe, le problème est de passer les variables du formulaire. Un header(location:etc...) te ferait perdre ces valeurs. Il te reste la session. Tu initialise des variables de session avec les valeurs reçues du formulaire et là, tu utilises un header vers la page de traitement appropriés. Dans cette dernière, au lieu de récupérer les variables dans $_POST, tu les récupères dans $_SESSION.
Condition: ton formulaire et les pages de traitement doivent impérativement avoir comme toute première ligne de code ceci :
<?php
session_start();
// reste du code de chaque page...
?>
Posté : 06 mai 2005, 08:43
par Darkbibou
Je pige pas trop l'histoire du rechargement de la page, tu veux pas expliquer avec un peu plus de detail stp ? :roll:
Posté : 06 mai 2005, 09:14
par Cyrano
En cliquant sur un des boutons submit, il va y avoir redirection vers l'url inscrite dans l'attribut action de ta balise form. Si le formulaire pointe sur la page elle même, en cliquant, ça va recharger la page, mais à ce moment là, les variables envoyées par le formulaire pourront être interceptées en début de page par le code PHP et traitées selon ce qu'elles contiennent
Posté : 06 mai 2005, 09:35
par Darkbibou
- Donc en debut de formulaire je met un:
<input type="hidden" name="modif_action_form" value="">
- En fin de formulaire je met mes submit
<INPUT type="submit" value="Afficher la structure" onClick="">
<INPUT type="submit" value="Afficher les données" onClick="">
J'ecrit quoi dans le onclick ?
je sai pas comment modifié la valeur du hidden :roll:
Et a quoi ca va me servir de relancer la page, ca va pas me lancer les script que je veux, je pige pas, t'aurai pas un exemple de code ?
Posté : 06 mai 2005, 09:41
par Cyrano
Ok, voici un exemple, j'ai fait ça sur la page bon de commande d'un site. J'ai trois bouton dont un reset qu'on oublie tout de suite, mais deux submit différents: l'un permet de mettre à jour le panier si on a modifié une quantité dns le formulaire, l'autre confirmae la commande. Ça donne ceci:
<input type="hidden" name="traitement" id="traitement" value="" />
<input class="action" type="submit" onclick="document.forms['commande'].elements['traitement'].value='caisse'" name="commander" id="commander" title="Cliquez pour confirmer votre commande" value="Confirmer la commande" /><input class="action" type="submit" onclick="document.forms['commande'].elements['traitement'].value='recalculer'" name="recalcul" id="recalcul" title="Cliquez pour mettre à jour le bon de commande" value="Mettre à jour le panier" /><input class="action" type="reset" name="refaire" id="refaire" title="Cliquez pour annuler les dernières modifications" value="Annuler les modifications" />
Comme je recharge la page elle même, je teste la valeur du champ caché dont la valeur a été inscrite lorsque j'ai cliqué sur un des boutons. Là, j'ai soit la valeur "commander" et je confirme la commande, traitement du formualire, validation enregistrement et tout le bazar, soit "recalcul" et je fais recalculer le total, frais de port, TVA etc et je ré-affiche le bon de commande.
Posté : 06 mai 2005, 09:54
par Darkbibou
Bon , admettons que ca me relance la page,que je fasse un if pour l'url de l'action du formulaire,...
ca oblige l'utilisateur a rechoisir ce qu'il veut et a recliquer sur un des submit mais je veux pas qu'il est a refaire quoi que ce soit moi

Posté : 06 mai 2005, 09:59
par Cyrano
Non, relis la réponse que j'ai
faite plus haut
Posté : 06 mai 2005, 10:09
par Darkbibou
Jvoi pas comment tester la valeur du hidden ou plutot jvoi pas comment dans ce test je vai lancer un autre script

Posté : 06 mai 2005, 10:16
par Cyrano
Schématiquement, ta page va avoir ceci:
-1- Du PHP pour tester si un des boutons a été cliqué et dans ce cas traitement des variables pour les mettre dans des variables de session et redirection sur la bonne page
-2- En-tête html et formulaire
Tout ça sur ta page formulaire, comprends-tu le principe ? à la première arrivée sur la page, le PHP vas vérifier si un bouton submit a été cliqué: comme ce n'est pas le cas, le formulaire va s'afficher. Quand l'internaute va avoir rempli le formulaire, il va cliquer sur un des boutons, ça va recharger la page. La page en se rechargeant recommence le même processus. Là, le PHP détecte qu'un bouton a été cliqué: ton programme va déterminer lequel en testant la valeur du champ caché, mettre les valeurs du formulaire dans une variable de session et rediriger vers la bonne page de traitement sans ré-afficher le formulaire puisqu'on quitte la page.
Posté : 06 mai 2005, 10:31
par iclo
Excellent résumé de la méthode Cyrano
On peut remplacer le champ caché en nommant le submit
Posté : 06 mai 2005, 10:41
par Cyrano
On peut remplacer le champ caché en nommant le submit
Oui, mais en utilisant le champ caché, je ne teste qu'une seule valeur au lieu de tester les deux boutons. Cette méthode me permet d'ajouter éventuellement autant de boutons que je veux sans changer une ligne du test
