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

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

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

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

так что в моем 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 файл позаботится проверка формы, вставка базы данных и вопросы электронной почты.

Это не работает. Я также попробовал это без успеха:

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

5 ответов


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

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

другой вариант -raf-submitted.php выполните запись с сервера на сервер salesforce после получения данных формы. Видеть: опубликовать на другой странице в PHP-скрипте


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


EDIT:
Пример кода для проводки с 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 для вызова вашей страницы, предоставляющей значения полей в качестве параметров в строке запроса (если используется GET), просто разрешите процессу отправки продолжить передачу данных в SalesForce.

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


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 выше может быть выполнена с сообщением в некотором 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>

он сначала называет