Foros del Web » Programando para Internet » PHP »

Ayuda para solucionar problemilla con PHP.

Estas en el tema de Ayuda para solucionar problemilla con PHP. en el foro de PHP en Foros del Web. Hola a todos lo primero. Estoy haciendo un foro en PHP y MySQL ( algo sencillito ), el caso es que estoy atascado en una ...
  #1 (permalink)  
Antiguo 07/05/2010, 18:42
 
Fecha de Ingreso: mayo-2010
Mensajes: 41
Antigüedad: 13 años, 11 meses
Puntos: 0
Ayuda para solucionar problemilla con PHP.

Hola a todos lo primero.
Estoy haciendo un foro en PHP y MySQL ( algo sencillito ), el caso es que estoy atascado en una cosa que os cuento.
Estoy en la página principal donde salen todos los foros, y a la derecha el numero de temas, el numero de mensajes y el ultimo mensaje, bueno pues mi problema está con el último mensaje.
Tengo hechas 3 tablas:
CATEGORIAS (id_categoria, nombre, descripcion),
TEMAS (id_tema, descripcion, categoria, autor, fecha),
MENSAJES (id_mensaje, mensaje, categoria, tema, acutor, fecha).

Bueno pues en la zona del ultimo mensaje he conseguido que salga el autor y la fecha del ultimo mensaje de ese foro, el problema me viene en sacar también el nombre del tema ( campo descripcion de la tabla TEMAS ).

Yo estoy sé sacarlo con una subselect, el caso es que las tablas no estan relacionadas y no me deja hacer MENSAJES(tema) clave ajena de TEMAS(id_tema), ni tampoco me deja usar IN para la subselect.
Total que he intentado recoger en la select q me da el autori y la fecha el "tema" taambién, y con el hacer otra select tal que "SELECT descripcion FROM temas WHERE id_temas = ( el tema q he cogido de la primera consulta), pero me sale un error de MySQL...

¿Dónde puede estar el error?
Gracias por adelantado.

Paso el código:
Código HTML:
<table class="table_foros" width="950" align="center">
  <tr>
    <td colspan="2" bgcolor="#000033"><img src="imagenes/48x5px.png" width="48" height="5" />FORO</td>
    <td width="272" align="center" bgcolor="#000033">&Uacute;LTIMO MENSAJE</td>
    <td width="109" align="center" bgcolor="#000033">TEMAS</td>
    <td width="111" align="center" bgcolor="#000033">MENSAJES</td>
  </tr>
  <?php do { ?>
  <?php
  mysql_select_db($database_foro, $foro);
  $publicacion_sql = "SELECT id_mensaje FROM mensajes WHERE categoria = ".$row_foro_disenioweb['id_categoria'];
  $temas_sql = "SELECT id_temas FROM temas WHERE categoria = ".$row_foro_disenioweb['id_categoria'];
  $ultimo_sql = "SELECT tema, autor, fecha FROM mensajes WHERE categoria = ".$row_foro_disenioweb['id_categoria'] .  " ORDER BY fecha DESC LIMIT 1";
   
  
  $uPost = mysql_query($ultimo_sql) or die (mysql_error());
  $a = mysql_fetch_assoc($uPost);
  $nTema = $a['tema'];
  
  $uTema = "SELECT descripcion FROM temas WHERE id_temas = " . $nTema ;
  $uTemaVer = mysql_query($uTema) or die (mysql_error());
  
  $pTotales = mysql_query($publicacion_sql) or die (mysql_error());
  $pTemasTotales = mysql_query($temas_sql) or die (mysql_error());
  ?>
  <tr>
    <td width="45" align="center"><img src="imagenes/folder.png" width="40" height="40" /></td>
    <td width="389"><span class="table_foros"><a href="categorias.php?cat=<?php echo $row_foro_disenioweb['id_categoria']; ?>"><?php echo $row_foro_disenioweb['nombre']; ?></a></span><br /> <span class="table_foros_descripcion"><?php echo $row_foro_disenioweb['descripcion']; ?></span><br /></td>
    <td align="left"><?php 		$up = mysql_fetch_assoc($uPost);
                                                                $ut = mysql_fetch_assoc($uTemaVer);
				echo '<span class="table_foros_fechas">';
				echo $ut['descripcion'];
				echo '</span>';
                                                                echo '<br />';
				echo '<span class="table_foros_fechas">';
				echo ' por   ';
				echo '</span>';
				echo '<span class="table_foros_autores">';
				echo $up['autor'];
				echo '</span>';
				echo '       ';
				echo '<span class="table_foros_fechas">';
				echo $up['fecha'];
				echo '</span>';
				?>
                     </td>
    <td align="center"><span class="table_foros_recuentos"><?php echo mysql_num_rows($pTemasTotales); ?></span></td>
    <td align="center"><span class="table_foros_recuentos"><?php echo mysql_num_rows($pTotales); ?></span></td>
  </tr>
  <?php } while ($row_foro_disenioweb = mysql_fetch_assoc($foro_disenioweb)); ?>
