一个表单,一个提交按钮,但两个动作

时间:2013-01-30 21:41:19

标签: php javascript html forms action

我有一个收集客户信息的表单,然后

  • 将它们保存在数据库中
  • 发送几封电子邮件
  • 将信息发送给SalesForce(SF)部门

现在,前两个任务很简单,但第三个任务给我带来了麻烦。对于SF我没有做任何特别的事情,只需要添加他们的网址,他们将从表单中提取他们需要的所有必要信息。对我来说,似乎为了做这些我需要表单有2个动作与一个提交按钮相关(不能有2个表格或2个按钮)。

所以在我的raf.php文件中我有这个表单,提交后我必须将它们重定向到显示成功/错误消息和其他必要信息的raf-submitted.php页面。

表单(从here获得了想法)

 <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 个答案:

答案 0 :(得分:2)

提交表单后,您将不再访问该页面。你已经离开了。

另一种方法是通过AJAX提交第一个动作,然后将表单自然地提交到第二个目的地。我建议使用jQuery来进行AJAX调用,因为大多数AJAX代码已经可供你使用了。

另一种选择是,一旦收到表单数据,raf-submitted.php就会从服务器向salesforce服务器执行POST。请参阅:Post to another page within a PHP script

答案 1 :(得分:2)

在客户端执行此操作的唯一方法是使用AJAX 最好在服务器端执行SF工作(如果你有访问权限或通过数据库服务,如果他们有一个或至少通过服务器端的CURL发送数据,则通过数据库)。
在客户端可能有一个提交失败(如果第二个失败,它似乎很糟糕 - 第一个请求不知道第二个请求没有正确完成)。


修改
使用CURL发布的示例代码:
假设您的表单中包含texthidden输入:

<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以确保正确提交表单。

答案 2 :(得分:0)

如果您可以控制raf-submitted.php页面,我建议您对表单执行onclick操作(在本地验证之后)使用jQuery.ajax调用您的页面,将字段值作为参数在查询字符串中(如果使用GET),只需允许提交过程继续将数据传递给SalesForce。

但是,如果您需要使Salesforce活动不可见,那么您可以使用type = POST以相同的方式调用它们,并在完成后将其移交给您的表单

答案 3 :(得分:0)

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

答案 4 :(得分:0)

这看起来很像我试图做的事情。你已经有了标记的答案,但我不认为这是你正在寻找的简单答案。

假设上面的任务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=位置以进行第三项任务。< / p>

没什么特别的,但我不知道有多少人了解到你可以使用onclick= type=submitaction=)使用单个提交按钮在单个表单中执行两个不同的操作。

在上面的代码中,似乎在onclick=之前调用了action=(或者只是因为POST提交比调用JavaScript函数慢...)< / p>