Foros del Web » Programando para Internet » PHP »

Consulta sencillísima: función para redirigir a una página

Estas en el tema de Consulta sencillísima: función para redirigir a una página en el foro de PHP en Foros del Web. Buenas. Pues era simplemente eso, así como asp tiene el response.redirect (si mal no recuerdo) que función hay en php para hacer lo mismo. En ...
  #1 (permalink)  
Antiguo 04/07/2006, 13:20
 
Fecha de Ingreso: noviembre-2005
Mensajes: 312
Antigüedad: 12 años
Puntos: 1
Consulta sencillísima: función para redirigir a una página

Buenas.

Pues era simplemente eso, así como asp tiene el response.redirect (si mal no recuerdo) que función hay en php para hacer lo mismo. En cualquier caso ¿en qué web sobre php puedo encontrar fácilmente un listado de todas las funciones disponibles?. Así no tengo que recurrir ya a estas consultas.

Mil gracias.
  #2 (permalink)  
Antiguo 04/07/2006, 13:26
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 15 años, 9 meses
Puntos: 771
Hola Algadir

El mejor sitio para encontrar funciones de PHP es:

http://www.php.net/manual/es/

La que tú buscas me parece que es header()

Saludos,
  #3 (permalink)  
Antiguo 04/07/2006, 13:43
 
Fecha de Ingreso: noviembre-2005
Mensajes: 312
Antigüedad: 12 años
Puntos: 1
Hola JavierB:

Gracias por responder y por el link. Ya confirmaré si es header().

Gracias y un saludo ;).
  #4 (permalink)  
Antiguo 04/07/2006, 13:49
 
Fecha de Ingreso: noviembre-2005
Mensajes: 312
Antigüedad: 12 años
Puntos: 1
He consultado la página y parece que puede ser la que dices aunque como te pone que es para enviar una cabecera http dura la definición me despista pero por los ejemplos parece que puede servir esa, ya la probaré.

Gracias de nuevo ;).
  #5 (permalink)  
Antiguo 04/07/2006, 13:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si, . es esa la función ..

Lo que sucede es que en PHP tienes la función "genérica" para enviar cabeceras HTTP al cliente (navegador en tu caso) .. Una "redirección" es una cabecera HTTP según las RFC's correspondientes y normativa de dicho protocolo.

En concreto la cabecera HTTP es "Location" (la más usada) .. su sintax la definirá el protocolo HTTP .. Su uso aplicado con la función de PHP mencionada sería:

header ("Location: nose.php");


Y tras la ejecución de esa cabecera lo recomendable es "terminar" la ejecución del script PHP en ese punto .. pues el objetivo norlamente de usar esa cabecera es la de redireccionar o cambiar la ejecución del script por otro URL o similar en ese instante (y no seguir ejecutando el resto del código PHP sub-siguiente que puediera existir). Quedaría:

Código PHP:
header ("Location: nose.php");
exit; 
OJO! .. las cabeceras HTTP se envian al cliente -antes- de cualquier otro "HTML" o salida en general que puedas haber enviado también al cliente (navegador). Por ende .. antes de esa función (en el contexto del flujo del script/código) no puedes haber enviado nada de "HTML": echo "algo", HTML directo ... un simple espacio .. o un salto de línea antes de <? .. o ?> .. Todo eso es considerado como "salida" que no debe existir antes de header().

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 05/07/2006, 04:23
 
Fecha de Ingreso: noviembre-2005
Mensajes: 312
Antigüedad: 12 años
Puntos: 1
Hola Cluster:

Gracias por la explicación exhaustiva y por el ejemplo. No creo que tenga que explicar lo que quiero hacer porque es simplemente ejecutar un script en php que solo contenga código php para que haga algo y después desde ese mismo script volver a redirigir a la página en la que se estaba anteriormente (la que llamó a su vez al script). Igual hay otra forma de hacer eso pero es lo primero que se me ocurrió claro. Supongo que tendré que hacer uso de la variable de sistema que te permite saber el nombre del fichero que llamó al script. Ahora no recuerdo cual es pero la tengo apuntada.

Un saludo y muchas gracias de nuevo a todos por las explicaciones, probaré a ver que tal.
  #7 (permalink)  
Antiguo 05/07/2006, 04:24
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 13 años
Puntos: 1
y sino prueba con esto:

echo "<script>window.location='pagina.html'</script>";
__________________
ALOZORRO v5.0 (ahora en .es)
  #8 (permalink)  
Antiguo 05/07/2006, 05:26
 
Fecha de Ingreso: febrero-2005
Mensajes: 396
Antigüedad: 12 años, 10 meses
Puntos: 1
Esta última posibilidad no es muy buena ya que depende de que el navegador acepte javascript. Por otro lado los buscadores y demás no se daran cuenta usualmente de este tipo de redirecciones.

Un saludo

Zerjillo
  #9 (permalink)  
Antiguo 05/07/2006, 07:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por Algadir
Hola Cluster:

Gracias por la explicación exhaustiva y por el ejemplo. No creo que tenga que explicar lo que quiero hacer porque es simplemente ejecutar un script en php que solo contenga código php para que haga algo y después desde ese mismo script volver a redirigir a la página en la que se estaba anteriormente (la que llamó a su vez al script). Igual hay otra forma de hacer eso pero es lo primero que se me ocurrió claro. Supongo que tendré que hacer uso de la variable de sistema que te permite saber el nombre del fichero que llamó al script. Ahora no recuerdo cual es pero la tengo apuntada.

