簡體   English   中英

如何在類似於onsubmit =“return javascript function”的FORM中的提交按鈕上執行php函數?

[英]How do I execute php function on submit button in a FORM similar to onsubmit=“ return javascript function”?

我的目標:處理三個目標:(1)在處理付款之前插入臨時表。 (2)使用我的表單操作屬性轉到paypal等第三方支付處理網站。 (3)從支付登錄頁面讀取$ _POST數據以確定支付是否成功,然后從登台表中獲取數據並插入到真實表中。

我想要的實現會像:

 <form name="demo" method="post" onsubmit="<?php insertStagingData() ?>" action="3rdpartyPaymentProcessingLink"> <input name ="Submit" type"submit" value"Submit"> </form> 

我知道Web瀏覽器執行onsubmit處理程序,當處理程序完成時,瀏覽器繼續執行表單提交。 在將表單轉發到Web服務器進行php處理之前,我已經將此概念用於java腳本客戶端驗證。

當兩個處理程序都需要服務器端處理時,我不知道是否可以這樣做,一個在我的網絡服務器上,第二個在第三方網站上。

在此先感謝您的建議和幫助!

PHP是一種服務器端腳本語言。 這意味着它在發出頁面請求時執行代碼。 就像onclick瀏覽器事件一樣,不會導致web服務器運行代碼。

為了在PHP中實現這一點,您需要在目標表單頁面上啟動PHP功能。

查看Paypal API以獲得更高級的實現。

no-js解決方案的理論是這樣的:

<form name="demo" method="post" action="/scriptOnYourServer.php"> 
   <input name ="Submit" type"submit" value"Submit"> 
</form>

然后完全在scriptOnYourServer.php中你會先做你想要的任何驗證,然后執行臨時表插入,然后使用第三方支付PHP API(或寧靜的服務或肥皂服務 - 無論什么可用)來處理付款 - 你應該然后獲得成功/失敗,並顯示錯誤/提供重試或從登台轉移到真實表 - 所有這些都在您的腳本的這一個請求中。

如果您的目標是避免在PHP中編寫支付API集成代碼,那么您的基本大綱將僅適用於javascript / AJAX,如果您必須執行服務器端操作並仍然將表單操作轉到支付處理器,通常是支付供應商提供表格后解決方案將允許“返回URL”,他們可以將成功/失敗發送到您進行進一步處理的地方,我認為您在步驟3中描述了這些。

所以這更像是:

    <form name="demo" method="post" onsubmit="jsFunctionName()" action="3rdpartyPaymentProcessingLink"> 
       <input name ="Submit" type"submit" value"Submit"> 
    </form>
<script type="text/javascript">
   function jsFunctionName() {
      // js ajax code, probably easiest to use a lib like jQuery for this
      // You tell it the url on your server you will post vars to / generate a success/fail response, probably in json is best.
      // based on your servers "insert into staging table" success/fail json response you decide whether to proceed or not (allow the submit to 3rd party), because you would not want to proceed if your staging table insert failed I presume
      // so this implies you have a way to display errors in JS on this page, or you will be redirecting to a script of yours which would reload the page but display any errors - or you just completely ignore the possibility your staging data insert could fail and let the payment processor deal with it
   }
</script>

http://api.jquery.com/jQuery.ajax/

因此,有了一些移動部件 - 您的腳本 - insertStagingData.php - 它的工作是讀取發布數據,您應該進行某種驗證,然后插入到臨時數據庫中(確保您使用參數化查詢或清理數據,因為你正在將用戶數據轉儲到數據庫中),然后它生成一個json響應,如:

{"success":true}

要么

{"success":false}

並且您需要讓PHP使用JSON標頭 - 因此在此腳本的末尾您需要執行以下操作:

$response = array("success" => true); // or false depending on if your db insert was successful
header("HTTP/1.1 200 OK");
header('Content-type: application/json');
echo json_encode($response);

然后在jsFunctionName上面的腳本塊中,你將從你的json響應中讀取“success”變量並顯示錯誤並返回false或使用preventDefault()來停止提交給第三方腳本,或者如果是成功,您允許表單提交發布。

然后,您可以為支付處理器設置一個單獨的腳本,以便回發到他們的文檔將告訴您他們將向您發布哪些數據的位置,並根據他們的成功/失敗,您可以顯示錯誤或成功,然后將數據移動到真正的桌子。

您可能還希望將staging / real表視為SAME表,其中包含payment_success = 0或1之類的列,默認情況下為0,如果支付處理器回發成功,則只需將記錄更新為payment_success = 1 。 這應該是一個完全獨立的表,這是很好的理由。

這應該有助於指導您朝着正確的方向前進。 祝好運

你可以做的是將相同變量$_POST["TODO"]內的數據發布到javascript / ajax到第二頁。 在第二頁上,您解析數據,然后提交它。 可以在其中發布一個帶有兩個get變量的數組,每個變量都包含自己的表單信息數組。 希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM