2011-09-05 33 views
2

如果我使用标准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="[email protected]"> 
<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> 

谢谢

回答

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> 

EDIT 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); 
?> 

希望这会有所帮助。

+0

任何提示如何? – user718359

+0

答复已更新。请检查。 – AlphaMale

+0

谢谢你...那么savedata.php呢?我需要吗?它看起来像/包含什么? – user718359

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的即时付款通知功能中受益。这基本上会回复您选择的所有付款信息。我发现this tutorial在学习如何在PHP中做到这一点非常有帮助。

+0

要添加到此,我会使用贝宝的回拨功能。在交易失败的情况下,您是否真的想保存数据?提交数据,如果通过Paypal成功通过,那么将数据保存到您的数据库。 – luckytaxi

+1

我非常赞同@luckytaxi。您可能想要实施您询问的方法的唯一时间是您是否要保存订单信息,而不管它们是否已被取消。 – ShaneC

0

我有同样的问题,我所做的是做Ajax暂停我的submittion并调用我的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>