1

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;
}

ありがとうございました。

4

3 に答える 3

3

ドキュメントから:

「注: これらのルールは個別の関数として呼び出すこともできます。例: $this->form_validation->required($string);」.

于 2013-01-05T14:12:00.203 に答える
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
}

}

その後、ビューにエラーがあればエコーアウトできます。

于 2013-01-05T14:39:30.193 に答える