Foros del Web » Programando para Internet » PHP »

Problema con bucle anidado

Estas en el tema de Problema con bucle anidado en el foro de PHP en Foros del Web. No sabía muy bien si poner esto aquí o o en el de prefabricados, ya que estoy intentando extraer los datos de un foro de ...
  #1 (permalink)  
Antiguo 11/07/2003, 13:12
Avatar de t0m|ta  
Fecha de Ingreso: julio-2002
Ubicación: Madrid
Mensajes: 369
Antigüedad: 15 años, 4 meses
Puntos: 3
Problema con bucle anidado

No sabía muy bien si poner esto aquí o o en el de prefabricados, ya que estoy intentando extraer los datos de un foro de phpBB, pero por fuera, así que aunque ataco a la bd de phpBb he pensado que el problema es más general.

Estoy intentando, sacar de phpBB para la ponerlo en la página principal, los foros que hay en una determinada categoría de forma que se muestre primero, el nombre foro, la descripción y luego los últimos cinco artículos; después el siguiente foro de esa categoría etc.

Para ello con una primera query saco el nombre, id del foro y la descripción, y luego anido una segunda query, que extrae los últimos 5 mensajes del foro en cuestión.

A mi me parece que está bien, pero me da errores completamente aleatorios: unas veces muestra 5 artículos y otras 3, en otras ocasiones no muestra los últimos artículos (si no los que le parece bien). Creo que he debido de llamar a dos variables igual o cualquier burrada similar, esto de la programación no sé me da muy bien

Ejemplos de errores variopintos que se producen:

En una las categorías, en vez de mostrarle los últimos 5, se muestran los penúltimos 5 .

http://www.tomatoma.ws/categorias_nueva.php?&catid=20

En otra de las categorías, los dos primeros foros salen perfectamente, pero en el tercero en vez de aparecer los últimos cinco, sólo aparecen 2 y no tengo ni idea de porqué

http://www.tomatoma.ws/categorias_nueva.php?&catid=22

Aquí dejo el código por si alguien puede darme alguna pista de lo que está pasando:

Si publico el código directamente, se descuajeringa todo el foro así que lo he subido como txt a mi servidor.

http://www.tomatoma.ws/archivos/contenido_categoria.txt

Muchas gracias por aguantarme el rollo
__________________
:ojotes: t0m|ta - IHQ :ojotes:
No tengo palabras
Instrucciones de andar por casa
  #2 (permalink)  
Antiguo 11/07/2003, 20:10
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 14 años, 5 meses
Puntos: 1
Mmm... es difícil saberlo con certeza ya que el problema tiene toda la apariencia de ser al nivel de la base de datos y el query más interno que tienes. Viendo el código, pienso que la causa no tiene nada que ver con el código PHP como tal.

Lo primero que se me ocurre es que el problema está en el segmento WHERE del query más interno:

Cita:
WHERE user_id = topic_poster AND post_id = topic_last_post_id AND manual_topics.forum_id =" . $forum_id
Posiblemente sea a causa de algún nombre de columna ambiguo, es decir, entre las tablas que estás consultando hay columnas que tienen el mismo nombre y estás usando en ese segmento WHERE que te menciono. Pero no lo puedo saber porque no estoy familiarizado con la estructura de la BD que tienes. Quizás si publicas la estructura de las tablas que intervienen podamos estudiarlo más de cerca.

Ah, y a propósito, me ha causado curiosidad algo que has escrito:

Cita:
en otras ocasiones no muestra los últimos artículos (si no los que le parece bien)
Yo sé que muy posiblemente lo has dicho en broma, pero creo que no está de más darte mi opinión y es que cuando uno está trabajando en este tipo de cosas; corrigiendo código, depurando información, etc. es muy importante ser bien consciente de una de las premisas de la computación, y es que las máquinas no hacen lo que uno quiere que hagan sino lo que uno les dice que hagan.

Hay un documento muy bonito (que tiene un caracter humorístico, pero profundo después de todo) llamado el Tao de la Programación. En uno de sus literales dice:

<<...Un novato le pregunta al maestro: "tengo un programa que a veces corre y a veces falla. He seguido las normas de la programación, y sin embargo me encentro completamente perdido. ¿Cuál es la razón de esto?"

