使用PHP cURL提交表单,多个同名复选框

使用PHP cURL提交表单,多个同名复选框,php,curl,Php,Curl,我正在尝试使用PHP cURL提交一个外部表单。所有表单字段都可以正常工作,但我遇到的一个问题是多个同名复选框 <input type="checkbox" name="same_name" value="value_1"> <input type="checkbox" name="same_name" value="value_2"> <input type="checkbox" name="same_name" value="value_3"> 但是现在

我正在尝试使用PHP cURL提交一个外部表单。所有表单字段都可以正常工作,但我遇到的一个问题是多个同名复选框

<input type="checkbox" name="same_name" value="value_1">
<input type="checkbox" name="same_name" value="value_2">
<input type="checkbox" name="same_name" value="value_3">
但是现在,我想提交选中多个框的表单。我在StackOverflow帖子的评论中尝试了这个建议:

curl_setopt($ch, CURLOPT_POSTFIELDS, '...&same_name[]=value_1&same_name[]=value_2');
但后来我得到了一个基于根本没有复选框的响应,因此它不起作用

基本上,如何在此请求中正确提交这样的数组?谁能给我指出正确的方向?

如果是您的表单(您可以更改代码),请将复选框的名称更改为
相同的名称[]

<input type="checkbox" name="same_name[]" value="value_1">
<input type="checkbox" name="same_name[]" value="value_2">
<input type="checkbox" name="same_name[]" value="value_3">

并调用
curl_setopt($ch,CURLOPT_POSTFIELDS,…..&same_name[]=value_1&same_name[]=value_2'),没关系


如果是外部的-你不能有多项选择。

嗯,这真的很奇怪。我只是尝试用以下代码设置我自己的页面(这是一个外部页面),实际上似乎不可能选择多个值:

<form method="post">
 <input type="checkbox" name="same_name" value="1">Value 1<br />
 <input type="checkbox" name="same_name" value="2">Value 2<br />
 <input type="checkbox" name="same_name" value="3">Value 3<br />
 <input type="submit">
</form>
<?php
if(isset($_POST))
{
 print_r($_POST);
}
?>

值1
值2
值3
但经过一些调整后,我想我无论如何都可以用..&same_name=value_1&same_name=value_2


我不知道他们在服务器端是如何做到的,但它似乎是有效的

为多值字段传递数组是完全正确的。它通常是一个复选框,但它可以是任何字段,如multi-select。 CURLOPT_POSTFIELDS能够正确处理此问题,在后端,您可以将其作为一个数组获得—与来自的提交相同

<input type="checkbox" name="same_name" value="1">Value 1
<input type="checkbox" name="same_name" value="2">Value 2
<input type="checkbox" name="same_name" value="3">Value 3


$fields['name']='Smith';
$fields['email']='you@your-domain.com';
....
$fields['same_name'][]=1;
$fields['same_name'][]=2;
$fields['same_name'][]=3;

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
值1
价值2
价值3
$fields['name']='Smith';
$fields['email']='you@your-域名",;
....
$fields['same_name'][]=1;
$fields['same_name'][]=2;
$fields['same_name'][]=3;
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields);

谢谢,我无法更改它,因为它是外部的。但是,不管表单名称的末尾是否有[],表单本身似乎接受了浏览器中的多项选择。它基本上是一个表单,允许您选择在提交后生成的表中应该有哪些数据可用,如果您选择多个复选框,它们都会出现(因此100%确定它允许多选)-但只有在浏览器中尝试时,而不是在我的cURL请求中。您能显示该页面吗?可能有一些js代码可以完成这项工作。它在登录之后。让我深入研究一下开发工具,如果我看一下Chrome开发工具中的post请求,这就是发送的请求:&same\u name=value\u 1&same\u name=value\u 2。在浏览器中似乎有效的。但是cURL可能会以某种方式过滤掉它,因为它认为不可能在一个请求中两次使用同一个变量……因为您使用的是PHP。PHP需要类似于格式
param[]=value
的数组。但是还有一些其他的web服务器接受
p=1&p=2
(AFAIR即java服务器)。您可以尝试查看响应标题来了解。
<input type="checkbox" name="same_name" value="1">Value 1
<input type="checkbox" name="same_name" value="2">Value 2
<input type="checkbox" name="same_name" value="3">Value 3


$fields['name']='Smith';
$fields['email']='you@your-domain.com';
....
$fields['same_name'][]=1;
$fields['same_name'][]=2;
$fields['same_name'][]=3;

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);