我正在尝试将段传递给控制器。 url类似于base_url / controller / function / seg1。我想确保如果用户尝试在地址栏中输入段,控制器将确保除了我想要传递的段之外没有其他单词要继续。
例如,如果用户尝试在地址栏中键入base_url / main / function /(将其更改为其他字),则控制器将过滤该段。我不知道该怎么做,如果有人可以帮助我,我会很感激。
答案 0 :(得分:1)
你的结构是
base_url/controller/action
因此,您的控制器已经“过滤”了它,因为如果您在控制器中没有方法/功能(methods = actions),那么您的控制器将触发404 Page Not Found错误。然而,粗略的,您可以处理您认为合适的错误,但根据您提供的内容,您希望过滤的项目称为控制器操作。
所以,例如;
http://www.base_url.com/users/add
表示您希望在用户控制器中调用add(function)。
如果你想将add动作传递给参数,那么你可以这样做;
http://www.base_url.com/users/show/1
show是控制器动作,1是你想要显示的用户的id。 我知道似乎我正在给MVC方法论一个基本的介绍,但就像我说的那样,你展示的结构就像我描述的一样。
希望这有帮助。
答案 1 :(得分:1)
好的,所以“保护”这些事情的最佳方法是在用户登录您的网站时创建一个会话,并在该会话中存储两个值;
1)他们的数据库主键id,和 2)名为'logged_in'的会话项
当您的用户登录您的网站时,您会将这两个值存储起来;
$this->session->set_userdata('logged_in', true);
$this->session->set_userdata('user_id', $id);
在身份验证期间从其用户记录中提取$ id。
既然你有那些,那么下一部分就是,在你的控制器中,如果用户登录,你会在那里检查一个if语句,就这样;
function show($id) {
if($this->session->userdata('logged_in')) {
$posts = $this->Model_posts->get_user_posts($id);
}
}
现在,在您的模型中,您将创建一个函数来拉取您希望用户能够根据其user_id查看的记录。我们将举例说明用户帖子。
function get_user_posts($user_id, $post_id) {
$sql = "SELECT * FROM posts WHERE user_id = ? AND id = ?";
$binds = array($user_id, $post_id);
$qry = $this->db->query($sql, $binds);
$result = array();
while($row = $qry->result_array()) {
array_push($result, $row);
}
return $result;
}
现在,当登录用户或访问者尝试访问不属于他们的记录时,他们将不会检索任何记录,因为select语句限制仅返回给该用户的记录。