我一直试图在php中使用post和curl传递数据,这是接收数据的代码
<?php
# required headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
# include database and object files
require_once "vendor/autoload.php";
use \Database\Db as Db;
use \Objects\Leads as Leads;
# get database connection
$database = new Db();
$database->Connect(
getenv('DB_CONNECTION'),
getenv('DB_DATABASE'),
getenv('DB_USERNAME'),
getenv('DB_PASSWORD'),
getenv('DB_HOST')
);
# prepare product object
$leads = new Leads($database);
# get id of product to be edited
$fp = fopen('php://input', 'r');
$data = stream_get_contents($fp);
echo "<pre>";
print_r($rawData);
echo "</pre>";
这是发送数据的代码
$param = [
'id' => $result['id'],
'transfered' => true
];
$param = json_encode($param);
$r = self::postSubmit($this->url . 'store.php', $param);
dump($r);
和功能代码
public function postSubmit($url, $param)
{
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_POST, 1);
curl_setopt( $ch, CURLOPT_POSTFIELDS, $param);
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt( $ch, CURLOPT_HEADER, 0);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);
return curl_exec($ch);
}
但是当我尝试运行代码以查看结果时
结果只是""
并且在数据库中没有任何变化
我的代码错了吗?
答案 0 :(得分:1)
也许这不是主要原因,但肯定也是一个问题:
$param = json_encode($param);
从代码中删除该行或将其更改为
$param = http_build_query($param);
因为CURLOPT_POSTFIELDS不支持json - 它支持urlencoded字符串或普通数组。我建议只使用普通数组 - 不需要打扰类型转换。