В моем коде есть следующая ошибка: 1) данные, которые я храню во время сеанса, не отображаются в поле зрения 2) правила набора проверки формы не работают .. Требуемый не работает. Всякий раз, когда я нажимаю логин, не вводя никаких полей, он печатает.
У меня есть автоматическая загрузка сеанса и проверка формы.
Должен ли я использовать сеансы php или сеансы ci?
Контроллер:
public function loginFormValidation()
{
$this->form_validation->set_rules('email','Username','required'); //not working
$this->form_validation->set_rules('pass','Password','required');
$this->form_validation->set_error_delimiters('<div class = "text-danger">', '</div>');
if ($this->form_validation->run())
{
$email = $this->input->post('email');
$pass = $this->input->post('pass');
$this->load->model('loginModel');
$result = $this->loginModel->loginValidation($email,$pass);
$user_id = $result->user_id;
$user_name = $result->user_name;
$password = $result->password;
$arrayDb = array(
'user_id' => $user_id,
'user_name' => $user_name,
'password' => $password,
);
$this->session->set_userdata('row', $arrayDb);
header("location:".base_url()."/Users/dashboard");
}
else
{
echo "a";
}
}
Модель:
class loginModel extends CI_Model
{
public function loginValidation($email,$pass)
{
$q = $this->db->where(['email' => $email, 'password' => $pass])
->get('users');
if ($q->num_rows())
{
return $q->row();
}
else
{
return false;
}
}
}
Контроллер, на котором я печатаю его для тестирования:
class Users extends CI_Controller
{
public function dashboard()
{
echo $this->session->userdata('user_name'); // Empty no data showing
exit;
}
}
он не работает .. поле установлено на обязательное ... он меня ни о чем не спрашивает
"всякий раз, когда я нажимаю" Войти "без ввода каких-либо полей, он говорит" это точное условие, которое вы закодировали. проверка формы не выполняется, например пустые поля, иначе условие запускается, отображается эхо
хорошо, я понял .. форма _validation работает нормально ... спасибо






В вашем коде есть несколько ошибок и упущений.
Контроллер:
public function loginFormValidation() {
$this->form_validation->set_rules('email', 'Username', 'required');
$this->form_validation->set_rules('pass', 'Password', 'required');
$this->form_validation->set_error_delimiters('<div class = "text-danger">', '</div>');
if ($this->form_validation->run()) {
$email = $this->input->post('email');
$pass = $this->input->post('pass'); // do not store plaintext!!!
$this->load->model('loginModel');
$result = $this->loginModel->loginValidation($email, $pass);
if ($result) {
$user_id = $result->user_id;
$user_name = $result->user_name;
$password = $result->password;
//https://www.codeigniter.com/user_guide/libraries/sessions.html#adding-session-data
$arrayDb = array(
'user_id' => $user_id,
'user_name' => $user_name,
'password' => $password, // why are you storing their PLAINTEXT password in a session?!
);
$this->session->set_userdata($arrayDb);
header("location:" . base_url() . "/Users/dashboard");
} else {
echo 'login failed; bad username/password.';
}
} else {
echo validation_errors();
}
}
Модель:
public function loginValidation($email, $pass) {
$q = $this->db->where(['email' => $email, 'password' => $pass])
->get('users');
if ($q->num_rows() == 1) {
return $q->row();
}
return false;
}
Вместо того, чтобы изобретать колесо, попробуйте: https://github.com/benedmunds/CodeIgniter-Ion-Auth Я лично использую его и рекомендую.
Я сохраню пароль в зашифрованном виде, но я просто тестировал, поскольку мои сеансы не работают ... функция модели входа в систему возвращает данные, которые я проверил ...
затем обратите внимание, как я добавляю массив сеанса
да, это сработало ... спасибо ... так в чем была настоящая ошибка в моем коде, вы можете объяснить? и кто я могу проверить, настроен ли сеанс?
В коде есть ссылка, которая должна очистить часть сеанса. В основном, если вы отправляете массив в заданную функцию сеанса, вы не добавляете ключ в начале, если это не требуется. Кроме того, вы не проверяли, был ли результат правильным из вашей функции базы данных.
Я добавлял ключ, так как хочу использовать эту функцию isset ($ _ SESSION ['some_name']); Как я могу это использовать?
Вы назначали переменные сеанса массиву, называемому строками, например. $ _session ['rows'] ['user_id'], но вы хотели $ _session ['user_id'] ... И да, вы можете получить к нему доступ, используя глобальную переменную $ _session. Хотя я бы посоветовал использовать данные пользователя, поскольку они не дают вам undefined index error, если вы не проверяете, установлен ли isset, и вместо этого возвращает null, если null без ошибок.
проверка формы работает ... вы ничего не вводите, а отображается ...