【问题标题】:Submit form with PHP cURL, multiple checkboxes with same name使用 PHP cURL 提交表单,多个具有相同名称的复选框
【发布时间】:2018-02-26 11:20:21
【问题描述】:

我正在尝试使用 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">

在 cURL 请求中传递其中一个复选框没有问题。在我的 POST 字符串中,我只是这样做:

curl_setopt($ch, CURLOPT_POSTFIELDS, '...&same_name=value_1');

但是现在,我想提交选中多个框的表单。我在this StackOverflow 帖子上尝试了 cmets 中的建议:

curl_setopt($ch, CURLOPT_POSTFIELDS, '...&same_name[]=value_1&same_name[]=value_2');

然后我得到一个根本没有选中复选框的响应,所以它不起作用。

基本上,我怎样才能在这个请求中正确提交这样一个数组?谁能指出我正确的方向?

【问题讨论】:

    标签: php curl


    【解决方案1】:

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

    <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, '...&amp;same_name[]=value_1&amp;same_name[]=value_2');,就可以了。

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

    【讨论】:

    • 谢谢,我无法更改它,因为它是外部的。但似乎表单无论如何都接受浏览器本身的多项选择,无论名称末尾没有 [] 。它基本上是一个表单,允许您选择提交后生成的表格中应提供哪些数据,如果您选择多个复选框,它们都会出现(因此 100% 确保它允许多项选择) - 但只有在尝试浏览器,而不是我的 cURL 请求。
    • 你能显示那个页面吗?可能有一些 js 代码可以完成这项工作。
    • 它在登录后面。让我深入了解一下开发工具,如果我查看 Chrome 开发工具中的发布请求,这是发送的请求:&same_name=value_1&same_name=value_2。这似乎在浏览器中工作。但可能 cURL 以某种方式将其过滤掉,因为它认为在请求中不可能有两次相同的变量......
    【解决方案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);
    }
    ?>
    

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

    我不知道他们是如何在服务器端做到这一点的,但它似乎可以工作!

    【讨论】:

    • 这是因为你是用 PHP 做的。 PHP 需要类似数组的格式param[]=value。但是还有一些其他的 Web 服务器接受 p=1&amp;p=2(AFAIR 即 java 的)。您可以尝试查看响应标头以找出答案。
    【解决方案3】:

    为多值字段传递一个数组是完全可以的。它通常是一个复选框,但它可以是任何字段,例如多选。 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      相关资源
      最近更新 更多