Foros del Web » Programando para Internet » PHP »

Redireccionar Decentemente.

Estas en el tema de Redireccionar Decentemente. en el foro de PHP en Foros del Web. Buenos Dias gente. Pues verán, en asp existe el response.redirect("pagina") para redireccionar y yo estoy buscando algo similar en php. Veran, tengo el tipico foro, ...
  #1 (permalink)  
Antiguo 01/12/2003, 07:45
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 5 meses
Puntos: 7
Redireccionar Decentemente.

Buenos Dias gente.

Pues verán, en asp existe el response.redirect("pagina") para redireccionar y yo estoy buscando algo similar en php.

Veran, tengo el tipico foro, y cuando alguien inserta una nueva cuestion, o la elimina (Estoy haciendo un wiki) hice una pequeña funcion en javascript para que redireccione a la página donde se muestra el listado de temas que hay. Pero sin actualizar, no hago un history.back, sino un location.href='pagina', pero aun asi, no me actualiza automaticamente, tengo que dar a F5 para ver los cambios.

En asp esto queda facilmente solucionado con lo de resopnse.redirect("D") ya que lo actualiza cuando te redirecciona, ¿Alguien puede decirme como en php puedo hacer la redireccion decentemente y que me muestre los datos actualizados?

Espero haberme explicado y que me puedan ayudar. Gracias.
__________________
Charlie.
  #2 (permalink)  
Antiguo 01/12/2003, 07:50
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Hola,

PHP lo hace enviando la cabecera HTTP Location mediante la funcion header() (www.php.net/header). Algo asi:
Código PHP:
header("Location: direccion.php");
exit; 
// para que no ejecute nada despues de mandar la cabecera 
Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 01/12/2003, 08:10
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 5 meses
Puntos: 7
josemi, esa no me vale, ya que antes de redireccionar estoy ejecutando sentencias y todo eso.

El header solo se usa cuando no se va a mandar nada de html ni nada de eso, asique eso no me vale, necesito otra cosa.
__________________
Charlie.
  #4 (permalink)  
Antiguo 01/12/2003, 08:22
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 21 años, 6 meses
Puntos: 2
usa un meta de html

Código PHP:
echo "<META HTTP-EQUIV=Refresh CONTENT=0;URL=index.php?menuSistem=loginAdministratorAccesoIncorrecto>"
pd: lo que dice josemi es correcto!, el problema esq no has estructurado correctamente tu script... y te da errores por los huecos en blanco y todo el html que tendras en medio.
__________________
3w.valenciadjs.com
3w.laislatv.com

Última edición por nuevo; 01/12/2003 a las 08:25
  #5 (permalink)  
Antiguo 01/12/2003, 08:28
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Cita:
Mensaje Original por chcma
josemi, esa no me vale, ya que antes de redireccionar estoy ejecutando sentencias y todo eso.

El header solo se usa cuando no se va a mandar nada de html ni nada de eso, asique eso no me vale, necesito otra cosa.
Ese mismo problema lo tienes con el response.redirect de ASP. Exactamente el mismo. Y la "solucion" que se aplica en ASP tambien se puede aplicar en PHP. Aunque lo mejor es lo que dice nuevo, reestructurar tu codigo para que el header() este antes que la salida al navegador. Ademas, es lo mas logico, ¿para que vas a enviar salida que nadie va a ver?

Y repito que el response.redirect sufre el mismo problema porque usa el mismo mecanismo para redireccionar: cabeceras HTTP.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 01/12/2003, 08:40
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 5 meses
Puntos: 7
Haber, yo si hago:
$sql=mysql_query("select * from ttema where id=1",$cn);
if(mysql_num_rows($sql)==0){
echo "has puesto mal la direccion o ya no existe el tema";
}else{
mysql_query("delete from ttema where id=1", $cn);
header("Location: temas.php");
}

Si hago eso en PHP me casca, pero si eso lo hago en ASP no me casca, asi que no me digas qeu es lo mismo, joer, que estoy de hacer paginas en ASP como un gocho.

Lo que necesito es algo para hacer lo que te he puesto ahora, pero que me funcione y que me actualize bien la pagina, ya que ocn javascript no me sale.
__________________
Charlie.

Última edición por chcma; 01/12/2003 a las 08:43
  #7 (permalink)  
Antiguo 01/12/2003, 08:48
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
¿Y se veia el mensaje (digo en ASP)? Por cierto, ¿te funciona en ASP cuando desactivas el buffer (Response.Buffer = false)? Porque en PHP el buffer esta por defecto desactivado.

