Foros del Web » Programando para Internet » PHP »

problema con header...

Estas en el tema de problema con header... en el foro de PHP en Foros del Web. bueno chicos... heme aqui otra vez, lo que pasa es que como describi en un tema anterior que mande tengo 3 archivos, el primero muestra ...
  #1 (permalink)  
Antiguo 20/08/2003, 15:41
 
Fecha de Ingreso: agosto-2003
Ubicación: Piura
Mensajes: 238
Antigüedad: 14 años, 4 meses
Puntos: 0
problema con header...

bueno chicos...
heme aqui otra vez, lo que pasa es que como describi en un tema anterior que mande tengo 3 archivos, el primero muestra un formulario con radio buttons y un submit, el segundo evalua que radio button ha escogido el usuario y lo envia al tercer script dependiendo de su eleccion... bueno pues yo estaba haciendo la redirección al tercer script con funciones... me explico mejor con una sintaxis de los códigos abajo:

codigo_1.php: el formulario
<form>
<input type='radio' name='rad'>a
<input type='radio' name='rad'>b
<input type='radio' name='rad'>c
<input type='submit' name='eval'>evalua ahora etc...
</form>

codigo_2.php: la evaluación
include ("pagina_para_opcion_a.php");
include ("pagina_para_opcion_b.php");
include ("pagina_para_opcion_c.php");
switch($rad){
case 0:
paginaA(); /* esta es una función dentro
de "pagina_para_opcion_a.php"*/
break;
case 1:
paginaB(); /* esta es una función dentro
de "pagina_para_opcion_b.php"*/
break;
case 2:
paginaC(); /* esta es una función dentro
de "pagina_para_opcion_c.php"*/
break;
}

codigo 3: pagina_para_opcion_a.php o pagina_para_opcion_b.php o pagina_para_opcion_c.php
function paginaX{
// y aqui va todo el proceso para cada eleccion...
}

Como se darán cuenta es todo un problemon, una chanfainita completa y es asi que me puse a investigar y encontré la funcion "header" y emocionado la puse en el codigo 2, el de la evaluación en lugar de llamar a las funciones... y... oh sorpresa, me sale este error:

Warning: Cannot add header information - headers already sent by (output started at /var/www/html/aplicacion_web/codigo_2.php:5)

y pues, no se que hacer.... he estado investigando y, para variar, no me sale....

Agradecido de antemano por su siempre solidaria respuesta

su amigo:
Paco ... el que muchas veces las cosas no le salen...jejee
  #2 (permalink)  
Antiguo 20/08/2003, 16:05
 
Fecha de Ingreso: agosto-2003
Ubicación: Mexico Df abajo del puente de municipio
Mensajes: 216
Antigüedad: 14 años, 3 meses
Puntos: 0
header¿?

Pues bien fácil
lo más seguro es que pusiste la funcion header en medio del codigo de tu página.

la funcion header siempre se pone en el primer renglon o linea de tu sitio para que no pase eso.
bueno espero que sea eso.
  #3 (permalink)  
Antiguo 20/08/2003, 16:13
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

No es necesario ponerla al principio. Simpemente no debes haber mandado nada al navegador. Ni HTML, ni espacios, ni echos, nada.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 20/08/2003, 16:29
 
Fecha de Ingreso: agosto-2003
Ubicación: Piura
Mensajes: 238
Antigüedad: 14 años, 4 meses
Puntos: 0
amigos... esto, lo que dice josemi en su mensaje, significa que los headers no van a funcionar si es que mis códigos: codigo_1.php, codigo_2.php, codigo_3.php interactuan dentro de una página con frames?

Gracias como siempre por sus respuestas...
Paco
__________________
Un hombre inteligente, caminando, llega mucho mas rápido que un torpe en coche
  #5 (permalink)  
Antiguo 23/08/2003, 00:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Los frames no tiene nada que ver .. un frame (de HTML teoría) se comporta como una página própia con sus cabeceras propias y resto de tu código ..

