2011-10-15 123 views
2

我試圖讓PAYPAL IPN與2個不同的網站一起工作,我無法獲得php腳本來知道要使用哪個數據庫。這是我的腳本。調用2個不同的數據庫

// read the post from PayPal system and add 'cmd' 
$req = 'cmd=_notify-validate'; 
foreach ($_POST as $key => $value) { 
$value = urlencode(stripslashes($value)); 
$req .= "&$key=$value"; 
} 
// post back to PayPal system to validate 
$header = "POST /cgi-bin/webscr HTTP/1.0\r\n"; 
$header .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n"; 

// If testing on Sandbox use: 
//$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30); 

$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30); 


// assign posted variables to local variables 
$custom = $_POST['item_name']; 

//Config file for 1st database 
if($custom=="1"){ 
require_once("../config.php"); 

//Script to execute 

} 

//Config file for 2nd database (different site) 
if($custom=="2"){ 
require_once("../config.php"); 

//Script to execute 
} 
+1

您尚未提供足夠的信息,例如,您想要決定使用哪個數據庫的值。另外,有些問題讓我感到困惑---你正在一個名爲'$ custom'的變量中使用'item_name'。這很令人困惑,因爲有一個名爲'custom'的可選後欄。再次,你正在比較'item_name'到一些數字!你是否首先在尋找'item_number'?雖然在'item_name'中沒有限制,但是將數字放在'item_number'中並且將描述性名稱放在'item_name'中更自然。我建議你仔細檢查案件 –

回答

3

你的代碼做了很多假設,並不是很防守。假設表單爲,發佈爲,它已成功填充,$_POST['item_name']將只包含字符串'1'或'2',並且腳本運行在一個路徑中,該路徑深入包含config.php的目錄的一個文件夾...並且不管條件如何,相同的config.php將被加載並且奇蹟般地知道它需要做什麼。

將使什麼更多的意義是這樣的:

try 
{ 
    if(isset($_POST['site_name'])) 
    { 
     require_once('../configs/' . $_POST['site_name'] . '/config.php'); 
     if(!isset($some_var_declared_inside_config_file)) 
     { 
      throw new Exception('Config not loaded'); 
     } 
    } 
    else 
    { 
     throw new Exception('Site name not provided'); 
    } 
} 
catch(Exception $e) 
{ 
    echo $e->getMessage(); 
} 

然後,你可以有你的configs設置像這樣:

/www/paypal.php 
/configs/sitea/config.php 
/configs/siteb/config.php 
/configs/sitec/config.php 
+0

變量讓我知道它是哪個網站,是一個自定義字段,貝寶IPN發回給我,所以我可以收集付款細節。現在根據網站設置爲1,2或3。我會嘗試一下你的建議,可能需要一秒鐘才能確定這是否可行。 –

+0

如果PayPal發送給您的網站名稱(我們可以假設它來自cURL響應?),它不會在'$ _POST'內部 – AlienWebguy

相關問題