繁体   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