CI - покажи мне, что пошло не так

Я разработал простую систему входа в систему, которая работает нормально, но не работает, и мне нужно знать, почему.

ВОПРОС: Как показать, что является причиной сбоя?

Вот функция базы данных:

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

3 ответа

Я предполагаю, что весь ваш php-код в порядке, а затем вам нужно установить настраиваемое сообщение проверки формы для каждого ввода, чтобы узнать, какой ввод был неправильным, и повторить их:

<?php echo validation_errors(); ?>

Для вашего измененного ответа:

используйте ниже логику в вашей модели

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

Напишите ниже код в вашем файле просмотра

<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 в CI

Другие вопросы по тегам