Foros del Web » Programando para Internet » PHP »

Mensajes nuevos

Estas en el tema de Mensajes nuevos en el foro de PHP en Foros del Web. Hola, estoy con el sistema de mensajería interna en mi web y me encuentro con un problema a la hora de mostrar la notificación en ...
  #1 (permalink)  
Antiguo 24/12/2009, 06:16
Avatar de breakervans  
Fecha de Ingreso: noviembre-2009
Ubicación: Vigo, España
Mensajes: 133
Antigüedad: 14 años, 5 meses
Puntos: 1
Mensajes nuevos

Hola, estoy con el sistema de mensajería interna en mi web y me encuentro con un problema a la hora de mostrar la notificación en la página principal del usuario que dice 'tienes x mensajes nuevos'. No se por qué solo funciona a veces, cuando le viene en gana, sino se queda poniendo lo mismo que puede ser 'tienes 1 mensaje nuevo' aunque lo hayas borrado o tengas 40 nuevos. Y es un código que copié de un aporte en esta web. Os paso los códigos de la tabla de MySQL y ese código php.

Código PHP:
<?php

$i 
1;
$nuevos 0;
include(
"conexion.php");

$query mysql_query ("SELECT * FROM mensajes order by fecha DESC");

while ( 
$row mysql_fetch_array($query) ) {

    if ( 
$row['para'] == $username ) {

if ( 
$row[leido] < ) {
    
$nuevos $nuevos +1;
}

if ( 
$row[leido] < ) {
    
$mensajesnuevos .= "</B>";
}

    
$tiene "Si";
    
$i $i+1;
    }


}

if ( 
$nuevos == ) {
$nuevos "Ninguno";
}
    if ( 
$tiene != "Si" ) {

    echo 
"<font size=1 face=Tahoma>No tienes mensajes, $username";

    }
    else {
    
$j $i -1;
    echo 
"<font size=1 face=Tahoma>Tienes <b>$j</b> mensajes.<br><B>$nuevos</b> son nuevos.";
Código:
CREATE TABLE `mensajes` (
  `msgid` int(9) NOT NULL AUTO_INCREMENT,
  `de` char(255) NOT NULL,
  `para` char(255) NOT NULL,
  `asunto` char(255) NOT NULL,
  `mensaje` longtext NOT NULL,
  `fecha` char(255) NOT NULL,
  `leido` int(10) NOT NULL DEFAULT '0',
  PRIMARY KEY (`msgid`)
) ENGINE=MyISAM AUTO_INCREMENT=31 DEFAULT CHARSET=latin1 AUTO_INCREMENT=31 ;
  #2 (permalink)  
Antiguo 24/12/2009, 09:17
 
Fecha de Ingreso: noviembre-2007
Ubicación: Lanus, Buenos Aires
Mensajes: 178
Antigüedad: 16 años, 5 meses
Puntos: 14
Respuesta: Mensajes nuevos

Ese query esta muy mal hecho, no debes pedir todos los mensjes de todos los usuarios y luego filtrar los mensajes leidos del usuario que esta logueado, que la consulta sea algo asi

"SELECT * FROM mensajes WHERE para = '$username' AND leido <1 ORDER BY fecha DESC"

Si esa consulta trae resultados hay mensajes nuevos, sino no

Saludos
  #3 (permalink)  
Antiguo 24/12/2009, 09:53
Avatar de breakervans  
Fecha de Ingreso: noviembre-2009
Ubicación: Vigo, España
Mensajes: 133
Antigüedad: 14 años, 5 meses
Puntos: 1
Respuesta: Mensajes nuevos

Sustituyendo eso de forma que quede
$query = mysql_query ("SELECT * FROM mensajes WHERE para = '$username' AND leido <1 ORDER BY fecha DESC");
ahora cambia, pero me dice que no tengo ningún mensaje, cosa que es mentira, tengo varios y entre ellos la mayoría sin leer... no soy muy bueno en esto, así que seguro que me estaré comiendo un error muy grande... pero cual?
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 04:54.