Foros del Web » Programando para Internet » PHP »

Header, falla a veces,cuando quiere

Estas en el tema de Header, falla a veces,cuando quiere en el foro de PHP en Foros del Web. Hola a todos. Teniendo un direccionamiento con header me muestra lo siguiente: Warning: Cannot modify header information - headers already sent by (output started at ...
  #1 (permalink)  
Antiguo 17/09/2008, 10:20
 
Fecha de Ingreso: mayo-2007
Mensajes: 348
Antigüedad: 17 años
Puntos: 9
Header, falla a veces,cuando quiere

Hola a todos.
Teniendo un direccionamiento con header me muestra lo siguiente:

Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\cssbeautiful.V-8.0\articulo.php:65) in C:\wamp\www\cssbeautiful.V-8.0\lib\form_comentarios.php on line 73

No tiene sentido por que en la linea 65 de articulo.php es esto:
Código PHP:
echo '<div><span class="fecha">'.$row_comentarios['fecha'].'</span></div>'.$row_comentarios['texto_comentario'].'</div>'
Y en la 73 de comentario.php es el header que os muestro a continuación:

Antes de todo funciona bien... cuando quiere, a veces me direcciona sin problemas y otras me salta con esa advertencia.

Utilizar un meta refresh lo veo un horror.


ob_start(); --> Y esta parece poco limpio.

articulo.php
Código PHP:
<?php 
if(isset($_SESSION['usuario_valido']))
{    
    if(
$_POST['_hidden'])
    {    
        
procesar_Form_Admin();
    }else {
        
mostrar_Form_Admin();
    }
}
else 
    {
    if(
$_POST['_hidden'])
    {
        if(
$errores=validar_Form())
        {
            
mostrar_Form($errores);
        } else {
                
procesar_Form();
            }
    } else {
        
mostrar_Form();
    }
}

?>

comentarios.php

