Redireccionar en PHP

Tengo un problema al redireccionar, coloco la instrucción en la primera línea, pero cuando la coloco en otra linea me da este error Warning: Cannot...

La FAQ Redireccionar en PHP tiene

Pertenece a la categoría:
Pregunta
Tengo un problema al redireccionar, coloco la instrucción en la primera línea, pero cuando la coloco en otra linea me da este error Warning: Cannot modify header information - headers already sent by (output started at C:\Servidor\web\VBX\inc\valida_session.php:5)



Por lo menos en ASP o .NET puedo redireccionar desde cualquier parte del código teniendo por ejemplo:





<%







If x = 0 then



Response.redirect(?pag0.asp?)



Elseif x = 1 then



Response.redirect(?pag1.asp?)



Elseif x = 2 then



Response.redirect(?pag2.asp?)



End if







%>




Esto también se puede hacer en PHP???

Respuesta de Skunk
Por supuesto que se puede. Pero ten en cuenta que a diferencia de lo que estás haciendo con ASP, en PHP mediante este método estás creando una cabecera HTTP que le dice al navegador que redireccione a otro sitio, con lo que es importante que se ejecute antes de que exista ninguna salida previa al navegador, ya sea de texto o HTML. De lo contrario, en el momento de sacar algo por pantalla se está creando una cabecera con el tipo de contenido utilizado (text/hml, text/plain, etc) y una vez que se crea una cabecera, no se puede modificar.


Y es entonces cuando recibes ese error; que te dice que no puede modificar la información de la cabecera, porque ya se ha enviado al navegador, y además te dice la línea en la que se envió esa cabecera. En fin, espero te que sirva para disipar tus dudas.



Y bueno, la traducción de tu código ASP a PHP sería algo así:




<?php

if ($x == 0):

header("Location: pag0.asp");

elseif ($x == 1):

header("Location: pag1.asp");

elseif ($x == 2):

header("Location: pag2.asp");

endif;

?>





Échale un vistazo a la sintaxis alternativa para las estructuras de control del manual oficial de PHP, dónde encontrarás diferentes formas de construirlas, ya que seguramente hay alguna (como el anterior ejemplo) que se acercan más a VB, ASP y/o a lo que estás acostumbrado.

Volver al árbol de categoríasVolver al árbol de categorías

Comentarios

Cristian

