模型中的Codeigniter表单验证

时间:2013-12-31 17:55:39

标签: php codeigniter

大家好,这是我的第一个CI项目。

我的模型中有一个简单的表单验证功能。

function verify_login()
{

    //This method will have the credentials validation
    $this->load->library('form_validation');

    $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database');

    var_dump($this->form_validation->run());
    die;
    if ($this->form_validation->run() == FALSE) {
        //Field validation failed.  User redirected to login page
        $this->load->view('login_view');
    } else {
        //Go to private area
        redirect('home', 'refresh');
    }
}

仅当它在控制器中而在模型中时才有效。当我尝试将变量从控制器传递给模型中的函数时,变量会被接收但不会处理。

有人可以开导我吗?谢谢。

3 个答案:

答案 0 :(得分:6)

可以在模型中进行表单验证。但是您希望验证返回True或False到您的控制器。不要打电话给观点。所以喜欢

// in your Model lets call it Users
function verify_login()
{    
    $this->load->library('form_validation');

    $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database');

    if ($this->form_validation->run() == FALSE) {
       return FALSE ; 
    } else {
       return TRUE; 
    }
}

// Your callback function 


 // in Controller 
function verify(){

if( $this->users->verify_login() == FALSE ){  
// $this->errormessage will be available in any view that is called from this controller
$this-errormessage = "There was an error with your Log In. Please try again." ; 
$this->showLogin() ; } 

else { 
// set a session so you can confirm they are logged in on other pages
$this->setLoginSession($this->input->post('username', TRUE)) ; 
$this->showUserHome(); } 
}

要考虑的另一件事 - 通常人们知道他们的用户名,但却搞砸了他们的密码。因此,如果您单独检查它们,则可以相应地调整错误消息。如果您检查用户名并且没有结果 - 您不需要检查密码,并且在错误消息中您可以告诉他们没有该名称的用户。

答案 1 :(得分:1)

我对你的最大建议是不要在你的模型中做这样的验证。如果您在模型中进行验证,则需要直接针对数据库值而不是表单。

如果能解决您的问题,请告诉我,如果没有请注释,我会编辑我的答案。

更新:请忽略上面的一些内容,因为我是在理论而不是事实:)

我将不得不深入研究CI核心,以便更好地了解这有什么问题。你的代码本身看起来不错。我唯一能看到的是你的回调可能不存在于你的模型中,只存在于你的控制器中。回应下面我不认为这是一个很好的模型使用。

The docs on validations

答案 2 :(得分:0)

class Data_model extends CI_Model
{
public function rules()
    {
        return [
            ['field' => 'pertanyaan',
            'label' => 'pertanyaan',
            'rules' => 'required|is_unique[data.pertanyaan]'],

            ['field' => 'jawaban',
            'label' => 'jawaban',
            'rules' => 'required']
        ];
    }
}


class Datas extends CI_Controller
{
public function add()
    {
        $data = $this->data_model;
        $validation = $this->form_validation;
        $validation->set_rules($data->rules());
        if ($validation->run()) {
            $data->save();
            $this->session->set_flashdata('success', 'Berhasil disimpan');
        }

        $this->load->view("admin/data/new_form");
    }
}