Foros del Web » Programando para Internet » PHP »

Problema con foro hecho completamente a mano

Estas en el tema de Problema con foro hecho completamente a mano en el foro de PHP en Foros del Web. Hola a tod@s. Me he propuesto hacer un foro básico totalmente a mano, usando PHP y MySQL. He llegado a un punto donde no encuentro ...
  #1 (permalink)  
Antiguo 16/11/2008, 04:39
Avatar de Legoltaz  
Fecha de Ingreso: agosto-2008
Mensajes: 325
Antigüedad: 15 años, 8 meses
Puntos: 6
Problema con foro hecho completamente a mano

Hola a tod@s.

Me he propuesto hacer un foro básico totalmente a mano, usando PHP y MySQL.

He llegado a un punto donde no encuentro el origen del problema.

El problema es que cuando abro lo que sería un post (un hilo, tema o como se le quiera llamar) solo me muestra un comentario, y en la base de datos me aparecen todos los insertados. En cambio, como digo, solo me imprime uno.

Este es el código:

Código PHP:
Ver original
  1. <?php
  2. $accion = $_GET['accion'];
  3. $subforo = $_GET['subforo'];
  4. $mensaje = $_GET['mensaje'];
  5. if($accion == "indice" && isset($subforo) && is_numeric($subforo)){
  6.     require("bd.php");
  7.     $q = mysql_query("SELECT * FROM posts WHERE subforo = '".$subforo."' ORDER BY pid DESC",$link) or die(mysql_error());
  8.     while($row = mysql_fetch_array($q)){
  9.         echo "<a href='?accion=leer&subforo=".$subforo."&mensaje=".$row['pid']."'>".$row['titulo']."</a><br />";
  10.     }
  11. }
  12. elseif($accion == "leer" && isset($subforo) && isset($mensaje) && is_numeric($subforo) && is_numeric($mensaje)){
  13.     require("bd.php");
  14.     $leer = mysql_query("SELECT * FROM posts WHERE pid = '".$mensaje."' AND subforo = '".$subforo."' ORDER BY pid DESC",$link) or die(mysql_error());
  15.     $comentarios = mysql_query("SELECT * FROM comentarios WHERE id_post = '".$mensaje."' AND id_subforo = '".$subforo."'",$link) or die(mysql_error());
  16.     while($fila = mysql_fetch_array($leer) and $f = mysql_fetch_array($comentarios)){
  17.         echo "Autor: ".$fila['autor']."<br /><br />".$fila['titulo']."<br /><br />".$fila['mensaje']."<hr />".$f['autor']."dijo:<br /><br />".$f['comentario']."<hr /><br /><a href='?accion=form_replica&subforo=".$subforo."&mensaje=".$mensaje."'>Responder</a>";
  18.     }
  19. }
  20. elseif($accion == "form_replica" && isset($subforo) && is_numeric($subforo) && isset($mensaje) && is_numeric($mensaje)){
  21.     require("bd.php");
  22.     ?>
  23.     <form action="?accion=responder&subforo=<?php echo $subforo; ?>&mensaje=<?php echo $mensaje; ?>" method="post">
  24.     <input type="text" name="autor" />
  25.     <textarea name="comentario"></textarea>
  26.     <input type="submit" />
  27.     </form>
  28.     <?php
  29. }
  30. elseif($accion == "responder" && isset($subforo) && is_numeric($subforo) && isset($mensaje) && is_numeric($mensaje)){
  31.     require("bd.php");
  32.     $autor = $_POST['autor'];
  33.     $comentario = $_POST['comentario'];
  34.     mysql_query("INSERT INTO comentarios (id_post,id_subforo,autor,comentario) VALUES ('".$mensaje."','".$subforo."','".$autor."','".$comentario."')",$link) or die(mysql_error());
  35. }
  36. else{
  37. ?>
  38. <html>
  39. <body>
  40. <table>
  41. <tr><td><a href="?accion=indice&subforo=1">Subforo #1</a></td></tr>
  42. <tr><td><a href="?accion=indice&subforo=2">Subforo #2</a></td></tr>
  43. </table>
  44. </body>
  45. </html>
  46. <?php
  47. }
  48. ?>

Última edición por Legoltaz; 16/11/2008 a las 04:47
  #2 (permalink)  
Antiguo 16/11/2008, 05:04
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Problema con foro hecho completamente a mano

Hola,

En la línea 16 has incluido dos condiciones en el 'while'. Se supone que a la primera iteración ambas son ciertas (si es que existen tema y comentario) y por eso te saca el primer mensaje del tema y el primer comentario relacionado. Pero si un tema no tiene comentarios... supongo que no te sacará nada, ni siquiera el tema. Por otro lado, si un tema tiene más de un comentario, sólo sacará el primero (como te sucede) porque en la siguiente iteración, la primera condición ya no será cierta (ya no hay más filas para la primera consulta).

Solución: "separa" esa línea y procesa las dos consultas en dos bucles distintos.

Un saludo.
  #3 (permalink)  
Antiguo 16/11/2008, 05:09
Avatar de Legoltaz  
Fecha de Ingreso: agosto-2008
Mensajes: 325
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: Problema con foro hecho completamente a mano

Muchas gracias, ahora ya funciona ;)

Última edición por Legoltaz; 16/11/2008 a las 05:21
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 22:31.