Это может быть тема 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');
}