【问题标题】:How to handle checkbox values in a query string?如何处理查询字符串中的复选框值?
【发布时间】:2017-10-18 14:08:53
【问题描述】:

我有一个查询字符串,其中包含一堆表单字段值。其中一个字段是复选框,它会创建重复的参数,例如:

?employee_selection_needs=cat&employee_selection_needs=dog&employee_selection_needs=猪

我需要将所有这些复选框值放入一个变量中以提交给 HubSpot API。我怎样才能做到这一点?我已经尝试使用 foreach 循环,但这似乎不起作用。

$firstname = $_POST["firstname"];
$lastname = $_POST["lastname"];
$email = $_POST["email"];
$organization_name = $_POST["organization_name"];
$phone = $_POST["phone"];
$best_describes_org = $_POST["best_describes_org"];
$organizations_safety = $_POST["organizations_safety"];
$confident_interview_process = $_POST["confident_interview_process"];
$needs_around_leadership = $_POST["needs_around_leadership"];
$used_employee_assessments = $_POST["used_employee_assessments"];
$hire_annually = $_POST["hire_annually"];

foreach($_POST['employee_selection_needs'] as $needs) {
    $employee_selection_needs .= $needs;
}



//Need to populate these variable with values from the form.
$str_post = "firstname=" . urlencode($firstname) 
    . "&lastname=" . urlencode($lastname) 
    . "&email=" . urlencode($email) 
    . "&phone=" . urlencode($phonenumber) 
    . "&organization_name=" . urlencode($organization_name) 
    . "&best_describes_org=" . urlencode($best_describes_org) 
    . "&employee_selection_needs=" . urlencode($employee_selection_needs) 
    . "&organizations_safety=" . urlencode($organizations_safety) 
    . "&confident_interview_process=" . urlencode($confident_interview_process) 
    . "&needs_around_leadership=" . urlencode($needs_around_leadership) 
    . "&used_employee_assessments=" . urlencode($used_employee_assessments) 
    . "&hire_annually=" . urlencode($hire_annually) 
    . "&hs_context=" . urlencode($hs_context_json); //Leave this one be

【问题讨论】:

    标签: php ajax hubspot


    【解决方案1】:

    嘿伙计!我会尽量轻松地回答你


    方法 1:从查询字符串(您的情况)

    使用 ?employee_selection_needs=cat&employee_selection_needs=dog&employee_selection_needs=pig PHP 解析器只考虑最后一个 Key:Value (pig) 并且为此您没有要迭代的数组

    需要拆分 URL。见下文

    <?php
    
    /** CODE */
    
    /** Create an Array of Query Strings Values 
      *
      * OUTPUT EXAMPLE
      * array( 
      *     0 => 'employee_selection_needs=cat',
      *     1 => 'employee_selection_needs=dog',
      *     2 => 'employee_selection_needs=pig',
      *     3 => 'other_key=other_value',
      *     ...
      * )
      */
    $queryArray= explode('&', $_SERVER['QUERY_STRING']);
    
    /** Init a variable for append Query Values */
    $myOutputString = "";
    
    /** Need for separate append values */
    $myOutputToken = "|";
    
    /** Append to $myOutputString the correct Query Value */
    foreach($queryArray as $queryArrayElement) {
        /** Create an Array starting from a Query String
          *
          * OUTPUT EXAMPLE
          * array( 
          *     0 => 'employee_selection_needs',
          *     1 => 'cat',   
          * )
          */
        $tArray= explode('=', $queryArrayElement);
    
        /** Filter only "employee_selection_needs" key and append Query Value
          * to $myOutputString 
          */
        if(!empty($tArray[0]) && $tArray[0] == 'employee_selection_needs') {
            if(!empty($tArray[1])) 
                $myOutputString .= $tArray[1].$myOutputToken;
        }
    }
    
    /** Remove last Token */
    if(!empty($myOutputString))
        $myOutputString = substr($myOutputString, 0, -strlen($myOutputToken));
    
    print_r($myOutputString); // Expected result cat|dog|pig
    
    /** OTHER APPEND HERE */
    
    ?>
    

    方法 2:从 HTML 表单

    您需要在复选框上使用“employee_selection_needs[]”而不是“employee_selection_needs”。见下文

    <form ...>
        <input type="checkbox" value="dog" name="employee_selection_needs[]" />
        <input type="checkbox" value="cat" name="employee_selection_needs[]" />
        <input type="checkbox" value="fish" name="employee_selection_needs[]" />
        ...
    </form>
    

    提交时,您将有一个值数组而不是单个值

    <?php
    
    /** ... CODE ... */
    
    /** Now is an array =)) */
    $used_employee_assessments = $_POST["used_employee_assessments"];
    
    /** ... CODE ... */
    
    /** Convert to String, if You need */
    $myOutputString = "";
    foreach($used_employee_assessments as $assessment) 
        $myOutputString .= $assessment;
    
    /** OR use implode ( string $glue , array $pieces )
      * $myOutputString = implode(" %MY_TOKEN% ", $used_employee_assessments);
      */
    
    /** OTHER APPEND HERE */
    
    ?>
    

    【讨论】:

      【解决方案2】:

      为了传递具有相同名称的多个参数,您应该在名称末尾包含[]。所以你的网址应该是这样的:

      ?employee_selection_needs[]=cat&employee_selection_needs[]=dog&employee_selection_needs[]=猪

      要做到这一点,你的复选框应该有

      name="employee_selection_needs[]"
      

      【讨论】:

      • 是的.. 这是 HubSpot,但我不能在名称中添加 [] :(
      • 有官方文档吗?
      • 据我了解,没有标准化的方法可以在 url 参数中传递数组,这种方法适用于 php,即使在那里,手册中也没有提及(至少我可以找到)除了如果你看看http_build_query 是如何工作的
      猜你喜欢
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-16
      相关资源
      最近更新 更多