CodeIgniter "flashdata" не работает - PullRequest
11 голосов
/ 29 ноября 2011

Я использую CodeIgniter 2.1.0, я хочу после вставки данных в базу данных получить сообщение типа «Ваша информация была успешно обновлена». Для этой работы у меня в CI_Controller есть следующая функция:

function myCiInser(){
... Here is my query ...
//$data: this var is result query that is true
if($data){
    $this -> session -> set_flashdata('message', 'Your information was successfully updated.');
    redirect('url/myurl');
            }
}

И я имею ввиду:

<?php
$message = $this->session->flashdata('message');
    if($message){
        echo '<div id="error_text">' . $message . '</div>';
    }
//I test this : "echo $message;" but don't give output
?>

Но я не даю сообщение, но redirect сделано и работает верно. и в базе данных в таблице ci_sessions столбец user_data у меня есть это:

а: 2: {s: 9: "user_data"; s: 0: ""; s: 19: "вспышка: новый: сообщение"; s: 42: "Ваш информация была успешно обновлена. ";}

Как можно решить эту проблему?

UPDATE:

У меня была следующая ошибка (я использую от chorme и Ctrl + Shift + j, я получаю это предупреждение):

Не удалось загрузить ресурс: сервер ответил со статусом 404 (Не найдено)

И я исправляю это (теперь у меня нет ошибки), но все еще та же проблема в отображаемом сообщении. что мне делать?

Ответы [ 12 ]

18 голосов
/ 29 ноября 2011

Из документации Codeigniter Класса сеанса относительно Flashdata мы можем прочитать:

CodeIgniter поддерживает "flashdata" или данные сеанса, которые будут толькодоступны для следующего запроса к серверу, а затем автоматически очищаются.

Ваша проблема может заключаться в том, что при перенаправлении процесс принимает более одного запроса, очищая ваши флэш-данные.

Впосмотрите, так ли это, просто добавьте следующий код в конструктор контроллера, на который вы перенаправляете:

$this->session->keep_flashdata('message');

Это сохранит flashdata для другого запроса к серверу, что позволит использовать его впоследствии.

12 голосов
/ 05 октября 2012

У меня тоже была эта проблема.Я не помню, где я видел, но вот мое решение.

redirect('url/myurl','refresh');

CodeIgniter не рассматривал перенаправление как другой запрос.Таким образом, флэш-данные не были установлены в перенаправлении, но это было на следующей странице, которую я загрузил.

3 голосов
/ 08 апреля 2014

// Установить данные флэш-памяти в нашем файле контроллера

$this->session->set_flashdata('sessionkey', 'Value');

// После этого нам нужно использовать функцию перенаправления

redirect("admin/signup");

// Получить данные Flash при просмотре

$this->session->flashdata('sessionkey');
2 голосов
/ 28 июня 2012

Вы также можете использовать базу данных для сеансов, но вы должны установить элементы конфигурации:

$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = FALSE;

Таким образом, флэш-данные сеанса снова будут работать

2 голосов
/ 10 апреля 2012

Использование сеансов с базой данных иногда вызывало у меня проблемы.Я рекомендую установить $config['sess_use_database'] = FALSE; в config.php и посмотреть, нормально ли работает flashdata.

1 голос
/ 08 октября 2014

У меня была такая же проблема.После проверки кода я обнаружил, что звоню $this->session->sess_destroy();, что вызывает проблему.

1 голос
/ 29 сентября 2013

За исключением одной страницы, я могу отображать / передавать значения, используя сеанс.Я попытался использовать var_dump($this->session), и я получил:

["flash:old:Array"]=> bool(false)
["flash:new:message"]=> string(10) "My Message"

Я попытался отобразить флэш-данные на странице без перенаправления сразу после установки данных, но результат был таким же.Я рекомендую урезать код и попытаться установить сессию на других страницах.Если проблема не устраняется, проверьте var_dump.Возможно, это не решение проблемы, но я думаю, что оно может помочь.

ОБНОВЛЕНИЕ : обрезка пробелов и новых строк внутри текста сработала.Я передавал 2 длинных предложения с пустыми переносами строк и пробелами.

if (0) //Assume this condition is false
{   
    $this->load->view('error_page');
    // Generate validation error
}
else
{
    //Show success message
    $data = array(
                'message' => 'My message'
                           );
    $this->session->set_flashdata($data);
    $this->session->keep_flashdata($data);                      
    echo $this->session->flashdata('message');
    //echo var_dump($this->session);
    //redirect(base_url().'success_page');
}
0 голосов
/ 11 марта 2019

Я использую это для флэш-данных, и это удобно.Во-первых, вам нужно создать сеанс, а затем в методе ваших контроллеров использовать его непосредственно перед тем, как вы хотите перенаправить страницу.

На контроллере после создания сеанса и не забудьте загрузить сессию и библиотеку URL.

$this->session->set_flashdata('success', 'Oops. This email id already exist.' );
redirect("You Mehod or page");

В этом случае вам не нужно переходить на конкретную страницу просмотра, чтобы добавить дополнительный код php.

И на footer.php в представлении после этого кода сценария

<!-- Code for flashdata toaster -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/css/toastr.min.css">
<script type="text/javascript">
    <?php if($this->session->flashdata('success')){ ?>
        toastr.success("<?php echo $this->session->flashdata('success'); ?>");
    <?php }else if($this->session->flashdata('error')){  ?>
        toastr.error("<?php echo $this->session->flashdata('error'); ?>");
    <?php }else if($this->session->flashdata('warning')){  ?>
        toastr.warning("<?php echo $this->session->flashdata('warning'); ?>");
    <?php }else if($this->session->flashdata('info')){  ?>
        toastr.info("<?php echo $this->session->flashdata('info'); ?>");
    <?php } ?>
</script>
<!-- End of flashdata script -->

Удачи и надеюсь, что это поможет вашей проблеме.

0 голосов
/ 21 января 2019

У меня была открыта консоль разработчика Chrome и удалены флэш-данные. После закрытия и повторной попытки он работает. Версия 71.0.3578.98 (официальная сборка) (64-разрядная версия)

0 голосов
/ 20 февраля 2018

Я знаю, что я очень поздно, но у меня возникла эта проблема, и я не мог поверить, что в моем случае решение было очень простым

просто замените

$this->session->flashdata('message');

на

print_r($this->session->flashdata('message'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...