Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Cannot modify header information

Estas en el tema de Cannot modify header information en el foro de PHP en Foros del Web. Saludos, tengo un problema al intentar ir a una direccion con header. Me sale este error: Cita: Los notice inician desde el 1. Notice: Undefined ...
  #1 (permalink)  
Antiguo 22/06/2015, 15:16
Avatar de BREIQ  
Fecha de Ingreso: diciembre-2011
Mensajes: 36
Antigüedad: 12 años, 11 meses
Puntos: 2
Pregunta Cannot modify header information

Saludos, tengo un problema al intentar ir a una direccion con header.

Me sale este error:

Cita:
Los notice inician desde el 1.

Notice: Undefined offset: 54 in C:\xampp\htdocs\envioAsignaciones.php on line 33

Notice: Undefined offset: 55 in C:\xampp\htdocs\envioAsignaciones.php on line 33

Notice: Undefined offset: 56 in C:\xampp\htdocs\envioAsignaciones.php on line 33

Notice: Undefined offset: 57 in C:\xampp\htdocs\envioAsignaciones.php on line 33

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\envioAsignaciones.php:33) in C:\xampp\htdocs\envioAsignaciones.php on line 48
Ya busque que no sea el espacio en blanco y los demas comunes. El codigo seria este:

Código PHP:
Ver original
  1. <?php
  2.   $db = simplexml_load_file("xml/radioControl.xml"); //Leer base de datos XML
  3.   $countAsignacion = count($db->asignaciones->asignacion); //Contar asignaciones existentes en base de datos
  4.  
  5. /* Tomar datos del formulario */
  6.   $fecha = date("d/m/Y");
  7.   $estado = 'prestado';
  8.   $responsable = $_POST['responsable'];
  9.   $autoriza = $_POST['autoriza'];
  10.   $lugar = $_POST['lugar'];
  11.   $observaciones = $_POST['observaciones'];
  12.  
  13. /* Editar base de datos */
  14. //Crear asignacion nueva
  15.  
  16.     $asignacionNueva = $db->asignaciones->addChild('asignacion');
  17.     $asignacionNueva->addChild('numero', $countAsignacion);
  18.     $asignacionNueva->addChild('estado', $estado);
  19.     $asignacionNueva->addChild('fecha', $fecha);
  20.     $asignacionNueva->addChild('responsable', $responsable);
  21.     $asignacionNueva->addChild('autoriza', $autoriza);
  22.     $asignacionNueva->addChild('lugar', $lugar);
  23.  
  24.     $notas = $asignacionNueva->addChild('notas');
  25.     $notas->addChild('observaciones', $observaciones);
  26.  
  27.  
  28.     $nuevaRadio = $asignacionNueva->addChild('radios');
  29.     $numeroRadios = count($db->radios->radio);
  30.     $conteoRadios = 2;
  31.     $arrayRadios = 1;
  32.     while($numeroRadios >= $conteoRadios){
  33.       if($_POST[$arrayRadios] == 'ok'){
  34.       $nuevaRadio->addChild('radio', 'R'.$arrayRadios);
  35.       $db->radios->radio[$arrayRadios]->ubicacion = $lugar;
  36.       };
  37.       $conteoRadios++;
  38.       $arrayRadios++;
  39.     };
  40. /* ARREGLAR
  41.     $folder = 'htdocs/pdf/';
  42.     $file = $folder . basename($_FILES['acuse']['name']);
  43.     if(move_uploaded_file($_FILES['acuse']['tmp_name'], $file)){
  44.     }else{
  45.     }
  46. */
  47.   $db->saveXML('xml/radioControl.xml'); //Salvar XML
  48.   header('Location: http://127.0.0.1'); //Enviar a la pagina principal
  49. ?>

Alguna idea??
Tampoco puedo cambiar en php.ini.
  #2 (permalink)  
Antiguo 22/06/2015, 15:30
 
