Hola, tengo un foro que trabaja sin base de datos, que para el poco movimiento que tiene me va muy bien, pero le he descubierto un fallo y no se como solucionarlo: resulta que cuando la gente escribe el mensaje y le da al intro, el mensaje se corta en ese sitio y ya no se publica más. He mirado en el archivo mensajes.txt e intuyo que tiene ese error porque funciona solo con texto seguido y al aparecer el salto de linea se corta el mensaje, ¿sabeis como podria solucionar esto por favor??? os dejo aqui un buen trozo del codigo de foro.php, que es donde me imagino que tendria q estar la solucion. gracias a todos de antemano!!!
function validarTags()
{
global $nombre;
global $asunto;
global $mensaje;
$nombre = htmlspecialchars(trim($nombre));
$nombre = str_replace("&","&",$nombre);
$nombre = preg_replace("/(1512)|(15)|(12)/","",$nombre);
$nombre = stripslashes(str_replace("<","",$nombre));
$nombre = strip_tags(str_replace(">","",$nombre));
$nombre = substr(strip_tags($nombre),0,20);
$asunto = htmlspecialchars(trim($asunto));
$asunto = str_replace("&","&",$asunto);
$asunto = preg_replace("/(1512)|(15)|(12)/","",$asunto);
$asunto = stripslashes(str_replace("<","",$asunto));
$asunto = strip_tags(str_replace(">","",$asunto));
$asunto = substr(strip_tags($asunto),0,50);
$mensaje = htmlspecialchars(trim($mensaje));
$mensaje = str_replace("&","&",$mensaje);
$mensaje = preg_replace("/(1512)|(15)|(12)/","<br>",$mensaje);
$mensaje = str_replace("<","",$mensaje);
$mensaje = str_replace(">","",$mensaje);
return;
}
function reemplazarTags()
{
global $mensaje1;
$mensaje1 = str_replace('', '<b>', $mensaje1);
$mensaje1 = str_replace('', '</b>', $mensaje1);
$mensaje1 = str_replace('', '<i>', $mensaje1);
$mensaje1 = str_replace('', '</i>', $mensaje1);
$mensaje1 = str_replace('', '<u>', $mensaje1);
$mensaje1 = str_replace('', '</u>', $mensaje1);
$mensaje1 = str_replace('[c]', "<font color='#004080'>", $mensaje1);
$mensaje1 = str_replace('[/c]', '</font>', $mensaje1);
$mensaje1 = str_replace ("[tk]", "<img src='imagenes/tk.gif' width='15' height='15'>", $mensaje1);
$mensaje1 = str_replace(":)", "<img src='imagenes/sonrisa.gif' >", $mensaje1);
$mensaje1 = str_replace(":e", "<img src='imagenes/icon_mad.gif' >", $mensaje1);
$mensaje1 = str_replace(":D", "<img src='imagenes/icon_confused.gif' >", $mensaje1);
$mensaje1 = str_replace(":a", "<img src='imagenes/icon_cool.gif' >", $mensaje1);
$mensaje1 = str_replace(":8", "<img src='imagenes/icon_eek.gif' >", $mensaje1);
$mensaje1 = eregi_replace (":u", "<img src='imagenes/icon_surprised.gif' >", $mensaje1);
$mensaje1 = eregi_replace (":x", "<img src='imagenes/icon_sunrise.gif' >", $mensaje1);
$mensaje1 = eregi_replace (":k", "<img src='imagenes/icon_lol.gif' >", $mensaje1);
$mensaje1 = eregi_replace (":w", "<img src='imagenes/icon_love.gif' >", $mensaje1);
$mensaje1 = eregi_replace (":z", "<img src='imagenes/icon_wtf.gif' >", $mensaje1);
$mensaje1 = eregi_replace (":s", "<img src='imagenes/icon_razz.gif' >", $mensaje1);
$mensaje1 = eregi_replace (":j", "<img src='imagenes/icon_wink.gif' >", $mensaje1);
$mensaje1 = str_replace (":r", "<img src='imagenes/icon_music.gif' >", $mensaje1);
return;
}
function escribirMensaje($posts, $postsID)
{
global $nueva_id;
$fp = fopen ($postsID, "rb");
$id = fgets($fp, 4096);
$nueva_id = $id + 1;
fclose($fp);
$fp = fopen ($postsID, "r+b");
flock ($fp,2);
fwrite($fp, $nueva_id);
flock ($fp,3);
fclose($fp);
$fp = fopen ($posts, "ab");
flock ($fp,2);
fwrite($fp, "\r\n");
flock ($fp,3);
fclose($fp);
return;
}
function eliminarMensaje($elArchivo, $elPost)
{
$i = 0;
$archivo1 = file($elArchivo);
$fp = fopen($elArchivo, "w");
for ($i = 0; $i <= sizeof($archivo1); $i++)
{
if (strstr($archivo1[$i], $elPost))
{
$archivo1[$i] = "";
}
fwrite($fp, $archivo1[$i]);
}
fclose($fp);
return;
}
// Contar temas y mensajes
$temas=0;
$mens=0;
$fp = fopen ($posts, "rb");
while (!feof ($fp))
{
$buff = fgets($fp, 4096);
if(substr($buff, 0, 12 )=="[nuevo_post]") {
$p=explode('|||^^^|||', "$buff");
if ($p[2]==0) {
$temas++;
$mens++;
}
else {
$mens++;
}
}
}
fclose($fp);
switch($a)
{
// Postear un nuevo mensaje
case "postnuevo":
// Reemplazar tags no deseados
validarTags();
// Escribir post en el archivo
if (!$nombre or !$asunto or !$mensaje) {
$nombre = "(Ninguno)";
$asunto = "(Ninguno)";
}
$fecha=date("d-m-y");
$fp = fopen ($posts, "ab");
flock ($fp,2);
fwrite($fp, "[nuevo_post]|||^^^|||$nueva_id|||^^^|||0|||^^^|||$nombre|||^^^ |||$asunto|||^^^|||$fecha|||^^^|||$mensaje|||^^^|| |");
flock ($fp,3);
fclose($fp);
echo "Muchas gracias. Tu mensaje ha sido agregado.<br><a href='index.php?ver_formulario=$verFormulario' target='_top'><< Volver atrás</a>";
}
break;
// Reemplazar tags...
validarTags();
$fecha=date("d-m-y");
$fp = fopen ($posts, "ab");
flock ($fp,2);
fwrite($fp, "[nuevo_post]|||^^^|||$nueva_id|||^^^|||$tid|||^^^|||$nombre||| ^^^|||$asunto|||^^^|||$fecha|||^^^|||$mensaje|||^^ ^|||");
flock($fp,3);
fclose($fp);
echo "Muchas gracias. Tu respuesta ha sido agregada.<br><a href='index.php?ver_formulario=$verFormulario&a=ve r_mensaje&tid=$tid' target='_top'><< Ver mensaje</a>";
}
break;
// En caso de ver un mensaje
case "ver_mensaje":
$ahora = date("d-m-y");
$zonahoraria = date("O");
echo "<table border='0' width='700'><tr><td align='left'><tr><td>$nForo<td align='right'>";
if ($usuario != $loginNombre || $password != $loginPass)
{
echo "<a href='index.php?ver_formulario=$verFormulario&a=lo gin&tid=$tid'>Admin</a> | ";
}
elseif ($usuario == $loginNombre && $password == $loginPass)
{
$verFormulario = "no";
}
echo "<a href='index.php?ver_formulario=$verFormulario' target='_top'>Volver al Foro</a></td></tr></table>
<table border='0' width='700' cellspacing='1' cellpadding='2' bgcolor='$borde_color'><tr bgcolor='$tabla_color' border='1' bordercolor='1' style='color:#24559F'>
<td width='100'><b>Autor</b><td width='450'><b>Mensaje</b></td></tr>";
$fp = fopen ($posts, "rb");
while(!feof ($fp))
{
$buffer = fgets($fp, 4096);
if (substr($buffer, 0, 12 )=="[nuevo_post]")
{
$p=explode('|||^^^|||', "$buffer");
if ($p[1]==$tid)
{
$asunto=$p[4];
$mensaje1 = nl2br($p[6]);
if ($usuario == $loginNombre && $password == $loginPass)
{
$eliminar = "[ <a href='index.php?ver_formulario=$verFormulario&a=el iminar&usuario=$usuario&password=$password&tid=$ti d&p1=$p[1]&p2=$p[2]&p3=$p[3]&p4=$p[4]'>Eliminar</a> ]";
}
reemplazarTags();
echo "<tr bgcolor='$fila1_color' border='1' bordercolor='1'><td valign='top'>
<B>$p[3]</B><td><b>$p[4]</b><p>$mensaje1</td></tr>
<tr bgcolor='$fila1_color' border='1' bordercolor='#ffffff'><td>$eliminar</td>
<td>Fecha: $p[5]</td></tr>";
}
}
}
fclose($fp);
$fp = fopen ($posts, "rb");
$color=0;
while (!feof ($fp))
{
$buffer = fgets($fp, 4096);
if(substr($buffer, 0, 12 )=="[nuevo_post]")
{
$p=explode('|||^^^|||', "$buffer");
if ($p[2]==$tid)
{
$asunto = substr(strip_tags($p[4]),0,30);
$nombre = substr(strip_tags($p[3]),0,10);
$mensaje1 = nl2br($p[6]);
if ($usuario == $loginNombre && $password == $loginPass)
{
$eliminar = "[ <a href='index.php?ver_formulario=$verFormulario&a=el iminar&usuario=$usuario&password=$password&tid=$ti d&p1=$p[1]&p2=$p[2]&p3=$p[3]&p4=$p[4]'>Eliminar</a> ]";
}
reemplazarTags();
if ($color==0) {
echo "<tr bgcolor='$fila2_color' border='1' bordercolor='1'><td valign='top'><B>$nombre</B><td><B>Re: $asunto</B><p>$mensaje1</td>
<tr bgcolor='$fila2_color' border='1' bordercolor='#ffffff'><td>$eliminar</td><td>Fecha: $p[5]</td></tr>";
$color=1;
}
else {
echo "<tr bgcolor='$fila1_color' border='1' bordercolor='1'><td valign='top'><B>$nombre</B><td><B>Re: $asunto</B><p>n$mensaje1</td>
<tr bgcolor='$fila1_color' border='1' bordercolor='#ffffff'><td>$eliminar</td><td>Fecha: $p[5]</td></tr>";
$color=0;
}
}
}
}
fclose($fp);
echo "</table><table width='700'><tr><td></tr></td>";
echo "<tr><td align='right'><A HREF='index.php?ver_formulario=$verFormulario'>Vol ver al Foro</A></tr></td></table>";
// Mostrar todos los mensajes
default:
$limite = 5;
$ahora=date("d-m-y");
$zonahoraria=date("O");
echo "<table border='0' width='700' cellspacing='5'><tr><td>$nForo<td align='right'>$temas temas y $mens mensajes</td></tr></table>
<table border='0' width='700' cellspacing='1' cellpadding='2' bgcolor='$borde_color'>
<tr height='25' bgcolor='#CC0033' border='1' bordercolor='1' style='color: #FFFFFF'><td width='20'> </td><td width='280'>
<b>Asunto</b></td><td width='90'><b>Autor</b></td><td width='80'><b>Respuestas</b></td><td width='80'><b>Fecha</b></td></tr>";
$fp = fopen ($posts, "rb");
while (!feof ($fp))
{
$buffer = fgets($fp, 4096);
if(substr($buffer, 0, 12 )=="[nuevo_post]")
{
$p=explode('|||^^^|||', "$buffer");
if ($p[2]==0)
{
$fp1 = fopen ($posts, "rb");
$respuestas=0;
while (!feof ($fp1))
{
$buffer1 = fgets($fp1, 4096);
if(substr($buffer1, 0, 12 )=="[nuevo_post]")
{
$p1=explode('|||^^^|||', "$buffer1");
if ($p1[2]==$p[1]) {
$respuestas++;
}
}
}
fclose($fp1);
echo "<tr height='25' bgcolor='#ffffff' border='1' bordercolor='1'><td>";
if ($respuestas==0)
{
echo "<img src='imagenes/0mens.gif' width='16' height='16'>";
}
else
{
echo "<img src='imagenes/1mens.gif' width='16' height='16'>";
}
echo "<td><A HREF='index.php?ver_formulario=$verFormulario&a=ve r_mensaje&tid=$p[1]'>$p[4]</A><td>$p[3]<td align='center'>$respuestas<td>$p[5]</td></tr>";
}
}
}
fclose ($fp);
echo "</table><br>";