Redirigirme a otra página con HEADER... ERROR!

Buenas, tengo una página con un form que dirige por submit a otra donde he incluido el siguiente código:
$pass1= $_POST[password];
$pass2=$_POST[repassword];
if ($pass1 !=$pass2) {
header ('location:nocoincideemail.php');
}
Pero me sale el siguiente error:
Warning: Cannot modify header information- headers already sent by (output started at c:\xampp\htdocs\alta.php:4) in......
Por más que miro, y miro, googleo, pongo este código en el body, etc... No consigo salir de esta, ¿a qué se debe?
Gracias anticipadas.

1 respuesta

Respuesta
1
Este error es muy común y se suele solucionar con esto:
<?php
ob_start()
//ahora tu resto de código
...
...
...
ob_end_flush
?>
Si no te funciona lo que puedes hacer es redirigir a la otra página mediante Javascript en vez de mediante header con:
Echo "
<script type='text/javascript'>location.href='http://www.tudominio.com/nocoincideemail.php'</script>
";
El tema de ob_start y ob_end_fluch algo había leído, pero toca algo de las caches de los headers (corrígeme si me confundo), lo cual es algo que no controlo.
Desde luego la solución es usar el script de java, de todas formas... en cuestiones de seguridad prefiero que sea el propio server quien ejecute la redirección por PHP, he encontrado otra solución alternativa, a ver que os parece esto:
print "meta http-equiv=Refresh content=\"5 ; url=minuevapagina.php\";
Creo que sería más limpio así... o ¿no?
Si también sería una solución válida con el el Refresh, lo que sí que debe tener en cuenta es que en el atributo url debes poner la ruta ABSOLUTA del archivo, por ejemplo
URL='http://localhost/ejemplo/ejemplo.php'
Te explico un poco en cuestión el porqué usar ob_start(); como alternativa por si te interesa saberlo. La cuestión es que HTTP primero envía las cabeceras que es donde suelen estar las redirecciones y cookies... y luego ya empieza con lo que suele ir delante de
<html>
. Bien pues cuando tu comienzas a ejecutar un script PHP esto hace que se dejen de enviar los headers y si intentas fijar una cookie posteriormente por eso recibes el error "headers already sent". A lo que iba, ob viene de output buffering, lo que hace es guardar toda la salida en un buffer y luego primero envía los headers y luego el body de este modo no recibes el mensaje pero en cualquier caso es una función para cosas demasiado específicas que se mejor que note acostumbres, si con javascript o con el refresh puedes hacerlo funcionar mejor que mejor :).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas