【问题标题】:How can I validate a ajax form in codeigniter如何在 codeigniter 中验证 ajax 表单
【发布时间】:2012-12-19 19:12:27
【问题描述】:

我想使用 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 数组并使用带有表单状态和错误消息的 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;
}

谢谢。

【问题讨论】:

  • 如何从视图发送数据,能否显示 AJAX 调用?
  • 我已经编辑了第一篇文章。我已经添加了 ajax 代码。
  • 为什么要序列化数据并将其作为 JSON 发送?为什么不只使用 POST 字段?

标签: php forms codeigniter validation


【解决方案1】:

有一种方法可以验证不是来自 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;
}

【讨论】:

    【解决方案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
    }
    
    }
    

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

    【讨论】:

    • 它不起作用。我不知道 $this->validaton_form 对象如何知道在 $_POST 数组中查找 $_POST['username']。 '$this->input->post['username]'' 是什么?代码需要转义才能工作。
    • 这就是 codeigniter 处理 $_POST 对象的方式。验证的第一个参数是你要验证的东西,第二个参数是你想要在出现错误时返回给用户的用户友好名称,第三个参数是你要检查的东西。我还注意到验证行中有一个错字。立即尝试。
    • grrr,另一个错字。我使用自定义输入处理程序,$this->input->post 上的圆括号不是方括号。
    • 它不起作用。如果你写 var_dump($this->input->post('username'));它会返回假。 if括号里面的代码每次都会执行,不管用户名是否有效。
    • 那么它不会发布到表单中。转出表单中的 $_POST 以确保实际填充了 post 变量,并查看对 if 语句的编辑,主啊,当我写那个时我一定很累。对不起。
    【解决方案3】:

    来自the documentation

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

    【讨论】:

      猜你喜欢
      • 2016-05-08
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多