Foros del Web » Programando para Internet » PHP »

Ayuda con Foro

Estas en el tema de Ayuda con Foro en el foro de PHP en Foros del Web. Como todos saben estoy creando mi propio Foro de Discusión después de haber leído y estudiado un poco. Lo pueden ver en esta URL: http://reynierpm.variosweb.com ...
  #1 (permalink)  
Antiguo 01/06/2004, 11:24
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Ayuda con Foro

Como todos saben estoy creando mi propio Foro de Discusión después de haber leído y estudiado un poco. Lo pueden ver en esta URL: http://reynierpm.variosweb.com. MI duda es como obtener el Foro en el que estoy al igual que lo hace Foros del Web. Por ejemplo si estoy en el Foro de PHP, sería algo como esto:
Cita:
Foros del Web -> PHP -> Tema que estoy viendo
Creo que mi error esta en la consulta pero no se como resolverlo. Les dejo el código para que me ayuden:
Código PHP:
function ShowAllThemes(){
  
$query "SELECT * FROM categorias_forum WHERE activo<>0 ORDER BY orden_de_presentacion ASC";
  
$result mysql_query($query) or die("No se ha podido ejecutar la consulta: ".$query.". MySQL ha dicho: ".mysql_error());
  if(!isset(
$_GET['tema'])){
   echo 
"<table width='100%'  border='0' cellpadding='0' cellspacing='1' bordercolor='#003366' class='table'>
         <tr><td width='62%' class='txt forotema' style='padding-left:5px; padding-right:3px; padding-top:2px; padding-bottom:2px;'>Foro</td>
         <td width='11%' class='forotema center'>Mensajes</td>
         <td width='8%' class='forotema center'>Temas</td>
         <td width='19%' class='forotema center'>Último mensaje </td></tr>"
;
   while(
$fetch=mysql_fetch_assoc($result)){
    echo 
"<tr><td colspan='4' class='txt forotema' style='padding-left:5px; padding-right:3px; padding-top:2px; padding-bottom:2px;'>".$fetch['titulo']."</td>
          </tr><tr><td colspan='4' class='txt'>"
;
    
ShowAllTopics($fetch['idcat']);
    echo 
"</td></tr>";
   }
   echo 
"</table>";
  }else{
   
ListAllThemesForThisForo($_GET['tema']);
  }
 }

 function 
ShowAllTopics($idcat){
  
$query "SELECT * FROM forum WHERE activo<>0 AND idcat='".$idcat."' ORDER BY idcat ASC";
  
$result mysql_query($query) or die("No se ha podido ejecutar la consulta: ".$query.". MySQL ha dicho: ".mysql_error());
  echo 
"<table width='100%'  border='0' cellpadding='0' cellspacing='1' bordercolor='#003366'>";
  while(
$fetch=mysql_fetch_assoc($result)){
   echo 
"<tr>
    <td width='27' class='txt td' style='padding-left:5px; padding-right:3px; padding-top:2px; padding-bottom:2px;'><div align='center'><a href='foros.php?accion=mostrar&tema="
.$fetch['idforo']."&ordenar=fecha&usuario=".$_SESSION['nombre']."&tipo=".$_SESSION['tipo']."&".SID."'><img src='images/forum/topics.gif' width='19' height='19' alt='Forum ".$fetch['nombre']."' border='0'></a></div></td>
    <td width='595' class='txt td' style='padding-left:5px; padding-right:3px; padding-top:2px; padding-bottom:2px;'><a href='foros.php?accion=mostrar&tema="
.$fetch['idforo']."&ordenar=fecha&usuario=".$_SESSION['nombre']."&tipo=".$_SESSION['tipo']."&".SID."'>".$fetch['nombre']."</a></td>
    <td width='109' class='txtcn td'>"
.$fetch['post']."</td>
    <td width='81' class='txtcn td'>"
.$fetch['temas']."</td>
    <td width='190' class='txtcn td'>"
.$fetch['lastpost']."</td>
  </tr>
  <tr>
    <td colspan='5' class='txt td' style='padding-left:5px; padding-right:3px; padding-top:2px; padding-bottom:2px;'>"
.$fetch['descripcion']."</td>
  </tr>"
;
  }
  echo 
"</table>";
 }

 function 
