在提交时发生了两件事

Posted

技术标签:

【中文标题】在提交时发生了两件事【英文标题】:on submit two things happen 【发布时间】:2011-07-13 02:06:53 【问题描述】:

我的表单操作将隐藏输入发送到 PayPal 以进行结帐。我还需要它在发送到贝宝之前给我发一封电子邮件。

但由于我的表单操作调用了贝宝,我无法触发其他功能。我在想我可以只拥有 action=self 并在我的页面上做我需要的事情,然后将 nessesery 帖子变量发送到贝宝。我在下面试了一下:

<?
if(isset($_POST['submit']))
//get post data for me clean up and save then send

if(!mail(data, myemail, headers))
//send data to paypal. 
curl(https://www.paypal.com/cgi-bin/webscr);


else
?>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<!-- DATA FOR ME-->

<p>Child's Name: <? echo $child_name; ?></p>
    <input type="hidden" name="child_name" value="<? echo $child_name; ?>">

<p>Birth Date: <? echo $birth_date; ?></p>
    <input type="hidden" name="birth_date" value="<? echo $birth_date; ?>">

<p>Parent/Guardian Name: <? echo $name; ?></p>
    <input type="hidden" name="name" value="<? echo $name; ?>">

<p>Email Address: <? echo $email; ?></p>
    <input type="hidden" name="email" value="<? echo $email; ?>">

<p>Home Phone: <? echo $phone; ?></p>
    <input type="hidden" name="phone" value="<? echo $phone; ?>">



<!-- DATA FOR PAYPAL-->
<input type="hidden" name="business" value="you@youremail.com">
<input type="hidden" name="item_name" value="Item Name">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="amount" value="<?php echo $total; ?>">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="XXXXXXXXXX">
<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_paynowCC_LG.gif" border="0" name="submit" >
</form>

一旦我页面上的 mail() 函数成功,我应该使用 curl 将数据重新发送到 PayPal 吗?不确定这将如何运作?

【问题讨论】:

您可以在提交按钮上使用 onClick() 来代替该操作,该按钮调用方法来发送电子邮件,然后调用 form.submit; 【参考方案1】:

为什么不只使用 javascript? onsubmit 例程可以 POST 到向您发送电子邮件的 CGI 脚本,然后返回一个真值,以便正常提交到 PayPal。


想一想,您需要使用 AJAX 方法,以便您的浏览器保持在同一页面上。

【讨论】:

是的,但是除了使用 ajax 请求而不是帖子的 onsubmit 之外,这是要走的路。 :)【参考方案2】:
Introducing IPN html Variables for Website Payments Standard
<input type='hidden' name='notify_url' value='http://yoursite.com/post.php?action=ipn' />
<input type='hidden' name='cancel_return' value='http://yoursite.com/post.php?action=cancel' />
<input type='hidden' name='return' value='http://yoursite.com/post.php?action=return' />

最好使用类似的类

http://www.micahcarrick.com/php-paypal-ipn-integration-class.html

【讨论】:

【参考方案3】:

可能是这样的

<?
$url = "";

if(isset($_POST['submit']))
//get post data for me clean up and save then send

    if(!mail(data, myemail, headers))
        $url = "https://www.paypal.com/cgi-bin/webscr";
    

else
?>
<form action="<? echo $url; ?>" method="post">

<!-- Same form as in the original post -->

</form>

<?
if ($url != "") 
?>
<script language="javascript">
document.forms[0].submit();
</script>
<?

?>

【讨论】:

谢谢我使用了上面的方法,它符合我的目的。数据没有到达 Paypal,但这与我认为的输入名称有关。谢谢。

以上是关于在提交时发生了两件事的主要内容,如果未能解决你的问题,请参考以下文章

那个快被遗忘的 React Native,悄摸着搞了两件事

new/delete和new[]/delete[]的底层调用和简单实现

2018年上半年年度总结

PHP表单提交刷新

如何在jquery中同时为两件事制作动画

我需要通过一个链接完成两件事