Ver Mensaje Individual
  #5 (permalink)  
Antiguo 27/04/2005, 10:16
Cluster
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El caso es alexis77 .. que si te paras a pensar un momento .. no tiene sentido decir:
"muestro un dato o mensaje y si tal condicion se cumple .. redirecciono a otra página".

El enfoque es distinto .. Si tu condición se cumple (o no ) . .redireccionas . .en ese punto no tiene sentido y de hecho así te avisa PHP con un error sobre "cabeceras" si envias algo de salida antes de un "header()" .. Piensa que PHP "procesa" la página que ha de generar para su salida .. así que "antes" de que pueda llegar tu "HTML" a interpretarse a tu navegador (cliente) tu "lógica" en PHP tal vez ya ha decidido que no corresponde "mostrar" esa salida generada en ese script ..

Ejemplo práctico:

Código PHP:
<?
// la condición .. del ejemplo tendrás que repasarla . .en teoría estás detectando por ejemplo que tu variable $id .. si no tiene valor es que hay un error por eso redireccionas a otro sitio ..
 
if(empty($id)){ 
     
header("Location: index.php?error=$error"); 
     exit;

?>
<html>
<head>
</head>
<body>
<?
echo "<b>Hola .. tal ... </b>";
echo 
"sus datos fueron ingresados correctamnte";
?>
</body>
</html>

?>
No hace falta ni que se haga un "else" .. para el IF .. para eso se termina la ejecución del script en ese punto . .pues ya vía cabecera HTTP se está diciendo al cliente "oye, cambia la página por esta otra ...", el resto no corresponde en ese caso.

Si dices tal vez que tienes una estructura "modular" donde tienes algo tipo
Código PHP:
<html>
<head>
</head>
<body>
<?
switch($_GET['seccion']){
   case 
"seccion1":
     echo 
"blablabla";
   break;
   case 
"proceso1":
     
$a="valor";
    break;
}
</
body>
</
head>
En ese caso .. como ya veras . .si haces un "header()" ahí en alguno de los "case" vas a tener el problemas por qué ya estás enviado "HTML" al navegador antes de tu header() ..

Una solución para ese problema sería crear funciones de "cabeceras" y "pie" de pagina para llamarlas cuando realmente se requiera de "salida" ..

Código PHP:
<?
function cabecera(){
?>
<html>
<head>
</head>
<body>
<?
}

function 
pie(){
?>
</body>
</html>
<?
}


switch(
$_GET['seccion']){
   case 
"seccion1":
     
// aquí se origina salida .. así que es necesario "componer" la página HTML .. 
     
cabecera();
     echo 
"blablabla";
     
pie();
   break;

   case 
"proceso1":
     
// aquí en este caso no hay "salida" .. es un "proceso" que al terminar redireccionamos a otro sitio 
     
$a="valor";
     
header ("Location: nosedonde.php");
     exit;
    break;
}
?>
Para otros diseños más complejos .. lo mejor sería ya saltar a algún sistema de motor de "templates" (Smarty, Noktemplate .. pathTemplate .. etc).

Un saludo,