Si quieres programar de la misma forma descuidada que con ASP, pon ob_start() (www.php.net/ob_start). Pero sigo pensando que es malgastar energias generar salida que no se va a ver.

Saludos.

PD: En la pagina de M$ http://support.microsoft.com/default...NoWebContent=1 comentan el mismo error que obtienes tu con PHP, pero con el response.redirect.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #8 (permalink)  
Antiguo 01/12/2003, 11:24
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 5 meses
Puntos: 7
Aparte que eso que comentas de activar el ob_start() y programar de forma insegura, ¿No conoces ningún otro método para que yo pueda redireccionar de forma eficiente en el caso anterior que te he puesto?

Gracias por todo, eh Josemi.
__________________
Charlie.
  #9 (permalink)  
Antiguo 01/12/2003, 12:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
chcma .. La forma "eficiente" es usando cabeceras HTTP directamente. (header("location...) con todo lo que implica sobre tu estructura de programación (para evitar dar salida HTML/etc al navegador antes de hacer tu redireccionamiento).

Las otras formas de redireccionamiento son: javascript, meta de refresh .. y si bien hacen su taréa . sinceramente lo más eficiente y seguro es header("location ..").

Puedes usar parámetros a la hora de redireccionar con header("location" ...) tipo:

Código PHP:
header("location: pagina.php?msg=blabla");
exit; 
Por ejemplo .. para EVITAR tener que mostar tus mensajes de error/exito en las mismas páginas que hacen tu proceso (mejor dicho "proceso" secuencial) y mostrarlo en la página que redireciones bajo esa condición de que si existe definida la variable $msg ..

Código PHP:
if (isset($_GET['msg'])){
echo 
$_GET['msg'];

Bàsicamente así es como deberías trabajar con tus redireccionmientos automáticos .. Usar variables de control y mostar los mensajes que correspondan en las páginas que redirecciones.

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 01/12/2003, 13:12
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 5 meses
Puntos: 7
Bueno, haber si lo he entendido.

$sql=mysql_query("senentcia",$cn);
if(mysql_num_rows($sql)==0){
header("Location: error.php");
}else{
mysql_query("insert . . .", $cn);
header("Location: temas.php";
}

¿Esto esta bien? ¿Asi funcionaria? ¿Y si tengo mas if despues tambien funcionaria?

Es decir, supongamos que tengo:
switch($op){
case "insertar:
sql=mysql_query("senentcia",$cn);
if(mysql_num_rows($sql)==0){
header("Location: error.php?op=insertar");
}else{
mysql_query("insert . . .", $cn);
header("Location: temas.php";
}
break;

case "borrar":
sql=mysql_query("senentcia",$cn);
if(mysql_num_rows($sql)==0){
header("Location: error.php?op=borrar");
}else{
mysql_query("insert . . .", $cn);
header("Location: temas.php";
}
}

¿Eso funcionaria?
Gracias por todo y disculpas si soy un poco pesado con este tema, pero es que todavía no soy quien a dominar bien el header, pero creo que teniendo aclarada esta duda, ya sabré como trabajar con él. Si es que me responden lo que creo que me responderan, que es que si, que tal y como he puesto el switch esta bien planteado, ¿Me equivoco?
__________________
Charlie.

Última edición por chcma; 01/12/2003 a las 13:16
  #11 (permalink)  
Antiguo 01/12/2003, 13:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
En teoría está bien el uso de header() . siempre y cuando no tengas esos if .. o switch() entre <html> .. </html> y .. acuerdate de usar exit; a continuación de un header() de Location (de redireccionamiento).

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 01/12/2003, 14:41
 
Fecha de Ingreso: agosto-2003
Ubicación: Oaxaca
Mensajes: 41
Antigüedad: 21 años, 2 meses
Puntos: 0
Una pregunta?

veo que estan metidos mucho en lo del header, yo necesito mandar 4 variables dentro del header, pero no me lo permite, por que sucede esto?? de que otra forma puedo hacerlo??
__________________
'.' @nita '.'
  #13 (permalink)  
Antiguo 01/12/2003, 14:52
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
chcma, yo usaria un exit; despues de cada header("Location"), porque se supone que ya no quieres procesar ninguna linea de codigo mas.

Anita24, en el header puedes pasar variables como en los links href. Verifica que el codigo se genera correctamente.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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 21:46.