Código PHP:
function procesar_Form_Admin()
{
global 
$conexion$id$comentario$fecha;

    
$insert_com_admin="insert into comentarios(id_comentario, id_noticia, nick_comentario, texto_comentario, tipo, fecha) 
                values ('','$id','{$_SESSION['usuario_valido']}', '<p>$comentario</p>', 'admin', '$fecha');"
;
    if(
mysqli_query($conexion$insert_com_admin))
    {
        
header("Location: articulo.php?id=$id");
        exit;
    } else {
        echo 
"<p>Ooops!.. Hubo un problema al a&ntilde;adir tu comentario.</p>";
    }                    

Alguna idea?
  #2 (permalink)  
Antiguo 17/09/2008, 10:26
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Header, falla a veces,cuando quiere

¿No tiene sentido? ¡En esa línea stás enviando texto al navegador!
  #3 (permalink)  
Antiguo 17/09/2008, 10:38
 
Fecha de Ingreso: mayo-2007
Mensajes: 348
Antigüedad: 17 años
Puntos: 9
Respuesta: Header, falla a veces,cuando quiere

Bueno entonces de que forma se puede usar header!???

Si no se puede tener html y demas junto a header para que sirve?!
Desde luego no se donde estará ya el problema pero os aseguro que en la linea 65 no, ya que tengo 112 lineas en total y solo marca esa...

Y el header a veces funciona y otras no?

No lo entiendo alvlin
  #4 (permalink)  
Antiguo 17/09/2008, 11:05
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Header, falla a veces,cuando quiere

Que funcione "a veces sí y a veces no" es extraño, sin duda alguna. Quizás tenga que ver con las llamadas a funciones que hacés según el caso.

En realidad solamente hay una regla a seguir: nunca se puede enviar nada de texto antes de una cabecera.
A veces un espacio de más o un salto de línea pueden causar problemas, revisá todos los archivos que incluyas y asegurate de que no se te escapa nada, empezando por que <?php sea lo primero que tenés en cada archivo.
Más aún: en archivos que solamente contienen código PHP, podés obviar la etiqueta de cierre y eso te puede ahorrar algunos fallos difíciles de detectar.

Siempre es recomendable, en vez de usar "echo" en medio del código PHP, guardar el contenido que se quiere enviar en una variable y luego mostrarla donde sea necesario. Así podés tener bloques de código PHP y bloques de HTML separados (PHP al principio del archivo generando lo necesario, HTML al final), evitando estos problemas.


Saludos.
  #5 (permalink)  
Antiguo 17/09/2008, 11:47
 
Fecha de Ingreso: mayo-2007
Mensajes: 348
Antigüedad: 17 años
Puntos: 9
Respuesta: Header, falla a veces,cuando quiere

Cierto cierto!!!

Claro!! ahora estaba pensando en poner las funciones arriba del todo pero claro pensé que los echo se mostrarían arriba también ,

¡¡ pero asignandole variables seria la solución!! No había caído en eso!
Pues de p.. madre!! jaja


Mil Gracias alvlin!!

Todo arreglado!!
  #6 (permalink)  
Antiguo 17/09/2008, 12:18
 
Fecha de Ingreso: mayo-2007
Mensajes: 348
Antigüedad: 17 años
Puntos: 9
Respuesta: Header, falla a veces,cuando quiere

Solo una cosica...

Para mostrar la variables tendría que usar print, echo, printf y ya tendría otra vez un fallo no?

Código PHP:
    $contenido='<li><div class="info_nick"><div class="'.$row_comentarios['tipo'].'"></div></div><div class="comentario">';
        
$contenido.='<div><strong>'.$row_comentarios['nick_comentario'].'</strong> dice:</div>';
        
$contenido.='<div><span class="fecha">'.$row_comentarios['fecha'].'</span></div>'.$row_comentarios['texto_comentario'].'</div>';
        
$contenido.='</li>';
        
        echo 
$contenido
Ahora el error me se señala la linea 65 que es echo $contenido;
  #7 (permalink)  
Antiguo 17/09/2008, 12:49
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Header, falla a veces,cuando quiere

La idea que te comentaba antes, es de este estilo:
Suponiendo que quisieras hacer un sistema muy básico de control de usuarios, tenés dos formas:
1.- mezclar HTML y PHP
2.- Procesar lo necesario con PHP y luego mostrar los datos
(de hecho hay una 3.- que es usar un sistema de plantillas o un framework de desarrollo)

De la primera forma una página protegida quedaría algo así
Código PHP:
<html>
<head>
<title>Mi página protegida</title>
</head>
<body>
Hola, <?php
session_start
();
if (isset(
$_SESSION['autenticado'])) {
    echo 
$_SESSION['usuario'];
} else {
    
header('Location: login.php');
    exit;
?>
</body>
</html>
¿Se ve el problema? La redirección fallará si el usuario no está autenticado, porque ya se envió texto al navegador.
Creo que el programa que estás haciendo es de este estilo, mezclando PHP y HTML (obviamente de forma no tan burda como en este ejemplo)

A lo que me refiero al decir "separar el PHP y el HTML", la segunda forma, es a algo así:

Código PHP:
<?php
session_start
();
if (isset(
$_SESSION['autenticado'])) {
    
$usuario $_SESSION['usuario'];
} else {
    
header('Location: login.php');
    exit;
?>

<html>
<head>
<title>Mi página protegida</title>
</head>
<body>
Hola, <?php echo $usuario?>
</body>
</html>
La idea es siempre procesar lo necesario con PHP, dejar las partes estáticas como HTML, y mezclar ambos lo menos posible.

Espero que quede más claro ahora.


Saludos.
  #8 (permalink)  
Antiguo 17/09/2008, 13:05
 
Fecha de Ingreso: mayo-2007
Mensajes: 348
Antigüedad: 17 años
Puntos: 9
Respuesta: Header, falla a veces,cuando quiere

Joe tío gracias por tus respuestas!!

Uso el tema de funciones, y claro donde tengo la llamada de la función procesar_Form() ahí es donde esta el header y claro, tiene toda la parte de html y echos arriba, pero es que no puedo poner esas funciones arriba ya que sino saldrían los formularios arriba de la página jaja.

Un poco lío, lose
  #9 (permalink)  
Antiguo 18/09/2008, 03:42
 
Fecha de Ingreso: mayo-2007
Mensajes: 348
Antigüedad: 17 años
Puntos: 9
Respuesta: Header, falla a veces,cuando quiere

Al final utilice ob_start y ob_end_flush.

Un saludo.
  #10 (permalink)  
Antiguo 18/09/2008, 04:13
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Respuesta: Header, falla a veces,cuando quiere

Solo unos comentarios :

Cita:
Iniciado por Nathan_1979 Ver Mensaje
Si no se puede tener html y demas junto a header para que sirve?!
Sirve para enviar cabeceras HTTP. Location es solo una de ellas y sirve para hacer redirecciones desde el servidor, por ello no tiene sentido enviar HTML si se hará una redirección. Solo es cuestión de lógica, de ordenar las cosas; el ejemplo/código de alvlin es un buen ejemplo.

Manipular el buffer de salida "soluciona" el problema (en realidad no, solo evitas el mensaje de advertencia) pero no es recomendable; cargas el servidor y estás haciendo mal uso del protocolo HTTP lo cuál podría darte otro tipos de problemas (sobre todo si manejas sesiones o cookies).

Las definiciones de funciones puedes hacerse donde sea. No tienen porque arrojar algo si no son invocadas explícitamente (lógica, orden).

Cuando se habla de separar el HTML de PHP es un poquito más complejo que ordenar el HTML y el PHP... seguro alvlin lo sabe, pero como es oootro tema, lo simplificó mucho.

FAQ, buscador, tema común .

Saludos
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
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 15:30.