提交PayPal表格&同时更新数据库

时间:2011-09-05 06:19:25

标签: php mysql paypal

如果我使用标准的PayPal表单进行付款,我是否可以同时更新我的​​数据库,稍微更改代码以包含更新详细信息?

这是我想要使用的标准PayPal付款方式 - 将根据需要进行更改..

 <form action="https://www.paypal.com/cgi-bin/webscr" method="post" id="payPalForm">

 <input type="hidden" name="item_number" value="01 - General Payment to FreelanceSwitch.com">
 <input type="hidden" name="cmd" value="_xclick">
 <input type="hidden" name="no_note" value="1">
 <input type="hidden" name="business" value="your@paypalaccount.com">
 <input type="hidden" name="currency_code" value="USD">
 <input type="hidden" name="return" value="http://freelanceswitch.com/payment-complete/">

 Item Details:<br /><input name="item_name" type="text" id="item_name"  size="45">
 <br /><br />
 Amount: <br /><input name="amount" type="text" id="amount" size="45">
 <br /><br />
 <input type="submit" name="Submit" value="Submit">

 </form>

这是我页面中的更新编码:

 $editFormAction = $_SERVER['PHP_SELF'];
 if (isset($_SERVER['QUERY_STRING'])) {
   $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
 }

 if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form")) {
   $updateSQL = sprintf("UPDATE db SET payment_page_completed=%s WHERE id=%s",
                   GetSQLValueString($_POST['payment_page_completed'], "text"),
                   GetSQLValueString($_POST['id'], "int"));

   mysql_select_db($database_connAdmin, $connAdmin);
   $Result1 = mysql_query($updateSQL, $connAdmin) or die(mysql_error());

   //$updateGoTo = "confirmation"; WILL NEED TO CHANGE AS NEEDS TO GO TO PAYPAL


   if (isset($_SERVER['QUERY_STRING'])) {
     $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
     $updateGoTo .= $_SERVER['QUERY_STRING'];
   }
   header(sprintf("Location: %s", $updateGoTo));
 }

这是我目前的表格

 <form action="<?php echo $editFormAction; ?>" name="form" class="" id="form" method="POST" enctype="multipart/form-data">
 <input type="hidden" name="id" value="<?php echo $_SESSION['id']; ?>" readonly="readonly">
 <input type="hidden" name="payment_page_completed" value="yes" readonly="readonly">
 </form>

谢谢

3 个答案:

答案 0 :(得分:2)

是的,您可以通过两种方式将表单提交给双方,在一个表单上提交两个提交,一个提交到paypal,另一个提交到您可以将其保存在数据库中的页面。

编辑1:

在您的表单中添加两个提交,如下所示:

<input type="submit" name="submit" class="btns" id="submit1" value="Save in DB" onclick="changeWhere('http://yourwebsite.com/savedata.php');" >

<input type="submit" name="submit" class="btns" id="submit2" value="Move to PayPal"
onclick="changeWhere('https://www.paypal.com/cgi-bin/webscr');" disabled="true">

并在您的脚本中添加:

<script type="text/javascript">

function changeWhere(place){

    document.form.action=place;   //use your forms name inplace of form

}

</script>

编辑2:

使用单一提交进行两次表单操作

在表单中添加:

<input type="button" value="Submit" onclick="submitTwice(this.form)">

并在脚本中添加:

<script type="text/javascript">
 function submitTwice(form){
 form.action = 'https://www.paypal.com/cgi-bin/webscr';
 form.submit();
 form.action = 'savedata.php';
 form.submit();
}
</script>

它对我有用。 : - )

编辑3:

savedata.php可能包含像

这样的代码
<?php
$item_name   = $_POST['item_name'];
$item_price  = $_POST['item_price'];
$item_number = $_POST['item_number'];

$sql="Insert into sales (name, price, number) values ('$item_name', '$item_price', '$item_number')";
$result=mysql_query($sql);
?>

希望这有帮助。

答案 1 :(得分:1)

提出了一个相同的问题here并且应该为您提供所需的答案。如果您需要澄清,请发表评论。

引用该答案,它涉及向PHP提交数据,然后使用套接字请求将该数据发送到PayPal:

function post($host, $path, $data) { 
$http_response = ''; 
$content_length = strlen($data); 
$fp = fsockopen($host, 80); 
fputs($fp, "POST $path HTTP/1.1\r\n"); 
fputs($fp, "Host: $host\r\n"); 
fputs($fp, "Content-Type: application/x-www-form-urlencoded\r\n"); 
fputs($fp, "Content-Length: $content_length\r\n"); 
fputs($fp, "Connection: close\r\n\r\n"); 
fputs($fp, $data); 
while (!feof($fp)) $http_response .= fgets($fp, 28); 
fclose($fp); 
return $http_response; 
}
$postdata = '?foo=bar'; 
foreach($_POST as $key => $val) $postdata .= '&'.$key.'='.$val;

重要说明:我从我链接的主题中复制了该代码,因此请查看以获取更多信息。此外,这将提交给您的PHP。如果您希望用户实际查看PayPal页面,则需要将用户重定向到该POST请求。

此外,您似乎可以从使用PayPal的即时付款通知功能中受益。这基本上会回复您选择的URL以及所有付款信息。我发现this tutorial非常有助于学习如何在PHP中执行此操作。

答案 2 :(得分:0)

我有同样的问题,我做的是做Ajax暂停我的提交并调用我的insert.php。我的insert.php几乎是对数据库的保存。我在这里写了确切的步骤。 Save HTML form POST to database before redirecting to PayPal

<script>

 $(function () {

        $('#senrollnow').on('submit', function (e) {

      var form = $(this);

      if(!form.hasClass('pending')) {

          e.preventDefault();

          form.addClass('pending');

          $.ajax({

              type: 'post',

              url: 'insert.php',

              data: $('#senrollnow').serialize(),

              success: function () {

                form.submit();

                 alert('form was submitted'+data);

              }
          });
      }
});

  $('#freeform').on('submit', function (e) {

  //e.preventDefault(); //prevents the form to submit

          alert("Your request has been sent! Please check your email within 12 hours for my feedback. Thank you.");

        });

      });

</script>