Problema Foro Php

diablo_cris
12 de Enero del 2006
Buenas a [email protected], soy muy novato en php y empece hoy a hacer un foro con una guia que habia conseguido, y lo hice en u nservidor propio que monte con el foxserver, y despues de configurar las apginas php del foro y poner los templates y demas, ahy una cosa con la que no consigo dar, y es solucionar un problema que me da al entrar al foro.php

Warning: Cannot add header information - headers already sent by (output started at c:easyservwwwconfiguracion.php:9) in c:easyservwwwforo.php on line 5

esto es lo que me dice, y si le doy a la opcion de nuevo tema me sale este otro:

Warning: Cannot add header information - headers already sent by (output started at c:easyservwwwconfiguracion.php:9) in c:easyservwwwagregar.php on line 30

supongo que sera problema del configuracion.php no? aqui os pongo lo que hay en el:

<?php
$bd_host = "localhost";
$bd_usuario = "xxxxxx";
$bd_password = "xxxx";
$bd_base = "xxxx";
$con = mysql_connect($bd_host, $bd_usuario, $bd_password);
mysql_select_db($bd_base, $con);
?>

intente solucionarlo cambiando mil cosas en este y en las otras dos apg pero no fui quien.. espeor que me podais echar una ayuda, gracias.

Califa
12 de Enero del 2006
Buenas.

