【问题标题】:Codeigniter Flash Data not deletingCodeigniter Flash 数据未删除
【发布时间】:2018-09-02 19:34:24
【问题描述】:

我的代码实际上并没有删除。我正在检查 $user_id 变量是真还是假。如果为真,则用户已登录并重定向,如果为假,则创建闪存数据,显示未登录。
问题是一旦创建的闪存数据不会消失,我会从 $user_id 变量中的模型返回行数

 $user_id = $this->login_model->login($email,$password);
 if($user_id == true){
    $user_data = array("user_id"=>$user_id,"email"=>$email,"loggedin"=>true);
    $this->session->set_userdata($user_data);
    $this->session->set_flashdata('login_success','You Are Now Logged In');
    redirect('dashboard');
 }else{
    $this->session->set_flashdata('login_failed','Email Or Password Is Incorrect'); 
 }

这是我的模型代码:

$query =$this->db->where('email',$email);
$query =$this->db->where('password',$password);
$result = $this->db->get('users');
   if($result->num_rows() == 1){
      return $result->row(0)->id;
      }else{
         return false;
     }

【问题讨论】:

  • 型号代码与您的问题无关。你是如何显示 flashdata 的?
  • 可能与Flashdata not getting cleared in Codeigniter 重复您可以尝试此问题中给出的一些解决方案。他们应该工作。
  • 显示您的查看页面

标签: php database codeigniter codeigniter-3


【解决方案1】:

为了使flash_data消失淡出,您需要为此创建一个脚本。

用它来让你的 flash_data 消失。

setInterval(function()
  {
     $('#flash_data').fadeOut('slow');
  }, 3000);

设置间隔并在您的 html 代码中执行此操作...

<?php if(($this->session->flashdata('name')=='Hello, I am Flash Data')){?>
     <div class="alert alert-info alert-dismissible fade in" role="alert" id="flash_data"> //set your id here
     <i class="glyphicon glyphicon-ok"></i>  <?php echo $this->session->flashdata('notif'); ?>
     </div>
<?php } ?>

希望有帮助:)

【讨论】:

    【解决方案2】:

    步骤 01

    在模型中,您传递 return $result-&gt;row(0)-&gt;id; 并检查 if($user_id == true){。它永远不会进入函数 boolen != Intiger

    替换这个

    if($user_id == true){
    

    到这里

    if($user_id != false){
    

    步骤 02

    你有两种方式在控制器if andelse. Only one defined withredirect`

    if($user_id == true){ # Must change accroding to step 01
        $this->session->set_flashdata('login_success','You Are Now Logged In');
        redirect('dashboard');
    }else{
        $this->session->set_flashdata('login_failed','Email Or Password Is Incorrect'); 
        # missing ??? Maybe redirect('login');
    }
    

    redirect 添加到login 路由,这将起作用。


    1. Flash 数据只能使用一次
    2. Flash 数据适用于浏览器 REFRESH

    【讨论】:

    • 您好,实际上我有一个问题,我发现我在同一页面上使用表单操作,这就是为什么它会导致此错误,因为闪存数据不断出现,您能帮我解决这个问题吗?
    • if($this->session->flashdata('login_success')){ echo $this->session->flashdata('login_success'); }elseif($this->session->flashdata('login_failed')){ echo $this->session->flashdata('login_failed'); }
    • 添加您的问题并添加表单
    • 嗨,我通过更改另一个页面上的操作解决了这个问题 action="login/login_check" 但你能告诉我一种方法,我可以像在核心 php 中一样在同一页面上显示错误 if( isset($_POST[''submit])){ 回显错误?>
    【解决方案3】:

    使用 jQuery 让数据消失。

    <script>
        setTimeout(function () {
            $("#div_id").hide();
        }, 4000);
    </script>
    

    【讨论】:

      【解决方案4】:

      如果你仍然找到解决方案,你可以试试我的解决方案

      在你的 body 中添加 onload js 函数

      <body onload="clearme();">
      

      在你的底部添加js脚本

      <script type="text/javascript">
          function clearme() {
            <?php
              if (isset($_SESSION['msg_success'])):
                  unset($_SESSION['msg_success']);
              elseif (isset($_SESSION['msg_error'])):
                  unset($_SESSION['msg_error']);
              endif;
           ?>
         }
      </script>
      

      每次加载新控制器时,它都会清除您的 flashdata 会话。这对我有用,因为你的问题以前对我来说也是噩梦。

      【讨论】:

      • 为什么要在 javascript 中包装 PHP 代码?虽然语法上有效,但它没有语义关系,不会通过调用clearme() 来执行。相反,PHP 将在呈现页面时执行代码,而不考虑任何 javascript
      • 它工作正常,因为您在页面加载时执行 PHP 代码,无论如何。没有理由使用任何 javascript 或 onload 调用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 2017-10-29
      相关资源
      最近更新 更多