Creo y apuesto por el que los errores se deben de comprender y ver posibles soluciones:
Cita: Warning: Cannot modify header information - headers already sent by (output started at /home/webcindario/noeliafanclub/dar_alta_vip.php:46) in /home/webcindario/noeliafanclub/dar_alta_vip.php on line 89
Ese error te está diciendo que en dar_alta_vip linea 46 tienes algo de HTML que has enviado al navegador . .Cuando se usa la función header() no se puede enviar nada al navegador antes de dicha función pues esa funcion mánda "comandos" HTTP al navegador para realizar acciones como la de tu caso "redireccionar" a otro sitio.
Cunao se habla de que no puede existir nada de salida al navegador se refiere a nada de HTML.. ni un simple espacio .. ni un salto de línea .. ni un echo "algo" .. nada.
Recuerda que PHP ejecuta priméro el código PHP y lo que resulte lo mandas al navegador .. así que estructuras tipo (como creo que tienes):
Código PHP:
<html>
<head>
</head>
<body>
<?
if (nose){
header ("location: talstio.tal");
} else {
echo "bla bla";
}
?>
</body>
</html>
Así no tiene sentido el código si piensas como trabaja PHP .. para el momento (condición) que se ha de lanzar esa cabecera HTTP de redirección el HTML que hay por encima de el NO importa para PHP ni para el navegador pues .. antes de que se pueda ejecutar dicho HTML en el navegador se le envian las cabeceras que viajen por header() ..
En tu caso . la condición es:
1) o redireccionas
2) o muestras un mensaje ahí mismo .. es decir una página HTML completa con sus tags de apertura y cierre del código HTML
entonces quedaría así:
Código PHP:
<?
if (nose){
header ("location: talstio.tal");
} else {
?>
<html>
<head>
</head>
<body>
<? echo "bla bla"; ?>
</body>
</html>
<?
}
?>
La propuesta de Reynier con esas funciones PHP de control del buffer de salida .. para este caso sólo son un "parche" (por lo menos lo veo yo así). Te solventan el problema a costa de un consumo extra de recursos del servidor cuando este problema se resuelve diseñando la estructura de tu código conforme trabaja un lenguaje del lado del servidor y más concretamente PHP.
De todas formas .. su uso sería:
Código PHP:
<?
//se inicia la captura de buffer de salida de PHP
ob_start()
?>
tu codigo HTML PHP o lo que gustes con tu header() done lo tengas ...
<?
// y se termina de capturar el buffer y se libera al cliente . .para este punto ya se ha relizado la redireccion y es lo que queda en última instancia en el buffer.
ob_end_flush();
?>
Un saludo,