2017-04-04 1 views
0

Codegniter의 설명서에서 복사하려고했지만 폼 유효성 검사 콜백이 작동하지 않습니다.Codeigniter - 양식 확인 콜백이 작동하지 않습니다.

도우미 양식, URL 및 라이브러리 form_validation을 추가했습니다. 그것은 노력하고 항상

컨트롤러

public function addtest() 
     { 
      $this->load->helper(array('form', 'url')); 

      $this->load->library('form_validation'); 

      $this->form_validation->set_rules('username', 'Username', 'callback_username_check'); 
      if($_SERVER['REQUEST_METHOD'] == 'POST') 
      { 
       if ($this->form_validation->run() == TRUE) 
       { 
         die('true'); 
       } 
       else 
       { 
         die('false'); 
       } 
      } 

      $this->template 
       ->build('myform',array()); 
     } 

    public function username_check($str) 
    { 
     if ($str == 'test') 
    { 
      return TRUE; 
    } 
    else 
    { 
      return FALSE; 
    } 
    } 

보기

<form method="post" action="" class="form-horizontal form-label-left"> 
    <div class="col-xs-12 col-md-9"> 
     <div class="x_panel"> 
      <div class="form-group col-xs-12"> 
       <div class="col-xs-3"> 
        <label class="control-label">Folder name</label> 
       </div> 
       <div class="col-xs-9"> 
        <input type="text" name="username" value="" class="form-control " id="" placeholder=""> 
       </div> 
      </div> 
      <button type="submit" class="btn btn-success">Submit</button> 
     </div> 
    </div> 
</form> 
+1

Codeigniter CallBack Functon에 대해 더 ($ 항상 througu 제공 this); ' – Gaurav

+0

$ this를 추가했지만 다시 false를 반환합니다. –

+0

요청 방법 확인을 제거하여 시도 할 수 있습니까? –

답변

1

MY_Form_validation.php

<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); 

class MY_Form_validation extends CI_Form_validation 
{ 
    function run($module = '', $group = '') { 

     (is_object($module)) AND $this->CI =& $module; 
     return parent::run($group); 
    } 
} 
/* End of file MY_Form_validation.php */ 
/* Location: ./application/libraries/MY_Form_validation.php */ 
Libraries.php에 form_validation 라이브러리를 확장 "false"를 반환 아니에요
0

내 컨트롤러 기능은 이와 유사하며 완벽하게 실행됩니다. 나는 모든 라이브러리 HTML에서

public function change_password() 
{ 
    if($this->isLoggedin()){ 
     $data['title']='Change Password'; 
     if($_POST) 
     { 
      $config=array(
       array(
        'field' => 'old_password', 
        'label' => 'Old Password', 
        'rules' => 'trim|required|callback_checkPassword' 
       ), 
       array(
        'field' => 'password', 
        'label' => 'Password', 
        'rules' => 'trim|required' 
       ), 
       array(
        'field' => 'conf_password', 
        'label' => 'Confirm Password', 
        'rules' => 'trim|required|matches[password]' 
       ) 
      ); 
      $this->form_validation->set_rules($config); 
      if ($this->form_validation->run() == false) 
      { 
       // if validation has errors, save those errors in variable and send it to view 
       $data['errors'] = validation_errors(); 
       $this->load->view('change_password',$data); 
      } 
      else 
      { 
       // if validation passes, check for user credentials from database 
       $this->Login_model->updatePassword($_POST['password'],$this->session->userdata['id']); 
       $this->session->set_flashdata('log_success','Congratulations! Password Changed'); 
       redirect(base_url() . 'Login/dashboard'); 
      } 

     } 
     else 
     { 
      $this->load->view('change_password',$data); 
     } 
    } 
    else 
    { 
     redirect(base_url().'Login'); 
    } 

} 

public function checkPassword($str) 
{ 
    $check=$this->Login_model->checkPassword($str); 
    if($check) 
    { 
     return true; 
    } 
    else 
    { 
     $this->form_validation->set_message('checkPassword', 'The Current Password you have provided is incorrect'); 
     return false; 
    } 
} 
0

(ID 필드를 추가)

<input type="text" name="username" value="" class="form-control " id="username" placeholder=""> 

<button type="submit" class="btn btn-success" id="submit">Submit</button> 

당신의 AJAX 코드를 자동으로 적재 한 컨트롤러에서

<script type="text/javascript"> 
    $(function(){ 
     $("#submit").click(function(event) 
     { 
      event.preventDefault(); 
      var username= $("#username").username(); 

      $.ajax(
       { 
        type:"post", 
        url: "<?php echo base_url(); ?>index.php/controller/Method", 
        data:{ username:username}, 
        success:function(res) 
        { 

        } 
       }); 
     }); 
    }); 
</script>> 

CZ 체크 if($_SERVER['REQUEST_METHOD'] == 'POST')의 필요 없음은이

public function addtest() 
{ 
    $this->load->helper(array('form', 'url')); 

    $this->load->library('form_validation'); 

    $this->form_validation->set_rules('username', 'Username', 'callback_username_check'); 

     if ($this->form_validation->run() == TRUE) 
     { 
      die('true'); 
     } 
     else 
     { 
      die('false'); 
     } 

    $this->template->build('myform',array()); 
} 


public function username_check($str) 
{ 
    if (empty($str)) 
    { 
     echo "Empty"; 
    } 
    else 
    { 
     if ($str == 'test') 
     { 
      return TRUE; 
     } 
     else 
     { 
      return FALSE; 
     } 
    } 
} 

확인`$ this-> form_validation-> 실행에서`$ this`를 추가하려고

관련 문제