如何在codeigniter中验证ajax表单

时间:2013-01-05 14:08:32

标签: php forms codeigniter validation

我想使用codeigniter form_validator库验证表单。

问题是数据来自ajax,所以我不明白代码应该如何。

    public function register(){
    $this->load->library('form_validation');
    $json = $_POST['data'];
    $json = json_decode($json);
    $data = get_object_vars($json);

    $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]|xss_clean');
    if($this->form_validation->run()){
        echo 'asdf';
    } else {
        echo 'xyz';
    }

}

你可以看到有一个与$ _POST超全局数组类似的$ data数组。如何验证$ data数组并使用状态为form和errors消息的json编码数组发回响应?

这是我使用ajax发送数据的方式:

    function register(){
    var site_url = $("#site_url").val();
    var post_url = site_url+"index.php/ajax/register";

    var details = { };

    details.username = $("#username").val();
    details.password = $("#password").val();
    details.rpassword = $("#rpassword").val();
    details.country = $("#country").val();
    details.postal_code = $("#postal_code").val();
    details.email = $("#email").val();
    details.date_of_birth = $("#date_of_birth").val();


    var json = JSON.stringify(details);

    $.post(post_url, {'data': json}, function(data){
        alert(data);
        //data = JSON.parse(data);



    });

    return false;
}

谢谢。

3 个答案:

答案 0 :(得分:3)

来自the documentation

  

“注意:这些规则也可以称为离散函数。例如:$ this-> form_validation-> required($ string);”。

答案 1 :(得分:2)

好的还没有测试过,但它应该有用。

首先,请不要将数据作为json发送到您的控制器,只需将其作为正常的发布请求发送。

$.post(post_url, {'data': details}, function(data){

然后在控制器中处理验证,就像您进行任何表单验证一样。

public function register(){
$this->load->library('form_validation');
$this->form_validation->set_rules($this->input->post('username'), 'Username',
'trim|required|min_length[5]|max_length[12]|xss_clean');
if($this->form_validation->run()==FALSE){
    $errors = 'Username error here';
}
//You can iterate through any other validation rules building the $errors 
//variable then pass them back to the view with:

if(isset($errors))
{
    print json_encode(array("status"=>"error", "message"=>$errors));
} else {
   /execute pass code here
}

}

之后,您可以回显视图中的错误(如果有的话)。

答案 2 :(得分:0)

有一种方法可以验证不是来自POST / GET请求的数据。 我认为此链接应该有所帮助:https://www.codeigniter.com/userguide3/libraries/form_validation.html#validating-an-array-other-than-post

我对来自解码php://input

的数据进行了测试
$filters_obj = json_decode(file_get_contents('php://input'));
$this->form_validation->set_data($filters_prop_arr);
$this->form_validation->set_rules('email', 'Full Name', 'required');

if ($this->form_validation->run() == false) {
    var_dump('not workin');
    return false;
}