在尝试选择"产品列表"时,Codeigniter中存在奇怪的问题按ID

时间:2016-10-14 21:51:11

标签: php mysql codeigniter

我在Codeigniter中有一个奇怪的问题。我有一个控制器和一个模型来从MySQL获取产品列表。我使用uri-segment函数获取ID并将其放入模型中,以根据ID检索特定的产品列表。

正确的URl(效果很好):

http://example.com/listing/2000

但是,当您输入:

http://example.com/listing/2000ddd

这也有效,但不应该。

另一方面,如果您尝试在ID号之前键入一个字符,它就不起作用。

 http://example.com/listing/ddd2000

我的控制器:

public function index()
{
    $listing_id = $this->uri->segment(3);

    $messageinfo = $this->Messages_model->get_messageinfo($listing_id);
    $data["messageinfo"] = $messageinfo; 

    $this->load->view('inc_includes/header');
    $this->load->view('pages_sendmessage/sendmessage', $data);  
    $this->load->view('inc_includes/footer');
}   

我的模特:

function get_messageinfo($listing_id = NULL)
{
    $this->db->select('
      azzo.listing_ads.listing_ads_id,
      azzo.listing_ads.listing_ads_domain_url,
      azzo.listing_ads.listing_ads_expire,
      azzo.listing_ads.listing_ads_user_id,
      azzo.users.username,
      azzo.listing_ads.listing_ads_outprice
    ');
    $this->db->from('azzo.listing_ads');
    $this->db->join('azzo.users', 'azzo.listing_ads.listing_ads_user_id = azzo.users.id', 'inner');
    $this->db->where('azzo.listing_ads.listing_ads_id', $listing_id);
    $query = $this->db->get();  
    if($query->num_rows() == NULL)
    {
        return false;
    }
    else
    {
        return $query->row();
    }
}

有什么建议吗?我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

问题背后的原因是 - 在模型中使用时,您的数据($ listing_id)会转换为整数类型。当您传递2000ddd作为参数时,您将获得2000,但是当您通过ddd2000时,您将获得0。

答案 1 :(得分:1)

是的,@ Jobayer说的......那是PHP在幕后进行类型转换......所以它正在猜测它是如何被使用的,在这种情况下,它是一个整数。

请注意,当您允许通过URL或任何用户输入进行数据输入时,人们可以尝试各种各样的事情。您可以使用is_integer($ expected_integer_variable_to_check)测试该段是否为整数,并采取适当的操作,甚至只是忽略它...