Bonjour, je rencontre un problème avec mon système d'alert .. Lorsque l'utilise poste un message, je créer deux variables de sessions contenants le type du message, et le message en lui même. Ensuit je vérifie avec jquery que la valeur de la div est >0 puis j'affiche. Voilà mon code: (je travail avec CI) **SCRIPT JQUERY** [code] var alert = $('.alert'); if(alert.length > 0 ){ alert.hide().show().delay(2000).slideUp(700); }[/code] **CODE HTML** [code]<section class="alert <?= $this->session->userdata('type');?>">
<div class="container"><p>= $this->session->userdata('message');?></p></div>
</section>[/code] **CONTROLLER** [code]$this->session->set_userdata('message','Votre commentaire à été ajouter avec success'); $this->session->set_userdata('type','true');/code] Malheuresement, même quand je charge ma page par défaut (sans avoir remplis les sessions), la div s'affiche (sans style prédéfinie) J'ai beau essayer de mettre un *if(isset($this->session->userdata('message'))* ou l'inverse, rien n'y fait, ma div s'affiche toujours.... Une idée ?

9 réponses


Benjamin Derepas
Auteur
Réponse acceptée

Pour plus d'informations, voici le contenu de mes fichiers :
controller

function article()
    {
        $this->form_validation->set_rules('autheur','Nom','trim|required|xss_clean');
        $this->form_validation->set_rules('mail','Email','trim|required|xss_clean|valid_email');
        $this->form_validation->set_rules('url','Site web','trim|valid_url|xss_clean');
        $this->form_validation->set_rules('commentaire','Commentaire','trim|required|xss_clean');
        if($this->form_validation->run())
        {
            $data = array(
                'autheur'=>$this->input->post('autheur'),
                'mail' => $this->input->post('mail'),
                'url' => $this->input->post('url'),
                'contenu' => $this->input->post('commentaire'),
                'article' => $this->input->post('article_id')
                );
            $this->commentaires_model->insert($data);
            $this->session->set_userdata('message','Votre commentaire à été ajouter avec success');
            $this->session->set_userdata('type','true');
            $this->session->set_userdata('previous',$_SERVER'HTTP_REFERER']);
            redirect($this->session->userdata('previous'));
        }
        else
        {

            $this->load->model('articles_model');
            $this->load->model('commentaires_model');
            $data'un_article'] = $this->articles_model->un_article();
            $data'commentaires'] = $this->commentaires_model->tous_les_commentaires_article();
            $data'categories'] = $this->categories_model->toutes_les_categories();
            $this->load->view('un-article',$data);  
        }

    }

View

<section class="alert <?= $this->session->userdata('type');?>">
    <div class="container"><p><?= $this->session->userdata('message');?></p></div>
</section>

var alert = $('.alert'); 
        if(alert.length > 0){
            alert.hide().show().delay(2000).slideUp(700);
        }
Benjamin Derepas
Auteur
Réponse acceptée

Erreur de ma part, pourquoi passer par les sessions lorsque les flashs existent ?

$this->session->set_flashdata('type', 'true');
$this->session->set_flashdata('message', 'Votre commentaire à été ajouter avec success');

Et coté vue :

<?php if($this->session->flashdata('message')):?>
<section class="alert <?= $this->session->flashdata('type');?>"><?= $this->session->flashdata('message');?></section>
<?php endif;?>

Bonjour,
essayes peut-être:

if(!empty($this->session->userdata('message')):
<section class="alert <?= $this->session->userdata('type');?>">
    <div class="container"><p><?= $this->session->userdata('message');?></p></div>
</section>
endif;
<?php if(!empty($this->session->userdata('message')):?>
<section class="alert <?= $this->session->userdata('type');?>">
    <div class="container"><p><?= $this->session->userdata('message');?></p></div>
</section><?php endif;?>

Retourne Error 505
Malgré la fatigue, j'aimerais comprendre là ...

Que renvoie ?

$this->session->userdata('message')

Il me renvoi bien le message...

Après reflexion, il semblerais que le problème vienne du fait que mes variables de sessions restent en mémoire (malgré le unset que j'ai essayé). Donc même lorsqu'on vient de la page d'accueil, il m'indique qu'un message à été posté

Tu fais un unset dans le controller ou dispatcher, car si c'est dans le controller et que tu changes de pages et donc de controller, ce dernier n'est donc pas appeler donc, le unset n'est pas effectuer, que si tu met dans le dipatcher, voir le controller général, ça supprimera quelque soit la page.

Je fait un unset dans le controller, dans la même methode que celle appellée (article)