【问题标题】:Form validation: Unable to access an error message corresponding to your field name password表单验证:无法访问与您的字段名称密码对应的错误消息
【发布时间】:2015-06-15 11:39:54
【问题描述】:

我在一个 codeigniter 站点的 firebug 中遇到了这个错误 无法访问与您的字段名称密码对应的错误消息 我已经搜索过,发现代码中有错误时会弹出错误,但没有一个问题像我的那样。 你能帮忙吗?

登录控制器

function do_login()
{
 $username = $this->input->post('username');
 $password = $this->input->post('password');

 if(!empty($username) && isset($username))
 {
 $this->form_validation->set_rules(
      'username', 'Your Username',
      'trim|required|xss_clean|max_length[20]|callback_username_check');

 $this->form_validation->set_rules('password', 'Password','trim|required||xss_clean|callback_password_check['.$username.']|min_length[4]|max_length[20]');

if($this->form_validation->run() == FALSE)
{

 echo json_encode(array('st'=>0, 'msg' => validation_errors()));
}
 else if(($this->form_validation->run() == TRUE))
{ 
echo json_encode(array('st'=>1));
}
function username_check($username)
{
$this->form_validation->set_message('username_check', ' is not regesterd!');
$checkVar=$this->user_model->check_user($username);
if($checkVar == true)
{return TRUE;}
elseif ($checkVar == false)
{return false;}
}   
function password_check($username,$password)
{
$this->form_validation->set_message('password_check', ' is not correct!');
$checkVar =  $this->user_model->check_pass($username,$password);
if($checkVar == true)
{return TRUE;}
elseif ($checkVar == false)
{return false;
}}}}

user_model

public function check_user($username) 
{
$this->query = $this->db->select('COUNT(*)')
    ->from('users')
    ->where(array('username'=>$username))
    ->limit(1)->get();
$query = $this->query->num_rows();
if ($query> 0){
    return true;
}
else{
    return false;
}
}
 public function check_pass($username, $password) 
{
$this->query = $this->db->select('COUNT(*)')
    ->from('users')
    ->where(array('username'=>$username, $password))
    ->limit(1)->get();
$query = $this->query->num_rows();
if ($query> 0){
    return true;
}
else{
    return false;
}
}

ajax

<script type="text/javascript">
$(document).ready(function() {
$('#frm').submit(function(){

$.post(
     $('#frm').attr('action'), 
     $('#frm').serialize(), 
     function( data ) 
     {
     if (data.st == 0)
     {
     $('#validation-error').html(data.msg);
     }
     else if(data.st == 1)
     {           var url = "home/"
     window.location.href = url;

     }
     }, 
     'json'
   );
 return false;   
  });


});

</script>

表格

<?php echo form_open('signin/do_login', array('id'=>'frm')); ?>

                                <input type="text" id='username' name="username" size="15" placeholder="اسم المستخدم">                              

                                                                    <input type="password" id="password" name="password" size="15" placeholder="كلمة المرور" >                              
                                                                        <div id="validation-error"></div>
                            <input type='submit' value="تسجيل الدخول">
                                        </form>

【问题讨论】:

  • 两个username 提交在您的表单中
  • 在您的 html 中,您有两个输入具有相同的 name="username" 和 id="username"。
  • 验证 2 个表单元素“用户名”,让我看看目前的情况。
  • 您使用的是什么版本的 codeigniter?我问是因为xss_clean 在 v3 的表单验证中不可用。
  • 一个额外的管道| 在需要之后(不是问题)和缺少右括号callback_password_check['.$username.'|(可能肯定是问题)@HeshamWatany

标签: ajax forms codeigniter validation authentication


【解决方案1】:

搜索调试后发现问题出在这一行

 $this->form_validation->set_rules('password', 'Password','trim|required||xss_clean|callback_password_check['.$username.']|min_length[4]|max_length[20]');

应该是

 $this->form_validation->set_rules('password', 'Password','trim|required|xss_clean|callback_password_check['.$username.']|min_length[4]|max_length[20]');

问题是 required 和 xss clean 之间的“|” 谢谢

【讨论】:

    【解决方案2】:

    你在控制器中丢失了方括号

    'trim|required||xss_clean|callback_password_check['.$username.'|min_length[4]|max_length[20]'
    

    应该是

    'trim|required||xss_clean|callback_password_check['.$username.']|min_length[4]|max_length[20]'
    

    【讨论】:

    • typo 应该是评论而不是答案。
    • 我的声望等级不允许我发表评论,和平
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    相关资源
    最近更新 更多