0
<?PHP
$attributes = array('class' => "profile_form", 'id' => "profile_form",'name'=>"profile_form");
echo form_open_multipart("$form_action",$attributes);
?>
<LABEL for='email'>E-Mail</LABEL>
<INPUT type='text' id='email' name="email" class="w200" value='<?PHP echo $email;?>' remote="<?PHP echo base_url()."php/unique_email.php?id=$id"; ?>">
<DIV class='ca clr-lr'>
<input type="submit" id="submitbutton" name="submitbutton" value="<?PHP echo $title;?>" class="pr mbutton"/>
</DIV>
</FORM>

    rules: {
        email: {
            required:true,
            email:true
        }
    }

これは、メールフィールドを検証するために使用しているコードです。メールフィールドを変更したり、新しい値を入力したりしても問題なく動作しますが、フォームを送信するだけではエラーが発生します。簡単に調べたところ、メールフィールドを編集しないと、送信ボタンが投稿データに含まれていないことがわかりました。

私が間違っていることは、助けてください。

これが私のコントローラーコードです。デバッグの範囲を広げるのに役立つかもしれません。送信ボタンが投稿データの一部であるかどうかを確認しています。

if($this->input->post('submitbutton') !== false){
        if ($this->form_validation->run('admin_profile_form') == FALSE){
            $form=(array)$this->input->post();
            $data=array_merge($form,$data);
        }else{
            //database fields
            $database = array(
                'first_name' => $this->input->post('first_name'),
                'last_name' => $this->input->post('last_name'),
                'email' => $this->input->post('email'),
                'phone' => $this->input->post('mobile')
            );
            $user_id=$user->id;
            $this->db->where('id',$user_id);
            $this->db->update('users',$database);
            $this->session->set_flashdata('message_type', 'info');
            $this->session->set_flashdata('message', 'Profile updated');
            redirect($this->homepage);
            return;
        }
    }

そして最後に、FabioAntunesによって提案されたソリューションが機能しました。

次のようにルールを変更し、入力フィールドからインラインリモートを削除しました

        email: {
            required:true,
            email:true,
            remote: {
                url: "php/unique_email.php",
                async: false,
                type: "post",
                data: { id: $('#edit_id').val() }
            }
        }
4

2 に答える 2

1

編集

コードはすでに機能していると述べたように、これをjsファイルに配置できます。この関数を使用$("#profile_form").validate({})して、送信およびキーアップイベントで検証する必要があります

<script>
$().ready(function() {

        // validate signup form on keyup and submit
        $("#profile_form").validate({
    rules: {
        email: {
            email: true
        }
    },
    messages: {
        email: {
            email: "Please provide a valid email"
        }
    }
}); 
}); 

あなたの見解では、あなたがこれを持っていることに気づきました

<INPUT type='text' id='email' name="email" class="w200" value='<?PHP echo $email;?>' remote="<?PHP echo base_url()."php/unique_email.php?id=$id"; ?>">

代わりにこれを置く

<INPUT type='text' id='email' name="email" class="w200" value='<?PHP echo $email;?>' remote="<?PHP echo base_url()."php/unique_email.php?id=".$id; ?>">

$id が文字列内にあることに気付いた場合

于 2013-03-14T10:54:25.667 に答える
-1

この設定を試してください

$(/*your form*/).validate({  
    onsubmit: true
})
于 2013-03-14T10:40:51.370 に答える