No, el problema en realidad está en el archivo que está haciendo el include, no en configuracion.php. Más exactamente, según dice el mensaje de error, en la línea 5 de foro.php y la 30 de agregar.php. (que deben tener algo parecido a
include('configuracion.php');

Seguramente estás intentando empezar una sesión después de haber mandado headers al navegador (ej: con header(xxx); pero también con un simple <html>.

Si colgás uno de los scripts, es más fácil ver exactamente dónde está el problema. (siempre es más claro tener un ejemplo concreto).

Saludos

diablo_cris
12 de Enero del 2006
a, ok, es q como coindian los dos en q nombraban el (configuracion.php, pense que venia de hay el problema.

Este es el del agregar.php: Warning: Cannot add header information - headers already sent by (output started at c:easyservwwwconfiguracion.php:9) in c:easyservwwwagregar.php on line 30

<?php
require('configuracion.php');
$autor = $_POST["autor"];
$titulo = $_POST["titulo"];
$mensaje = $_POST["mensaje"];
$ident = $_POST["identificador"];

//Hacemos algunas validaciones
if(empty($autor)) $autor = "Anónimo";
if(empty($titulo)) $titulo = "Sin título";
//Evitamos que el usuario ingrese HTML
$mensaje = htmlentities($mensaje);

// Grabamos el mensaje en la base.
$sql = "INSERT INTO foro (autor, titulo, mensaje, identificador, fecha, ult_respuesta) ";
$sql.= "VALUES ('$autor','$titulo','$mensaje','$ident',NOW(),NOW())";
$rs = mysql_query($sql, $con) or die("Error al grabar un mensaje: ".mysql_error);
$ult_id = mysql_insert_id($con);

/* si es un mensaje en respuesta a otro
actualizamos los datos */
if(!empty($ident))
{
$sql = "UPDATE foro SET respuestas=respuestas+1, ult_respuesta=NOW()";
$sql.= " WHERE id = '$ident'";
$rs = mysql_query($sql, $con);
Header("Location: foro.php?id=$ident#$ult_id");
exit();
}
*(linea30)* Header("Location: index.php");
?>

---
Y este es el del foro.php: Warning: Cannot add header information - headers already sent by (output started at c:easyservwwwconfiguracion.php:9) in c:easyservwwwforo.php on line 5

<?php
require('configuracion.php');
require('funciones.php');
$id = $_GET["id"];
if(empty($id)) Header("Location: index.php");

$sql = "SELECT id, autor, titulo, mensaje, ";
$sql.= "DATE_FORMAT(fecha, '%d/%m/%Y %H:%i:%s') as enviado FROM foro ";
$sql.= "WHERE id='$id' OR identificador='$id' ORDER BY fecha ASC";
$rs = mysql_query($sql, $con);
include('header.html');
if(mysql_num_rows($rs)>0)
{
include('titulos_post.html');
$template = implode("", file('post.html'));
while($row = mysql_fetch_assoc($rs))
{
$color=($color==""?"#5b69a6":"");
$row["color"] = $color;
//manipulamos el mensaje
$row["mensaje"] = nl2br($row["mensaje"]);
$row["mensaje"] = parsearTags($row["mensaje"]);
mostrarTemplate($template, $row);
}
}
include('footer.html');
?>

Gracias

Califa
12 de Enero del 2006
PD: Se me ocurre que en una de esas, el error es todavía más simple.

el mensaje de error dice:

headers already sent by (output started at c:easyservwwwconfiguracion.php:9)

¿Será 9 una referencia a una línea de configuración.php?

1 <?php
2 $bd_host = "localhost";
3 $bd_usuario = "xxxxxx";
4 $bd_password = "xxxx";
5 $bd_base = "xxxx";
6 $con = mysql_connect($bd_host, $bd_usuario, $bd_password);
7 mysql_select_db($bd_base, $con);
8 ?>

No sé, pero si es así, tal vez haya algo después de "?>". Yo revisaría eso también. (Alguna vez leí que algunos editores de texto agregan caracteres al final de los archivos, aunque la verdad es que no sé del tema). En fin, la mayoría de las veces esto es cuestión de ensayo y error, nomás.

diablo_cris
12 de Enero del 2006
entre ahora mismo, y lo mire, y me fije en que habia una linea en blanco, la 6, estaba si:

1 <?php
2 $bd_host = "localhost";
3 $bd_usuario = "xxxxxx";
4 $bd_password = "xxxx";
5 $bd_base = "xxxx";
6 (espacio blanco, si nada)
7$con = mysql_connect($bd_host, $bd_usuario, $bd_password);
8 mysql_select_db($bd_base, $con);
9 ?>

le kite esa linea, y resulto que no me sale ahora el error, lo mire por encima, solo en el index, pq e starde, pero mñn repasare el foro a ver si lo solucione en todas.

Muchas gracias Califa!

Por cierto, en php, esa linea que quedo con espacio puede armar todo ese jaleo? no me habia fijado antes en ella, pq en html, no pasa nada. En php que tiene q ir todo juntin no?

Gracias de nuevo, mñn t comentare si se soluciono del todo.

Califa
12 de Enero del 2006
No hay de qué y me alegro que al menos algo se haya solucionado. En cuanto a las líneas en blanco, nunca tuve problemas, pero, como te dije, leí que a veces depende del editor de texto.

Yo uso siempre Dreamweaver por comodidad (resalta la sintaxis, permite configurar un server ftp, etc) y si tengo que hacer algo rápido, el notepad++ (recomendable, es gratis y sirve para escribir en php pero también en otros lenguajes) o el notepad común y corriente.

Saludos

Califa
12 de Enero del 2006
Ok. Puede ser que el problema sea un error en la conexión al server mysql.

Cuando ocurre un error, dependiendo de la configuración del archivo php.ini, php te manda una descripción del error al navegador. El tema es que si algo te llega al navegador (me refiero a si lo ves por pantalla), quiere decir que los headers HTTP ya se enviaron. Y una vez que enviaste headers, ya no podés usar la función header() (o en realidad, volver a usar).

En concreto, lo que está pasando en agregar.php (tomo éste como ejemplo, pero en el otro pasa lo mismo), es lo siguiente:

<?php
require('configuracion.php');

Al llegar acá, incluís la información de configuracion.php. Lo que sucede es que ésta línea se reemplaza por todo lo que haya en el archivo incluído.

<?php
$bd_host = "localhost";
$bd_usuario = "xxxxxx";
$bd_password = "xxxx";
$bd_base = "xxxx";
$con = mysql_connect($bd_host, $bd_usuario, $bd_password);

Acá creo que está el problema. El mensaje de error te dice:

>>output started at c:easyservwwwconfiguracion.php:9

O sea, la salida empezó en este archivo..

Este archivo empezó a mandar información al navegador, que se va a imprimir en pantalla: un mensaje de error. Esto anula cualquier otra instrucción header() que haya más adelante.

Para evitar que se manden mensajes de error hay distintas opciones. Una es cambiar el php.ini; otra que no requiere acceso a ese archivo se poner esta línea al principio de cada script.
<?php
ini_set("error_reporting",E_NONE);
?>

Hacé la prueba y probalemente header() funcione (te va a redireccionar)... Pero, en realidad, el problema es que te estás conectando mal a mysql, me parece. La solución real sería arreglar eso en lugar ocultar los errores.

Lo que podrías hacer es comentar ( // ) las partes que llaman a header() e intentar conectarte y hacer las consultas. Una vez que soluciones eso, tendrías que poder volver a usar header() sin problemas.

Pero, insisto, me parece que el problema está en la conexión a mysql, que genera algún mensaje de error.