problema con header
Tengo el siguiente problema. algo tan simple como:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> Login </title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php header("location:main.php");?>
</body>
</html>
me devuelve el error:
Cannot modify header information - headers already sent by (output started at ......
Alguien puede ayudarme a resolver el enigma.
Gracias de antemano.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> Login </title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php header("location:main.php");?>
</body>
</html>
me devuelve el error:
Cannot modify header information - headers already sent by (output started at ......
Alguien puede ayudarme a resolver el enigma.
Gracias de antemano.
Hola, el problema es que la línea
header("location:main.php");
tiene que ir al principio.
Lo que hace la función header es mandar los headers/cabezales html al navegador. Si hubo antes algún fragmento de código html enviado al navegador, produce ese error.
Para solucionar el problema, tenés (que yo sepa) dos opciones:
a)
<?php
header("location:main.php");
?>
b) usar javascript.
Si lo que querés es que la página simplemente redireccione a otra, pero en sí no tiene contenido html para mostrar en pantalla, con el ejemplo a) alcanza (ni hace falta !doctype y todo lo demás).
Si, en cambio, querés redireccionar después de haber mandado código html al navegador, vas a tener que usar JS. No es muy complicado. Dentro del código HTML, va esto:
<script type="text/javascript">
location='main.php';
</script>
y ya está.
Volviendo a header(), no es indispensable que sea la primera línea, pero antes no tiene que haber ningún "output" nada de html enviado al navegador. O sea, que tampoco se puede hacer ningún "echo".
<?php
echo "hola<br />";
header("location:main.php");
?>
por ejemplo, también daría error.
Suerte.
header("location:main.php");
tiene que ir al principio.
Lo que hace la función header es mandar los headers/cabezales html al navegador. Si hubo antes algún fragmento de código html enviado al navegador, produce ese error.
Para solucionar el problema, tenés (que yo sepa) dos opciones:
a)
<?php
header("location:main.php");
?>
b) usar javascript.
Si lo que querés es que la página simplemente redireccione a otra, pero en sí no tiene contenido html para mostrar en pantalla, con el ejemplo a) alcanza (ni hace falta !doctype y todo lo demás).
Si, en cambio, querés redireccionar después de haber mandado código html al navegador, vas a tener que usar JS. No es muy complicado. Dentro del código HTML, va esto:
<script type="text/javascript">
location='main.php';
</script>
y ya está.
Volviendo a header(), no es indispensable que sea la primera línea, pero antes no tiene que haber ningún "output" nada de html enviado al navegador. O sea, que tampoco se puede hacer ningún "echo".
<?php
echo "hola<br />";
header("location:main.php");
?>
por ejemplo, también daría error.
Suerte.
Te agradezco la ayuda. Pero si dentro de una funcion php, yo quiero redireccionar a una pagina en funcion de una condicion, como lo harias ?
Podrías llegar a usar header(), pero habría que ver puntualmente el script. Lo más fácil y práctico es usar JavaScript. El único inconveniente sería que algunos navegadores MUY viejos podrían tener inconvenientes o algún usuario podría tener JS desactivado. Pero para el, digamos 95% de los usuarios, no habrá problemas porque ya casi nadie tiene IE 3 o anterior, algún netscape viejo, etc. Además, JS está activado por defecto (y la mayoría de la gente ni siquiera lo sabe, así que dificilmente lo hayan desactivado). En síntesis, la solución más rápida y práctica sería hacer algo así:
test();
function test() {
if (1==1) { // acá va tu condición; ésta que usé siempre se va cumplir!!
echo "<script type='text/javascript'>";
echo "location='main.php'"; // redireccionar acá.
echo "</script>";
}
}
?>
test();
function test() {
if (1==1) { // acá va tu condición; ésta que usé siempre se va cumplir!!
echo "<script type='text/javascript'>";
echo "location='main.php'"; // redireccionar acá.
echo "</script>";
}
}
?>
