Недавно я столкнулся с очень странной ошибкой. Я пишу функцию сброса пароля, но я испытываю очень странную ошибку, с которой я никогда не сталкивался. Каким-то образом проверка формы превращает мой запрос в пустой массив.
Вот мой код:
public function password_reset()
{
if ($this->auth_model->is_logged_in()) redirect ('welcome');
$userid = $this->uri->segment(3);
$code = $this->uri->segment(4);
$this->db->select('forgot_password, id');
$this->db->from('users');
$this->db->limit(1);
$this->db->where('id',$userid);
$q = $this->db->get();
if (!is_numeric($this->uri->segment(4, 0)) == TRUE && !is_numeric($this->uri->segment(3, 0)) == TRUE) die;
if ($q->row('forgot_password') == $code) {
$this->form_validation->set_rules('password', 'Password', 'required|min_length[4]');
$this->form_validation->set_rules('confirm_password', 'Confirm', 'required|min_length[4]');
if ($this->form_validation->run() !== false) {
if ($this->input->post('password') != $this->input->post('confirm_password')) exit("wrong");
$update = array (
'password' => sha1($this->input->post('password'))
);
$id = $q->row('id');
$this->db->where('id', $id);
$this->db->update('users', $update);
echo $this->db->last_query();
die; // Don't mind the last 2 lines, they were made for debugging purposes.
echo "Password is reset";
} $this->load->view('auth/password_reset');
}
}
Обратите внимание на эту строку:
$ id = $ q-> row ('id');
Здесь начинается проблема.
Если я повторю эту строку, получу «Массив», я попытался сделать print_r для нее, но это, кажется, полностью пустой массив.
Однако, если я попробую повторить
$q->row('id');
до
if ($this->form_validation->run() !== false) {
тогда я получу то, что ожидается, в моем случае это будет целое число, но опять же, как только проверка формы будет пройдена, оно превратит мое целое число в пустой массив.
Итак, проверка формы каким-то образом превращает мою строку запроса в массив.
Любая помощь будет высоко ценится.