【问题标题】:Pass GET parameters with form & Codeigniter to controller将带有表单和 Codeigniter 的 GET 参数传递给控制器
【发布时间】:2011-08-02 23:07:05
【问题描述】:

例如,我有一个 html 表单,他的操作是针对“exmaple.com/mail.php?name=dan”。

如何将此参数传递给 Codeigniter 的控制器?

codeigniter 中的“动作”将是 - example.com/mail,我不能这样做 exmaple.com/mail?name=dan,对吗?那我该怎么办? (而且.. 我不能为此使用 Ajax :-))

【问题讨论】:

    标签: php model-view-controller codeigniter


    【解决方案1】:

    有几种解决方案。你可以这样做$name=$this->input->get("name"),但如果你想保留 Codeigniter 的理念,你可以使用 Javascript 将表单的操作 url 更改为 /mail/dan。在这种情况下,您可以通过以下方式访问数据:$name=$this->uri->segment($number)。 $number 在您的情况下是 2,因为“dan”在第二个 URI 的段中。

    注意:如果您使用第二种方法,请记住,codeigniter 的默认行为是自动从 URI 的第一段和第二段调用控制器/方法。 (http://domain.com/controller/method) 为了防止这种行为,您可以编辑 application/config/routes.php 文件。详细说明请参考oficial guide

    【讨论】:

    • 我忘记了Codeigniter中有段。 :-) 谢谢你的正确答案和其他人(隐藏了它的好解决方案,但它不是我想要的......)。
    【解决方案2】:

    您可以将 GET 参数作为隐藏的输入元素发出,即:

     <input type=hidden name="name_of_parameter" value="value_of_parameter" />
    

    但是,在执行此操作时需要牢记两点非常

    1. 您绝对必须清理要在页面上发出的 CGI 参数(不这样做可能会导致 XSS 漏洞)。
    2. 与任何其他参数一样,您不能相信该值未被更改(因此,不要使用 'name=dan' 来验证 dan!)。

    由于我从您的示例中推断您正在使用它来识别和验证用户,因此我强烈建议您为此使用浏览器 cookie(以及对该数据的校验和进行编码的数字签名,以便如果被更改,您可以轻松识别它是无效的)。

    【讨论】:

      【解决方案3】:

      您还应该将查询字符串变量设置为 true:

      在您的 CodeIgniter 配置中;

      $config['enable_query_strings'] = TRUE;
      

      但请记住,这会改变您的 codeigniter 应用的行为方式。 See more here

      【讨论】:

      • 从 CodeIgniter 2.x 开始,这不再需要,因为现在使用单独的设置默认启用 GET 参数,allow_get_array
      【解决方案4】:

      您为什么不能简单地在该 HTML 表单中添加一个隐藏字段并将其与表单一起作为 POST 数据发送?

      <input type="hidden" name="name" value="dan" />
      

      当然,您可以用您当前拥有的任何值动态替换值部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-24
        • 2014-09-09
        • 2018-07-14
        相关资源
        最近更新 更多