Foros del Web » Programando para Internet » PHP »

header("location:") marca error

Estas en el tema de header("location:") marca error en el foro de PHP en Foros del Web. Hola que tal amigos, cuento con una duda que siempre me esta haciendo perder el tiempo y lo ando tampando con un javascript la redireccion ...
  #1 (permalink)  
Antiguo 03/03/2011, 09:18
 
Fecha de Ingreso: septiembre-2010
Mensajes: 350
Antigüedad: 13 años, 6 meses
Puntos: 9
Exclamación header("location:") marca error

Hola que tal amigos, cuento con una duda que siempre me esta haciendo perder el tiempo y lo ando tampando con un javascript la redireccion pero ya es molesto eso.. bueno miren, este es mi codigo:

Código PHP:
<?php

include("cone.php");
$valor=0;

//////////////// valida que no haya un servicio igual//////////////////
$emp=$_POST["servicio"];
$ve=mysql_query("SELECT * FROM inscripcion WHERE TIPO like '"$emp ."' ",$conexion); 
$num=mysql_numrows($ve);
 
 if(
$num==1){

echo 
"<br><br>El campo '<b>SERVICIO</b>' un elemento usado anteriormente (".$_POST["servicio"].")";
$valor=1;

}

echo 
"<br><br><a href='javascript:history.go(-1)'>Regresar</a>";
/////////////////////////////////////////////
if($valor==0){

mysql_query("INSERT INTO inscripcion (TIPO,COSTO)""VALUES ( '"$emp  ."' , ".$_POST["costo"].");",$conexion);


if (
mysql_errno()!=0)
{
echo 
"Error al instertar los datos".mysql_errno()."-".mysql_error();
mysql_close($conexion);
}
else{
mysql_close($conexion);
[
B]header("Location:../index.php?ife=ctservicios");[/B]} 

}


?>
header("Location:../index.php?ife=ctservicios");


no entiendo que esta mal todo se ve de maravilla :S

y me marca este warning siempre que ejecuta este codigo:

Warning: Cannot modify header information - headers already sent by (output started at /home/gymcontr/public_html/ag_sector/validains.php:18) in /home/gymcontr/public_html/ag_sector/validains.php on line 32



bueno espero me puedan ayudar!! saludos amigos!
  #2 (permalink)  
Antiguo 03/03/2011, 09:27
 
Fecha de Ingreso: agosto-2009
Mensajes: 349
Antigüedad: 14 años, 8 meses
Puntos: 8
Respuesta: header("location:") marca error

prueba de la siguiente manera:

Código PHP:
Ver original
  1. if($num != 1) {
  2.  
  3. header('location: ../index.php?ife=ctservicios');
  4.  
  5. } else {
  6.  
  7. /* El resto de tu código */
  8.  
  9. }
  #3 (permalink)  
Antiguo 03/03/2011, 09:32
Avatar de arepavieja  
Fecha de Ingreso: marzo-2011
Mensajes: 207
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: header("location:") marca error

para evitar este error, puedes colocar al principio del código <?php ob_start(); ?> y al final <?php ob_end_flush(); ?> pero ojo, el ob_start debe estar al principio de todo, en la primera linea, incluso antes de un session_start(), y el ob_end_flush al final.
  #4 (permalink)  
Antiguo 03/03/2011, 09:53
 
Fecha de Ingreso: septiembre-2010
Mensajes: 350
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: header("location:") marca error

Cita:
Iniciado por kenproxd Ver Mensaje
prueba de la siguiente manera:

Código PHP:
Ver original
  1. if($num != 1) {
  2.  
  3. header('location: ../index.php?ife=ctservicios');
  4.  
  5. } else {
  6.  
  7. /* El resto de tu código */
  8.  
  9. }
Hola, mira hice esto:

Código PHP:
include("cone.php");
$valor=0;
header('location: ../index.php?ife=ctservicios');//////////////// valida que no haya un servicio igual//////////////////
$emp=$_POST["servicio"];
$ve=mysql_query("SELECT * FROM inscripcion WHERE TIPO like '"$emp ."' ",$conexion); 
$num=mysql_numrows($ve);
 
 if(
$num==1){

echo 
"<br><br>El campo '<b>SERVICIO</b>' un elemento usado anteriormente (".$_POST["servicio"].")";
$valor=1;

}

