【发布时间】:2011-09-10 06:21:00
【问题描述】:
控制器
function delete_payment($payment_id)
{
$this->sale_lib->delete_payment($payment_id);
$this->_reload();
}
查看
<?php echo anchor("sales/delete_payment/$payment_id",'['.$this->lang->line('common_delete').']');?>
$payment_id 可能类似于“Gift Card:1”或“Gift Card:12345983984334”
当它是 Gift Card:1 时,url 会自动解码并且删除功能起作用,当它是较长的字符串时,例如 Gift Card:12345983984334",url 不会被解码。
网址是:
http://localhost/index.php/sales/delete_payment/Gift%20Card:1
http://localhost/index.php/sales/delete_payment/Gift%20Card:12345983984334
第一个有效,第二个无效
【问题讨论】:
-
delete_payment() 函数中的代码是什么?你指的编码是什么?浏览器的urlencoding?
-
$payment_id 在 url 为 localhost/index.php/sales/delete_payment/Gift%20Card:1 时最终会被解码,但否则 url 最终会包含 %20 而不是其中的空格。似乎由于某种原因,url 的处理方式有所不同。我尝试通过 CI 路由器进行跟踪,但无法完全弄清楚。
-
这可以很容易地通过使用
$_GET来避免,或者更重要的是:首先不要使用url 和GET 进行破坏性操作,而是使用$_POST。 -
+1 表示不使用 URI 来执行此类操作,在最坏的情况下这是一个安全风险,在最好的情况下是不好的做法!
标签: php codeigniter