2010-09-27 67 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。