Php 未显示flashdata错误

Php 未显示flashdata错误,php,codeigniter,Php,Codeigniter,我的登录表单中的codeigniters flashdata有一个奇怪的问题。当我提交带有错误的表单时(无法识别的电子邮件或错误的电子邮件密码组合),需要两次提交才能显示错误消息。以下是相关代码: //If an email address is matched if($rowcount === 1) { $row = $query->row(); if (hash('sha1', $row->salt . $_POST['password']) === $row-&

我的登录表单中的codeigniters flashdata有一个奇怪的问题。当我提交带有错误的表单时(无法识别的电子邮件或错误的电子邮件密码组合),需要两次提交才能显示错误消息。以下是相关代码:

//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>';
}
if($this->session->flashdata('email\u error')){
echo'

我们无法识别此电子邮件地址。

; } 如果($this->session->flashdata('credentials\u error')){ echo'

我们无法识别这些详细信息。请重试。

; }
因此,如果我提交的表单中包含无法识别的错误电子邮件地址,那么我会设置电子邮件错误闪存数据。问题是,在视图中,我可以看到在打印所有会话数据时设置了flashdata([flash:new:emaili_error]=>1),但我的错误消息没有显示。但是,当我再次提交表单(重新发送相同的数据)时,会显示错误消息


你知道为什么会这样吗?

是的;不要被他们使用的名称所愚弄,Codeigniter中的“会话”是cookie(它们不是本机php$\u会话数组的奇特等价物,而且它们不使用它。Inf act,全局数组通常在CI中被销毁)。因此,它们只有在后续请求时才可用;加载视图时,Cookie刚刚设置好:您需要发出另一个请求,以便浏览器捕捉并显示它

事实上,当您希望在两个http请求之间持久化某些内容时,通常会使用flashdata,而不是在设置它们并加载视图的同一个请求中


您发送表单,进行检查,然后设置带有错误的flashdata,并在同一过程中加载视图。flashdata仅在codeigniter的类中“设置”。当您重新提交表单时,cookie现在可用,因此会显示消息。希望它更清楚。

是的;不要被他们使用的名称所愚弄,Codeigniter中的“会话”是cookie(它们不是本机php$\u会话数组的奇特等价物,而且它们不使用它。Inf act,全局数组通常在CI中被销毁)。因此,它们只有在后续请求时才可用;加载视图时,Cookie刚刚设置好:您需要发出另一个请求,以便浏览器捕捉并显示它

事实上,当您希望在两个http请求之间持久化某些内容时,通常会使用flashdata,而不是在设置它们并加载视图的同一个请求中


您发送表单,进行检查,然后设置带有错误的flashdata,并在同一过程中加载视图。flashdata仅在codeigniter的类中“设置”。当您重新提交表单时,cookie现在可用,因此会显示消息。希望更清楚。

我总是重定向,而不是加载视图,以使我的flashdata正常工作。加载视图时,它不会提交新的http请求,但重定向时,它会提交新的http请求。

为了让flashdata正常工作,我总是重定向而不是加载视图。加载视图时,它不会提交新的http请求,但重定向时,它会提交新的http请求。

但我第一次看到会话数组中的相关会话数据集。这是预期的吗?那么,在这种情况下不使用flashdata是否更好?我想知道在这种情况下重定向是否是一种常见的做法……因为如果你想要flashadata,这似乎是可行的,是的,你需要重定向。否则,它们就没用了,因为你也可以直接打印消息。你不这么认为吗?但是我第一次在会话数组中看到了相关的会话数据集。这是预期的吗?那么,在这种情况下不使用flashdata是否更好?我想知道在这种情况下重定向是否是一种常见的做法……因为如果你想要flashadata,这似乎是可行的,是的,你需要重定向。否则,它们就没用了,因为你也可以直接打印消息。你不觉得吗?