04/3/2008
Te puede servir hacer una funcion global de redireciconamiento javascript por ejemplo: function redireccionar($pagina) { echo ""; } Y cuando quieras redireciconar desde cualquier parte del código haces esto. redureccionar(\\\"mipaginanueva.php?parametros=valores\\\"); O lo que sea, espero te sirva.

xemix

04/3/2008
Si has declarado ya las cabeceras "header" en algun otro archivo cuando se ejecute ese script, te dara el error que mencionas.

LocoWeb

05/3/2008
Para utilizar el Header de php cuando quieras redireccionar, lo unico que tienes q tener en cuenta es que no debes tener en la lineas superiores codigo Html, asi no te saldra el error que mencionas

cala932

06/3/2008
Hola tambien puedes probar colocando esto al principio y al final del codigo, para poder hacer las redirecciones.
ob_start();

ob_end_flush();

Saludos.

Ramon Sosa Reyes

07/3/2008
Es un error comun checate que antes y despues de los tags php no existan espacios ni caracteres adicionales...

Correcto
----------------
<?php
header("Location:pagina.php");
?>
----------------

Incorrecto
------------
<html>
<?php
header("Location:pagina.php");
?>
</html>
--------------

Flash

28/10/2008
Pues creo que te comprendo, ya que yo tambien programaba en ASP y era mucho mas facil redireccionar que en PHP pero pues con una funcion puedes hacer lo mismo que en ASP que es redireccionar desde cualquier parte de tu codigo y sin importar que dejes espacios ni nada de eso...

esta es la funcion que yo empleo:

function redirect($url,$seconds){
$ss = $seconds * 1000;
$comando = "<script>window.setTimeout('window.location=".chr(34).$url.chr(34).";',".$ss.");</script>";
echo ($comando);
}

manytostao

21/1/2009
Que bueno el comentario de Flash!! Como me ha resuelto problemas.

moises9633

19/3/2010
Redireccion a servidor local
como podre hacer un redireccionamento pero que se queda con la url ejemplo

midominio.com
190.78.892:8080
que cuando marque el dominio.com redireccione a http:190.78.892:8080 pero que solo se vea la url dominio.com
se podra?

ivonne

09/9/2010
Redireccionar en PHP
hola a todos.. yo implemente de la siguiente forma el método "redirect" ... espero que les sirva de algo

1. Cree un archivo llamado funciones.php y agrege el método del a siguiente forma

<?php
function redirect($url,$seconds){
$ss = $seconds * 1000;
$comando = "<script>window.setTimeout('window.location=".chr(34).$url.chr(34).";',".$ss.");</script>";
echo ($comando);
}
?>

2. Cree un archivo llamado index.php y mande llamar el método, solo le indique la url y el numero en segundos en que tiene que redireccionar.. por ejemplo redirect("AgregarUsuarios.php",1);

y ya dentro del codigo quedaria algo asi..

<html>
<head>
<title>Index</title>
</head>
<body>
<?php

include ("conexion.php");
include ("funciones.php");

$con=conexion();
$user =$_POST["user"];
$pass=$_POST["pass"];
$existe=0;

if($user=="" and $pass==""){}
else
{
$consulta = mysql_query("Select * from user where user_name='".$user."' and pas='".$pass."'", $con);
while ($row = mysql_fetch_array($consulta)) {$existe=1;}

if($existe==0)
{
echo "El usuario que se ingreso no existe";
}
else
{
redirect("AgregarUsuarios.php",1);
}

mysql_free_result($consulta);
}
?>

<form action ="Index.php" method ="POST">
<table border ="0" align ="center">
<tr>
<td>Usuario:</td>
<td><input type="text" size="10" name="user"></td>

</tr>
<tr>
<td>Password:</td>
<td><input type= "password" size="10" name ="pass"></td>
<td><input type="submit" name ="enviar" value="Enviar"></td>
</tr>
</table>
</form>
</body>
</html>

YESICA jc

27/4/2011
Duda Direccionar
Hola a todos
Tengo este programa en php y quiero direccionar una pagina htlm me podrian ayudar yo lo tengo de esta manera, pero no me muestra nada ni local ni en el servidor....

<?
// Comparamos a ver si son correctos
if ($usuario=="tuuser" && $password=="tupass")
{
$valido="si";
}
else
{
$valido="no";
}
?>

<title>Pagina privada</title>

<? if ($valido=="si")
{
?>

<?php
header("Location: menuo.htlm");
?>

<? }
else
{
?>

<p>ACCESO RESTRINGIDO</p>
<p>Verifique su usuario y password</p>
<? } ?>

kathycrazy

13/9/2011
redireccionar de una categoria elejida a otro archivo php
Hola amigos , estoy haciendo un trabajo pero tengo un pequeño problema que no se como resolver, el asunto mio es lo sigte: Necesito que cuando una persona del menu acordion q tengo en mi pagina muestra 4 productos y luego un ver mas , al apretar ver mas ke me lanse a otra pagina php pero que me muestre solo los productos de esa categoria :( estoy complicada en
<?
$consulta1= "SELECT catr_id , catr_nombre
FROM categoriasrecomendaciones";
$ejecuta1= mysql_query ($consulta1,$link) or die (mysql_error());
$fila1= mysql_fetch_array($ejecuta1);

do{
$cat_id= $fila1["catr_id"];
?>


<li><a href="#"><? echo $fila1["catr_nombre"]?></h3></a>
<ul>

<?
//consultar categorias
$consulta= "SELECT rec_nombre, catr_id
FROM recomendaciones, categoriasrecomendaciones
WHERE rec_catr_id = $cat_id
GROUP BY rec_nombre limit 4";
$ejecuta= mysql_query ($consulta,$link) or die (mysql_error());
$fila= mysql_fetch_array($ejecuta);


do{

$rec_id=$fila["rec_id"];
$rec_descrip=$arr['rec_nombre'];

?>
<li class="odd"><a href="?categoria=<? echo $fila["catr_id"]?>"> <? echo $fila["rec_nombre"]?></a></li>
<? }while($fila= mysql_fetch_array($ejecuta))


?>

<li><a href="listareco.php?rec_id=<? echo $fila["rec_id"]?>&categoria=<? echo $categoria ?>" class="more">Ver mas</a></li>

</ul>

<? }while($fila1= mysql_fetch_array($ejecuta1)) ?>


</div> eso ojala me puedan ayuda aki esta el código
FAQ relacionadas

Para ver más FAQ relacionadas accede a las categorías:

Volver al árbol de categoríasVolver al árbol de categorías