【问题标题】:Structuring controllers to submit a form in Codeigniter 3构造控制器以在 Codeigniter 3 中提交表单
【发布时间】:2016-06-14 21:23:53
【问题描述】:

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

【问题讨论】:

  • 你可以在你的管理控制器的构造器中检查用户是否登录。
  • 无法理解。你能给我指点@Drudge 的例子吗?
  • 其实,我不清楚你的问题。两种方法的视图是否相同?
  • 修改密码函数加载修改密码表单,检查密码函数处理从修改密码函数提交的表单。它们都构建在同一个类中。
  • 我知道它们是在同一个类中构建的。我的问题是“他们(功能)是否加载相同的视图??”

标签: php forms codeigniter


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    例如:-

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多