我有一个简单的控制器功能,它删除一个DB条目(它使用模型函数来执行此操作)。我在我的一个视图中有一个链接(例如http://www.example.com/item/delete/3),我正在使用jQuery显示确认对话框,以确保用户真的想要删除它。一切都很好。但是,如果您只是在浏览器中输入该URL,则会删除该项目而不会发出警告。
有没有办法以编码控制器功能或模型的方式处理这个问题?
答案 0 :(得分:0)
您可以通过将此行添加到模型和控制器文件(CI Forum post)的顶部来防止这种情况。
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class SomeModel extends Model
{
// model code
}
?>
这可确保CI已加载。
答案 1 :(得分:0)
我想我想出来了,那就是让控制器中的函数变为私有,即
function _delete($id) {
...delete code goes here...
}
答案 2 :(得分:0)
这是通过AJAX请求吗?如果是这样,我会通过POST而不是GET将数据发送到删除,因此无法直接导航到它。
如果是通过GET,我想联系点击时会发出确认警告,当你直接进入页面时我会加载它。
您还可以检查引荐来源,并且仅在引用页有效的情况下使用它,但此方法并非总是100%可靠。
答案 3 :(得分:0)
对于删除操作,我会做一个HTTP帖子。
function delete()
{
if ($id = $this->input->post('id'))
{
$this->item_model->delete_item($id);
}
}
然后我的JQuery会做一个HTTP帖子。
$.ajax({
type: 'POST',
url: 'item/delete',
data: {id:item_id}
});
这样,客户端就无法通过浏览网页浏览器中的URL来意外删除项目。