Одна форма, одна кнопка отправки, но ДВА действия

У меня есть форма, которая собирает информацию о клиенте, а затем она

  • сохраняет их в базе данных
  • отправляет несколько писем
  • отправляет информацию в отдел продаж Salesforce (SF)

Теперь первые две две задачи были легкими, но третий вызвал у меня проблемы. Для SF я не делаю ничего особенного, просто добавьте их url, и они вытащит всю необходимую информацию из формы. Мне кажется, что для этого мне нужна форма, у которой есть 2 действия, связанные с одной кнопкой отправки (не может иметь 2 формы или 2 кнопки).

Поэтому в моем файле raf.php меня есть эта форма, и после raf.php я должен перенаправить их на страницу raf-submitted.php которая отображает сообщение об ошибке / ошибке и другую необходимую информацию.

Форма (получила отсюда идею)

  <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> 

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; } }); 

Файл raf-submitted.php учитывает проверку формы, вставку базы данных и проблемы с электронной почтой.

Это не работает. Я также пробовал их без везения:

  • Два действия onClick одна кнопка
  • Два действия формы, которые открывают URL-адрес в новом окне в одной кнопке «Отправить»?

Может кто-нибудь, пожалуйста, помогите мне? Спасибо!

Как только форма будет отправлена, вы больше не на этой странице. Ты отплыл.

Другой способ, которым вы можете это сделать, – отправить первое действие через AJAX, а затем отправить форму естественно ко второму пункту назначения. Я бы предложил использовать jQuery для совершения ваших вызовов AJAX, поскольку большая часть кода AJAX уже существует для вас.

Другой вариант заключается в том, чтобы raf-submitted.php выполнял POST с вашего сервера на сервер Salesforce после получения данных формы. См. Сообщение на другой странице в скрипте PHP.

Единственный способ сделать это на стороне клиента – использовать AJAX.
Лучше делать вещи SF на стороне сервера (через БД, если у вас есть доступ или веб-сервис, если у них есть одна или по крайней мере отправка данных через CURL на стороне сервера).
возможно, одно из отказов сбоев на стороне клиента (и, похоже, это плохо, если второй не удалось – первый запрос не имеет представления, что scond один не выполнен должным образом).


РЕДАКТИРОВАТЬ:
Пример кода для публикации с помощью CURL:
если у вас есть форма с text и 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> 

вы можете отправить его с помощью CURL следующим образом:

 $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); 

то вы можете проверить $server_output чтобы убедиться, что форма отправлена ​​правильно.

Если у вас есть контроль над страницей raf-submitted.php, я бы предположил, что у вас есть действие onclick для формы, которая (после локальной проверки) использует jQuery.ajax для вызова вашей страницы, предоставляющей значения полей в качестве параметров в запросе string (если используется GET), то просто разрешите процессу отправки продолжить передачу данных в SalesForce.

Если вам нужно сделать активность Salesforce невидимой, вы можете называть их таким же образом, используя type = POST и передайте свою форму после завершения

 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();" /> 

Это очень похоже на то, что я пытался сделать. У вас уже есть ответ, но я не думаю, что это простой ответ, который вы искали.

Предполагая задачу 3 выше, можно сделать с помощью POST для некоторого местоположения SalesForce .PHP, и первые две задачи могут быть выполнены в функции JavaScript, я думаю, что это будет работать:

 <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> 

Сначала он вызывает doTheFirstTwoTasks() через onclick= для выполнения задач 1 и 2, а затем отправляет форму через обычное представление формы в action= location для третьей задачи.

Ничего особенного, но я не знаю, сколько людей узнали, что вы можете использовать onclick= и type=submitaction= ) для двух разных действий в одной форме с помощью одной кнопки отправки.

В приведенном выше коде, кажется, он вызывает onclick= перед action= (или, возможно, это просто потому, что представление POST медленнее вызова функции JavaScript …)