我在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();
}
}
有什么建议吗?我在这里做错了什么?
答案 0 :(得分:3)
问题背后的原因是 - 在模型中使用时,您的数据($ listing_id)会转换为整数类型。当您传递2000ddd作为参数时,您将获得2000,但是当您通过ddd2000时,您将获得0。
答案 1 :(得分:1)
是的,@ Jobayer说的......那是PHP在幕后进行类型转换......所以它正在猜测它是如何被使用的,在这种情况下,它是一个整数。
请注意,当您允许通过URL或任何用户输入进行数据输入时,人们可以尝试各种各样的事情。您可以使用is_integer($ expected_integer_variable_to_check)测试该段是否为整数,并采取适当的操作,甚至只是忽略它...