Osease, si vas a usar header() .. lo que importa es que NO exista nada de HTML antes de llamar a dicha función .. Entiendase como HTML a un simple espacio .. o salto de líena antes o despues del primer <? o último ?> que hagas en esos codigo_x.php

En la estructura que planteas (el código que pusistes) .. Deberías de tener tu formulario de selección (tu HTML) como la opcion del CASE "default" ...incluido ahí tus cabeceras HTML <html><head> .. que puedas necesitar y tus </html> .. Osease, Cada "CASE" sería una página HTML completa .. Para ello te puedes ayudar de funciones como:

Código PHP:
function cabeceraHTML(){
echo <<<HTML
<html>
<head>
<title>blabla</title>
</head>
<body>
HTML;

Y alguna de "pie" donde cierres los <tag> HTML abiertos .. Esas funciones las llamaras cuando tengas que mostrar los datos realmente ..

Ejemplo

Caso MAL estructurado:

Código PHP:
<html>
<head>
<title>blabla</title>
</head>
</body>
<?
switch($rad){
case 
0:
    echo 
"algo .. esto ya es HTML o cabecera enviada al navegador";
break;
case 
1:
   
// aquí un proceso PHP integro ..
  
if ($variable=="nose"){
    
header("location: nosedonde.php");
    exit;
  }
break;
}
?>
</body>
</html>
En el ejemplo .. no todos los CASE (casos) dan una salída HTML (sólo el primero) .. así que el 2º caso nos fallará el header() con el mensajito que ya hemos enviado HTML al navegador (cabeceras) ..

Ahora .. "Pensemos" como trabaja PHP (siempre pre-procesa en el servidor .. lo que genere es lo que entrega al cliente (navegador en estos casos ..) .. Bien .. usando las funciones de "cabecera()" y "pie()" que podamos tener .. se hace muyy sencillo hacer "opciones" (CASE) que tengan o no tengan salida realmente HTML ...

Código PHP:
<?
function cabeceraHTML(){
echo <<<HTML
<html>
<head>
<title>blabla</title>
</head>
<body>
HTML;
}

function 
pieHTML() {
echo <<<HTML
</body>
</html>
HTML;
}

switch(
$rad){
case 
0:
    
cabeceraHTML(); // componemos la pagina HTML .. cabecera
    
echo "algo .. esto ya es HTML o cabecera enviada al navegador"// nuestro contenido ..
    
pieHTML(); // el pie de página .. 
break;
case 
1:
   
// aquí un proceso PHP integro .. NO llamamos a las funciones de cabeceraHTML ni pieHTML pues
  // este proceso se hace integro en PHP .. sólo sále al navegador con el header().
  
if ($variable=="nose"){
    
header("location: nosedonde.php");
    exit;
  }
break;
}
?>
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 23/08/2003, 00:29
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 15 años
Puntos: 1
u ocupar al principio la funcion ob_start(); y al final ob_end_flush()

con eso no hay problemas con las header

Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #7 (permalink)  
Antiguo 23/08/2003, 03:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Manejar el "buffer" de salida así es sobrecargar al servidor para una taréa que es simplemente de estructura y de "pensar" un poco como trabaja PHP exactamente.

Por supuesto está bien conocer ese tipo de funciones ..pero también saber usarlas con moderación por los problémas de rendimiento que podría acarrear.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 23/08/2003, 09:17
 
Fecha de Ingreso: agosto-2003
Ubicación: Piura
Mensajes: 238
Antigüedad: 14 años, 4 meses
Puntos: 0
Muchísimas gracias a todos por tan valiosa colaboración, de verdad me siento muy agradecido a todos pues han ayudado en gran manera a disipar mis tan fuertes dudas....

Un gran saludo y abrazo a todos...
su amigo de siempre
Paco
__________________
Un hombre inteligente, caminando, llega mucho mas rápido que un torpe en coche
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 20:40.