Foros del Web » Programando para Internet » PHP »

Problema con un FORO hecho en php.

Estas en el tema de Problema con un FORO hecho en php. en el foro de PHP en Foros del Web. Buenas a todos, y feliz año nuevo :D Bueno he ehcho un foro en php pero tengo alguno problemas, primero os explico como funciona. Base ...
  #1 (permalink)  
Antiguo 01/01/2003, 07:10
 
Fecha de Ingreso: septiembre-2002
Mensajes: 34
Antigüedad: 21 años, 7 meses
Puntos: 0
Problema con un FORO hecho en php.

Buenas a todos, y feliz año nuevo :D

Bueno he ehcho un foro en php pero tengo alguno problemas, primero os explico como funciona.

Base de datos llamada: Foro; una tabla que se llama queixes.
De acuerdo? Okah

Bueno ahora el funcionamento:
Desde un formulario recojo el usuario, la contraseña (que estan en otra base de datos), el titulo del mensaje y el mensaje .
Seguidamente dentro de de la tabla queixes, la relleno con la información referente al mensaje: Usuario, fecha,hay respuesta? y el titulo del mensaje. Y creo otra tabla, con el nombre del titulo del mensaje, en la base de datos foro
Asi creo un listado con todos los mensajes y su información. Y cuando kiero ver uno en concreto clica el titulo del mensaje, en el listado, y me muestra el contenido de la base de datos q tiene el mismo nombre que el mensaje.
Y para hacer el sistema de respuestas algo muy parecido, solo que lo voy insertando en la misma tabla.
Hasta ahí bien, no?

Bueno los problemas son dos:

El titulo del mensaje, no puede tener mas de una palabra, pq sino no me crea la tabla que permitira ver el contenido del mensaje.
Alguien sabe que puedo hacer?

El otro problema, es que cuando en el mensaje introduzco un salto de linea, me lo muestra con un espacio.
A no ser que haga servir html para escribir el mensaje y use <br></br>, pero convendreis conmigo que no queda nada estetico hacer escribir eso.
Alguien sabe como se puede solucionar todo eso?

En fin os pongo los scripts que uso, os pongo tb el de los formularios aunque tp haría falta.
FORMULARIO PARA CREAR UN MENSAJE:


<form method="post" action="insert2.php">
<font color="#FFFFFF"><b>USUARI</b></font><br>
<input type="text" name="nom" size="20"><br>
<font color="#FFFFFF"><b>CONTRASENYA</b></font><br>
<input type="password" name="password" size="20"><br>
<font color="#FFFFFF"><b>ASSUMPTE</b></font><br>
<input type="text" name="assumpte" size="20"><br>
<font color="#FFFFFF"><b>CONTINGUT</b></font><br>
<textarea name="contingut" rows="20" cols="40"></textarea><br><br>
<input type="submit" value="Entrar">
</form>
<body bgcolor="#003366">

SCRIPT PHP:

<?
$date=date("j/m/y");
mysql_connect("localhost","imladris","recerca");
$ssql="select *from alumnes where nom='$nom'";
$result= mysql_db_query("bosca",$ssql);
while($row=mysql_fetch_array($result))
{
if($row["password"]==$password)
{
$ssql="create table $assumpte(titol varchar(100),Autor varchar(100) ,data varchar(100) ,contingut longtext)";
mysql_db_query("foro","insert into queixes(Nom,Autor,data) values ('$assumpte','$nom','$date')");
mysql_db_query("foro",$ssql);
mysql_db_query("foro","insert into $assumpte(titol,Autor,data,contingut) values ('$assumpte','$nom','$date','$contingut')");
echo'<body bgcolor="#003366">';
echo'<palign="center"><font size="5" color="#FFFFFF"><b>
<a style="color: #FFFFFF" href="queixes.php">Veure els Missatges</a></b></font></p>';

}

else
{
echo "incorrecte";
}
}
?>

FORMULARIO DE RESPUESTA:

<?
echo'
<form method="post" action="resp2.php?missatge='.$missatge.'">
<font color="#FFFFFF"><b>USUARI</b></font><br>
<input type="text" name="nom" size="20"><br>
<font color="#FFFFFF"><b>CONTRASENYA</b></font><br>
<input type="password" name="password" size="20"><br>
<font color="#FFFFFF"><b>ASSUMPTE</b></font><br>
<input type="text" name="assumpte" size="20"><br>
<font color="#FFFFFF"><b>CONTINGUT</b></font><br>
<textarea name="contingut" rows="20" cols="40"></textarea><br><br>
<input type="submit" value="Entrar">

</form>
<body bgcolor="#003366">';
?>

