【问题标题】:CI - show me what went wrong [duplicate]CI - 告诉我出了什么问题[重复]
【发布时间】:2013-05-10 08:25:15
【问题描述】:

我开发了一个简单的登录系统,它可以正常工作但失败了,我需要知道原因。

问题:如何显示导致失败的原因?

这是数据库函数:

function login($email,$password)
{
    $this->db->where("email",$email);
    $this->db->where("password",$password);

    $query=$this->db->get("users");
    if($query->num_rows()>0)
    {
        foreach($query->result() as $rows)
        {
            //add all data to session
            $newdata = array(
                'user_id'  => $rows->id,
                'user_name'  => $rows->username,
                'user_email'    => $rows->email,
                'logged_in'  => TRUE,
            );
        }
        $this->session->set_userdata($newdata);
        return true;
    }
    return false;
}

这是逻辑:

public function login()
{
    $this->load->library('form_validation');
    // field name, error message, validation rules
    $this->form_validation->set_rules('email', 'Your Email', 'trim|required|valid_email');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]');

    if($this->form_validation->run() == FALSE)
    {
        $this->signin();
    }
    else
    {
        $email=$this->input->post('email');
        $password=md5($this->input->post('pass'));
        $result=$this->user_model->login($email,$password);
        if($result)
        {
            $this->dash();
        }
        else
        {
            $data['title']= 'Login Error';
            $this->load->view('nav/header', $data);
            $this->load->view('login', $data);
            $this->load->view('nav/footer', $data);
        }
    }
}

我知道错误正在发生,因为如果失败,我将重定向回登录页面并更改标题文本以显示给我(目前仅在测试模式下)。但是我怎样才能找出问题所在呢?

这是检查数据库功能:

function login($email,$password)
{
    $this->db->where("email",$email);
    $this->db->where("password",$password);

    $query=$this->db->get("users");
    if($query->num_rows()>0)
    {
        foreach($query->result() as $rows)
        {
            //add all data to session
            $newdata = array(
                'user_id'  => $rows->id,
                'user_name'  => $rows->username,
                'user_email'    => $rows->email,
                'logged_in'  => TRUE,
            );
        }
        $this->session->set_userdata($newdata);
        return true;
    }
    return false;
}

【问题讨论】:

  • 为什么要粘贴两次模型代码?
  • 旁注:密码验证时不要应用trim规则
  • 你完全改变了问题。询问另一个并保留旧的。

标签: php mysql codeigniter codeigniter-2


【解决方案1】:

我假设你所有的 php 代码都很好,那么你需要为每个输入设置自定义 form-validation-message 以了解哪个输入出错并回显它们:

<?php echo validation_errors(); ?>

【讨论】:

    【解决方案2】:

    在您的视图文件中写入以下代码

    <section id="notification" >
    <?php
          if(validation_errors() !== '' ) { 
             echo "<div class='alert-msg error'>";
             echo validation_errors();
             echo "</div>";
          }
          $error = $this->session->flashdata('error');
          $success = $this->session->flashdata('success');
          if($error)
          {
            echo "<div class='alert-msg error'>";
            echo $this->session->flashdata('error');
            echo "</div>";
          }
    
          if($success)
          {
            echo "<div class='alert-msg success'>";
            echo $this->session->flashdata('success');
            echo "</div>";
          }
      ?>
    </section>
    

    并在控制器的闪存数据中有条件地设置成功/错误消息(见下文)

     if($result) {
        $this->dash();
        $this->session->set_flashdata('success', 'Login successfully.');
     } else {
         $this->session->set_flashdata('error', 'Login failed');
     }
    

    阅读更多Flashdata in CI

    【讨论】:

    • 谢谢,但不是验证错误-它的数据库错误-将更新问题
    【解决方案3】:

    对于您更改的答案:

    在您的模型中使用以下逻辑

     $qry = $this->db->get_where('users', array('username' => $this->_username ));
     if ($qry->num_rows() == 1) {           
        $user = $qry->row_array();
        $submitted_pass = md5($this->_password);
        $db_pass = $user['password'];
        if ($submitted_pass === $db_pass) {
            return $user;
        } else {
            // wrong username/password
            $this->session->set_flashdata('error', $this->errorList[10]);
            return FALSE;
        }
    } else {
        // no such username exist     
        $this->session->set_flashdata('error', $this->errorList[15]);
        return FALSE;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-01-28
      • 1970-01-01
      • 2020-02-10
      • 2011-08-03
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多