Hola gente, estoy hace una semana renegando con un error que me devuelve el framework CodeIgniter...
Resulta que en todas las redirecciónes que hago me da el típico mensaje:
Cannot modify header information - headers already sent by (...).
El problema es que no logro encontrar dónde está la supuesta salida al navegador en mi controlador y/o modelo, dado que las vistas nunca entran en acción....
El código de una de las funciones de mi controlador es el siguiente (todas las demás presentan el mismo problema, ya que copio, pego, y cambio los parámetros para crear las otras funciones).
Código PHP:
function categorias($accion=''){
$this->load->model('Admin_model');
$this->load->helper(array('url','form','date'));
$this->load->library(array('user_agent','pagination','form_validation'));
if(empty($accion)){
if(!$this->uri->segment(4)){ $pag = $this->uri->segment(4); } else { $pag = 1; }
$categorias = $this->Admin_model->categorias($pag);
$datos_vista = array('categorias'=>$categorias);
$this->load->view('admin/inc_head');
$this->load->view('admin/inc_menu');
$this->load->view('admin/categorias/view',$datos_vista);
$this->load->view('admin/inc_foot');
} elseif($accion=="nuevo"){
$habilitado = "Si";
date_default_timezone_set('America/Argentina/Tucuman');
$datestring = "%d/%m/%Y %H:%i:%s";
$time = time();
$fecha = mdate($datestring, $time);
if($_POST){
$this->form_validation->set_rules('nombre','Nombre de la Categoría','required|min_length[4]|max_length[40]');
if ($this->form_validation->run() == TRUE){
$query = "Insert into cms_categorias (nombre,habilitado,created) values
('".$_POST['nombre']."','Si','".$fecha."')";
$this->Admin_model->query($query);
redirect('/admin/categorias/','location');
}
}
$this->load->view('admin/inc_head');
$this->load->view('admin/inc_menu');
$this->load->view('admin/categorias/add');
$this->load->view('admin/inc_foot');
} elseif(substr($accion,0,4)=="hab-"){
$trozo = explode("-",$accion);
if($trozo[2]=="Si"){ $nuevo_estado = "No"; } else { $nuevo_estado = "Si"; }
$query = "Update cms_categorias set habilitado='".$nuevo_estado."' where Id='".$trozo[1]."'";
if($this->Admin_model->query($query)){
redirect('/admin/categorias/');
}
} elseif(substr($accion,0,4)=="del-"){
$trozo = explode("-",$accion);
$query = "Delete from cms_categorias where Id='".$trozo[1]."'";
if($this->Admin_model->query($query)){
redirect('/admin/categorias/');
}
} elseif($accion=="page"){
$pag = $this->uri->segment(4);
$categorias = $this->Admin_model->categorias($pag);
$datos_vista = array('categorias' => $categorias);
$this->load->view('admin/inc_head');
$this->load->view('admin/inc_menu');
$this->load->view('admin/categorias/view',$datos_vista);
$this->load->view('admin/inc_foot');
} else {
if(!$_POST){
$datos = $this->Admin_model->categorias_ver($accion);
$this->load->view('admin/inc_head');
$this->load->view('admin/inc_menu');
$this->load->view('admin/categorias/edit',$datos);
$this->load->view('admin/inc_foot');
} else {
$this->form_validation->set_rules('nombre','Nombre de la categoría','required|min_length[4]|max_length[40]');
if ($this->form_validation->run() == TRUE){
$query = "Update cms_categorias set
nombre='".$_POST['nombre']."' where Id='".$accion."'";
if($this->Admin_model->query($query)){
redirect('/admin/categorias/','location');
}
}
$datos = $this->Admin_model->categorias($pag);
$this->load->view('admin/inc_head');
$this->load->view('admin/inc_menu');
$this->load->view('admin/categorias/edit',$datos);
$this->load->view('admin/inc_foot');
}
}
}
Algo que noté y que puede ser útil para resolver el problema, es que en el navegador, al ver el código fuente, encuentro siempre antes que cualquier HTML unos puntitos como esto:
Código HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<!-- Obviamente, luego sigue el resto del código HTML -->
Desde ya gracias por su tiempo e interés.