</table>



</body>
</html>
<?php

mysql_free_result($foro_disenioweb);

?> 

Última edición por abuitrago81; 07/05/2010 a las 18:50
  #2 (permalink)  
Antiguo 07/05/2010, 18:48
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Ayuda para solucionar problemilla con PHP.

primero... tu problema no es de código PHP, es mas bien en la consulta de SQL que realizas...

recuerda que PHP solo envía la consulta al servidor de SQL, quien es el que la ejecuta... y vamos, el problema radica ahí...


segundo, ¿esperas que adivinemos el mensaje de error de MySQL?? ¿o porque lo comentas?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 07/05/2010, 18:53
 
Fecha de Ingreso: mayo-2010
Mensajes: 41
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Ayuda para solucionar problemilla con PHP.

Lo siento, soy nuevo por estos lares :(

Os pongo una foto de lo que sale:


Antes de eso, me salian los 12 foros con su autor y fecha del ultimo mensaje, pero al intentar que saliera la descripcion se me jode todo.

La consulta es una chorrada, el fallo tiene que venir de la recogida de datos con PHP, que soy muy novato y algo haré mal.
  #4 (permalink)  
Antiguo 07/05/2010, 18:55
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Ayuda para solucionar problemilla con PHP.

bueno, intenta traducir el mensaje de error que te resulta... así podrás entender un poco de que se trata...

una sugerencia es que imprimas dicha consulta antes de ejecutarla, para que la analices y verifiques que realmente es correcta...

en todo caso, como te comento tu problema no está en PHP... sino en la consulta misma de SQL... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 07/05/2010, 18:57
 
Fecha de Ingreso: mayo-2010
Mensajes: 41
Antigüedad: 13 años, 11 meses
Puntos: 0
Sin lo de que salga el titulo del mensaje si que me sale bien, que en realidad tiene q salir esto:


Cita:
Iniciado por pateketrueke Ver Mensaje
bueno, intenta traducir el mensaje de error que te resulta... así podrás entender un poco de que se trata...

una sugerencia es que imprimas dicha consulta antes de ejecutarla, para que la analices y verifiques que realmente es correcta...

en todo caso, como te comento tu problema no está en PHP... sino en la consulta misma de SQL... (:
Joe pero la consulta para que salga la descripcion es bien sencilla:

SELECT descripcion FROM temas WHERE id_temas = ( el numero de tema del ultimo mensaje);

El problema tiene que estar en que no lo concateno bien en el php, o alguna funcion de MySQL ( mysql_fetch_assoc, etc.. ) que la uso mal...

EN cualquier caso, a ver si alguien me sabe encontrar el fallo dentro del jaleo q tengo en ese <td>.

Última edición por GatorV; 10/05/2010 a las 09:35
  #6 (permalink)  
Antiguo 07/05/2010, 19:03
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Ayuda para solucionar problemilla con PHP.

Hazle un var_dump a la variable $row_foro_disenioweb['id_categoria'], justamente antes de la consulta para que veas que te trae.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 07/05/2010, 19:10
 
Fecha de Ingreso: mayo-2010
Mensajes: 41
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Ayuda para solucionar problemilla con PHP.

Cita:
Iniciado por abimaelrc Ver Mensaje
Hazle un var_dump a la variable $row_foro_disenioweb['id_categoria'], justamente antes de la consulta para que veas que te trae.
No sé que es eso de var_dump, pero vamos que las 3 primeras select estan bien, porque me muestra el autor y la fecha del ultimo mensaje bien, luego he hecho una select tratando de recoger el numero de tema de la select del ultimo mensaje y la he metido en la variable $nTemas, la cual luego despues he hecho un 'echo' para ver el valor que tiene y me daba el numero bien, pero luego ya dentro del <td> donde lo muestro me he puesto a hacer cosas sin saber, a parte de que la select concatenada con $nTema lo mismo está mal.

Otra cosa es que es un bucle do-while y no sé si lo haré bien, ya que eso me lo ha hecho el dreamweaver solo con la opcion de "Tabla dinamica".

A ver si alguien ve el error.
  #8 (permalink)  
Antiguo 07/05/2010, 19:12
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Ayuda para solucionar problemilla con PHP.

a ver... por eso se te ha sugerido que imprimas la consulta de SQL antes de ejecutarla...

osea, no vamos a saber si cometes un error de concatenación -ni por ti mismo-, o si algún dato está mal ingresado si no observas la consulta antes... así de simple!!

el mensaje de error que te surge es muy sencillo y peca de ser claro: tu consulta de SQL está errada...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 07/05/2010, 19:21
 
Fecha de Ingreso: mayo-2010
Mensajes: 41
Antigüedad: 13 años, 11 meses
Puntos: 0
Cita:
Iniciado por pateketrueke Ver Mensaje
a ver... por eso se te ha sugerido que imprimas la consulta de SQL antes de ejecutarla...

osea, no vamos a saber si cometes un error de concatenación -ni por ti mismo-, o si algún dato está mal ingresado si no observas la consulta antes... así de simple!!

el mensaje de error que te surge es muy sencillo y peca de ser claro: tu consulta de SQL está errada...
A ver si me explico... que las tres primeras select estan bien porque salen los datos que he puesto en el 'select' del mensaje ultimo, en este caso era "select autor, fecha..." y lo unico que he hecho es ponerle un campo más, el de "tema" en el que va el numero del tema al q hace referencia el mensaje.
Vamos que la consulta esa está bien, yo me refiero a la consulta que hago luego en donde pongo " ... WHERE id_temas = " . $nTemas . " ORDER BY descripcion"; ", que igual está mal concatenado ( y cn esto me refiero a la sintaxis de PHP ), pero aun así insisto que en la primera foto me salen las descripciones del ultimo mensaje de esos 2 foros bien, el caso es q se carga el resto y eso tiene que estar en el bucle q x lo que sea casca...

Probar a hacer "echos" y visualizar variables y demás ya lo he exo, cuando he decidido entrar aquí es cuando no soy capaz de verle el fallo, a ver si alguien que domine esto es capaz de ver el código y decirme " pues es esto q lo tienes mal y tienes q poner esto..."

Un saludo y gracias por vuestras respuestas.

Además los 2 primeros foros tienen mensajes y sale el nombre del ultimo mensaje ( pero se carga lo del autor y la fecha ) y el siguiente foro, que no tiene mensajes, no devuelve ningun numero, x lo tanto en la select estoy haciendo WHERE id_tema = NADA, y ahí tiene que estar cascando el tema...

Última edición por GatorV; 10/05/2010 a las 09:33
  #10 (permalink)  
Antiguo 07/05/2010, 19:29
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Ayuda para solucionar problemilla con PHP.

a ver... no entiendo porque no lo tienes claro!!

si fuera un error de sintaxis PHP... ¡¡entonces tendrías un mensaje de error claro y sería reportado como tal!!!

pero no... el mensaje de error es relacionado con la consulta, así de claro desde un comienzo es todo...

ahora, ¿si quieres mostrar la consulta -del error- tal cual la imprimes antes de ejecutarla?? ¿o hay que seguir intentando adivinar??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 07/05/2010, 19:38
 
Fecha de Ingreso: mayo-2010
Mensajes: 41
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Ayuda para solucionar problemilla con PHP.

Cita:
Iniciado por pateketrueke Ver Mensaje
a ver... no entiendo porque no lo tienes claro!!

si fuera un error de sintaxis PHP... ¡¡entonces tendrías un mensaje de error claro y sería reportado como tal!!!

pero no... el mensaje de error es relacionado con la consulta, así de claro desde un comienzo es todo...

ahora, ¿si quieres mostrar la consulta -del error- tal cual la imprimes antes de ejecutarla?? ¿o hay que seguir intentando adivinar??
Tienes en el código del primer mensaje todas las consultas que hago y en la primera foto el error que da, es que no sé que es lo que me pides jaja.

HAY UNA SELECT QUE ES:
$ultimo_sql = "SELECT tema, autor, fecha FROM mensajes WHERE categoria = ".$row_foro_disenioweb['id_categoria'] . " ORDER BY fecha DESC LIMIT 1";

La cual devuelve por ejemplo:
Validar XHTML en el w3c marta 2010-05-08

y luego me lio a meter cosas en variables en PHP q lo mismo lo hago mal, aunque el caso es que al final me saca la descripcion bien de los 2 primeros foros... luego eso significa que la select está cogiendo lo q tiene que coger, pero cuando llega a un foro sin mensajes casca...

Y el mensaje de error es el q sale en la segunda foto, que basicamente dice que hay un error de sintaxis SQL, y que mire el manual de MySQL de mi version y demás... y que el fallo está en la linea 1... pero en la linea 1 de mi codigo hay: <?php require_once('Connections/foro.php'); ?>

Y si te refieres a que haga una especie de "echo" para ver lo que sale al hacer la consulta, no sé como hacerlo, ya q si hago:
"echo $ultimo_sql" me sale el literal de la consulta pero no sé como hacer q salga el resultado...

Última edición por abuitrago81; 07/05/2010 a las 19:45
  #12 (permalink)  
Antiguo 07/05/2010, 19:53
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Ayuda para solucionar problemilla con PHP.

Te repito tu problema está en la consulta, eso es lo que te indica PHP. PHP no va a mentir sobre donde está el error. Por lo tanto, haz lo que te hemos aconsejado desde el principio. Imprime la consulta para que veas si la tienes declarada correctamente. Haz un var_dump a las variables y verás como se están declarando.
Código PHP:
Ver original
  1. $publicacion_sql = "SELECT id_mensaje FROM mensajes WHERE categoria = ".$row_foro_disenioweb['id_categoria'];
  2. var_dump($publicacion_sql);
  3. var_dump($row_foro_disenioweb['id_categoria']);
etc., etc., etc.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #13 (permalink)  
Antiguo 08/05/2010, 17:06
 
Fecha de Ingreso: mayo-2010
Mensajes: 41
Antigüedad: 13 años, 11 meses
Puntos: 0
Bueno, pues he probado a hacer la sentencia que me pones abimaelrc:

var_dump($publicacion_sql);
var_dump($row_foro_disenioweb['id_categoria']);

Y el resultado es este:



Resumiendo, que en el bucle recoge el valor 1 y muestra el mensaje, luego muestra el valor 2 y muestra el mensaje y a la siguiente iteración no devuelve nada (no hay ningun mensaje) y ahí es donde casca...

Por otro lado no entiendo pq en las 2 iteraciones buenas que hace sale el titulo del mensaje y se carga la parte del autor y la fecha...

Alguna solución ??

Y haciendolo de estas 4 variables:

var_dump($publicacion_sql);
var_dump($row_foro_disenioweb['id_categoria']);
var_dump($nTema);
var_dump($uTema);

... sale esto, lo que hace ver que me está devolviendo en el numero de tema un NULL y x lo que sea casca. Que puedo hacer para controlar ese NULL y que siga iterando ??



Vale, tema solucionado, le he metido un IF diciendo que si la variable es NULL le de valor 0, y así funciona, pero ahora ya si que hay fallo en el PHP, y es que no me salen los "ECHO" del autor y la fecha...



Código PHP:
Ver original
  1. <?php do { ?>
  2.   <?php
  3.   mysql_select_db($database_foro, $foro);
  4.   $publicacion_sql = "SELECT id_mensaje FROM mensajes WHERE categoria = ".$row_foro_disenioweb['id_categoria'];
  5.   $temas_sql = "SELECT id_temas FROM temas WHERE categoria = ".$row_foro_disenioweb['id_categoria'];
  6.   $ultimo_sql = "SELECT tema, autor, fecha FROM mensajes WHERE categoria = ".$row_foro_disenioweb['id_categoria'] .  " ORDER BY fecha DESC LIMIT 1";
  7.  
  8.   $uPost = mysql_query($ultimo_sql) or die (mysql_error());
  9.   $a = mysql_fetch_assoc($uPost);
  10.   $nTema = $a['tema'];
  11.   if ($nTema == NULL) {
  12.     $nTema = 0;
  13.   }
  14.   $uTema = "SELECT descripcion FROM temas WHERE id_temas = " . $nTema ;
  15.   $uTemaVer = mysql_query($uTema) or die (mysql_error());
  16.  
  17.   $pTotales = mysql_query($publicacion_sql) or die (mysql_error());
  18.   $pTemasTotales = mysql_query($temas_sql) or die (mysql_error());
  19.   ?>
  20.   <tr>
  21.     <td width="45" align="center"><img src="imagenes/folder.png" width="40" height="40" /></td>
  22.     <td width="389"><span class="table_foros"><a href="categorias.php?cat=<?php echo $row_foro_disenioweb['id_categoria']; ?>"><?php echo $row_foro_disenioweb['nombre']; ?></a></span><br />      <span class="table_foros_descripcion"><?php echo $row_foro_disenioweb['descripcion']; ?></span><br /></td>
  23.     <td align="left"><?php      $ut = mysql_fetch_array($uTemaVer);
  24.                                 echo '<span class="table_foros_fechas">';
  25.                                 echo $ut['descripcion'];
  26.                                 echo '</span>';
  27.                                 echo '<br />';
  28.                                 $up = mysql_fetch_assoc($uPost);
  29.                                 echo '<span class="table_foros_fechas">';
  30.                                 echo ' por   ';
  31.                                 echo '</span>';
  32.                                 echo '<span class="table_foros_autores">';
  33.                                 echo $up['autor'];
  34.                                 echo '</span>';
  35.                                 echo '       ';
  36.                                 echo '<span class="table_foros_fechas">';
  37.                                 echo $up['fecha'];
  38.                                 echo '</span>';
  39.                                 ?>
  40.                      </td>
  41.     <td align="center"><span class="table_foros_recuentos"><?php echo mysql_num_rows($pTemasTotales); ?></span></td>
  42.     <td align="center"><span class="table_foros_recuentos"><?php echo mysql_num_rows($pTotales); ?></span></td>
  43.   </tr>
  44.   <?php } while ($row_foro_disenioweb = mysql_fetch_assoc($foro_disenioweb)); ?>

Bueno pues haciendo un var_dump($up); , que es la parte que no me muestra, me da como resultado BOOL(FALSE);

¿Por qué puede ser ?

Tema solucionado, ya lo he arreglado!!

Última edición por GatorV; 10/05/2010 a las 09:32

Etiquetas: Ninguno
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 21:20.