Flashdata CodeIgniter не работает

Я использую 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 у меня есть это:

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

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

ОБНОВЛЕНИЕ:

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

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

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


person Kate Wintz    schedule 29.11.2011    source источник
comment
Это опечатка, но вы присваиваете flashdata $message_p, а echo $message ?   -  person Rooneyl    schedule 29.11.2011
comment
Нет, пожалуйста, посмотрите еще раз мой пост.   -  person Kate Wintz    schedule 29.11.2011
comment
Любое решение? Я вижу, что flashdata не работает при использовании сеанса с базой данных.   -  person Pradeep Kumar Mishra    schedule 19.10.2012
comment
спасибо за ОБНОВЛЕНИЕ. после удаления некоторых 404 (не найденных) элементов из представления мои flashdata работают нормально. я думаю, что 404 будет считаться одним запросом сервера.   -  person apis17    schedule 24.04.2013
comment
привет, это старый вопрос, но как вы решили эту проблему, у меня тоже есть эта проблема   -  person Himanshu Pandey    schedule 25.04.2013


Ответы (12)


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

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

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

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

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

Это позволит сохранить флэш-данные для другого запроса к серверу, что позволит использовать их впоследствии.

person Quetzy Garcia    schedule 29.11.2011
comment
Я тестирую keep_flashdata, но не работает, все та же проблема. В чем разница между keep_flashdata и flashdata ? - person Kate Wintz; 29.11.2011
comment
Метод keep_flashdata() не предназначен для замены flashdata(). keep_flashdata() сохраняет переменную flashdata посредством дополнительного запроса. Вы должны прочитать документацию по ссылке, которую я разместил. - person Quetzy Garcia; 29.11.2011
comment
Это необходимо, чтобы перенаправить страницу, чтобы сохранить флэш-данные. Моя проблема в том, что в первый раз флэш-данные работают нормально, но когда я обновляю страницу, сообщение флэш-данных очищается. - person Musaddiq Khan; 13.02.2015
comment
@MusaddiqKhan Ну, в этом весь смысл флэш-данных. Как только вы читаете его в первом запросе, он очищается в следующем. Если вам нужно сохранить данные независимо от того, сколько запросов вы делаете, используйте методы сеанса по умолчанию, а не метод флэш-памяти. - person Quetzy Garcia; 14.02.2015
comment
На самом деле я хочу перенести flashdata до двух запросов, после чего я хочу, чтобы это значение сеанса было очищено. По первому запросу он работает хорошо, но по второму очищается, хотя я использовал команду keep_flashdata. - person Musaddiq Khan; 16.02.2015
comment
Бьюсь об заклад, запрос, который вы считаете вторым, на самом деле является третьим, и вы потеряли данные к этому моменту. - person Quetzy Garcia; 16.02.2015

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

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

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

person Vinicius    schedule 05.10.2012
comment
Да, удаление обновления, кажется, исправляет ошибку «обновления» в FF. Все браузеры подтверждают перенаправление без «обновления». - person Antonio Max; 15.11.2012
comment
Спасибо за комментарий, у меня работает - redirect('url/myurl','refresh'); - person Vinayagam; 14.09.2015

// Устанавливаем flash данные в наш файл контроллера

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

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

redirect("admin/signup");

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

$this->session->flashdata('sessionkey');
person Sujeet Kumar    schedule 08.04.2014
comment
@AlphaMale, пожалуйста, укажите свою проблему. - person Sujeet Kumar; 13.08.2014
comment
проблема в том, что я использовал тот же код для своих флэш-сообщений. но вдруг они больше не работают. - person AlphaMale; 13.08.2014

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

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

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

person Tihomir Mihaylov    schedule 27.06.2012
comment
Бинго, это была моя проблема. Это должно быть ошибкой, я имею в виду, что мы не можем использовать файлы cookie безопасным способом и флэш-данные одновременно? Кто-то, кто использует Laravel, может нам помочь? - person Marcelo Agimóvel; 09.09.2017

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

person Abdulqader Kapadia    schedule 10.04.2012

За исключением одной страницы, я могу отображать/передавать значения с помощью сеанса. Я попытался использовать 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');
}
person Alok Babu    schedule 29.09.2013

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

person Petr    schedule 08.10.2014

404 (не найдено) считается 1 запросом к серверу. он удалит ваши flashdata.

person apis17    schedule 23.04.2013

Как я наблюдаю за flashdata codeigniter. Когда я использую его во втором запросе с помощью метода codeigniter redirect(), он отлично работает в мозиле, но в случае с хромом он не работает.

person dpkrai96    schedule 12.01.2017

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

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

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

to

print_r($this->session->flashdata('message'));
person Rishabh Malhotra    schedule 19.02.2018

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

person qwertzman    schedule 21.01.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 -->

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

person heySushil    schedule 11.03.2019