Un saludo y muchas gracias de nuevo a todos por las explicaciones, probaré a ver que tal.
No sé si habrás encontrado ya la variable que necesitas .. pero se trata de otra variable que vía el array $_SERVER .. PHP "obtiene" al "preguntar" al servidor HTTP .. este es entregada por el "cliente" (navegador) y a su vez es parte del protocolo HTTP. Se trata de "HTTP_REFERER".

Código PHP:
header("Location: ".$_SERVER['HTTP_REFERER']);
exit; 
¿Por qué me lio tanto que si PHP pregunta al servidor HTTP .. que si es parte del protocolo HTTP .. y blablabla.. ? Pues por la sencilla razón de que cuando "hay" problemas o tal "variable" no se comporta como uno espera .. ha quien hay que hecharle la culpa en estos casos no es tanto a tu código PHP sino a la definición de esa variable dentro del protocolo HTTP por ejemplo ...

Un "detallito" de dicha varaible es que NO todo los navegadores informan de esa variable al servidor HTTP que lo pide. De hecho esa información de "donde vengo URL" no se entrega si abres ventanas por ejemplo (con javascript) .. o en uso de frames .. Ojo con esos "detalles" ..

En lo personal para estos casos no uso dicha variable .. sino que "propago" en una variable a ese script el URL donde "estoy" para poder usarlo en la redirección .. es decir:

script1.php (donde estoy) ----> al script2.php (donde voy para confirmar, hacer un preview .. etc), tomo el URL donde estoy (al menos nombre script y ruta) .. lo obtengo con:

$_SERVER['PHP_SELF']

Lo almaceno en una variable y lo propago en el LINK o campo oculto de un formulario según pase de script1.php al script2.php ..

por ejemplo:

Código PHP:
<a href="script2.php?url_vuelta=<? echo $_SERVER['PHP_SELF'?>">ir a script2.php</a>
Y en script2.php .. al terminar el proceso y redireccionar uso esa variable "url_vuelta":

Código PHP:
header ("Location: ".$_GET['url_vuelta']);
exit; 
Así evito problemas con "navegadores" que no me quieran "informar" del URL de donde vienen .. o si uso ventanas o frames por médio ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 05/07/2006, 09:18
 
Fecha de Ingreso: noviembre-2005
Mensajes: 312
Antigüedad: 12 años
Puntos: 1
Buenas.

Azrael lo de javascript lo conocía pero ya que trabajo con php me viene mejor hacer uso de esta función en php. De todas formas gracias por la ayuda.

Y Cluster, muchísimas gracias por la explicación y el aviso, ya probaré como dices tú. Toda una explicación bien explicada nunca mejor dicho y gracias de nuevo por el ejemplo, probaré así a ver que tal va. Por cierto, otra consultilla tonta si con asp puedo hacer esto <%=variable%> si mal no recuerdo para asignar la variable a un link y demás con php ¿no hay otra forma más resumida también para hacerlo sin tener que usar echo?. Es una tontería pero con asp me acostumbraba a usar esa fórmula más abreviada. Pero vamos, tonterías tampoco me cuesta tanto escribir letra más o menos. Por cierto, hablo sin tener idea de php que conste pues conozco más el asp y con el php estoy aprendiendo sobre la marcha, en el ejemplo de Cluster sería <? echo $_SERVER['PHP_SELF'] ?>, el echo ¿es para pantalla o para algo más? ¿no se podría usar el . para concatenar?. Igual ando equivocado.

Un saludo y gracias de nuevo a todos, especialmente a Cluster por la currada de explicarme el caso con ejemplos. Me ha venido estupendamente la explicación.
  #11 (permalink)  
Antiguo 05/07/2006, 12:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En PHP tienes el "echo" en su versión corta de la misma forma:

<?=$variable ?>

O como es el caso:
<?=$_SERVER['PHP_SELF'] ?>

También hay en PHP sintax resumida para "if() else ..." por ejemplo (al igual que en otros lenguajes).

Cita:
en el ejemplo de Cluster sería <? echo $_SERVER['PHP_SELF'] ?>, el echo ¿es para pantalla o para algo más? ¿no se podría usar el . para concatenar?. Igual ando equivocado.
El "echo" o "print" o funciones similares son para dar "salida" .. PHP como lenguaje del lado del servidor (al igual que ASP por ejemplo) no "ven" si tu dispositivo final es una "pantalla" o algo que imprimas .. PHP sólo ve "salida" (hacia un "buffer") .. si tu generas "HTML" y lo ejecutas con un "navegador" .. lo veras en "pantalla" .. Si tu envias cabeceras HTTP por ejemplo para componer un archivo a "descargar" y haces tu "echo", en ese caso generas un archivo para descargar como tal hacia el cliente que lo pida .. Si tu generas WML .. lo veras en una "pantalla" .. pero de un dispositivo movil (celular .. etc)

Es importante tener claro ese concepto en lenguajes del lado del "servidor" .. te hago el comentario por qué esto es aplicable a lenguajes como PHP, Perl, ASP y otros "del lado del servidor" .. todos funcionan igual. Otra cosa será que algunos lenguajes tengan métodos implementados directos que comuniquen con lenguajes del lado del "cliente" (como ASP interactuando con VBscript .. o un ActiveX por ejemplo que será común hacerlo en ASP ..) pero esto no quiere decir que la "filosofía" de fondo no sea la misma ..


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 06/07/2006, 11:22
 
Fecha de Ingreso: noviembre-2005
Mensajes: 312
Antigüedad: 12 años
Puntos: 1
Hola Cluster, siento el retraso. Nada simplemente para agradecerte todas las explicaciones y ejemplos y por esta última aclaración.

Un saludo.
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 20:22.