Une forme, un bouton de soumission, mais deux actions

J'ai un formulaire qui recueille les informations du client et ensuite

  • Les enregistre dans la base de données
  • Envoie quelques courriels
  • Envoie l'information au département SalesForce (SF)

Maintenant, les deux premières tâches étaient faciles, mais la troisième me donne des problèmes. Pour SF, je n'ai rien fait de spécial, je dois simplement ajouter leur URL et ils retireront toutes les informations nécessaires dont ils ont besoin. Pour moi, il semble que, pour ce faire, j'ai besoin que le formulaire comporte 2 actions associées à un bouton de soumission (ne peut avoir 2 formes ou 2 boutons).

Donc, dans mon fichier raf.php , j'ai ce formulaire et, après la soumission, je dois les rediriger vers la page raf-submitted.php qui affiche le message de réussite / erreur et les autres informations nécessaires.

La forme (a eu l'idée à partir d' ici )

  <form id="referralForm" name="referralForm" autocomplete="off" enctype="multipart/form-data" method="POST"> <input id="saveForm" name="saveForm" class="field-submit" type="button" value="Submit" style="padding-left:20px" width="100" tabindex="23" onclick="FormSubmission(); SalesForceSubmission();" /> </form> 

Le JavaScript:

  $(document).ready(function() { function SalesForceSubmission() { document.referralForm.action = "https://someAddress.salesforce.com/"; document.referralForm.submit(); return true; } function FormSubmission() { document.referralForm.action = "raf-submitted.php"; document.referralForm.submit(); return true; } }); 

Le fichier raf-submitted.php prend soin de la validation de la forme, de l'insertion de la base de données et des problèmes de messagerie.

Ça ne fonctionne pas. Je l'ai également essayé sans chance:

  • Deux actions onClick un bouton
  • Deux Form Action qui ouvre l'URL dans une nouvelle fenêtre dans le bouton One Submit?

Quelqu'un peut-il m'aider? Je vous remercie!

Une fois qu'un formulaire est soumis, vous n'êtes plus sur cette page. Vous avez navigué.

L'autre façon que vous pouvez faire est de soumettre la première action via AJAX, puis de soumettre le formulaire naturellement à la deuxième destination. Je suggère d'utiliser jQuery pour effectuer vos appels AJAX puisque la plupart du code AJAX est déjà là pour que vous puissiez utiliser.

Une autre option est d'avoir raf-submitted.php effectuer un POST depuis votre serveur vers le serveur Salesforce une fois qu'il reçoit les données du formulaire. Voir: Publier sur une autre page dans un script PHP

La seule façon de le faire dans le domaine du client est d'utiliser AJAX.
Il est préférable de faire du SF dans le côté serveur (via DB si vous avez accès ou un service Web s'ils ont un ou au moins envoyé des données via CURL côté serveur).
Il est possible que l'une des soumissions échoue dans le côté client (et cela semble être mauvais si la seconde ne réussit pas – la première requête n'a aucune idée que scond one n'est pas correctement exécuté).


MODIFIER:
Exemple de code pour l'affichage avec CURL:
En supposant que vous avez un formulaire avec un text et une entrée hidden :

 <form method='post' action='http://your.sf.site/your_sf_submit_page.php'> <input type='text' name='field1'/> <input type='hidden' name='field2'/> </form> 

Vous pouvez le soumettre en utilisant CURL comme ceci:

 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://your.sf.site/your_sf_submit_page.php"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS,"field1=value1&field2=value2"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $server_output = curl_exec ($ch); curl_close ($ch); 

Alors vous pouvez vérifier $server_output pour vous assurer que le formulaire est soumis correctement.

Si vous avez le contrôle sur la page raf-submitted.php, je suggérerais que vous avez une action onclick pour le formulaire qui (après validation locale) utilise jQuery.ajax pour appeler votre page fournissant les valeurs de champ en tant que paramètres dans la requête Chaîne (si vous utilisez GET), autorisez simplement le processus de soumission de continuer à transmettre les données à SalesForce.

Si toutefois vous devez rendre l'activité Salesforce invisible, vous pouvez les appeler de la même manière en utilisant type = POST et la remettre à votre formulaire après que cela soit terminé

 function fun_atualizar() { document.orcamento.action = "atualizar_orcamento.php"; document.orcamento.submit(); return true; } function fun_evento() { document.orcamento.action = "Evento_orc.php"; document.orcamento.submit(); return true; } <input type="button" value="Atualizar" style="padding-left:20px" width="100" tabindex="23" onclick="javascript:fun_atualizar();" /> <input type="button" value="Evento" style="padding-left:20px" width="100" tabindex="23" onclick="javascript:fun_evento();" /> 

Cela ressemble beaucoup à quelque chose que j'essayais de faire. Vous avez déjà marqué une réponse, mais je ne pense pas que ce soit la réponse simple que vous recherchiez.

En supposant que la tâche 3 ci-dessus peut être effectuée avec un POST sur un emplacement SalesForce .PHP, et les deux premières tâches pourraient être réalisées dans une fonction JavaScript, je pense que cela fonctionnera:

 <form method="post" action="SubmitToSalesForce.php"> <button type="submit" name="doThreeThings" onclick="doTheFirstTwoTasks();" > </form <script type="text/javascript"> function doTheFirstTwoTasks() { // Task 1 // Task 2 } </script> 

Il appelle d'abord la fonction doTheFirstTwoTasks() via onclick= pour effectuer les tâches 1 et 2, puis soumet le formulaire via une soumission de formulaire normal à l' action= emplacement pour la troisième tâche.

Rien de spécial, mais je ne sais pas combien de personnes ont appris que vous pouvez utiliser onclick= et type=submit (avec action= ) pour deux actions différentes en un seul formulaire avec un seul bouton de soumission.

Dans le code ci-dessus, il semble appeler onclick= avant l' action= (ou peut-être parce que la soumission POST est plus lente que l'appel d'une fonction JavaScript …)