El maestro respondió: "estás confundido porque no entiendes el Tao. Sólo un tonto espera que sus hermanos humanos se comporten racionalmente. ¿Porqué lo esperas de una máquina que los humanos han construido? Las computadoras simulan determinismo; sólo el Tao es perfecto. Las normas de la programación son transitorias; sólo el Tao es eterno. Por lo tanto debes contemplar el Tao antes de ser iluminado."

"¿Pero cómo sabré cuando haya sido iluminado?" pregunta entonces el novato.

"Tu programa se ejecutará correctamente" respondió el maestro.">>

Un saludo.
  #3 (permalink)  
Antiguo 11/07/2003, 20:51
Avatar de temaqueja  
Fecha de Ingreso: agosto-2002
Ubicación: /dev/null/
Mensajes: 399
Antigüedad: 15 años, 3 meses
Puntos: 4
Cita:
Mensaje Original por leonardop
... Posiblemente sea a causa de algún nombre de columna ambiguo, es decir, entre las tablas que estás consultando hay columnas que tienen el mismo nombre y estás usando en ese segmento WHERE que te menciono. Pero no lo puedo saber porque no estoy familiarizado con la estructura de la BD que tienes .......

Muy interesantes tus comentarios pero no podria ser a causa de nombres de columna ambiguos ya que mysql se hubiera negado a ejecutal tal query y lo que obtendria seria un WARNING de PHP indicando la linea donde falla la query y el mensaje de MYSQL.



A menos que tomita haya desactivado la presentación de mensajes de error o alerta
__________________
_________________________
La computadora nació para resolver problemas que antes no existían

Última edición por temaqueja; 11/07/2003 a las 20:59
  #4 (permalink)  
Antiguo 12/07/2003, 05:55
Avatar de t0m|ta  
Fecha de Ingreso: julio-2002
Ubicación: Madrid
Mensajes: 369
Antigüedad: 15 años, 4 meses
Puntos: 3
Gracias por contestarme, no he desactivado nada, se supone que si algo no funciona la cuestión chilla.

Es curioso, porque se supone que ese script sólo pasándole el $catid debería funcionar.

Cuando vas al script por si mismo

http://www.tomatoma.ws/inclu/conteni....php?cat_id=22

El resultado es una página en blanco, en cambio, si lo llamo desde la página en la que está incluido, me da esos errores tan raros, algo tengo que estar haciendo mal, lo que no consigo es saber qué


¿Ni una pista?
__________________
:ojotes: t0m|ta - IHQ :ojotes:
No tengo palabras
Instrucciones de andar por casa
  #5 (permalink)  
Antiguo 12/07/2003, 20:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En tu código (el del .txt que pusistes):

Código PHP:
$sql "SELECT forum_id, cat_id, forum_name, forum_desc, forum_order, forum_posts FROM manual_forums 
    WHERE cat_id = '"
;
    
$sql.= $catid;
    
$sql.="' ORDER BY forum_order ASC"
LLamas a la variable $catid .. sin embargo .. cuando haces el link del ejemplo que pusistes:

http://www.tomatoma.ws/inclu/conteni....php?cat_id=22

la variable la llamas: (fijate bien)
cat_id .. y debería ser:

http://www.tomatoma.ws/inclu/conteni...a.php?catid=22

Así lo probé y me desplegó los datos de esas consultas ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 12/07/2003, 20:45
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
Dime la verdad Cluster...

Eres realmente TU SOLO tan observador?? o cuantos empleados tienes que te ayudan a revisar los códigos que aqui posteamos???

__________________
Manoloweb
  #7 (permalink)  
Antiguo 12/07/2003, 21:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
jajaja Manoloweb .. no soy el único (ahí tenemos a josemi por ejemplo para estos detallitos xD).

Pero.. todo tiene su lógica:

1) decía que no se ejecuta la consulta (no sale nada). y la "consulta" se ejecuta bajo un criterio (una variable que entra por el URL) ..

2) .. Miras donde se hace la consulta .. Ahí se emplea una $variable .. Resulta que como entra por GET podrías pensar:
a) .. Tiene register globals a OFF y no usa $_GET['variable'] ..
(podría ser .. pero, decia que otros ejemplos le han funcionado)
b) .. un poco de ojo y se ve que el nombre de la variable no es el mismo .. Ayudó que usase noseque_algo .. si ubiera sido nosque en lugar de noseque ahí depende de la hora y el dia igual me doy cuenta xDD.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 12/07/2003 a las 21:37
  #8 (permalink)  
