Php 如何通过cURL发布数组字段数据?
我需要以以下形式提交帖子数据:Php 如何通过cURL发布数组字段数据?,php,arrays,post,curl,Php,Arrays,Post,Curl,我需要以以下形式提交帖子数据: first_name=Joe&last_name=Jones&fruit[]=Apple&fruit[]=Orange&fruit[]=Banana 然而,使用下面的代码,我得到的数据发布为: first_name=Joe&last_name=Jones&fruit[]=Array 如何更改cURL脚本以提交数据,如上面第一个示例所示 以下是当前代码: <?php // Setup empty fields
first_name=Joe&last_name=Jones&fruit[]=Apple&fruit[]=Orange&fruit[]=Banana
然而,使用下面的代码,我得到的数据发布为:
first_name=Joe&last_name=Jones&fruit[]=Array
如何更改cURL脚本以提交数据,如上面第一个示例所示
以下是当前代码:
<?php
// Setup empty fields
$first_name = $last_name = $fruit = "";
// Session
session_start();
session_register('first_name');
session_register('last_name');
session_register('fruit');
$_SESSION['first_name'] = $first_name;
$_SESSION['last_name'] = $last_name;
$_SESSION['fruit'] = $fruit;
// Redirect valid form to process
if($valid)
//set POST variables
{ $url = 'http://example.com/submit.php';
$fields = array( //your parameters here
'first_name' => $first_name,
'last_name' => $last_name,
'fruit[]' => $fruit
);
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($fields));
//execute post
$result = curl_exec($ch);
if(curl_errno($ch)) {
print 'CURL Error: '.curl_error($ch);
}
echo http_build_query($fields);
//close connection
curl_close($ch);
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
</head>
<body>
<div>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" name="submit_data" method="POST" id="submit_data">
<p><label for="first_name">First Name</label><input type="text" id="first_name" size="20" maxlength="120" name="first_name" /></p>
<p><label for="last_name">Surname</label><input type="text" id="last_name" size="20" maxlength="120" name="last_name" /></p>
<p><label for="fruit">Pick some fruit</label>
<select id="fruit" name="fruit" multiple="multiple">
<option value="Apple">Apple</option>
<option value="Orange">Orange</option>
<option value="Pear">Pear</option>
<option value="Banana">Banana</option>
</select></p>
<input type="submit" value="Submit" />
</form>
</div>
</body>
</html>
So 2问题:
1) 未提交水果数组
2) 方括号格式需要保留,但已替换为%5B%5D
我需要的格式是:
first_name=Joe&last_name=Jones&fruit[]=Apple&fruit[]=Orange
你知道我做错了什么吗?谢谢使用:
您正在
foreach
循环内的数组上进行串联
您的阵列:
'fruit' => array($fruit)
当执行下面这样的连接时,您将在$value
中以纯文本形式获得数组
:
$fields_string .= $key.'='.$value.'&';
因此,最终您将发布:first\u name=Joe&last\u name=Jones&fruit=Array
我的建议是使用http\u build\u query()
并删除手动生成的post数据
curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($fields));
不要手动生成查询字符串。改为使用。这是否会替换“//url”并为“发布”行提供数据?我正在尝试在正确的位置添加http\u build\u查询,但失败。谢谢。是的,它将返回字符串,可以直接传递到
curl\u setopt
,请参阅我的更新帖子。谢谢。这会发布,但打印数据会显示first_name=Joe&last_name=Jones&fruit=Thank Sabuj。我如何添加生成的查询的打印,以便检查它现在的格式是否正确?感谢echo http\u build\u查询($fields)代码>可以帮你。如果您想从服务器端获取打印(如果您正在发布到服务器),则执行print\r($\u POST)代码>你好,萨布吉。我试着添加了回音,显示了代码,谢谢。然而,我仍然对提交的数据有疑问。我已经更新了我的原始问题,以显示使用http_build_查询的新代码。你能告诉我哪里出了问题吗?感谢you@MCG也许你的水果是空的。试试这个$fruit=array('mango','banana')代码>谢谢@Sabuj。如何从人们选择一个或多个水果的多选字段填充卷曲数组?我在上面原始问题中的代码没有实现这一点。非常感谢。
'fruit' => array($fruit)
$fields_string .= $key.'='.$value.'&';
curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($fields));