【问题标题】:Codeigniter if URL segment is missing如果 URL 段丢失,则 Codeigniter
【发布时间】:2011-07-18 18:26:27
【问题描述】:

发现第三个 URL 段可以直接传递给函数的参数后,我做了以下操作。

网址示例:

http://www.mysite.com/profile/user/64

profile 控制器中的函数:

function user($user_id) //$user_id is 3rd URL segment
{
   //get data for user with id = $user_id
}

使用 $this->uri->segment(3) 返回 FALSE 是不存在段。有了函数参数,我得到了

缺少参数 1

如果缺少第 3 个 URL 段,我如何返回 FALSE 而不执行该函数?如果可能的话,我正在寻找一个没有 if 语句的简单解决方案。

【问题讨论】:

  • 试试$this->uri->segment(2)。我没用过 CodeIgniter,但我猜 URI 段索引从 0 开始。
  • @wtp - CI 段在索引之后开始,或者如果使用 htaccess 删除域之后的索引(假设 CI 索引在域的根中)并从 1 开始计数,所以在这个例子中 3 是正确的.仅供参考
  • @BrandonS 好的,我的错。 :)

标签: php security function codeigniter


【解决方案1】:

你得到“缺少参数 1”,因为函数没有得到参数。

试试

function user(){
    if($this->uri->segment(3)){
        //get data for user with id = $this->uri->segment(3)
    }
}

【讨论】:

    【解决方案2】:

    默认参数呢:

    function user($user_id = FALSE) //$user_id is 3rd URL segment
    {
       //get data for user with id = $user_id
    }
    

    【讨论】:

    • 谢谢!那么在执行查询之前应该返回 FALSE 吗?使用 codeigniter,第三段实际上是 user_id
    • 您对细分市场的看法是正确的。我在想别的事。
    • 如果未定义 user_id,则默认为 FALSE。如果它被定义,它将是那个值。
    【解决方案3】:

    你也可以这样用:

     public function user($id = null)
     {
       if(!isset($id))
         exit();
    
       // get data for user with id = $id
     }
    

    或者这个

    public function user()
    {
      if( ! $this->uri->segment(3) )
        exit();
    
      // get data for user with id = $id
    }
    

    【讨论】:

      【解决方案4】:
      if ($this->uri->segment(3)) {
        return true
      } else {
        return false
      }
      

      【讨论】:

        猜你喜欢
        • 2016-09-07
        • 2012-08-18
        • 2022-10-06
        • 1970-01-01
        • 2012-04-04
        • 1970-01-01
        • 2011-03-02
        • 2013-05-01
        • 2013-04-22
        相关资源
        最近更新 更多