Fecha de Ingreso: mayo-2013
Mensajes: 191
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: Cannot modify header information

Pues Lo que pasa es que tienes un error en la linea 33
Código PHP:
Ver original
  1. if($_POST[$arrayRadios] == 'ok'){
  2. //este post no existe

Luego puesto que el php ya ha enviado el texto para el error de arriba
por esto sale lo de "Cannot modify header information"
  #3 (permalink)  
Antiguo 22/06/2015, 15:55
Avatar de BREIQ  
Fecha de Ingreso: diciembre-2011
Mensajes: 36
Antigüedad: 12 años, 11 meses
Puntos: 2
Respuesta: Cannot modify header information

Me imagine que era por el POST. La cuestion aqui es que puedo debo validar muchos check box y lo hago con $_POST[Numero de Checkpost].
Alguna alternativa, recomendacion, consejo, retroalimentacion, chiste o por lo menos ofensa??

Gracias por la pronta respuesta, saludos.
  #4 (permalink)  
Antiguo 22/06/2015, 16:07
 
Fecha de Ingreso: mayo-2013
Mensajes: 191
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: Cannot modify header information

Pues segun tu codigo no hai dicho post:
ni $_POST[Numero de Checkpost]
ni $_POST[$arrayRadios]
aunque el segundo lo has declarado tu manualmente con $arrayRadios = 1; antes del while
Dicho post no existe

Tienes que basar tu validcion en algo existente.
  #5 (permalink)  
Antiguo 22/06/2015, 16:16
Avatar de BREIQ  
Fecha de Ingreso: diciembre-2011
Mensajes: 36
Antigüedad: 12 años, 11 meses
Puntos: 2
Respuesta: Cannot modify header information

Lo jala de un formulario en otro documento. Los checkbox se llaman 1, 2, etc.

Cuando envio el formulario si me edita los XML, pero no me envia a la pagina de inicio. Tengo otro formulario que hace lo mismo, pero ese si lo solucione, aun que hay no existian un numero indeterminado de formularios.

Este es el formulario.

Código PHP:
Ver original
  1. <form id="formularioAsignaciones" action="envioAsignaciones.php" method="post">
  2.   <label>Responsable</label>
  3.   <input name="responsable" type="text" required>
  4.   <label>Autoriza</label>
  5.   <input name="autoriza" type="text" required>
  6.   <label>Lugar</label>
  7.   <input name="lugar" type="text" required>
  8.   <label>Acuse</label>
  9.   <input name="acuse" type="file" required accept=".pdf">
  10.   <p>
  11. <?PHP
  12.   $numeroIDs = count($db->radios->radio);
  13.   $conteoIDs = 2;
  14.   $arrayIDs = 1;
  15.  
  16.   while($numeroIDs >= $conteoIDs){
  17.     if($db->radios->radio[$arrayIDs]->ubicacion == 'Sistemas'){
  18.       echo '
  19.   <label>'. $db->radios->radio[$arrayIDs]->id .'<input type="checkbox" name="'. substr($db->radios->radio[$arrayIDs]->id, 1) .'" value="ok"></label>'; 
  20.     };
  21.   $conteoIDs++;
  22.   $arrayIDs++;
  23.   }
  24. ?>
  25.   </p>
  26.   <label>Observaciones</label>
  27.   <textarea name="observaciones"></textarea>
  28.   <input name="enviar" value="Enviar" type="submit">
  29.  
  30.  
  31. </form>

Este es el otro script, el que si funciona bien y hace algo similar.

Código PHP:
Ver original
  1. <?php
  2.   $db = simplexml_load_file("xml/radioControl.xml"); //Leer base de datos XML
  3.   $countID = count($db->radios->radio); //Contar radios existentes en base de datos
  4.  
  5. /* Tomar datos del formulario */
  6.   $id = $_POST['id'];
  7.   $marca = $_POST['marca'];
  8.   $modelo = $_POST['modelo'];
  9.   $sn = $_POST['sn'];
  10.   $ubicacion = $_POST['ubicacion'];
  11.   $notas = $_POST['notas'];
  12.   $radio = $_POST['radio'];
  13.   $bateria = $_POST['bateria'];
  14.   $antena = $_POST['antena'];
  15.   $base = $_POST['base'];
  16.   $cargador = $_POST['cargador'];
  17.   $caja = $_POST['caja'];
  18.  
  19. /* Editar base de datos */
  20.   if($id == 'nuevaEntrada'){ //Crear radio nueva
  21.     $id = $countID;
  22.  
  23.     $radioNueva = $db->radios->addChild('radio');
  24.     $radioNueva->addChild('id', 'R'.$id);
  25.     $radioNueva->addChild('marca', $marca);
  26.     $radioNueva->addChild('modelo', $modelo);
  27.     $radioNueva->addChild('sn', $sn);
  28.     $radioNueva->addChild('ubicacion', $ubicacion);
  29.     $radioNueva->addChild('notas', $notas);
  30.  
  31.     $piezas = $radioNueva->addChild('piezas');
  32.     $piezas->addChild('radio', $radio);
  33.     $piezas->addChild('bateria', $bateria);
  34.     $piezas->addChild('antena', $antena);
  35.     $piezas->addChild('base', $base);
  36.     $piezas->addChild('cargador', $cargador);
  37.     $piezas->addChild('caja', $caja);
  38.  
  39.   }else{ //Editar radio existente
  40.     $id = intval($id);
  41.  
  42.     $db->radios->radio[$id]->marca = $marca;
  43.     $db->radios->radio[$id]->modelo = $modelo;
  44.     $db->radios->radio[$id]->sn = $sn;
  45.     $db->radios->radio[$id]->ubicacion = $ubicacion;
  46.     $db->radios->radio[$id]->notas = $notas;
  47.  
  48.     $db->radios->radio[$id]->piezas->radio = $radio;
  49.     $db->radios->radio[$id]->piezas->bateria = $bateria;
  50.     $db->radios->radio[$id]->piezas->antena = $antena;
  51.     $db->radios->radio[$id]->piezas->base = $base;
  52.     $db->radios->radio[$id]->piezas->cargador = $cargador;
  53.     $db->radios->radio[$id]->piezas->caja = $caja;
  54.  
  55.   };
  56.  
  57.   $db->saveXML('xml/radioControl.xml'); //Salvar XML
  58.   header("Location: http://127.0.0.1"); //Enviar a la pagina principal
  59.  
  60. ?>

Soy muy nuevo en esto, asi que tenganme paciencia porfavor
  #6 (permalink)  
Antiguo 22/06/2015, 16:27
 
Fecha de Ingreso: mayo-2013
Mensajes: 191
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: Cannot modify header information

Mirare mas a fondo luego ( ahora no tengo mucho tiempo ) ... pero he detectado un error :
Modifica El $arrayRadios = 1; Por $arrayRadios = "1";

Modificar en primer script que pusiste

Porque con el 1 intentabas ir al index 1 del $_POST ... pero los $_POST son arrays asociativos entonces el nombre de la clave es un string no un numero
  #7 (permalink)  
Antiguo 22/06/2015, 16:43
Avatar de BREIQ  
Fecha de Ingreso: diciembre-2011
Mensajes: 36
Antigüedad: 12 años, 11 meses
Puntos: 2
Respuesta: Cannot modify header information

No me funciono

En el segundo codigo (El que si funciona) puse $id = intval($id); y lo soluciono, pero aqui no me funciona D:

Gracias por la ayuda. Saludos n_n
  #8 (permalink)  
Antiguo 22/06/2015, 17:02
 
Fecha de Ingreso: mayo-2013
Mensajes: 191
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: Cannot modify header information

Sigo aqui por el momento:
Pensandolo mejor veo que estas basando los nombres de los checkbox en unos id-s de la base de datos:
Código PHP:
Ver original
  1. ... <input type="checkbox" name="'. substr($db->radios->radio[$arrayIDs]->id ...

Entonces nunca no podras saber que nombre tendra dicho checkbox ... ya que depende del id
Tienes que repensar un poco y poner un mismo nombre a los checkbox ej "radio"

Entonces podras usar en la condicion

En vez de:
Código PHP:
Ver original
  1. if($_POST[$arrayRadios] == 'ok'){

Usar este:
Código PHP:
Ver original
  1. if($_POST["radio"] == 'ok'){ // supongando que le has puesto el nombre radio

Pero esto tal cual era tu primer script del primer post
  #9 (permalink)  
Antiguo 22/06/2015, 21:45
Avatar de BREIQ  
Fecha de Ingreso: diciembre-2011
Mensajes: 36
Antigüedad: 12 años, 11 meses
Puntos: 2
Respuesta: Cannot modify header information

Ok lo probare mañana en mi trabajo, gracias por el tiempo n_n
Un saludo.
  #10 (permalink)  
Antiguo 23/06/2015, 11:11
Avatar de BREIQ  
Fecha de Ingreso: diciembre-2011
Mensajes: 36
Antigüedad: 12 años, 11 meses
Puntos: 2
Respuesta: Cannot modify header information

Saludos. Trate de hacerlo asi y tampoco funciono, de hecho ahora me edita mal la base de datos (con el codigo anterior funcionaba bien) y me duplica entradas. Coloco la seccion eidtada.

Gracias por su ayuda, saludos.

HTML:
Código PHP:
Ver original
  1. <label>'. $db->radios->radio[$arrayIDs]->id .'<input type="checkbox" name="radios[]" value="ok"></label>';


PHP:
Código PHP:
Ver original
  1. $nuevaRadio = $asignacionNueva->addChild('radios');
  2.     $numeroRadios = count($db->radios->radio);
  3.     $conteoRadios = 2;
  4.     $arrayRadios = 1;
  5.     while($numeroRadios >= $conteoRadios){
  6.       foreach($_POST['radios'] as $radios){
  7.         if($radios == 'ok'){
  8.         $nuevaRadio->addChild('radio', 'R'.$arrayRadios);
  9.         $db->radios->radio[$arrayRadios]->ubicacion = $lugar;
  10.         };
  11.       };
  12.       $conteoRadios++;
  13.       $arrayRadios++;
  14.     };
  #11 (permalink)  
Antiguo 23/06/2015, 11:54
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 8 meses
Puntos: 1146
Respuesta: Cannot modify header information

vayámonos por pasos, si haces var_dump a $_POST[$arrayRadios] que obtienes? existe?

luego antes de comprobar si el valor recibido es igual a OK, debes verificar que exista para eso usas isset() o !empty()
  #12 (permalink)  
Antiguo 23/06/2015, 12:21
Avatar de BREIQ  
Fecha de Ingreso: diciembre-2011
Mensajes: 36
Antigüedad: 12 años, 11 meses
Puntos: 2
Respuesta: Cannot modify header information

Tengo un XML con variable numero de nodos "radios". El $arrayRadios es para ir contando los nodos en los que va "validando" la informacion. Con el $_POST[$arrayRadios] voy revizando cada nodo y en los checklist verificando si tienen el value="ok".

Solo que como no tengo mucho practica con PHP aun se me complican estas cosas y esa fue la meor forma que se me ocurrio para ir verificandolo asi. Por eso cada checklist se llama segun un numero (que toma del ID de cada nodo). Dentro de isset pondria el codigo para hacer el if($_POST[$arrayRadios] == 'ok')??

Gracias por la respuesta, saludos n_n


EDITO: Ya me funciono, MUCHISIMA GRACIAS A AMBOS. Fueron de gran ayuda.

Última edición por BREIQ; 23/06/2015 a las 12:31

Etiquetas: fecha, formulario, header, information, modify
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:06.