SCRIPT PHP PARA INTRODUCIR EN LA BD La RESPUESTA:

<?
$date=date("j/m/y");
mysql_connect("localhost","imladris","recerca");
$ssql="select *from alumnes where nom='$nom'";
$result= mysql_db_query("bosca",$ssql);
while($row=mysql_fetch_array($result))
{
if($row["password"]==$password)
{
mysql_db_query("foro","insert into $missatge(titol,Autor,data,contingut) values ('$assumpte','$nom','$date','$contingut')");
}

else
{
echo "incorrecte";
}
}
?>


DONDE APARECEN EL LISTADO DE MENSAJES:

<?
mysql_connect("localhost","imladris","recerca");
$res=mysql_db_query("foro","select *from queixes");

echo'<body bgcolor="#003366">

<a style="color: #FFFFFF" href="insert.php">Nou missatge</a></font></b></p>
<table align="left" width="561" border="3" bordercolor="#FFFFFF" cellspacing="1" bordercolordark="#000066" bordercolorlight="#336699">
<tr>
<th width="86"><font color="#FFFFFF">Titol</font></th>
<th width="127"><font color="#FFFFFF">Autor</font></th>
<th width="115"><font color="#FFFFFF">Respostes</font></th>
<th width="215"><font color="#FFFFFF">Data</font></th>
</tr>';


while ($mec=mysql_fetch_array($res))
{
echo '<tr><td><font color="#FFFFFF"><a style="color: #FFFFFF" href="missatges.php?missatge='.$mec["Nom"].'">'.$mec["Nom"].'</a></font></td>';
echo '<td><font color="#FFFFFF">'.$mec["Autor"].'</font></td>';
echo '<td><font color="#FFFFFF">'.$mec["respostes"].'</font></td>';
echo '<td><font color="#FFFFFF">'.$mec["data"].'</font></td></tr>';

}

echo'</table>
</body>';

?>

PARA MOSTRAR UN MENSAJE EN CONCRETO:
<?
mysql_connect("localhost","imladris","recerca");
$res=mysql_db_query("foro","select *from $missatge");
echo' <body bgcolor="#003366">';
echo'
<table align="left" width="561" border="3" bordercolor="#FFFFFF" cellspacing="1" bordercolordark="#000066" bordercolorlight="#336699" height="24">
<tr>
<th width="86" height="19"><font color="#FFFFFF">Títol</font></th>
<th width="127" height="19"><font color="#FFFFFF">Autor</font></th>
<th width="115" height="19"><font color="#FFFFFF">data</font></th>
th width="86" height="19"><font color="#FFFFFF">Contingut</font></th>

</tr>';

while ($mec=mysql_fetch_array($res))
{
echo'<tr><td><font color="#FFFFFF">'.$mec["titol"].'</font></td>';
echo'<td><font color="#FFFFFF">'.$mec["Autor"].'</font></td>';
echo'<td><font color="#FFFFFF">'.$mec["data"].'</font></td>';
echo'<td><font color="#FFFFFF">'.$mec["contingut"].'</font></td>';

echo'</table><br><br><br><br><br><br><br><br><br>';

}

echo'<p><b><font color="#FFFFFF"><a style="color: #FFFFFF" href="resp.php?missatge='.$missatge.'">RESPONDRE</a></font></b></p>';
echo'</body>';
?>



Bueno espero que me podais ayudar, muchisimas gracias y feliz año nuevo, de nuevo

Joan
  #2 (permalink)  
Antiguo 01/01/2003, 09:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
El otro problema, es que cuando en el mensaje introduzco un salto de linea, me lo muestra con un espacio.
A no ser que haga servir html para escribir el mensaje y use <br></br>, pero convendreis conmigo que no queda nada estetico hacer escribir eso.
Esto lo solucionas con:
nl2br() a la hora de "imprimir" (sacar, mostrar ..) el campo de la base de datos que estas leyendo en HTML .. Eso convierte los \n salto de linea que guardas en tu base de datos de tus campos input texarea de tus formularios en <br> salto de linea HTML ..

Sería mas o menos por aquí en tu código ...
Código PHP:
echo'<td><font color="#FFFFFF">'.nl2br($mec["data"]).'</font></td>'
Cita:
El titulo del mensaje, no puede tener mas de una palabra, pq sino no me crea la tabla que permitira ver el contenido del mensaje.
Alguien sabe que puedo hacer?
Esta parte no la entendí .. podrias explicarla un pco mas ..

En general lo que veo es que te va hacer falta urldecode() minimo si pasas frases por el URL (para quitar los %20 producidos por un espacio .. y otros caracteres que se convertiran en codigos como acentos y demas ...)

Un saludo,
  #3 (permalink)  
