【问题标题】:Codeigniter - My form validation callback doesn't workCodeigniter - 我的表单验证回调不起作用
【发布时间】:2017-04-04 11:05:57
【问题描述】:

我试图从 Codegniter 的文档中复制,但我无法使表单验证回调工作。

我添加了辅助表单、url 和库 form_validation。它不起作用,总是返回“false”

控制器

 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>

【问题讨论】:

  • 尝试在$this-&gt;form_validation-&gt;run($this);中添加$this
  • 我添加了 $this 但它再次返回 false
  • 你可以通过删除请求方法检查来尝试吗...?
  • 试试callback_username_check[username]codeigniter.com/user_guide/libraries/…
  • 如果我删除请求方法,我总是运行代码“die('false')”

标签: php codeigniter


【解决方案1】:

在 Libraries.php 中扩展您的 form_validation 库

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 */ 

【讨论】:

    【解决方案2】:

    我的控制器功能是这样的,它运行完美。我已经自动加载了所有库

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

    【讨论】:

      【解决方案3】:

      在 HTML 中(添加 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>>
      

      在控制器中

      不需要检查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;
              }
          }
      }
      

      查看更多关于CodeIgniter callback function的信息

      【讨论】:

        猜你喜欢
        • 2023-03-29
        • 1970-01-01
        • 2010-11-24
        • 1970-01-01
        • 2014-09-24
        • 2011-12-09
        • 1970-01-01
        • 2012-07-14
        • 1970-01-01
        相关资源
        最近更新 更多