ListAllThemesForThisForo($idforo){
  
$query "SELECT post.*, postt.*, temas.*, user.*, foro.nombre AS nombre FROM post post, post_text postt, temas temas, users user, forum foro WHERE foro.idforo='".$idforo."' AND post.idpost=postt.idpost AND post.idtema=temas.idtema AND post.idusuario = user.iduser AND post.idforo='".$idforo."' AND temas.idforo='".$idforo."'  ORDER BY post.idpost";
  
$result mysql_query($query) or die("No se ha podido ejecutar la consulta: ".$query.". MySQL ha dicho: ".mysql_error());
  echo 
"<table width='100%'  border='0' cellpadding='0' cellspacing='1' class='table'>";
  if(!isset(
$_GET['post']) || $_GET['post']!='newpost'){
   echo 
"<tr><td colspan='6' class='forotema'><a href='foros.php?accion=mostrar&temas=todos&usuario=".$_SESSION['nombre']."&tipo=".$_SESSION['tipo']."&".SID."'>Foro</a> :: ".$fetch['nombre']."</td></tr>
        <tr>
        <td colspan='2'><div align='center' class='forotema center'>Temas</div></td>
        <td width='13%' class='forotema center'>Respuestas</td>
        <td width='14%' class='forotema center'>Autor</td>
        <td width='9%' class='forotema center'>Lecturas</td>
        <td width='17%' class='forotema center'>Última respuesta</td></tr>"
;
   if(
mysql_num_rows($result)!=0){
    while(
$fetch=mysql_fetch_assoc($result)){
     echo 
"<tr><td width='2%' class='td'><div align='center'><img src='images/forum/topics.gif' width='19' height='19'></div></td>
          <td width='45%' class='txt td'>"
.$fetch['asunto']."</td><td class='txtcn td'>".$fetch['respuestas']."</td>
          <td class='txtcn td'>"
.$fetch['login']."</td><td class='txtcn td'>".$fetch['respuestas']."</td>
          <td class='txtcn td'>"
.$fetch['last_post_id']."</td></tr>";
    }
   }else{
    echo 
"<tr><td colspan='6' class='td txtcn'>No hay temas en este Foro para mostrar</td></tr>";
   }
  }
   echo 
"<tr><td colspan='6' class='td'>&nbsp;</td></tr><td colspan='6' class='td txtcn'><div align='left'>";
   if(!isset(
$_GET['post']) || $_GET['post']!='newpost'){
    echo 
"<form action='foros.php?accion=mostrar&tema=".$_GET['tema']."&usuario=".$_SESSION['nombre']."&tipo=".$_SESSION['tipo']."&post=newpost&".SID."' method='post' name='new_post' id='new_post'><input name='new_post' type='submit' class='btn' id='new_post' value='Nuevo Tema'>
          </form>"
;
   }elseif(isset(
$_GET['post']) && ($_GET['post']=="newpost")){
    
MakeFormTheme();
   }
   echo 
"</div></td>
         </tr><tr><td colspan='6' class='td txtcn'><table width='200'  border='0' align='right' cellpadding='0' cellspacing='1'>
         <tr><td width='32'><img src='images/forum/announce.gif' alt='Anuncio global' class='hand'></td>
         <td width='66' class='txt'>Anuncio</td><td width='28'><img src='images/forum/old-temas.gif' alt='Temas viejos' class='hand'></td>
         <td width='74' class='txt'>Tema viejo </td></tr><tr>
         <td><img src='images/forum/postit.gif' class='hand'></td>
         <td class='txt'>PostIt</td><td><img src='images/forum/close-tema.gif' alt='Tema cerrado' class='hand'></td>
         <td class='txt'>Tema cerrado </td></tr><tr>
         <td><img src='images/forum/nuevo-tema.gif' alt='Temas nuevos' class='hand'></td>
         <td class='txt'>Tema nuevo </td><td>&nbsp;</td><td>&nbsp;</td></tr></table></td></table>"
;
 } 
la llamada es solo esto:
Código PHP:
<? ShowAllThemes(); ?>
Salu2
__________________
Ing. Reynier Pérez Mira
  #2 (permalink)  
Antiguo 01/06/2004, 12:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Sin ver el modelo de tu Base de datos y si hay problemas de consultas SQL por el médio donde usas X tablas y relacionadas entre ellas .. poco se puede ver con un código aislado ..

De todas formas .. lo que no veo ahí (o intento ver) es como o donde pretendes guardarte la relación entre el usuario X y por lo menos el ID de tu foro que está viendo: código que tendras que hacer el "UPDATE" correspondiente en cada ejecución de los scripts de tu foro .. El foro en que está interactuando .. si quieres puedes guardarlo en una variable de sesión en cuento entre al foro y de ahí lo cambiarías si cambia de foro .. mientras tanto te ahorrarías todas esas consultas a tu BD para preguntar a tu BD "¿en que foro se está?" salvo que esa variable que identifique el foro en que se está o pertenece el mensaje que se está viendo/respondiendo .. etc lo propages en el URL u otros médios.

Pero .. ese "UPDATE" al registro usuario X con el ID del foro .. no te lo quita nadie que debas hacerlo .. y todo esto sobre una tabla extra (relacionada por el "ID_usuario") o bien la misma donde guardes a ese usuario (sus datos) ..

Un saludo,
  #3 (permalink)  
Antiguo 01/06/2004, 14:31
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Pues este es el código para la creación de las tablas

Pues este es el código para creación de las tablas
Código:
#Categorías del Forum
CREATE TABLE `categorias_forum` (
  `idcat` int(6) unsigned NOT NULL auto_increment,
  `titulo` varchar(100) NOT NULL default '',
  `orden_de_presentacion` mediumint(8) NOT NULL default '10',
  `activo` bigint(1) NOT NULL default '0',
  PRIMARY KEY  (`idcat`)
) TYPE=MyISAM COMMENT='Categorías del Forum de Discusión';

