Foros del Web » Creando para Internet » Sistemas de gestión de contenidos »

Script foro PHPBB

Estas en el tema de Script foro PHPBB en el foro de Sistemas de gestión de contenidos en Foros del Web. Hola, me dan estos códigos de error Antes me daban otros, pero los he solucionado ¿podeis decirme que parte del código tengo que solucionar? Y ...

  #61 (permalink)  
Antiguo 13/04/2006, 12:36
 
Fecha de Ingreso: diciembre-2005
Mensajes: 75
Antigüedad: 18 años, 11 meses
Puntos: 0
Hola, me dan estos códigos de error
Antes me daban otros, pero los he solucionado ¿podeis decirme que parte del código tengo que solucionar?

Y ¿de donde saca el código de error la palabra "infortec"? El nombre del sitio es "inforteca"
aunque para entrar el nombre es "infortec"

Código:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/infortec/public_html/foro/scroll.php on line 31

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home/infortec/public_html/foro/scroll.php on line 56

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home/infortec/public_html/foro/scroll.php on line 57

Última edición por Idoia_; 13/04/2006 a las 13:14
  #62 (permalink)  
Antiguo 16/05/2006, 09:29
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 20 años, 4 meses
Puntos: 76
Me vais a perdonar que resucite este tema, pero es que la solución que se plantea aquí me viene de perlas, pero estoy intentando hacer algunos cambios, y no me deja. Quiero poner en la portada de mi web dos listas: una con los últimos temas publicados, y otra con los últimos mensajes. Con la segunda no hay problema, incluso la he modificado para que quede así:

Cita:
Defero.tk ha respondido en el tema "Script foro ..." del subforo Aplicaciones prefabricadas
Además, al pasar el ratón por encima del título del tema, se podrán leer los primeros 150 caracteres del mensaje, metiéndolo en TITLE="" (nota: hay un pequeño problema cuando en esos primeros 150 caracteres hay algo de BBcode, pero eso ya intentaré solucionarlo más adelante, de momento no me preocupa tanto; también me gustaría poner la fecha y la hora, pero ya habrá tiempo de hacer mejoras).

Con esta tabla no tengo problemas, el problema es con la siguiente. Quiero que tenga más o menos los mismos elementos, pero con la diferencia que no mostrará los últimos mensajes, sino los últimos temas:

Cita:
Defero.tk ha publicado el tema "Script foro ..." en el subforo Aplicaciones prefabricadas
Y tengo un código que me saca exactamente eso... excepto el principio del texto del primer mensaje de cada tema. Os pongo el código al completo, y os voy comentando línea a línea, a ver si alguien me puede explicar qué error estoy cometiendo:

Código PHP:
<? 
 
// Últimos temas publicados en foros phpBB2. 
// Creado por XeRGiO y modificado por Defero.tk para que muestre los temas
// <a href="visitar.php?http://www.xergio.net" target="_blank">www.xergio.net</a> 
// 
// Edita lo que viene a continuación. Cambia solo lo que hay entre comillas "": 
 
$directorio "./forum"//Carpeta donde esta situadoel foro. 
$mostrar "6"//Número de mensajes a mostrar. 
// $caracteres = "150"; //Caracteres que se mostrarán de cada línea. 
 
// Lo que viene ahora no lo toques para nada!!! a no ser que sepas de qué va el tema... 
 
include("$directorio/config.php"); 

