PHPフォームを2つの場所に送信します
質問
フォームから2つの異なる場所に情報を送信するための最良の/最も簡単な方法は何ですか。基本的に1つのフォームに2つのアクションがあります。たとえば、アクションごとに異なる名前を付けておく必要があるフィールドがいくつかあります。
<form id="form" name="form" action='post.php' method='POST' accept-charset='UTF-8'><input type='hidden' name='xnQsjsdp' value=SlGqwqH3ITc$/> <input type='hidden' name='xmIwtLD' value=x4LHs39QfKiFkCs1PrsnsG-*B6-MHnNR/> <input type='hidden' name='actionType' value=TGVhZHM=/> <input type='hidden' name='returnURL' />
<input name='firstName' type='text' id="firstName" style="float:left; width:45%;" maxlength='40' />
<input name='lastName' type='text' id="lastName" style="float:left; width:45%;" maxlength='40' />
<input type="submit" />
</form>
post.phpはこのように見えます。
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$hidden1 = $_POST["xnQsjsdp"];
$hidden2 = $_POST["xmIwtLD"];
$hidden3 = $_POST["actionType"];
$hidden4 = $_POST["returnURL"];
$firstName = $_POST["firstName"];
$lastName = $_POST["lastName"];
$street = $_POST["Street"];
$city = $_POST["City"];
$State = $_POST["State"];
$zipCode = $_POST["Zip"];
$email = $_POST["Email"];
$phone = $_POST["Phone"];
$LEADCF7 = $_POST["LEADCF7"];
$zohoPrams = "xnQsjsdp=$hidden1&xmIwtLD=$hidden2&actionType=$hidden3&returnURL=$hidden4&First Name=$firstName&Last Name=$lastName";
$maxPrams = "FName=$firstName&LName=$lastName";
};
?>
<script>
$(function() { // setup an onReady (similar to onLoad) handler
$.post("https://crm.zoho.com/crm/WebToLeadForm", <?php echo $zohoPrams; ?>; // post to first address
$.post("http://www.max360group.com/", <?php echo $maxPrams; ?>; // post to second address
});
</script>
ご覧のとおり、私はAjaxを使用してみました。しかし、私は何か間違ったことをしていると思います。
解決
post.phpでカールを使用してサーバー側を行うことができます。
したがって、変数が設定されており、それらは検証されてクリーニングされています。
$zoho = curl_init("https://crm.zoho.com/crm/WebToLeadForm");
curl_setopt($zoho, CURLOPT_SSL_VERIFYPEER, false); //Note, not very secure. Would have to get certificate otherwise. Look up how to.
curl_setopt($zoho, CURLOPT_FOLLOWLOCATION, 1); //Makes sure that it follows any redirects
curl_setopt($zoho, CURLOPT_RETURNTRANSFER, 1); //Returns the result instead of outputting it to the browser
curl_setopt($zoho, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); //Will make the end server think it was submitted with Firefox, and not by a server using cURL.
curl_setopt($zoho, CURLOPT_POST, 1);
curl_setopt($zoho, CURLOPT_POSTFIELDS, $zohoprams);
//If you want the rest of the $_POST data and not just what you set above in $zohoprams,
//CURLOPT_POSTFIELDS takes either an array, which will automatically do the appropriate thing with it as a $key=$value, or a string like you have formatted for $zohoprams
curl_exec($zoho);
curl_close($zoho);
$max = curl_init('http://www.max360group.com/');
curl_setopt($max, CURLOPT_POST, 1);
curl_setopt($max, CURLOPT_POSTFIELDS, $maxprams);
curl_setopt($max, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($max, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($max, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_exec($max);
curl_close($max);
あなたが望むことを正確に行うために少し変更する必要があるかもしれません、そしておそらくそれがそれをしているブラウザのようにヘッダーを偽造する必要がありますが、それはそれの基本的な機能です。また、curlopt_returntransferをtrueに設定する必要がある場合があります。
他のヒント
XHRまたはAJAXリクエストの送信は、クロスドメインが許可されていません。これをカールを使用して達成できます。この辺りに浮かんでいるPHPとカールを使用してフォームを送信することに関するチュートリアルがかなりあると思います。
Google検索をサンプルして正しい方向に導く: http://www.google.com/search?q = using+curl+ to+submit+form+data+php
あなたの主な問題は、JavaScriptを使用して、やろうとしているような他のサーバー上のファイルにアクセスできないことです。機能するアプローチは、フォームをセットアップしてそれらを投稿するだけのPHPファイルをサーバー上に持っていることです(フォームを介して) submit()
JavaScriptで)リモートサーバーに。