CodeIgniter 闪存数据延迟

标签 codeigniter

我正在尝试验证登录表单并使用 flashdata 发送错误消息。 Flashdata 似乎有延迟,它只影响第二次提交(第一次提交后没有错误消息显示,第二次后正常),而 userdata 工作正常。

查看>

<?php if ($this->session->flashdata('error_messages')): ?>
  <?php echo $this->session->flashdata('error_messages'); ?>
<?php endif; ?>
<?php echo form_open('user/login', array('name' => 'login_form', 'id' => 'login_form')); ?>
<fieldset>
  <p>
    <?php echo form_label('Username: ', 'username'); ?>
    <?php echo form_input('username', set_value('username', ''), array('id' => 'username', 'placeholder' => 'username')); ?>
  </p>
  <p>
    <?php echo form_label('Password: ', 'password'); ?>
    <?php echo form_password('password', set_value('password', ''), array('id' => 'password', 'placeholder' => '********')); ?>
 </p>
 <p>
   <?php echo form_submit('login', 'Login', array('id' => 'login')); ?>
 </p>

Controller Action >

public function login() {
    //user is not logged in, carry on
    if (!user_is_logged_in()) {
        //check if form was already submitted, if yes validate
        if ($this->input->post('login')) {
            $this->load->library('chronos_user');

            //gather data from form
            $username = $this->input->post('username');
            $password = $this->input->post('password');

            //validate form, show error messages if not valid
            if (
                !($this->chronos_user->valid_username($username)) ||
                !($this->chronos_user->unique_username($username))
            )
            {
                $this->chronos_template->set_data('header', array('controller' => 'users', 'action' => 'login', 'title' => 'Login'));
                $this->chronos_template->set_view('content', 'user/login_view');
                $this->chronos_template->view();
            }
            //redirect if ok
            else {
                header("Location http://c4studio.ro");
            }
        }
        //if no form was submitted, just display it
        else {
            $this->chronos_template->set_data('header', array('controller' => 'users', 'action' => 'login', 'title' => 'Login'));
            $this->chronos_template->set_view('content', 'user/login_view');
            $this->chronos_template->view();            
        }
    }
    //user is already logged in, redirect to profile page
    else {
        $profile_url = "Location: ";
        $profile_url .= site_url();
        $profile_url .= "user/profile/";

        header($profile_url);
    }
}

Valid_username 方法>

    public function valid_username($username) {
        if (empty($username)) {

            $this->CI->session->set_flashdata('error_messages', 'Value.');
            return FALSE;
        }
        if (strlen($username) < 3) {
            $this->CI->session->set_flashdata('error_messages', 'Value11.');
            return FALSE;
        }
        return TRUE;
    }

有什么想法吗?另外,如果有人知道做这一切的更好方法,请告诉我!谢谢

最佳答案

根据documentation闪存数据存在于下一个服务器请求

但在您的情况下,您实际上在显示登录 View 时在同一服务器请求中设置了 flashdata,但这是不成功的。这就是它不起作用的原因。

更好的方法是让您的模型方法返回 true 或 false 并改用该值。仅当您将用户重定向到错误页面或类似页面时才应考虑闪存数据。

关于CodeIgniter 闪存数据延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7483181/

相关文章:

php - 代码点火器。查询重复结果

php - 通过多个不同名称的复选框从mysql获取数据

javascript - 如何仅使用 jQuery 知道文件名来下载文件?

mysql - Codeigniter 查看 undefined variable 错误

php - 如果用户在过去 60 天内未在 codeigniter 中登录,则重定向到重置密码页面

php - 在 codeIgniter 查询中使用 mysql PASSWORD

javascript - Codeigniter 动态日期范围

php - 用户定义的变量在 Mysql Code Igniter 中不起作用

php - 在 $config ['encrypt_name' 之后获取文件名] 使用 codeigniter

php - 如何将 PHP 模板添加到动态生成的 Javascript 代码中