2011-09-05 30 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>