【问题标题】:PHP HTTP Post to REST Service not updating database [duplicate]PHP HTTP Post到REST服务不更新数据库[重复]
【发布时间】:2011-04-17 18:43:17
【问题描述】:

我在下面有这个 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);

【问题讨论】:

    标签: php curl


    【解决方案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
    );
    

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

    【讨论】:

    • 是的。这可能没有区别(数字可能被转换为布尔值,因此任何正整数都被解释为真),但可能会忽略非布尔值。
    • 感谢您的回复。我已将其更改为 true,并将进行测试。
    • 嗨 lonesomeday,你对编码是正确的,我的电子邮件地址以前显示不正确,但现在我删除了它。我已经更新了我的帖子来说明问题。我的问题是这段代码应该调用一个 Web 服务来在数据库中创建一个新用户,但是这还没有完成。但是,我没有看到 Web 服务的代码,因为它是由其他人编写的,所以我不确定问题出在哪里。这就是为什么我想把上面的代码作为一个问题来消除
    【解决方案2】:

    CURLOPT_POSTFIELDS 选项接受 POST 数据的关联数组。可能最好使用那个而不是自己构造查询字符串,这样当它爆炸时你会责怪别人。

    PHP 手册:

    要在 HTTP“POST”中发布的完整数据 手术。要发布文件,请在前面添加 带有@ 的文件名并使用完整路径。 这可以作为 urlencoded 字符串,例如 'para1=val1&para2=val2&...' 或作为 以字段名称为键的数组和 字段数据作为值。如果值是 数组,Content-Type 标头将是 设置为 multipart/form-data。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多