如果我使用标准的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>
谢谢
答案 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>