Antiguo 13/07/2003, 17:51
Avatar de t0m|ta  
Fecha de Ingreso: julio-2002
Ubicación: Madrid
Mensajes: 369
Antigüedad: 15 años, 4 meses
Puntos: 3
Muchas gracias a todos por responderme, estoy un poco lenta, pero es que estoy en la playita de vacaciones, que me lo he ganao.

Cluster eres un Hacha auténtica y además me has puesto en evidencia con eso de "no sale nada" XD, la próxima vez procuraré expresarme mejor, lo prometo :P

sin embargo, el problema de fondo persiste. con ese $catid (22) hay 3 foros:

1) Contiene artículos generales de consejos de usabilidad y navegación...

2) un manual de html para novatos

3) Un manual de php para más novatos todavía. Si os fijáis voy por el tema 9, sin embargo sólo se muestran 2 temas en vez de.

Si probamos con otras categorías, lo curioso es que el problema es distinto. En la catid =20 en vez de mostrarse los últimos 5 artículos, se muestran los penúltimos. Pero la query es la misma siempre. Me está comiendo la moral hasta tal punto, que aquí estoy de vacaciones y pegada al pc tratándo de averiguar que pasa snif.

Si el error fuese siempre el mismo lo entendería, lo que me desconcierta es que sea distinto ¿sabéis porqué puede ser?

Muchas gracias por el interés que os estáis tomando
__________________
:ojotes: t0m|ta - IHQ :ojotes:
No tengo palabras
Instrucciones de andar por casa
  #9 (permalink)  
Antiguo 14/07/2003, 20:21
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 14 años, 5 meses
Puntos: 1
Hola de nuevo.

Echándole otro vistazo al problema que describes, me he dado cuenta que aquellos artículos que no salen listados en tu página categorias_nueva.php son precisamente los que no están asociados con el autor t0m|ta (al menos en los ejemplos que ví).

Por ejemplo, en la sección en la que dices que sólo se listan dos de los varios artículos:

http://www.tomatoma.ws/subsecciones....id=27&catid=22

Fíjate quién es el autor de esos artículos. ¿Ves que hoy dos de ellos con algo en particular?

Considerando esto, pienso que para tí debe ser relativamente fácil encontrar la modificación que le debes hacer a tu query para corregir esta situación. Lamentablemente tendré que repetirte que dado que no estoy familiarizado con tu base de datos, me queda un poco complicado.

Quizás sirva algo como quitarle la porción:

user_id = topic_poster

al segmento

WHERE user_id = topic_poster AND post_id = topic_last_post_id AND manual_topics.forum_id


No lo sé. Espero que des con la solución de tu problema.
  #10 (permalink)  
Antiguo 19/07/2003, 14:10
Avatar de t0m|ta  
Fecha de Ingreso: julio-2002
Ubicación: Madrid
Mensajes: 369
Antigüedad: 15 años, 4 meses
Puntos: 3
Muchas gracias leonardo. Estos días estoy fuera de vacaciones Por eso he tardado en contestar.

No me había dado cuenta de eso y si que me da una pista enorme, antes el error me parecía aleatorio ahora ya sé que no lo es y dónde buscar

El lunes me pongo manos a la obra!

__________________
:ojotes: t0m|ta - IHQ :ojotes:
No tengo palabras
Instrucciones de andar por casa
  #11 (permalink)  
Antiguo 25/07/2003, 15:18
Avatar de t0m|ta  
Fecha de Ingreso: julio-2002
Ubicación: Madrid
Mensajes: 369
Antigüedad: 15 años, 4 meses
Puntos: 3
Bueno al final lo conseguí, me ha costado dios y ayuda verlo, lo de que sólo se veía un usuario ha sido la pista definitiva. El error es por Bruta XD

Tengo dos phpBB compartiendo algunas tablas, entre ellas la de usuarios, simple y llanamente estaba llamando a la tabla de usuarios que no era. Pero anda que no me ha costado muchísimas gracias !
__________________
:ojotes: t0m|ta - IHQ :ojotes:
No tengo palabras
Instrucciones de andar por casa
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 03:33.