Foros del Web » Programando para Internet » PHP »

no me funciona el fuck redirect con header(Location)

Estas en el tema de no me funciona el fuck redirect con header(Location) en el foro de PHP en Foros del Web. No me funciona esto de redireccionar una pagina con el header(Location) como se hace ? aqui el error Código PHP: Warning :  Cannot modify header information  -  headers already sent by  ...
  #1 (permalink)  
Antiguo 28/08/2003, 17:42
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 15 años, 10 meses
Puntos: 6
no me funciona el fuck redirect con header(Location)

No me funciona esto de redireccionar una pagina con el header(Location)


como se hace ?
aqui el error

Código PHP:
WarningCannot modify header information headers already sent by (output started at /home/httpd/vhosts/DOMINIO/httpdocs/formulario.php:8in /home/httpd/vhosts/DOMINIO/httpdocs/formulario.php on line 87 
__________________
www.dataautos.com

Última edición por asinox; 28/08/2003 a las 17:54
  #2 (permalink)  
Antiguo 28/08/2003, 17:57
 
Fecha de Ingreso: agosto-2003
Ubicación: Piura
Mensajes: 238
Antigüedad: 14 años, 4 meses
Puntos: 0
Hola:
imagino que te sale un warning que te impide la redirección... aqui te paso una una completa explicación que hace poco tuvo a bien el maestro Cluster de darme... ahi te va y de hecho que te servirá... el tema en donde me lo explicó se llama "problema con headers":

Cita:
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 gran saludo y éxitos en tus proyectos...
Paco
__________________
Un hombre inteligente, caminando, llega mucho mas rápido que un torpe en coche

Última edición por pacoalonso79; 28/08/2003 a las 17:59
  #3 (permalink)  
Antiguo 28/08/2003, 17:57
Avatar de eft0  
Fecha de Ingreso: junio-2003
Ubicación: Santiago - Chile
Mensajes: 635
Antigüedad: 14 años, 6 meses
Puntos: 8
header("Location: http://www.google.com");

El error que te sale, es debido a que los Headers, es lo primero que debes enviar al navegador, y no despues, por eso te envia el Warning, y no lo hace, asegurate de eso.

Saludos.
__________________
eft0's stuff! - http://estebanfernandez.net
  #4 (permalink)  
Antiguo 28/08/2003, 18:33
Avatar de grovervas
Usuario no validado
 
Fecha de Ingreso: junio-2002
Ubicación: Perú
Mensajes: 306
Antigüedad: 15 años, 6 meses
Puntos: 0
El problema de os headers es que antes no debe existir nionguna salida como son print, echo entre otros ya que eso impide la ejecución de los header y provoca los warning
  #5 (permalink)  
Antiguo 28/08/2003, 19:12
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 15 años, 10 meses
Puntos: 6
Bueno estoy usando el codigo Cluster... me imagino que en
Código PHP:
if ($variable=="nose"){ 
va el codigo que ejecuto en php y etc..

hasta ahora no hay errores, solo que ando esperando que me llegue el mail que envio desde aqui...

Saludos.
__________________
www.dataautos.com
  #6 (permalink)  
Antiguo 28/08/2003, 21:19
Avatar de sdf23  
Fecha de Ingreso: diciembre-2002
Mensajes: 297
Antigüedad: 15 años
Puntos: 0
Tambien podrias usar un control de buffer colo cando al principio de todo:

ob_start();

y al final de todo:

ob_end_flush();
__________________

la vida es bella cuando no es culera
  #7 (permalink)  
Antiguo 28/08/2003, 23:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Nuca digo que no existan soluciones "aparentemente" más simples de solventar algún problema (caso de problemas con "header" usar el control del buffer .. o de 'Notices' por ejemplo eliminar el reporte de errores) .. Pero, antes de poder decidirse por cual o pascual método usar sería altamente recomendable que viesen y se informaran el "por qué" de las cosas.

En el caso concreto .. Siempre prefiero explicar cómo funcion PHP! y como se estructura que nó dar alguna solución "rápida" como la que proponer sdf23 (no te lo tomes a mal sólo es mi opinión).

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 29/08/2003, 13:30
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 15 años, 10 meses
Puntos: 6
Pues con la utilización del codigo de CLUSTER, y mis actualizacion...aqui esta, el redireccinamiento funciona, pero no me esta funcionando el envio de mail...alguien ve por que?

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

function 
pieHTML() {
echo <<<HTML
</body>
</html>
HTML;
}
switch(
$rad){
case 
0:
    
cabeceraHTML(); // componemos la pagina HTML .. cabecera
    
echo " <form action=\"formulario.php\" method=\"post\" enctype=\"multipart/form-data\">
    <table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
  <tr>
    <td><b>Nombres:</b></td>
    <td><input type=\"text\" name=\"nombres\" size=\"33\"></td>
  </tr>
  <tr>
    <td><b>Apellidos</b></td>
    <td><input type=\"text\" name=\"apellido\" size=\"33\"></td>
  </tr>
  <tr>
    <td><b>Cédula</b></td>
    <td><input type=\"text\" name=\"cedula\" size=\"33\"></td>
  </tr>
  <tr>
    <td><b>Teléfono</b></td>
    <td><input type=\"text\" name=\"telefono\" size=\"33\"></td>
  </tr>
  <tr>
    <td><b>Dirección</b></td>
    <td><input type=\"text\" name=\"Direccion\" size=\"33\"></td>
  </tr>
  <tr>
    <td><b>Fecha de Nacimiento</b></td>
    <td><input type=\"text\" name=\"Fnacimiento\" size=\"33\"></td>
  </tr>
  <tr>
    <td><b>Correo Electrónico</b></td>
    <td><input type=\"text\" name=\"correo\" size=\"33\"></td>
  </tr>
  <tr>
    <td><b>Profesión</b></td>
    <td><input type=\"text\" name=\"Profesion\" size=\"33\"></td>
  </tr>
  <td></td>
  <td> <input type=\"Submit\" value=\"Enviar\" name=\"Submit\">&nbsp;&nbsp; <input type=\"Reset\" value=\"Borrar\" name=\"Borrar\"></td>
</table>"
// 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 ($Submit){
    
$cuerpo .= "SOLICITUD. \n\n\n";
    
$From  .= "[email protected]"//cuenta que envia
    
$encabezado .= "From: $From";
    
/* $cuerpo .= "From:[email protected]";  */
    
$cuerpo .= "Nombres : " $HTTP_POST_VARS['nombres'] . "\n"
    
$cuerpo .= "Apellidos : " $HTTP_POST_VARS['apellido'] . "\n";
    
$cuerpo .= "Cédula : " $HTTP_POST_VARS['cedula'] . "\n";
    
$cuerpo .= "Teléfono :" $HTTP_POST_VARS['telefono'] . "\n";     
    
$cuerpo .= "Dirección : " $HTTP_POST_VARS['Direccion'] . "\n"
    
$cuerpo .= "Fecha de Nacimiento : " $HTTP_POST_VARS['Fnacimiento'] . "\n"
    
$cuerpo .= "Correo Eléctronico: " $HTTP_POST_VARS['correo'] . "\n"
    
$cuerpo .= "Profesión: " $HTTP_POST_VARS['Profesion'] . "\n"
    
//mando el correo... 
    
mail("[email protected]","Solicitud de Tarjeta Clasic",$cuerpo,$encabezado);
header("Location: tarjetas.htm");
exit;
  }
break;
}
?>
__________________
www.dataautos.com
  #9 (permalink)  
Antiguo 29/08/2003, 13:53
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 15 años, 10 meses
Puntos: 6
Bueno ya me funciono... lo acabo de dividir en dos archivos...un formulario y el otro donde envia el mail y su header ...y como cluster dijo que no debia existir nada de html...pues eso hice

gracias gente
__________________
www.dataautos.com
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 11:54.