Подключение учетных данных входа в систему к полученным данным в codeigniter

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

Очевидно, у меня есть 3 контроллера для моего входа в систему (c_home, c_login и c_verifylogin), 1 модель (m_login) и 1 представление (v_home)

Может кто-нибудь сказать мне, что мне не хватает?

Контроллеры:
c_login

 function index() {
$this->load->helper(array('form','html'));
$this->load->view('v_login'); //load view for login
}

c_home

   function index() {
if($this->session->userdata('logged_in'))
{
$session_data = $this->session->userdata('logged_in');
$data['studentid'] = $session_data['studentid'];
$this->load->view('v_display', $data);
} else {
//If no session, redirect to login page
redirect('c_login', 'refresh');
}
}

function getGrades() {
$data['query'] = $this->m_login->result_getGrades();
$this->load->view('v_display', $data);
}function logout() {
//remove all session data
$this->session->unset_userdata('logged_in');
$this->session->sess_destroy();
redirect('c_login', 'refresh');
}

c_verifylogin

function index() {

$this->form_validation->set_rules('studentid', 'studentid', 'trim|required|xss_clean');
$this->form_validation->set_rules('password', 'password', 'trim|required|xss_clean|callback_check_database');

if($this->form_validation->run() == FALSE) {
$this->load->view('v_login');
} else {
//Go to private area
redirect('c_home', 'refresh');
}
}function check_database() {
//Field validation succeeded.  Validate against database
$studentid = $this->input->post('studentid');
$password = $this->input->post('password');
//query the database
$result = $this->login->login($studentid, $password);
if($result) {
$sess_array = array();
foreach($result as $row) {
//create the session
$sess_array = array('studentid' => $row->studentid);
//set session with value from database
$this->session->set_userdata('logged_in', $sess_array);
}
return TRUE;
} else {
//if form validate false
$this->form_validation->set_message('check_database', 'Invalid username or password');
return FALSE;
}
}

m_login

function login($studentid, $password)
{
//create query to connect user login database
$this->db->select('studentid, password');
$this->db->from('users');
$this->db->where('studentid', $studentid);
$this->db->where('password', md5($password));
$this->db->limit(1);

//get query and processing
$query = $this->db->get();
if($query->num_rows() == 1) {
return $query->result(); //if data is true
} else {
return false; //if data is wrong
}
}
function result_getGrades()
{
$this->db->select('grades.blockcode,subjectblocking.subjectcode,subjects.description,grades.final');
$this->db->from('grades');
$this->db->join('subjectblocking','grades.blockcode=subjectblocking.blockcode');
$this->db->join('subjects','subjectblocking.subjectcode=subjects.subjectcode');
$this->db->where('studentid', '2013-F0218');
$this->db->where('sem', '1');
$this->db->where('sy','2013-2014');
$query=$this->db->get();
return $query->result();

}

Просмотры: v_display

<!DOCTYPE html>
<head>
<title>Simple Login with CodeIgniter - Private Area</title>
</head>
<body>
<h1>Home</h1>
<h2>Welcome <?php echo $studentid; ?>!</h2>
<a href="c_home/logout">Logout</a>

<table class="table">

<thead>
<th>Subject Code</th>
<th>Description</th>
<th>Grade</th>
</thead>
<?php foreach ($query as $row){ ?>
<tr>
<td><?php echo $row->subjectcode;?><br></td>
<td><?php echo $row->description;?><br></td>
<td><?php echo $row->final;?><br></td>
</tr>

<?php } ?>
</table>

</body>
</html>

и ошибка, с которой я столкнулся

Сообщение: неопределенная переменная: запрос

а также

Сообщение: указан неверный аргумент для foreach ()

0

Решение

Первое, что я вижу, это то, что вы не называете таблицу в своем запросе:

Изменить:

$query = $this->db->get();

К этому:

$query = $this->db->get("your_table_name_here);
0

Другие решения

Когда я читаю твой код, я чувствую головную боль.
На самом деле вы можете просто поставить проверочный логин в свой c_login а не создавать другое c_verify контроллер.

Чтобы это имело смысл
Попробуй рефакторинг своего кода так, чтобы соединение было таким

c_home = private page that can only be access if the user is login
c_login = verify if the input of user passed and check the data from database.

Подвести итоги

c_login составим из этих функций:

  1. проверить ввод пользователя
  2. проверить базу данных через m_login

Заметка: Ваш выход должен быть помещен в ядро, чтобы все контроллеры могли его использовать

В вашем c_homeвам просто нужно создать модель, которая будет получать данные из базы данных и передавать их

$data['grades'] = $your_model->get_grades

переменные оценки теперь будут передаваться для просмотра с использованием $ data.

Заметка: Вам не нужно создавать другую функцию, чтобы просто получить данные. Вам нужна только модель, потому что это цель модели, и просто передайте ее в вашей переменной в вашем контроллере.

https://www.codeigniter.com/userguide3/general/

Суммировать :

Из модели -> Контроллер -> Вид Получить данные из модели и передать их в
контроллер показать это в поле зрения

0

По вопросам рекламы [email protected]