ошибка flashdata не отображается - PullRequest
1 голос
/ 22 февраля 2012

У меня странная проблема с флеш-данными codeigniters в моей форме входа в систему.Когда я отправляю форму с ошибкой (нераспознанная электронная почта или неверный пароль электронной почты), для отображения сообщения об ошибке требуется две отправки.Вот соответствующий код:

//If an email address is matched
if($rowcount === 1) {
    $row = $query->row();
    if (hash('sha1', $row->salt . $_POST['password']) === $row->password) {
        //there's a matching user...create a session here and redirect to homepage  
    } else {
        $this->session->set_flashdata('credentials_error', '1');
    // echo 'recognise email but not password';
    }
} else {
    //send message back to view here
    $this->session->set_flashdata('email_error','1'); 
 }

 print_r($this->session);
 $global_data['page_data'] = $this->load->view('login-template','',true);
 $this->load->view('global', $global_data);

и соответствующий бит из представления:

if($this->session->flashdata('email_error')) {
    echo '<p class="error">We dont recognise this email address.</p>';
}

if($this->session->flashdata('credentials_error')) {
    echo '<p class="error">We dont recognise these details. Please try again.</p>';
}

Поэтому, если я отправляю форму с неверным адресом электронной почты, который не распознан, я устанавливаю флеш email_errorданные.Проблема в том, что в представлении я вижу, что flashdata устанавливается, когда я распечатываю все данные сеанса ([flash: new: emaili_error] => 1), но мое сообщение об ошибке не отображается.Однако при повторной отправке формы (повторная отправка тех же данных) появляется сообщение об ошибке.

Есть идеи, почему это может быть?

Ответы [ 2 ]

3 голосов
/ 22 февраля 2012

Да;не дайте себя одурачить именем, которое они используют, «сессии» в Codeigniter - это куки (они не являются причудливым эквивалентом собственного массива php $ _SESSION и не используют его. Например, глобальные массивы обычно уничтожаютсяв КИ).Как таковые, они доступны только по последующему запросу;когда вы загружаете представление, cookie-файлы только что были установлены: вам нужно сделать еще один запрос, чтобы браузер мог его отследить и отобразить.

Обычно флеш-данные используются, фактически, когда вы хотите сохраняются что-то между 2 http-запросами, а не в том же запросе, который вы устанавливаете и загружаете представление.

Бывает, что вы отправляете форму, делаете проверки, а затем устанавливаете flashdata с помощьюошибка и в этом же процессе вы загружаете представление.Флэш-данные «установлены» только в классе codeigniter.Когда вы повторно отправляете форму, файл cookie теперь доступен, поэтому вы видите сообщение.Надеюсь, это будет понятнее.

2 голосов
/ 22 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...