$conexion mysql_connect($dbhost,$dbuser,$dbpasswd); 
mysql_select_db($dbname,$conexion); 
$consulta "select * from ".$table_prefix"topics WHERE (forum_id!='9' AND forum_id!='8')  order by topic_id desc" 
$resultado mysql_query($consulta); 
$i 0
while (
$rows mysql_fetch_array($resultado)) { 
if (
$i <= $mostrar) { 
$consulta1 "select * from ".$table_prefix."forums where forum_id='$rows[forum_id]'"
$resultado1 mysql_query($consulta1); 
$datosf mysql_fetch_array($resultado1); 
$consulta2 "select * from ".$table_prefix."users where user_id='$rows[topic_poster]'"
$resultado2 mysql_query($consulta2); 
$datosu mysql_fetch_array($resultado2); 

// Esto es mío, para sacar los datos del mensaje
$consulta4 "select * from ".$table_prefix."posts where post_id='$rows[first_post_id]'"
$resultado4 mysql_query($consulta4); 
$datosx mysql_fetch_array($resultado4); 

// Esto es mío, para sacar el texto del mensaje
$consulta5 "select * from ".$table_prefix."posts_text where post_id='$rows[post_id]'"
$resultado5 mysql_query($consulta5); 
$datosy mysql_fetch_array($resultado5); 


// if (strlen($datost[topic_title]) > $caracteres) { 
// $datost[topic_title] = substr($datost[topic_title],0,20)."..."; 
// } 

// Esto es mío

$datosy[post_text] = substr($datosy[post_text],0,150)."..."


echo 
"<li><a href=\"./forum/profile.php?mode=viewprofile&u=$datosu[topic_poster]\">$datosu[username]</a> ha publicado el tema \"<a href=\"$directorio/viewtopic.php?t=$rows[topic_id]\"  title=\"$datosy[post_text]\">$rows[topic_title]</a>\" en el subforo <a href=\"./forum/viewforum.php?f=$datosf[forum_id]\">$datosf[forum_name]</a></li>"
$i++; 



 
mysql_free_result($resultado); 
mysql_close($conexion); 
?>
Bien, vamos allá:

Código PHP:

$directorio 
"./forum";
$mostrar "6"
Establece la ruta del directorio del foro y el número de temas a mostrar. Sin problemas.

Código PHP:
include("$directorio/config.php"); 
$conexion mysql_connect($dbhost,$dbuser,$dbpasswd); 
mysql_select_db($dbname,$conexion); 
Se "incluye" el archivo de configuración del foro, y se realiza conexión con la base de datos. Sin problemas.

Código PHP:
$consulta "select * from ".$table_prefix"topics WHERE (forum_id!='9' AND forum_id!='8')  order by topic_id desc" 
$resultado mysql_query($consulta); 
$i 0
Consulta en la tabla TOPICS todos los temas que no tengan FORUM_ID 8 o 9 (subforos ocultos), y los ordena de manera descendente según el TOPIC_ID, es decir, de más reciente a más antiguo. Aquí es donde he realizado el primer cambio, ya que en vez de consultar en la tabla POSTS lo hago en la tabla TOPICS, para tener los últimos temas en vez de los últimos mensajes. Sin problemas.

Código PHP:
while ($rows mysql_fetch_array($resultado)) { 
if (
$i <= $mostrar) { 
$consulta1 "select * from ".$table_prefix."forums where forum_id='$rows[forum_id]'"
$resultado1 mysql_query($consulta1); 
$datosf mysql_fetch_array($resultado1); 
Esto no lo entiendo del todo, pero sé que ha reducido la lista a seis elementos, y después está consultando en la tabla FORUMS los datos correspondientes a los subforos a los que corresponden los temas extraídos de la tabla TOPICS, usando para ello como referencia su FORUM_ID. Sin problemas.

Código PHP:
$consulta2 "select * from ".$table_prefix."users where user_id='$rows[topic_poster]'"
$resultado2 mysql_query($consulta2); 
$datosu mysql_fetch_array($resultado2); 
Aquí comprueba en la tabla USERS los datos del usuario que ha publicado el tema, comparando su USER_ID con el TOPIC_POSTER que aparece en la tabla TOPICS. Sin problemas

He borrado la $consulta3 porque si no me equivoco, no necesito extraer los datos de la tabla TOPICS, ya que es la tabla con la que he empezado. El código original metía esa consulta porque empieza por la tabla POSTS.

Código PHP:
$consulta4 "select * from ".$table_prefix."posts where post_id='$rows[first_post_id]'"
$resultado4 mysql_query($consulta4); 
$datosx mysql_fetch_array($resultado4); 
Esto no viene en el código original. Como no he hecho todavía referencia a la tabla POSTS, necesito hacerlo ahora. Necesito extraer la información de los POSTS en los que su POST_ID sea igual al FIRST_POST_ID de la tabla TOPICS. Creo que lo he hecho bien, pero no sabría asegurarlo.

Código PHP:
$consulta5 "select * from ".$table_prefix."posts_text where post_id='$rows[post_id]'"
$resultado5 mysql_query($consulta5); 
$datosy mysql_fetch_array($resultado5); 
Creo que el error está aquí. Si no me equivoco, tengo que extraer de la tabla POSTS_TEXT las entradas cuyo POST_ID sea igual al POST_ID que hemos obtenido en la anterior consulta.

Supongo que de haber un error, estaría en lo de post_id='$rows[post_id]. He probado a sustituir ROWS por DATOSX, y también por RESULTADO4, pero no funciona. Mi lógica rudimentaria me dice que la forma correcta sería usar DATOSX, pero como digo, no funciona.

Código PHP:

$datosy[post_text] = substr($datosy[post_text],0,150)."..."

Con esto controlo que el tamaño del texto no sea superior a 150 caracteres. Funciona sin problemas.

Código PHP:
echo "<li><a href=\"./forum/profile.php?mode=viewprofile&u=$datosu[topic_poster]\">$datosu[username]</a> ha publicado el tema \"<a href=\"$directorio/viewtopic.php?t=$rows[topic_id]\"  title=\"$datosy[post_text]\">$rows[topic_title]</a>\" en el subforo <a href=\"./forum/viewforum.php?f=$datosf[forum_id]\">$datosf[forum_name]</a></li>"
$i++; 
Esto utiliza los datos que ha extraído antes para montar el documento HTML, que funciona a la perfección excepto por lo que hay dentro de TITLE, es decir, lo de $datosy[post_text]

Código PHP:
mysql_free_result($resultado); 
mysql_close($conexion); 
?> 
Terminamos y cerramos

A ver si alguien me puede ayudar, que estoy muy perdido. Me ha costado mucho entender la parte que he llegado a entender y meter algunos cambios, pero a partir de aquí me siento totalmente incapaz de continuar yo solo.
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable

Última edición por -Defero-; 16/05/2006 a las 09:39
  #63 (permalink)  
Antiguo 17/05/2006, 01:41
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 9 meses
Puntos: 55
El problema lo tienes probablemente en las consultas 4 y 5, donde usas respectivamente $rows[first_post_id] y $rows[post_id], ya que esas entradas NO EXISTEN en la tabla topics. Prueba sustituyéndolos por $rows[topic_first_post_id]

Suerte
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #64 (permalink)  
Antiguo 17/05/2006, 07:17
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 20 años, 4 meses
Puntos: 76
¡Dioses, qué fácil que es/parece la solución, y cuánto tiempo he gastado buscando el error sin encontrarlo! Claro, como la tabla se llama FORUM_TOPICS, inconscientemente eliminaba TOPIC_ de los nombres de las tablas pensando que era una especie de prefijo o algo por el estilo, y al revisar pasaba por encima del error sin encontrarlo. Igual que en esos endiablados ejercicios de matemáticas en el que ponías mal un signo, se iba todo el ejercicio al garete, y al revisar paso a paso el ejercicio, no reparabas en ese signo mal puesto.

Acabo de hacer la prueba cambiando sólo eso que me has dicho, y en efecto, el resultado es el esperado. Muchas gracias por la ayuda.
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
  #65 (permalink)  
Antiguo 17/05/2006, 08:48
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 20 años, 4 meses
Puntos: 76
Pues nada, visto el buen resultado que me ha dado lo anterior, me he puesto manos a la obra para arreglar esto:

Cita:
Iniciado por Defero.tk
(...) nota: hay un pequeño problema cuando en esos primeros 150 caracteres hay algo de BBcode, pero eso ya intentaré solucionarlo más adelante, de momento no me preocupa tanto (...)
O sea, que quiero filtrar el mensaje para quitar las etiquetas bbcode, y dejar sólo el texto limpio. Buscando por aquí y por allá, he encontrado un truco en Xergio.net (ese tal Xergio es un fiera). Pero yo no quiero hacer sustituciones tan complicadas, sólo quiero quitar todas las etiquetas bbcode, es decir, eliminar todo lo que aparezca entre corchetes. He probado a simplificar al máximo el código, y funciona:

Código PHP:
<?php 
 
function bbcode($texto) { 
  
$texto=nl2br(htmlentities($texto)); 
  
$URLSearchString " a-zA-Z0-9:/-?&&amp;.=_~#'"# Lo caracteres aceptados. 
  
$texto preg_replace("(\[.+?\])is",'',$texto); 
  return 
$texto
 } 
 echo 
bbcode("[b]hola[/b] [i]pepe[/i] [u]nieto[/u] [url=http://dhost.info/foroepj/viewphp?f=8]Prueba[/url] [img]http://www.forosdelweb.com/banner.gif"); 
 
?>
Bien, genial, estoy eufórico por este hallazgo... pero no tengo ni idea de cómo podría meterlo en el código del anterior mensaje, para que me hiciera el filtrado en el resultado de la consulta en la base de datos. He buscado información acerca de la función PREG_REPLACE en Google y he estado haciendo algunas pruebas, pero no consigo resultados satisfactorios.
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
  #66 (permalink)  
Antiguo 17/05/2006, 08:58
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 20 años, 4 meses
Puntos: 76
¡Lo tengo, lo tengo! Basta con poner esto:

Código PHP:
{
$datosy[post_text] = preg_replace("(\[.+?\])is",'',$datosy[post_text]); 

Antes de esto:

Código PHP:
{
$datosy[post_text] = substr($datosy[post_text],0,150)."...";

Le estoy pillando el gusto a esto del PHP... todavía no tengo ni idea, pero divertido es, doy fe de ello.

Para los que andan perdidos, el código definitivo para poner los últimos temas y que al pasar el ratón por encima del mismo muestre parte del texto del primer mensaje es éste:

Código PHP:
<? 
 
// Últimos mensajes publicados en foros phpBB2. 
// Creado por XeRGiO y modificado por Defero.tk (con la ayuda de Ferny) para que muestre los últimos temas de un subforo en concreto
// www.xergio.net
// 
// Edita lo que viene a continuación. Cambia solo lo que hay entre comillas "": 
 
$directorio "./forum"//Carpeta donde esta situadoel foro. 
$mostrar "2"//Número de mensajes a mostrar. (menos 1)
// $caracteres = "150"; //Caracteres que se mostrarán de cada línea. 
 
// Lo que viene ahora no lo toques para nada!!! a no ser que sepas de qué va el tema... 
 
include("$directorio/config.php"); 

$conexion mysql_connect($dbhost,$dbuser,$dbpasswd); 
mysql_select_db($dbname,$conexion); 
$consulta "select * from ".$table_prefix"topics WHERE forum_id='8' order by topic_id desc" 
$resultado mysql_query($consulta); 
$i 0
while (
$rows mysql_fetch_array($resultado)) { 
if (
$i <= $mostrar) { 

// Añadido por Defero.tk para sacar los datos del mensaje
$consulta4 "select * from ".$table_prefix."posts where post_id='$rows[topic_first_post_id]'"
$resultado4 mysql_query($consulta4); 
$datosx mysql_fetch_array($resultado4); 

// Añadido por Defero.tk para sacar el texto del mensaje
$consulta5 "select * from ".$table_prefix."posts_text where post_id='$rows[topic_first_post_id]'"
$resultado5 mysql_query($consulta5); 
$datosy mysql_fetch_array($resultado5); 

// if (strlen($datost[topic_title]) > $caracteres) { 
// $datost[topic_title] = substr($datost[topic_title],0,20)."..."; 
// } 

// Añadido por Defero.tk para eliminar el bbcode del texto del mensaje
// inspirado en otro código de Xergio http://media.xergio.net/trabajo/81-simple-bbcode
{
$datosy[post_text] = preg_replace("(\[.+?\])is",'',$datosy[post_text]); 
}

// Acorta el texto de los mensajes hasta 150 caracteres

$datosy[post_text] = substr($datosy[post_text],0,150)."..."


echo 
"<li class=\"timos\"><a href=\"$directorio/viewtopic.php?t=$rows[topic_id]\"  title=\"$datosy[post_text]\">$rows[topic_title]</a></li>"
$i++; 



 
mysql_free_result($resultado); 
mysql_close($conexion); 
?>
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable

Última edición por -Defero-; 17/05/2006 a las 09:05
  #67 (permalink)  
Antiguo 28/07/2006, 18:57
Avatar de Bill Gates  
Fecha de Ingreso: abril-2005
Ubicación: En el baño
Mensajes: 261
Antigüedad: 19 años, 7 meses
Puntos: 0
como meto esto en un foro gratis que esta hospeado en www.forosgratis.net, alguna ayuda.
__________________
MI CLANhttp://s5.bitefight.es/c.php?uid=86519]
  #68 (permalink)  
Antiguo 01/08/2006, 15:36
Avatar de Bill Gates  
Fecha de Ingreso: abril-2005
Ubicación: En el baño
Mensajes: 261
Antigüedad: 19 años, 7 meses
Puntos: 0
ALguien que sepa algo

Necesito help, para instalar este scrip en un foro publico.
__________________
MI CLANhttp://s5.bitefight.es/c.php?uid=86519]
  #69 (permalink)  
Antiguo 03/08/2006, 14:41
Avatar de Bill Gates  
Fecha de Ingreso: abril-2005
Ubicación: En el baño
Mensajes: 261
Antigüedad: 19 años, 7 meses
Puntos: 0
Quien me puede ayudar

Necesito ayuda, alguien que me ayude con este codigo para un foro gratis en servidor gratuito.
__________________
MI CLANhttp://s5.bitefight.es/c.php?uid=86519]
  #70 (permalink)  
Antiguo 23/12/2006, 14:21
 
Fecha de Ingreso: diciembre-2006
Mensajes: 50
Antigüedad: 17 años, 11 meses
Puntos: 2
Re: Script foro PHPBB

Alguién me echa una manita, please. El error que me da es con la conexión a la BD:

Código:
Warning: mysql_connect(): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /home/www/firwart2.freehostia.com/scroll.php on line 19

Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /home/www/firwart2.freehostia.com/scroll.php on line 20

Warning: mysql_query(): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /home/www/firwart2.freehostia.com/scroll.php on line 22

...................
Gracias por la ayuda!!
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.
Tema Cerrado

SíEste tema le ha gustado a 4 personas




La zona horaria es GMT -6. Ahora son las 20:10.