2011-10-12 25 views
6

Estoy aprendiendo PHP y he estado buscando esto por un tiempo. Lo que quiero lograr es algo así:¿Cómo puedo enviar a un usuario a otra url sin una redirección de encabezado?

if (true/false) { 
    go to this url; 
} 

Cada vez que busco términos como PHP vuelve a dirigir o enlaces php etc., el 99% de las veces me sale "cabeceras" algo. Leí que los redireccionamientos de encabezado pueden lograr esto, pero ningún código puede ir antes que el primero en la página, de lo contrario no funcionará.

Si es así, ¿cómo puedo lograrlo?

+4

No puede haber ninguna salida antes de hacer un redireccionamiento de encabezado, pero generalmente son el camino a seguir. Pensar en cómo se puede hacer la comprobación de verdadero/falso antes de que salga cualquier HTML suele ser una mejor idea que tratar de encontrar una forma de redireccionar a una página en el medio de la representación –

+1

Si ya ha generado algo, puede usar cualquiera JavaScript 'document.location =" url ";' o la etiqueta de actualización meta desaprobada: https://secure.wikimedia.org/wikipedia/en/wiki/Meta_refresh – Tom

+0

gracias chicos. tomaré su consejo pekka y lo pondré en cualquier cosa que haga ... verifico ciertos valores de un formulario contra ciertos valores en un db, por lo que ese sería el camino a seguir. Gracias. – somdow

Respuesta

8

He leído que los redireccionamientos de encabezado pueden lograr esto, pero ningún código puede ir antes. que debe estar primero en la página, de lo contrario no funcionará.

Eso está mal. No debe haber salida antes de esto. Por lo tanto, debe asegurarse de no hacer echo, print, ?>something<?php (o lo que sea) antes.

if (true) { 
    header('Location: ' . $url, false, 302); 
    exit; // Ensures, that there is no code _after_ the redirect executed 
} 

Puede preparar todo about it in the official manual. Especialmente:

Recuerde que el encabezado() se debe invocar antes de enviar cualquier salida real, ya sea mediante etiquetas HTML normales, líneas en blanco en un archivo o desde PHP. Es un error muy común leer código con include(), o require(), funciones u otra función de acceso a archivos, y tener espacios o líneas vacías que se emiten antes de llamar a header(). El mismo problema existe cuando se usa un único archivo PHP/HTML.

+2

E incluso si cree que puede, puede usar [buffering de salida] (http://php.net/manual/en/book.outcontrol.php) si está tan preocupado. –

+0

ahh ok ok veo. No entendí la parte de "salida" lmao. ¡gracias por eso!. y gracias también Brad. – somdow

5
echo '<script type="text/javascript"> document.location = "http://yoururl.com";</script>' 

y esto va a ser ejecutado cuando se ejecuta esta parte del guión.

+0

He votado porque me diste una respuesta que no era encabezado (como él menciona en la pregunta) pero no lo sé, debería haberlo porque creo que lo que realmente necesitaba era que alguien explicara el búfer de salida: P – Gazillion

0

Usted puede utilizar esta opción si necesita alguna salida antes de la redirección:

header("refresh: $time_in_seconds; url=$your_url); 

No obstante, debe llamar a esto antes de la salida se envía realmente sin embargo. Envíe el encabezado, luego envíe su salida: la página se "redireccionará" en el tiempo especificado.

Disclaimer: Debo admitir que no estoy seguro de cuáles son las implicaciones de esto y no puedo encontrar documentos en él, por lo que no puedo recomendarlo necesariamente, pero puedo confirmar que funciona.

Cuestiones relacionadas