web-dev-qa-db-ja.com

1つのフォーム、1つの送信ボタン、ただし2つのアクション

クライアントの情報を収集するフォームがあります。

  • それらをデータベースに保存します
  • いくつかのメールを送信します
  • 情報をSalesForce(SF)部門に送信します

さて、最初の2 2のタスクは簡単でしたが、3番目のタスクは私に問題を与えています。 SFの場合、特別なことは何もしていません。URLを追加するだけで、フォームから必要なすべての情報を引き出すことができます。私には、これらを行うために、フォームに1つの送信ボタンに関連付けられた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ファイルは、フォームの検証、データベースの挿入、および電子メールの問題を処理します。

動いていない。私も運が悪かったのでこれらを試しました:

誰か助けてくれませんか?ありがとうございました!

6
AlwaysANovice

フォームが送信されると、そのページは表示されなくなります。あなたは離れてナビゲートしました。

これを行うもう1つの方法は、AJAXを介して最初のアクションを送信してから、フォームを2番目の宛先に自然に送信することです。 AJAXコードのほとんどはすでに使用できるため、jQueryを使用してAJAX呼び出しを行うことをお勧めします。

もう1つのオプションは、フォームデータを受信したら、サーバーからセールスフォースサーバーにraf-submitted.phpでPOSTを実行することです。参照: PHPスクリプト内の別のページに投稿する

クライアント側でこれを行う唯一の方法は、AJAXを使用することです。
サーバー側でSF処理を実行することをお勧めします(アクセスできる場合はDB経由、サーバー側で少なくともCURL経由でデータを送信する場合はWebサービス経由)。
送信の1つがクライアント側で失敗する可能性があります(2番目の送信が失敗した場合は悪いようです-最初の要求はscondが正しく行われていないことを認識していません)。


編集:
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
RYN
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();" />
0
Daniel LAcerda

これは私がやろうとしていたこととよく似ています。あなたはすでに答えをマークしていますが、それはあなたが探していた単純な答えではないと思います。

上記のタスク3がSalesForce.PHPの場所へのPOSTで実行でき、最初の2つのタスクが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>
_

最初に_onclick=_を介してdoTheFirstTwoTasks()関数を呼び出してタスク1と2を実行し、次に通常のフォーム送信を介して3番目のタスクの_action=_の場所にフォームを送信します。

特別なことは何もありませんが、_onclick=_ and _type=submit_(with _action=_)を2つの異なるアクションに使用できることを何人の人が学んだかわかりません単一の送信ボタンを備えた単一のフォーム。

上記のコードでは、_onclick=_の前に_action=_を呼び出しているようです(または、POST送信がJavaScript関数を呼び出すよりも遅いためかもしれません... )

0

Raf-submitted.phpページを制御できる場合は、フォームのonclickアクションがあり、(ローカル検証後に)jQuery.ajaxを使用してページを呼び出し、フィールド値をクエリのパラメーターとして提供することをお勧めします。文字列(GETを使用している場合)は、送信プロセスがSalesForceにデータを渡し続けることを許可するだけです。

ただし、Salesforceアクティビティを非表示にする必要がある場合は、type = POSTを使用して同じ方法で呼び出し、完了後にフォームに渡すことができます。

0
Offbeatmammal