echo 
"<br><br><a href='javascript:history.go(-1)'>Regresar</a>";
/////////////////////////////////////////////
if($valor==0){

mysql_query("INSERT INTO inscripcion (TIPO,COSTO)""VALUES ( '"$emp  ."' , ".$_POST["costo"].");",$conexion);


if (
mysql_errno()!=0)
{
echo 
"Error al instertar los datos".mysql_errno()."-".mysql_error();
mysql_close($conexion);
}
else{
mysql_close($conexion);
//header('location: ../index.php?ife=ctservicios');



porque si lo pongo hasta el principio, realiza el resto del codigo y luego pasa al header ?

no se supone si el header esta al principio del codigo tendria que redireccionar sin realizar las de mas sentencias ?
  #5 (permalink)  
Antiguo 03/03/2011, 09:59
 
Fecha de Ingreso: septiembre-2010
Mensajes: 350
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: header("location:") marca error

No puede ser!!!
Ahora hice lo mismo con otro archivo y ese ni lo pela :S
eso del header para php creo que es una tonteria, como no puede ser posible que no funcione para lo que es!
  #6 (permalink)  
Antiguo 03/03/2011, 10:11
Avatar de arepavieja  
Fecha de Ingreso: marzo-2011
Mensajes: 207
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: header("location:") marca error

es porque estas usando un echo antes de un header, y eso se soluciona con el ob_start() y el ob_end_flush, yo tenía mucho este problema hasta que un día me ayudaron con esa solución
  #7 (permalink)  
Antiguo 03/03/2011, 10:22
 
Fecha de Ingreso: septiembre-2010
Mensajes: 350
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: header("location:") marca error

Cita:
Iniciado por arepavieja Ver Mensaje
es porque estas usando un echo antes de un header, y eso se soluciona con el ob_start() y el ob_end_flush, yo tenía mucho este problema hasta que un día me ayudaron con esa solución
MUCHACHOS(AS) DE FOROSDELWEB.COM TIENEN QUE BRINDARLE UNA REVERENCIA A arepavieja SOLUCIONO ESTE PROBLEMA !!!

NO LO PUEDO CREER!!!, TANTO QUE HE BUSCADO Y NADA,
MUCHAS GRACIAS!!!!!!!!!!!!!!!!!!!!!!!!!

MIRA QUE SI FUERA MUJER YO SI TENIA UN HIJO CON TIGO JAJAJAJA

lo puse al principio del codigo y otro al final... estas funciones que hacen ?

SALUDOS!!! MASTER
  #8 (permalink)  
Antiguo 03/03/2011, 14:25
Avatar de arepavieja  
Fecha de Ingreso: marzo-2011
Mensajes: 207
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: header("location:") marca error

Cita:
Iniciado por marco64yes Ver Mensaje
MUCHACHOS(AS) DE FOROSDELWEB.COM TIENEN QUE BRINDARLE UNA REVERENCIA A arepavieja SOLUCIONO ESTE PROBLEMA !!!

NO LO PUEDO CREER!!!, TANTO QUE HE BUSCADO Y NADA,
MUCHAS GRACIAS!!!!!!!!!!!!!!!!!!!!!!!!!

MIRA QUE SI FUERA MUJER YO SI TENIA UN HIJO CON TIGO JAJAJAJA

lo puse al principio del codigo y otro al final... estas funciones que hacen ?

SALUDOS!!! MASTER
jajajajja.. y si te digo que soy gay seguirias con la idea? jajajaja no mentira.. seriedad...

bueno esas funciones lo que hacen es limpiar las impresiones, es como hacer reiniciar el código.. algo así.
iniciar el buffer al principio con ob_start() y limpiarlo con ob_end_flush()... ese problemas de los headers es en verdad molesto... y bueno men listo el problema entonces... saludos...
  #9 (permalink)  
Antiguo 03/03/2011, 14:31
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: header("location:") marca error

Cita:
Iniciado por arepavieja Ver Mensaje
iniciar el buffer al principio con ob_start() y limpiarlo con ob_end_flush()... ese problemas de los headers es en verdad molesto...
molesto es tener que recurrir a hacks por no saber, ni comprender la naturaleza de las funciones que empleamos...

en lo personal, y profesionalmente hablando emplear hacks del tipo que propones no son para nada buenos, ya que realmente lo que consigues no es mitigar el problema con header(), sino que ocultas cualquier otro mensaje que pudiera ser útil en la depuración del error...

al final esto trae mas problemas que soluciones, quizá se diría "mientras me funcione, venga..." pero este tipo de "soluciones" sirven perfectamente como incubadora de bugs, allá de los que quieran seguir estas practicas tan primitivas y obsoletas...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 03/03/2011, 17:57
Avatar de arepavieja  
Fecha de Ingreso: marzo-2011
Mensajes: 207
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: header("location:") marca error

Cita:
Iniciado por pateketrueke Ver Mensaje
molesto es tener que recurrir a hacks por no saber, ni comprender la naturaleza de las funciones que empleamos...

en lo personal, y profesionalmente hablando emplear hacks del tipo que propones no son para nada buenos, ya que realmente lo que consigues no es mitigar el problema con header(), sino que ocultas cualquier otro mensaje que pudiera ser útil en la depuración del error...

al final esto trae mas problemas que soluciones, quizá se diría "mientras me funcione, venga..." pero este tipo de "soluciones" sirven perfectamente como incubadora de bugs, allá de los que quieran seguir estas practicas tan primitivas y obsoletas...
y que solución propones... yo estuve un buen tiempo investigando y pues no conseguí... si tienes una idea mejor pues excelente... ayudános... estamos aquí más para aprender que para enseñar... y pues en varios proyecto que he realizado me ha servido de mucho... y no he tenido problemas... pero siendo cierto lo que dices.. entonces seria bueno aplicar una solución que en vez de "tapar" más bien perfeccione el código. Saludos...
  #11 (permalink)  
Antiguo 03/03/2011, 18:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: header("location:") marca error

así es, la solución consiste en no enviar nada antes de alguna cabecera... ¿simple, no?

FAQs de PHP
¿Por qué me sale "Warning: Cannot modify header information - headers already sent by (output started at 1:2) in 3 on line 4"?.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 03/03/2011, 18:29
Avatar de arepavieja  
Fecha de Ingreso: marzo-2011
Mensajes: 207
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: header("location:") marca error

claro claro... eso lo sabía... el problema es que yo trabajo creando un archivo index que lo uso como punto de engranaje de todos los archivos... y en los archivos y a veces en algunos archivos dependientes de otros dependientes se me hace más que necesario una redirección por ejemplo. y en el archivo padre se me hizo necesario una impresión. entonces he ahí el problema.

y de hecho puedo no usar php y usar javascripts. pero puntualizo... en ocasiones ha sido una necesidad imperante.. y como te digo, no he tenido problemas implementándolo...

aún así tu punto de vista es muy bueno. el hecho de generar bugs pudiendo evitarlos es muy importante. y debe ser tomado en cuenta. Gracias por ese aporte.
  #13 (permalink)  
Antiguo 03/03/2011, 18:34
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: header("location:") marca error

y en realidad el problema es otro, una buena implementación siempre ha de procesar todo antes de arrojar algún tipo de salida...

si dices que por algún motivo debes imprimir algo, y luego por una razón desconocida debes hacer una redirección la pregunta sería, ¿esta bien implementada tu aplicación?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 03/03/2011, 18:46
Avatar de arepavieja  
Fecha de Ingreso: marzo-2011
Mensajes: 207
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: header("location:") marca error

jaja.. que buena pregunta.. tienes razón... muchas gracias...
  #15 (permalink)  
Antiguo 03/03/2011, 18:47
Avatar de arepavieja  
Fecha de Ingreso: marzo-2011
Mensajes: 207
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: header("location:") marca error

por cierto... ¿que clase de errores o como los puede generar el uso de esas funciones?
  #16 (permalink)  
Antiguo 03/03/2011, 20:58
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: header("location:") marca error

Mira este ejemplo:
Código PHP:
ob_start();
//supongamos que aca debes enviar algo importante en caso de falla
echo 'error: ha pasado algo que debes ver!!';
//al final lo redirecciono
header("Location: test2.php");
ob_end_flush(); 
Basicamente eso es lo que pasa... en el caso de marco64yes haria esto:
Código PHP:

include("cone.php");
$valor 0;

//////////////// valida que no haya un servicio igual//////////////////
$emp $_POST["servicio"];
$ve mysql_query("SELECT * FROM inscripcion WHERE TIPO like '"$emp ."' ",$conexion); 
$num mysql_numrows($ve);
$html '';
if(
$num==1){
    
$html .= "<br><br>El campo '<b>SERVICIO</b>' un elemento usado anteriormente (".$_POST["servicio"].")";
    
$valor 1;
}

$html .= "<br><br><a href='javascript:history.go(-1)'>Regresar</a>";
/////////////////////////////////////////////
if($valor==0){
    
mysql_query("INSERT INTO inscripcion (TIPO,COSTO)""VALUES ( '"$emp  ."' , ".$_POST["costo"].");",$conexion);
    if (
mysql_errno()!=0){
        
$html .= "Error al insertar los datos: ".mysql_errno()."-".mysql_error();
        
mysql_close($conexion);
    }else{
        
mysql_close($conexion);
        
header("Location:../index.php?ife=ctservicios");
    }
}
print 
$html
De esta manera o el header funciona o envia el mensaje a la pantalla.

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #17 (permalink)  
Antiguo 05/08/2011, 10:03
Avatar de cesar203  
Fecha de Ingreso: enero-2010
Ubicación: LIMA
Mensajes: 27
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: header("location:") marca error

Soy programador con experiencia en PHP y yo uso
y esto me funciona a mil maravillas
  #18 (permalink)  
Antiguo 05/08/2011, 10:35
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: header("location:") marca error

cesar203, no tengo en duda que seas programador con experiencia y que te funcione usar "parches" en lugar de buscar una solucion adecuada.

Lo que si me intriga, y mucho, es porque revives un tema de hace 5 meses para decir que a ti te funciona "a mil maravillas" usar un parche, ignorando los argumentos que expusieron pateketrueke y Marvin.

De funcionar... si, funciona, pero de ahi a que sea lo correcto/apropiado/adecuado/etc., hay una distancia infinita.
__________________
- León, Guanajuato
- GV-Foto
  #19 (permalink)  
Antiguo 05/08/2011, 13:19
Avatar de cesar203  
Fecha de Ingreso: enero-2010
Ubicación: LIMA
Mensajes: 27
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: header("location:") marca error

Bueno Triby no es que me guste usar parches ese no es el termino es darle una solcuion rapida a los que estan desesperados la otra solucion seria modificando el php.ini o tambien poniendo un .httacces en la pagina..
  #20 (permalink)  
Antiguo 05/08/2011, 13:25
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: header("location:") marca error

Cita:
Iniciado por cesar203
Bueno Triby no es que me guste usar parches ese no es el termino es darle una solcuion rapida a los que estan desesperados la otra solucion seria modificando el php.ini o tambien poniendo un .httacces en la pagina..
Veamos:

Solucion rapida = parche.
Otra solucion = Parche pero en php.ini o .htaccess, para que no batallen.

Como ya lo mencionaron, esas no son soluciones es simplemente "taparle el ojo al macho"; la solucion real es planear bien tu script para que no tengas necesidad de usar header() despues de haber enviado contenido al navegador... en resumen: Programar correctamente.

Te pregunto si leiste lo que planteo Marvin? acerca de usar ob_start(), si hay algun mensaje de error o advertencia de PHP y despues tienes un redireccionamiento, no podras verlo y, por tanto, depurar tus scripts sera una mision imposible.
__________________
- León, Guanajuato
- GV-Foto
  #21 (permalink)  
Antiguo 05/08/2011, 13:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: header("location:") marca error

No, la solución correcta es lo que dice @pateketrueke, debes de controlar el flujo de tu aplicación, y mandar las cabeceras correctamente, y si necesitas imprimir hacerlo después, es por eso que un patrón MVC funciona muy bien ya que te evita muchos problemas como esos.

Si eres un programador experimentado deberías de saber eso, y no "parchar" el código usando cosas como controles de salida, o el php.ini o el .htaccess.

Errores como este se resuelven en código, no en "parches".
  #22 (permalink)  
Antiguo 05/08/2011, 13:38
Avatar de cesar203  
Fecha de Ingreso: enero-2010
Ubicación: LIMA
Mensajes: 27
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: header("location:") marca error

bueno no quiero caer mal a ustedes .Derrepente puede estar pasando

Bueno hasta encontrar una solucion esperare.....................
  #23 (permalink)  
Antiguo 05/08/2011, 13:45
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: header("location:") marca error

Cita:
Iniciado por cesar203
Bueno hasta encontrar una solucion esperare
Oh my ducking fog!!!!

Ya se dijo la solucion: Programar correctamente, dinos que parte de esto no entiendes y trataremos de aclarar el punto.

Ya sea que tengas un sistema de plantillas o no:
1. Primero debes verificar toda la info recibida en GET, POST, COOKIE, etc. (si es que la hay)
2. Procesar lo del punto 1 y si es necesario, actualizar BD, redirigir, mostrar errores, etc.
3. No hay errores?, bien, entonces ya muestras todo tu HTML y el header dejara de ser molesto para toda la vida, sin necesidad de parches.
__________________
- León, Guanajuato
- GV-Foto
  #24 (permalink)  
Antiguo 05/08/2011, 14:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: header("location:") marca error

No tiene caso mantener abierto este tema cuando ya se dio la solución.

Cerrado

Etiquetas: marca
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 07:31.