Antiguo 01/01/2003, 10:29
 
Fecha de Ingreso: septiembre-2002
Mensajes: 34
Antigüedad: 21 años, 7 meses
Puntos: 0
Si claro que lo puedo explicar mejor, todo es proponerselo :P,
en primer lugar agradecerte mucho la respuesta de antes, me ha ayudado mucho :D.

Lo que me pasa es que cuando creo un tema nuevo, creo a su vez una tabla que tiene de nombre el mismo que el del tema.
Eso funciona muy bien cuando el tema solo es una palabra, se crea la tabla sin mas complicacion.
Pero cuando el tema son mas de una palabra separadas por espacios, no se me crea la tabla.
Con lo que luego es imposible leer el mensaje.

Me he explicado con mas claridad? Espero que sí :)

Me reitero en mis agradecimientos, no se que haria sin la ayuda de todos vosotros :D

Muchas gracias.

Joan.
  #4 (permalink)  
Antiguo 01/01/2003, 11:23
Avatar de chalito  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago, chile
Mensajes: 221
Antigüedad: 21 años, 4 meses
Puntos: 0
Hola

Buneo la parte de el salto de linea ya te la explico Cluster, y segun entendi yo, estas creandi una tabla diferente para cada mensaje, pues bien, si es asi, te recomiendo que cambies el sistema, ya que ese es poco eficiente y esta excento a problemas tales como los que te suceden a ti, auque si sigues con esa idea, la solucion es que con un explode o un split partas el mensaje y luego los diferentes contenidos del array los unas con una linea baja _ , de esta manera los titulos no tendran espacios. Ahora bien, lo que yo te recomiendo que hagas es que todo lo almacenes en una msima tabla, es muy facil de hacer, tienes que tener en ella un campo id que sea la primaria y auto incrementable, los mismos campos que tienes tu mas uno que diga respuesta, en el grabas la id de el mensaje al que se esta respiondiendo o tiene la respuesta almacenada, de esta forma es muy sencillo recoger las respuestas y los mensajes y titulos, claro, el titulo debes almacenarlo tambien en una celda llamada titulo, asi ya no tendras mas lios y ademas te sera mas facil la tarea.

Bueno espero haber ayudado

Saludos
  #5 (permalink)  
Antiguo 01/01/2003, 20:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Al principio (y ya q en el código que pusistes no lo veia ..?) .. creia que estabas confundiendo el termino "tabla" con "registro" ...

El caso que si es así .. que creas una tabla para cada mensaje nuevo .. es un modelo de datos mal diseñado pese que "funcione" .. Mysql tiene su limite de tablas .. muchooooo menos que el de registros (eso a nivel .. hasta donde puede llegar tu foro ..)

Lo que tienes que hacer es relacionar un par de tablas .. las preguntas (en los que cada pregunta es un registro) con una de "respuestas" (en la que cada registro es una respuesta) .. o simplemente una "unica" tabla con las preguntas y respuesas (una pregunta o respuesta será un registro nuevo) .. en el que usas un campo "que es" diciendo: .."soy una pregunta" o "soy respuesta de ID tal de pregunta" (por poner unos ejemplos sencillos y a la rápida" .. Pero nuncaaaa crear una tabla nueva para un dato q debería ser un "registro" ...

Te recomiendo que leas algo sobre modelo de Base de datos (normalización y otros conceptos) .. por ejemplo en:

http://bulmalug.net/impresion.phtml?nIdNoticia=483
(link extraido de: http://www.forosdelweb.com/showthrea...hreadid=107399 proveedor del link: ceronne)

Un saludo,
  #6 (permalink)  
Antiguo 02/01/2003, 07:13
 
Fecha de Ingreso: septiembre-2002
Mensajes: 34
Antigüedad: 21 años, 7 meses
Puntos: 0
Bueno em primer lugar agradecerle a Cluster y a chalito u ayuda, ya no tengo ningun problema de los q tenia antes.

Ahora lo que quiero haces es contar el numero de respuestas, para eso cuento el numero de lineas que hay en una tabla y le resto 1.

$ssql2=mysql_db_query("foro","select *from $missatge2");
$resp=mysql_num_rows($ssql2);
$resp=$resp-1;
mysql_db_query("foro","insert into queixes(respostes) values ('$resp') where Nom='$missatge2'");

El problema es que no lo introduce dentro de la tabla queixes. El missatge2 es la varible que contiene el nombre del campo Nom dentro de queixes, que es el nombre del asunto, pero con espacios en vez de _ .

En fin, espero que podais ayudarme otra vez. Muchas gracias.


Joan
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




La zona horaria es GMT -6. Ahora son las 13:51.