8 votes

Les flashdata ne sont pas effacées dans Codeigniter

J'utilise Codeigniter 2.1.4 et je rencontre quelques problèmes avec flashdata. Lorsque je soumets un enregistrement avec succès, je peux afficher le message flashdata. Mais si je vais sur une autre page à partir de la page où le message flashdata a été affiché et que je retourne ensuite à la page précédente en utilisant le bouton retour du navigateur, le message flashdata s'affiche à nouveau.
Comment effacer le message flashdata une fois qu'il a été utilisé ? Je pense que ce n'est pas un problème de flashdata mais de cache. Je ne comprends pas pourquoi cela se produit. S'il s'agit d'un problème de cache, comment le supprimer ?

Voici le code que j'ai utilisé,

//In the manage of controller
$this->session->set_flashdata('message', "Record updated successfully.");

// In the view of controller
$data['message'] = $this->session->flashdata('message');

// In the view page
echo $message;

4voto

Nabil Points 164

Le flash ne disparaît qu'après la prochaine actualisation

4voto

Amos Tanui Points 49

Allez dans System->libries->Session->session.php Trouvez la fonction flshdata et remplacez-la par ceci

public function flashdata($key = NULL)
{
    if (isset($key))
    {
        $return= (isset($_SESSION['__ci_vars'], $_SESSION['__ci_vars'][$key], $_SESSION[$key]) && ! is_int($_SESSION['__ci_vars'][$key]))
            ? $_SESSION[$key]
            : NULL;
            unset($_SESSION[$key]);
            return $return;
    }

    $flashdata = array();

    if ( ! empty($_SESSION['__ci_vars']))
    {
        foreach ($_SESSION['__ci_vars'] as $key => &$value)
        {
            is_int($value) OR $flashdata[$key] = $_SESSION[$key];
        }
    }
    unset($_SESSION[$key]);
    return $flashdata;
}

3voto

ABorty Points 2462

Votre code dans le contrôleur est correct

//In the manage of controller
$this->session->set_flashdata('message', "Record updated successfully.");
redirect('controller_name/function_name','refresh');

maintenant en vue de l'utiliser comme suit

if($this->session->flashdata('message')){echo $this->session->flashdata('message');}

J'espère que cela fonctionnera

2voto

sandeep kumar Points 620

Si vous voulez effacer set_flash dans le contrôleur ou dans un autre fichier de vue, vous pouvez utiliser ce code simple.

$this->session->set_flashdata('error', 'User not found...'); //create set_flash

détruire set_flash

//echo "<pre>"; print_r($_SESSION); die; //for check 

if(isset($_SESSION['error'])){
    unset($_SESSION['error']);
}

1voto

Wasim Points 1271

Usted doit réorienter la page quelque part après $this->session->set_flash('item','value');

Exemple :

if ($this->form_validation->run() == FALSE){
    $this->session->set_flashdata('error',validation_errors());
    redirect(base_url().'user/login');
}
else{
    $this->session->set_flashdata('success','Thank you');
    redirect(base_url().'user/login');
}

En général, les développeurs commettent une erreur lorsqu'ils soumettent des données à la même page. Ils définissent des données flash mais oublient de les rediriger.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X