【问题标题】:HTML checkbox form and HTTP URLHTML 复选框表单和 HTTP URL
【发布时间】:2012-02-13 05:48:24
【问题描述】:

所以,我有这个 HTML 表单:

<form id="search_form" class="form_wrapp"
    accept-charset="utf-8" method="get" action="http://testing.com/results">
    <input class="inputbox" type="text" name="search_query">
    <input class="ic_search" type="submit" value="">

    <input type="checkbox" value="checkbox1" name="search_filter[]">
    <label for="Checkbox1">Checkbox1</label>
    <input type="checkbox" value="checkbox2" name="search_filter[]">
    <label for="Checkbox2">Checkbox2</label>
</form>

它会在提交时重定向到此 URL,并选中 2 个复选框

results?search_query=dreams&amp;search_filter[]=checkbox1&amp;search_filter[]=checkbox2

它的工作原理是这样的(在 codeigniter 中,我使用$this-&gt;input-&gt;get('search_filter') 获取数据),但我的问题是:我在表单中做错了什么,或者这就是它应该如何工作? 我的意思是:&amp;search_filter[]=checkbox1&amp;search_filter[]=checkbox2。不应该是这样的:&amp;search_filter[]=checkbox1,checkbox2 吗?如果没有,我怎样才能让它像那样工作?

【问题讨论】:

    标签: php forms url checkbox


    【解决方案1】:

    如果您想要逗号格式,您可以执行以下操作:

    $filters = (array) $this->input->get('search_filter');
    $filters = implode(',',$filters);
    

    如果要更改表单提交的格式,假设jquery for js:

    $('#search_form').submit(function() {
       var $hidden = $('<input type="hidden" name="search_filter" />').appendTo($(this)),
           $filters = $('input[name^=search_filter]'),
           value = '';
    
          //loop through the filters check if there checked and add them to the value
    
          $hidden.val(value);
    
          $filters.remove();       
    });
    

    当然如果用户没有启用js,它会原生提交

    【讨论】:

      【解决方案2】:

      我在表单中做错了什么,或者这就是它应该如何工作的方式?

      这就是它应该如何工作的方式。至少如果您需要使用 PHP 读取查询字符串,则需要使用这些括号来读取整个查询字符串,而不会被下一个覆盖每个 search_filter 值。

      如果没有,我怎样才能让它像那样工作?

      如果需要,您可以改用 POST 请求,处理提交,然后使用您想要的任何查询字符串重定向到您选择的 URL。

      来自您的评论:

      我想把网址做成这样&amp;search_filter[]=checkbox1,checkbox2 只是为了让它更“漂亮”一些

      别担心,说真的。唯一重要的是当您进行极端 SEO 并且您不希望两个 URL 指向同一个地方时。在这些情况下,通常的做法是删除所有未使用的键并将它们按字母顺序排列,以便所有带有查询字符串的 URL 都保持一致,但将它们修改成自定义的内容仍然不是其中的一部分。

      除此之外,不要与这种行为作斗争 - 与它一起 工作 - 它不会“损坏”并使其“美丽”对任何人都无关紧要,而且你必须猜测/记住哪些页面以正确的方式处理查询字符串,哪些页面使用您的“自定义”方法。

      【讨论】:

        【解决方案3】:

        我在表单中做错了什么,或者这就是它应该如何工作的?

        它应该是这样工作的

        不应该是这样的:&search_filter[]=checkbox1,checkbox2 吗?

        那么您就无法区分两个项目和一个包含逗号的项目。

        如果没有,我怎样才能让它像那样工作?

        突兀的 JavaScript。不要那样做。表单以其工作方式运作良好。

        【讨论】:

          【解决方案4】:

          这很正常。表单数据总是以key=value 对发送,只有一个值。提交 key=value,value 不是 HTTP 规范的一部分,并且会将值视为单个整体字符串,而不是两个单独的逗号分隔值。

          您当然可以使用一些 JS 即时重建您的表单以使用 value,value 格式,但是您还必须修改服务器端脚本以接受该新格式。 PHP 不会自动拆分您之前的值,因为它不是标准表示。

          【讨论】:

            【解决方案5】:

            &amp;search_filter[]=checkbox1,checkbox2

            为什么需要这个?

            这样使用:

            <?php
            
            $searchFilter = $this->input->get('search_filter');
            
            foreach($searchFilter as $filter)
                // some actions with filters.
            

            You search_filter[] 是一个简单数组,其中包含来自复选框输入的值。

            【讨论】:

            • 这是我已经在做的,但我想把网址做成这样&amp;search_filter[]=checkbox1,checkbox2 只是为了让它更“漂亮”一些
            • 没有 JavaScript 就无法做到这一点 =(
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-02-10
            • 1970-01-01
            • 2012-06-30
            • 1970-01-01
            • 1970-01-01
            • 2021-10-29
            • 2015-11-03
            相关资源
            最近更新 更多