Проблема с функцией перенаправления codeigniter - PullRequest
1 голос
/ 07 июня 2011

Это может быть тема n00b, но, в любом случае, у меня было довольно трудное и странное время с этой ошибкой. В основном я работал над методом контроллера для страницы, которая отображает форму. По сути, я отлаживал отправленные данные формы, выкидывая ввод формы с помощью функции $this->input->post codeigniter следующим образом:

var_dump($this->input->post('first_name'));

Раз в два дня это работало, но сегодня я обнаружил, что когда я выкидываю переменные записи в браузер, он возвращает false, как если бы они не имели значений, даже если у них были значения при отправке формы. Затем я попытался получить доступ к переменным через суперглобальный массив PHP POST, например, так:

var_dump($_POST['first_name']);

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

var_dump($_POST);

и он тоже был пуст, несмотря на то, что я заполнил всю форму. Тем не менее, записи в моей базе данных MySQL обновлялись (это означает, что форма отправлялась, хотя мои переменные $ _POST выглядели пустыми).

Кроме того, я рассуждал, что обычно, если я изменяю дамп-переменные в функции контроллера перед вызовом функции перенаправления, это должно вызвать ошибку «Заголовки уже отправлены», но это никогда не происходило. Он просто перенаправил меня на страницу предполагаемого успеха, а не сбрасывал мои переменные.

Таким образом, в течение примерно 2 часов я думал, что мои данные POST не отправлялись, перепроверил код на наличие ошибок и начал комментировать операторы один за другим, пока не смог найти оператор-виновник в своем сценарии.

Наконец, я закомментировал кусок кода, который устанавливает сообщение об успешном перенаправлении, например:

/*
if($record_updated_successfully)
{
    $this->session->set_flashdata('success', $this->lang->line('record-updated-successfully'));
}
redirect('admin/success_page');
*/

и только тогда скрипт начал выводить все мои предыдущие дампы переменных, используя функцию $this->input->post codeigniter и суперглобальный массив $_POST.

Итак, если скрипт действительно перенаправляет меня, несмотря на то, что дампы переменных отправляют вывод перед отправкой заголовков, я могу понять, почему переменные $ _POST выглядят пустыми.

Так тогда реальный вопрос в том, почему скрипт все еще перенаправляет, несмотря на мою отправку вывода перед отправкой заголовков? Кто-нибудь когда-либо испытывал это?

Любая помощь с этим будет оценена.

РЕДАКТИРОВАТЬ: в отношении загрузки вида вот упрощенная версия моего скрипта выглядит с помощью отладочных операторов var dump:

function some_controller_method() {
    var_dump($this->input->post());
    var_dump($_POST);

    // some code

    if($this->input->post('form_action') == 'update record') {
        // code that runs when the form is submitted
        /*
         * ...
         */

        if($record_updated_successfully)
        {
            $this->session->set_flashdata('success', $this->lang->line('record-updated-successfully'));
        }
        redirect('admin/success_page');
    }

    $this->load->view('my-view-file.php');
}

Ответы [ 2 ]

2 голосов
/ 07 июня 2011

Хотя я не могу быть уверен, я собираюсь предположить, что вы выводили такие вещи, как var_dump () в ваш файл представления.Представление не выполняется в то время, когда вы вызываете его, например:

   $this->load->view('some_view');
   echo "hi!";

В контроллере не будет отображаться содержимое некоторого представления, за которым следует «привет».Это приведет к «привету», сопровождаемому содержимым некоторого представления.Представление фактически выводится после того, как все остальное в контроллере выполнено.

Это единственное, что приходит на ум с представленной вами информацией.Мне нужно увидеть больше кода, чтобы предложить другой диагноз.

0 голосов
/ 29 мая 2012

У меня была "та же самая проблема", и я нашел функцию unset() в цикле в своем коде.Возможно, это поможет.

...