2010-09-27 76 views
1

我在下面有這個curl請求,它已成功地在另一篇文章中進行了故障排除。現在,我的PHP似乎在沒有任何錯誤的情況下通過此代碼工作,移至IF語句的下一部分併發送確認電子郵件。它並不像它應該從Web服務那樣更新數據庫。如果這不起作用,我將不得不通過電子郵件向Web服務的創建者發送電子郵件,但在執行此操作之前,我只想確保代碼相當牢固。有人有主意嗎?以下是代碼:PHP HTTP發佈到REST服務沒有更新數據庫

$url = 'http://127.0.0.1:85/AccountCreator.ashx'; 


$curl_post_data = array(
    'companyName' =>urlencode($companyName), 
    'mainContact' =>urlencode($mainContact), 
    'telephone1' =>urlencode($telephone1), 
    'email' => urlencode($email), 
    'contact2' => urlencode($contact2), 
    'telephone2' => urlencode($telephone2), 
    'email2' => urlencode($email2), 
    'package' => urlencode($package) 
    ); 

foreach($curl_post_data as $key=>$value) {$fields_string .=$key. '=' .$value.'&'; 
} 
rtrim($fields_string, '&'); 
//die("Test: ".$fields_string); 

$ch = curl_init(); 

curl_setopt ($ch, CURLOPT, $url); 
curl_setopt ($ch, CURLOPT_POST, count($curl_post_data)); 
curl_setopt ($ch, CURLOPT_POSTFIELDS, $fields_string); 

$result = curl_exec($ch); 

curl_close($ch); 

回答

1

首先,問題是什麼?如果您準確解釋了代碼中的錯誤是什麼,那麼解決它會更容易。其次,有一對夫婦的奇怪的事情你正在做這個代碼:

我不明白爲什麼這樣做

curl_setopt ($ch, CURLOPT_POST, count($curl_post_data)); 

CURLOPT_POST需要一個布爾值(真/假)設置。您應該將其設置爲true。其次,你不需要手動編碼CURLOPT_POSTFIELDS。創建一個數組並讓cURL在內部處理它:

$curl_post_data = array(
    'companyName' =>$companyName, 
    'mainContact' =>$mainContact, 
    'telephone1' =>$telephone), 
    'email' => $email, 
    'contact2' => $contact2, 
    'telephone2' => $telephone2, 
    'email2' => $email2, 
    'package' => $package 
); 

這些可能無法解決問題,但它們可能有所幫助。

+0

是的。這可能沒有什麼區別(很可能數字被轉換爲布爾值,所以任何正整數都被解釋爲true),但可能會忽略非布爾值。 – lonesomeday 2010-09-27 13:42:09

+0

感謝您的回覆。我已經改變它爲真,並且會測試。 – 109221793 2010-09-27 13:43:06

+0

嗨寂寞的日子,你對編碼是正確的,我的電子郵件地址之前沒有正確顯示,但現在,因爲我刪除了它。我已更新我的帖子以說明問題。我的問題是這個代碼應該調用一個web服務來在數據庫中創建一個新用戶,但是這並沒有完成。然而,我並沒有看到Web服務的代碼,因爲它是由其他人編寫的,所以我不確定問題出在哪裏。這就是爲什麼我想消除上述代碼的問題 – 109221793 2010-09-27 13:50:44

1

CURLOPT_POSTFIELDS選項接受POST數據的關聯數組。或許更好地使用這一個,而不是自己構建查詢字符串,以便在發生爆炸時讓別人負責。

PHP手冊:

完整的數據,在HTTP 「POST」 後操作。要發佈文件,請用@標記前綴 文件名並使用完整路徑。 這可以作爲一個 urlencoded的字符串等 「PARA1 = VAL1 & PARA2 = val2的& ...」 或作爲 陣列與現場名作爲如值密鑰和 場數據進行傳遞。如果值是 數組,則Content-Type標頭將設置爲 ,設置爲multipart/form-data。