构建控制器以在代码点火器 3 中提交表单


Structuring controllers to submit a form in Codeigniter 3

我正在学习Codeigniter,我有一个名为Admin控制器的控制器

class Admin extends CI_Controller{
/* skipped */
//This function is used to generate changepassword form
public function changepassword(){
    $this->data['sessiondata'] = $_SESSION['logged_in'];
    $this->data['mainview'] = 'components/admin/changepassword';
    $this->load->view($this->layout, $this->data);
}

//changepassword form will be submitted to this function ('admin/checkpassword')
public function checkpassword(){
    $error = array(
        'required' => '%s tidak boleh kosong',
        'matches' => '%s tidak sama, dumb ass'
    );
    /* some validations skipped */
    if($this->form_validation->run($this) == FALSE){
        $this->data['mainview'] = 'components/admin/changepassword';
        $this->load->view($this->layout, $this->data);  
    } else {
        $tobesent = array(
            "oldpassword" => $this->input->post('oldpassword'),
            "newpassword" => $this->input->post('newpassword'),
            "verifynewpasswprd" => $this->input->post('verifynewpassword')
        );
        $this->admincrud->changepassword($tobesent);
        $this->data['result']   = "Password sukses diubah";
        $this->data['mainview'] = 'components/admin/changepassword';
        $this->load->view($this->layout, $this->data);
    }
}
}

结果是,每次我去base_url('admin/changepassword'),填写提供的表格然后提交表格时,我的URL从base_url('admin/changepassword')更改为base_url('admin/checkpassword'),我知道这是提交表格的结果。此外,每次我直接在地址栏上type base_url('admin/checkpassword')时,它都会打开表单,我知道这是函数中的 if-else 条件checkpassword的结果。我的问题是,从安全的角度来看,如果我继续使用这种结构可以吗?以及如何防止用户直接访问base-url('admin/checkpassword')而是将他们重定向到base_url('admin/changepassword')

如果您不希望在提交表单后更改URL。

您可以使用redirect('admin/changepassword');,并且由于您需要提供
消息 相应地,您可以在重定向之前使用 $this->session->set_flashdata('msg','Your message'); 并在视图中使用它,如下所示: <?php if($this->session->flashdata('msg') <> NULL){echo $this->session->flashdata('msg');} ?>

如果我

理解正确,您的问题的解决方案$_SERVER['REQUEST_METHOD']...

例如:-

if($_SERVER['REQUEST_METHOD'] == 'POST')//form method is post
{
  //checkpassword code
}
else
{
  redirect(base_url('admin/changepassword'));
}