Home > front end >  Flashdata is not cleared after a redirect in CodeIgniter 3
Flashdata is not cleared after a redirect in CodeIgniter 3

Time:12-24

I'm using CodeIgniter 3 and the flashdata I set on that project is not cleared even after a redirect. It still being shown after the page is refreshed or visit the page again. How can I fix this issue?

A function in a controller.

public function updateDonor($donor)
    {

        $birthDate = $this->input->post('donordob');
        $currentDate = date("Y-m-d");
        $age = date_diff(date_create($birthDate), date_create($currentDate));

        $this->form_validation->set_rules('donorname', 'Donor Name', 'required');
        $this->form_validation->set_rules('donornic', 'Donor NIC', 'required');
        $this->form_validation->set_rules('donordob', 'Donor DOB', 'required');
        $this->form_validation->set_rules('donorweight', 'Donor Weight', 'required');
        $this->form_validation->set_rules('donormobile', 'Donor Mobile', 'required');

        if ($this->form_validation->run()) {
            $data = [
                'DonorName' => $this->input->post('donorname'),
                'DonorNIC' => $this->input->post('donornic'),
                'DonorDOB' => $this->input->post('donordob'),
                'DonorAge' => $age->format("%y"),
                'DonorWeight' => $this->input->post('donorweight'),
                'DonorMobile' => $this->input->post('donormobile'),
            ];
            $this->load->model('Donor_Model');
            $data['donor'] = $this->Donor_Model->updateDonor($data, $donor);
            $this->session->set_flashdata('donorupdated', 'Donor detailed updated successfully!');
            redirect(base_url('index.php/staff/viewdonors'));
        } else {
            $this->editDonors($donor);
        }


    }

Code in the view

<?php if ($this->session->flashdata('donorupdated')) { ?>
    <script>
        alertify.set('notifier', 'position', 'top-right');
        alertify.success("<?php echo $this->session->flashdata('donorupdated'); ?>")
    </script>

<?php } ?>

CodePudding user response:

Just add unset($_SESSION['donorupdated']); after the <script> tag like below

<?php if ($this->session->flashdata('donorupdated')) { ?>
    <script>
        alertify.set('notifier', 'position', 'top-right');
        alertify.success("<?php echo $this->session->flashdata('donorupdated'); ?>")
    </script>
    <?php unset($_SESSION['donorupdated']); ?>

<?php } ?>

CodePudding user response:

If you do not do this please follow the following steps.

CREATE TABLE IF NOT EXISTS `ci_sessions` (
    `id` varchar(128) NOT NULL,
    `ip_address` varchar(45) NOT NULL,
    `timestamp` int(10) unsigned NOT NULL DEFAULT 0,
    `data` blob NOT NULL,
    KEY `ci_sessions_timestamp` (`timestamp`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Then inside autoload.php add $autoload['libraries'] = array('session');

For your kind reference please have a look Session Library

Then inside config.php.

$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = TRUE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = TRUE;

Code in view

<?php if($this->session->flashdata('donorupdated')) { ?>
    echo $this->session->flashdata('donorupdated');
<?php } ?>
  • Related