Foros del Web » Programando para Internet » PHP »

El header me esta volviendo loco

Estas en el tema de El header me esta volviendo loco en el foro de PHP en Foros del Web. Saludos: Solicito ayuda con este código que no me esta funcionando, el problema es que PHP me envía el siguiente warning, el cual según yo ...
  #1 (permalink)  
Antiguo 18/11/2003, 13:17
 
Fecha de Ingreso: noviembre-2003
Mensajes: 5
Antigüedad: 14 años
Puntos: 0
El header me esta volviendo loco

Saludos:

Solicito ayuda con este código que no me esta funcionando, el problema es que PHP me envía el siguiente warning, el cual según yo ya quite: Cannot add header information - headers already sent by (output started at /var/www/html/dos.php:5) in /var/www/html/dos.php on line 9, y este es mi código:

dos.php

<?php
if (($_POST['login'] == 'xxx') && ($_POST['password'] == 'xxxx'))
{
if (empty($_POST['dato1']))
$_POST['dato1']='Variable no registrada';
echo 'Dato1 es:' . $_POST['dato1'] . "<br> \n";
if ($_POST['dato2'] == 'no')
$_POST['dato2']='Variable no registrada';
echo 'Dato1 es:' . $_POST['dato2'] . "<br> \n";
header ("Location: http://eprints.cucsh.udg.mx/tres.php");
}
else {
header ("Location: http://eprints.cucsh.udg.mx/uno.php");
}
?>

Este código es un archivo php diferente al cual llego por uno.php, que es solo un formulario:

<html>
<head>
<title>Recordando PHP</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<form action="dos.php" method="post" name="form1">
<p>Login:
<input name="login" type="text" id="login">
</p>
<p>Password:
<input name="password" type="password" id="password">
</p>
<p>dato1:
<input name="dato1" type="text" id="dato1">
</p>
<p> dato2:
<select name="dato2" id="dato2">
<option value="no">Selecciona un comida</option>
<option value="Carne en su jugo">Carne en su jugo</option>
<option value="Filete de pescado empanizado">Filete de pescado empanizado</option>
<option value="Quesadillas">Quesadillas</option>
<option value="Tacos dorados">Tacos dorados</option>
</select>
</p>
<p>
<input name="Aceptar" type="submit" id="Aceptar" value="Aceptar">
<input type="reset" name="Reset" value="Reset">
</p>
</form>
</body>
</html>
  #2 (permalink)  
Antiguo 18/11/2003, 14:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No puedes hacer esto:

echo 'Dato1 es:' . $_POST['dato2'] . "<br> \n";
header ("Location: http://eprints.cucsh.udg.mx/tres.php");

Es decir .. enviar algo de HTML al navegador (salida en general) y luego ejecutar un header() ...

Antes de header() no puede existir nada de HTML por encima así que ordena tu código para presentar esos mensajes en otro sitio (por ejemplo en la página a la que redireccionas pasandole como parámetro por el URL o en una session/cookie) el valor de esas variables que obtienes ahí en ese código ..

Puedes usar también (no aconsejable) redireccionamientos tipo javascript o cabeceras META de refresh (HTML) .. o incluso funciones de gestión del buffer ob_start() y afines ..

Pero, lo más lógico es que "pienses" como funciona PHP y de ahí ordenes tu código. PHP se ejecuta en el servidor .. compone tu página HTML según tus estructuras de control (IF, .. bucles .. etc) y de ahí es entregado al navegador lo que tenga que mostrar o ejecutar este.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 19/11/2003, 04:48
 
Fecha de Ingreso: noviembre-2003
Mensajes: 1
Antigüedad: 14 años
Puntos: 0
Muy buenas amigo, soy nuevo por estos foros, pero te voy a pasar dos lineas que lei en otro foro y que me ayudaron mucho con el problema del header que mencionas.

pon

ob_start(); justo despues del principio de tu codigo php

y

ob_end_flush(); al final del mismo y antes de la etiqueta de fin..

espero te sea de ayuda, un saludo.
  #4 (permalink)  
Antiguo 19/11/2003, 05:10
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

En este caso tampoco serviria el ob_start(), porque por la logica del codigo lo que quiere es mostrar los mensajes y redireccionar. Y con el header("Location") nunca se va a mostrar los mensajes (ya sea recolocando el header() o usando el ob_start()).

Asi que si lo que realmente quieres es mostrar los mensajes, tendras que usar redireccion javascript o HTML con el META. Nunca el header("Location"), este solo es para redireccionar sin mostrar mensajes.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 19/11/2003, 07:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Por lo que comenta josemi . hice mi comentario sobre usar variables "de control" tipo:

Código PHP:
if ($tal=="tal"){
  
header("Location: pagina.php?var_control=1");
} else {
  
header("Location: pagina.php?var_control=2");

y en "pagina.php" (donde redireccionas) es donde debes gestionar tu var_control para presentar el mensaje de erro/exito que corresponda. (usando indices de arrays como el ejemplo va bastante bien ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 10:34.