#Forum
CREATE TABLE `forum` (
  `idforo` int(6) unsigned NOT NULL auto_increment,
  `idcat` int(6) default NULL,
  `nombre` varchar(100) NOT NULL default '',
  `descripcion` tinytext NOT NULL,
  `activo` bigint(1) NOT NULL default '0',
  `post` bigint(16) NOT NULL default '0',
  `temas` bigint(16) NOT NULL default '0',
  PRIMARY KEY  (`idforo`)
) TYPE=MyISAM COMMENT='Forum de Discusión';

#Post
CREATE TABLE `post` (
  `idpost` int(6) unsigned NOT NULL auto_increment,
  `idtema` int(6) default NULL,
  `idforo` int(6) default NULL,
  `idusuario` int(6) default NULL,
  `ipusuario` varchar(16) default NULL,
  `nombre_usuario` varchar(100) default NULL,
  PRIMARY KEY  (`idpost`)
) TYPE=MyISAM COMMENT='Post pertenecientes al Forum';

#Texto POst
CREATE TABLE `post_text` (
  `idpost` int(6) unsigned NOT NULL auto_increment,
  `asunto` varchar(255) default NULL,
  `pregunta` text,
  PRIMARY KEY  (`idpost`)
) TYPE=MyISAM COMMENT='Texto pertenecientes a los Post de usuarios';

#Usuarios
CREATE TABLE `users` (
  `iduser` int(6) unsigned NOT NULL auto_increment,
  `active` tinyint(1) unsigned NOT NULL default '0',
  `lastvisit` datetime default NULL,
  `registerdate` datetime default NULL,
  `level` tinyint(4) unsigned NOT NULL default '4',
  `rank` tinyint(4) unsigned NOT NULL default '0',
  `avatar` varchar(50) NOT NULL default 'noavatar.gif',
  `avatar_type` varchar(50) default NULL,
  `name` varchar(50) NOT NULL default '',
  `mail` varchar(250) NOT NULL default '',
  `show_mail_public` tinyint(1) NOT NULL default '0',
  `country` varchar(250) default NULL,
  `country_flag` varchar(50) NOT NULL default 'noflag.gif',
  `birthday` date default NULL,
  `login` varchar(150) NOT NULL default '',
  `password` varchar(250) NOT NULL default '',
  `icq` varchar(15) default NULL,
  `aim` varchar(250) default NULL,
  `yim` varchar(250) default NULL,
  `msn` varchar(250) default NULL,
  `website` varchar(250) default NULL,
  `ocupation` varchar(250) default NULL,
  `interests` tinytext,
  `activation_key` varchar(250) NOT NULL default '',
  `signature` tinytext,
  PRIMARY KEY  (`iduser`)
) TYPE=MyISAM COMMENT='Users Data';
ahora lo que no entiendo muy bien lo que tratas de decirme. Por supuesto que el id del foro se propaga por URL si quieres podes entrar y comprobarlo tu mismo. Me explicas un poco mejor a ver si entiendo??
Salu2
__________________
Ing. Reynier Pérez Mira
  #4 (permalink)  
Antiguo 01/06/2004, 15:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm Bueno, te pido disculpas por qué entendí mal tu pregunta inicial .. Creía que estabas hablando de la opción de los foros "Ver donde están los usuarios en este momento".

Si sólo quieres ofrecer ese tipo de link que comentabas ..

Teniendo ya tus "idforo" y el "idpos" que propagas el el URL .. sólo tienes que componer tus links con esos datos tipo:

Código PHP:
if (isset($_GET['idforo'])){
// Consulta SQL a tu "forum" tabla para obtener su nombre.
$sql="SELECT nombre FROM forum WHERE idforo='".$_GET['idpost']."'";
$resultado=mysql_query($sql);
$nombre_foro=mysql_result($resultado,0);
}

if (isset(
$_GET['idpost'])){
// Consulta SQL a tu "post y post_text" tabla para obtener su nombre. Se puede mejorar 
$sql="SELECT post_text.asunto FROM post,post_text WHERE post.idpost=post_text.idpost AND post.idpost='".$_GET['idpost']."'";
$resultado=mysql_query($sql);
$nombre_post=mysql_result($resultado,0);
}
// Y el link quedaría ...
Foros > <a href="ver_foro.php?idforo=$_GET['idforo']">$nombre_foro</a> > <a href="ver_post.php?idpost=$_GET['idpost']">$nombre_post</a
Como veras se trata de "trabajar" con esas variables que ya propagas en toda tu aplicación que llevas en ellas el "id" de algo (nombre foro/tema) y obtener su nombre (consulta SQL) en función de esos parámetros.

La consulta SQL para obtener el nombre del "mensaje" .. no sé si será la correcta .. En tal caso si tienes problemas con eso especificamente consulta en el foro de "Base de datos" con la consulta SQL más adecuada (y con el modelo de datos de tus tablas implicadas y explicando la relación entre ellas).

Un saludo,
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 08:13.