PHP HTTP发布到REST服务不更新数据库

时间:2010-09-27 13:24:38

标签: php curl

我在下面有这个卷曲请求,已在另一篇文章中成功解决了问题。现在,我的PHP似乎通过这段代码没有任何错误,移动到IF语句的下一部分并发送确认电子邮件。它只是不会从Web服务更新数据库。如果这不起作用,我将不得不通过电子邮件发送给Web服务的创建者,但我只想确保在执行此操作之前代码是相当可靠的。有人有主意吗?这是代码:

$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);

2 个答案:

答案 0 :(得分:1)

CURLOPT_POSTFIELDS选项接受POST数据的关联数组。可能更好地使用那个而不是自己构建查询字符串,以便在爆炸时让别人负责。

PHP手册:

  

要在HTTP“POST”中发布的完整数据   操作。要发布文件,请预先添加   带@的文件名并使用完整路径。   这可以作为一个传递   urlencoded字符串就像   'para1 = val1& para2 = val2& ...'或作为   数组,字段名称为键和   字段数据作为值。如果价值是   数组,Content-Type标题将是   设置为multipart / form-data。

答案 1 :(得分:1)

首先,问题是什么?如果您确切地解释了代码中的失败,那么对它进行故障排除会更容易。其次,你在这段代码中做了几件奇怪的事情:

我不明白你为什么这么做

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

CURLOPT_POST需要布尔值(true / false)。您应该将其设置为true

其次,您不需要手动编码CURLOPT_POSTFIELDS。创建一个数组并让cURL在内部处理它:

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

这些可能无法解决问题,但可能有所帮助。