Foros del Web » Programando para Internet » PHP »

Sistemas de avisos

Estas en el tema de Sistemas de avisos en el foro de PHP en Foros del Web. nombre_user seria como usuario A nombre- seria como usuario B Darles un valor y que cada uno entre en la tabla emisor y "emisor y ...

  #1 (permalink)  
Antiguo 19/02/2012, 12:32
 
Fecha de Ingreso: agosto-2011
Mensajes: 165
Antigüedad: 12 años, 8 meses
Puntos: 1
Pregunta Sistemas de avisos

nombre_user seria como usuario A
nombre- seria como usuario B

Darles un valor y que cada uno entre en la tabla emisor y "emisor y estado_name".
con un valor diferente para que cuando uno este en eliminados el otro este en bandeja de entrada.
Mira en la tabla avisos ahy un campo emisor y esta relacionado con otra tabla que se llama emisor y tiene dos
campos emisor y estado_name
Lo mismo en receptor
En principio esto es lo que quiero hacer es que el nombre_user(A) o nombre(B) pasen el aviso por estas tablas
que el aviso enviado pasa a favoritos solo con cambiar el estado_name en este caso de 1 a 3


0=Ambas
1=enviados
2=recibidos
3=favoritos
4=eliminados
5=borradas

Esto es lo que consigo por ahora.

1. Envio el mensaje como Nombre_user(A) a nombre(B)

(A)Nombre_user. lo puedo mandar a favoritos y se me quita de enviados
(A)Nombre_user lo puedo mandar a eliminados.
(A)Nombre_user esta en eliminados


!!!!Pero ahora quiero eliminarlo lo mando a una bandeja llamada 5(borradas).!!!!


2. El usuario nombre(B) tiene el mensaje como recibido y le dice quien lo envio todo bien.

(B)Nombre lo mando a favoritos y se me quita de recibidos.
(B)Nombre desde favoritos lo mando a eliminados se quita de favoritos.
(B)Nombre esta en eliminados.

3.
tabla aviso
aviso_id
nombre_user(A)
nombre(B)
texto
emisor
receptor
fecha

Tabla emisor:

emisor
estado_name (puede seer el nombre_user o nombre)

Tabla receptor.

receptor
estado_name (puede seer el nombre_user o nombre)

donde tengo insectadoS estos campos:

0=Ambas
1=enviados
2=recibidos
3=favoritos
4=eliminados
5=borradas

Este seria el cogido:


<?php
mysql_select_db('foros');
session_start();
$emisor = isset($_GET['emisor']) ? $_GET['emisor'] : 0;
$sql = "SELECT * FROM avisos A, emisor E_A WHERE E_A.emisor=A.emisor AND E_A.emisor = $emisor AND A.nombre='" .
$res = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($res) < 1)
{
echo "no hay datos";
}
else
{
while($row=mysql_fetch_array($res))
{
echo $row[0];
}
}
?>


<?php
$receptor = isset($_GET['receptor']) ? $_GET['receptor'] : 0;
$sql = "SELECT * FROM avisos A, receptor E_A WHERE E_A.receptor=A.receptor AND E_A.receptor = $receptor AND A.nombre='" .
$res = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($res) < 1)
{
echo "no hay datos";
}
else
{
while($row=mysql_fetch_array($res))
{
echo $row[0];
}
}
?>

Este codigo lo pongo en todas las paginas referentes enviados,recibidos y demas.

3. El Problema.
Quiero eliminar el mensaje nombre_user (A) He logrado quitarlo pero si hago esto.
Cuando entra el Usuario nombre(B) lo tiene en recibidos pero el nombre del usuario quien lo envio sale "enviados".
  #2 (permalink)  
Antiguo 20/02/2012, 01:15
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Sistemas de avisos

Hola yolanda16568, este es el quinto o sexto post tuyo con el mismo problema, como ves, otra vez tienes 200 lecturas y ninguna respuesta. EL problema es simple: no se entiende tu problema ni la manera en que escribes. Además, abres posts nuevos cuando en realidad estás respondiendo al post antiguo. Si abres un post, lo mejor es que continúes en el mismo hilo hasta que esté resuelto. En este caso, parece que le estás contestando a alguien, pero esa persona no verá tu mensaje como parte de otro hilo sino como un nuevo post, tal vez nunca te conteste.
Lo mejor es que hagas los post lo mas corto posible y utilizando el editor para formatear el texto, tal y como posteas ahora es muy difícil de leer, por eso no tienes respuestas.
Espero que sirva, saludos
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 20/02/2012, 02:26
 
Fecha de Ingreso: agosto-2011
Mensajes: 165
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Sistemas de avisos

Gracias por tu respuesta y perdona por haber puesto mas post.

Esto es lo que tengo que hacer con el codigo de arriba.

nombre_user seria como usuario A
nombre- seria como usuario B

Darles un valor y que cada uno entre en la tabla emisor y "emisor y estado_name".
con un valor diferente para que cuando uno este en eliminados el otro este en bandeja de entrada.
Mira en la tabla avisos ahy un campo emisor y esta relacionado con otra tabla que se llama emisor y tiene dos:
campos emisor y estado_name
Lo mismo en receptor
En principio esto es lo que quiero hacer es que el nombre_user(A) o nombre(B) pasen el aviso por estas tablas
que el aviso enviado pasa a favoritos solo con cambiar el estado_name en este caso de 1 a 3.

Espero lo entiendas lo que quiero hacer un saludo......
  #4 (permalink)  
Antiguo 20/02/2012, 05:08
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Sistemas de avisos

Hasta donde puedo entender, tienes un sistema de mensajería. Cada mensaje tiene un emisor y un receptor. Tanto emisor como receptor pueden asigarle al mensaje
un "estado" o "carpeta" (enviado, borrado, etc..). Al entrar en el buzón, el usuario ve sus mensajes ordenados por estado.
Más o menos siguiendo con tu enfoque, lo puedes solucionar con una tabla:

Código MySQL:
Ver original
  1. CREATE TABLE `mensajes` (
  2.   `id` int(11) DEFAULT NULL COMMENT 'UNique ID',
  3.   `subject` varchar(128) DEFAULT NULL COMMENT 'Asunto',
  4.   `body` text COMMENT 'Cuerpo',
  5.   `emisor` int(11) DEFAULT NULL COMMENT 'Id del emisor',
  6.   `receptor` int(11) DEFAULT NULL COMMENT 'Id del receptor',
  7.   `estado_emisor` tinyint(1) DEFAULT NULL COMMENT 'El estado según el emisor',
  8.   `estado_receptor` tinyint(1) DEFAULT NULL COMMENT 'El estado según el receptor'
  9. ) ENGINE=MyISAM DEFAULT CHARSET=latin1


Fíjate que este enfoque no es del todo correcto ya que emisor y receptor son conceptos que cambian según el usuario.
Son términos confusos ya que si quiero ver mi buzón de correo tienes que consultar mensajes en los que yo soy a veces receptor y a veces emisor.
Lo mismo ocurre con la palabra 'estado', dices estado cuando quieres decir 'carpeta'.
Pero continuamos con este modelo.
Los estados posibles para un mensaje serían: Inbox, Deleted, Enviados: 0, 1, y 2, por ejemplo
Para enviar mensajes: insertas UN registro donde:

EMISOR, el id del usuario en esta session
RECEPTOR
ESTADO_EMISOR 2, cada vez que el usuario envia, se guarda en enviados
ESTADO_RECEPTOR 0, para el receptor, inicialmente el mensaje va a la bandeja de entrada

Para mostrar el buzón del usuario actual, o sea, los mensajes que me han enviado a MI:
Código PHP:
Ver original
  1. select * from mensajes where emisor = $myUserId;
Para mostrar una carpeta de mi buzón:
Código PHP:
Ver original
  1. select * from mensajes where emisor = $myUserId and estado = $estado;

Para cambiar un mensaje de estado, simplemente haces update de un mensaje concreto:
Código PHP:
Ver original
  1. update mensajes set estado = $estado where id = $id;

Tu problema es que un mismo mensaje guarda estados correspondientes a usuarios diferentes, de allí la confusión al aplicar los filtros.
Una posible solución es que cada vez que se envíe un mensaje, insertes DOS registros, uno para el emisor y otro para el receptor. Así, cada
usuario puede hacer lo que quiera con el registro y no te complicas la vida.
Espero que te sirva, saludos
__________________
Fere libenter homines, id quod volunt, credunt.
  #5 (permalink)  
Antiguo 20/02/2012, 09:01
 
Fecha de Ingreso: agosto-2011
Mensajes: 165
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Sistemas de avisos

Dudas:

En mi tabla avisos que es mensajes para ti

nombre_user tengo varchar y el nombre
y en emisor y receptor tengo int 11 y tu TINYINT

Confirme como seria las tablas todas.

Tengo que crear tambien asi estas tablas:

CREATE TABLE `estado_emisor` (
emisor
estado_emisor
0=inbox(recibidos)
1=enviados
3=favoritos
4=eliminados
5=Borradas ( Cuando esta en eliminados lo paso a esta bandeja para que no se vea pero no se elimina)?????????

Esto valdria asi????????? y otra para estado_receptor??????

Para enviar mensajes: insertas UN registro donde:

EMISOR, el id del usuario en esta session
RECEPTOR....???????
ESTADO_EMISOR 2, cada vez que el usuario envia, se guarda en enviados
ESTADO_RECEPTOR 0, para el receptor, inicialmente el mensaje va a la bandeja de entrada

ASI???
emisor por el usuario_id
receptor por la variable de sesion MM_Username
estado_emisor seria 1
estado_receptor seria 0

Esto seria asi?????????

Y el codigo que tendria que cambiar???????

YO AHORA LO TENGO ASI:

emisor=nombre_user con el parametro tabla usuarios nombre_user
receptor=nombre por la variable de session MM_Username
emisor=estado_emisor 0
receptor=estado_receptor 0

Asi seria el upload en la pagina principal :

Upload de enviados
emisor=nombre_user parametro tabla usuarios nombre_user
receptor=nombre por la variable de session MM_Username
emisor=estado_emisor por el parametro aviso_id )
receptor=estado_receptor por el parametro usuario_id )
Tambien en recibidos,favoritos,eliminados

Espero entiendas lo que quiero explicarte si no fuera asi dimelo.

Última edición por yolanda16568; 20/02/2012 a las 10:57
  #6 (permalink)  
Antiguo 21/02/2012, 00:38
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Sistemas de avisos

nombre_user tengo varchar y el nombre
y en emisor y receptor tengo int 11 y tu TINYINT. Los campos de una tabla que referencian a otra tabla deben ser del mismo tipo y longitud.

Confirme como seria las tablas todas.

Tengo que crear tambien asi estas tablas:

CREATE TABLE `estado_emisor` ( Esta tabla en principio está de más, lo mismo que la siguiente. Si guardas los estados en la misma tabla de mensajes, estas dos tablas sólo generan información redundante.
emisor
estado_emisor
0=inbox(recibidos)
1=enviados
3=favoritos
4=eliminados
5=Borradas ( Cuando esta en eliminados lo paso a esta bandeja para que no se vea pero no se elimina)????????? Claro que no se elimina, si quieres que se elimine entonces tendrás que hacer un delete del registro. Estos estados no significan nada desde el punto de vista de programación, son sólo unos códigos para clasificar los mensajes, podrías usar cualquier código que signifique cualquier cosa.

Esto valdria asi????????? y otra para estado_receptor??????

Para enviar mensajes: insertas UN registro donde:

EMISOR, el id del usuario en esta session
RECEPTOR....???????
ESTADO_EMISOR 2, cada vez que el usuario envia, se guarda en enviados
ESTADO_RECEPTOR 0, para el receptor, inicialmente el mensaje va a la bandeja de entrada

ASI???
emisor por el usuario_id
receptor por la variable de sesion MM_Username
estado_emisor seria 1
estado_receptor seria 0 sesion MM_Username NO! NO guardas el NOMBRE sino el ID del usuario, NUNCA el nombre o cualquier otro atributo.

YO AHORA LO TENGO ASI:

emisor=nombre_user con el parametro tabla usuarios nombre_user Referencia por ID no por NOMBRE
receptor=nombre por la variable de session MM_Username Referencia por ID no por NOMBRE
emisor=estado_emisor 0
receptor=estado_receptor 0

Asi seria el upload en la pagina principal :

Upload de enviados
emisor=nombre_user parámetro tabla usuarios nombre_user Referencia por ID no por NOMBRE
receptor=nombre por la variable de session MM_Username Referencia por ID no por NOMBRE
emisor=estado_emisor por el parametro aviso_id )
receptor=estado_receptor por el parametro usuario_id )
Tambien en recibidos,favoritos,eliminados

Otras notas:
1. Parece que estás trabajando con Dreamweaver, te recomiendo que lo dejes y escribas tu propio código. El Código de Macromedia es difícil de mantener y de leer. Este sistema que quieres hacer es mucho más fácil si lo haces por tu cuenta.
2. Por lo que comentas no tienes mucha idea de MySQL ni diseño de base de datos. Si tu intención es aprender, deja lo que estás haciendo y lee un tutorial de MySQL. Todos los problemas que tienes son por falta de conocimientos de base de datos. Si no solucionas el problema del nombre de usuario / id de usuario AHORA, pronto tendrás que abandonar el proyecto y empezar otra vez, porque esto no va a funcionar.
3. No es posible responderte en detalle, los detalles de tu aplicación los tienes que conocer tú. El problema es que como trabajas con DW no puedes conocer el código.


Saludos,
__________________
Fere libenter homines, id quod volunt, credunt.
  #7 (permalink)  
Antiguo 21/02/2012, 06:12
 
Fecha de Ingreso: agosto-2011
Mensajes: 165
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Sistemas de avisos

Lo primero Gracias,
Me puedes confirmar esto por favor:
La tabla avisos esta clara y las otras dos serian:

Los campos de una tabla que referencian a otra tabla deben ser del mismo tipo y longitud.

estado_emisor
emisor int (11)
estado_emisor (varchar)
Insectados
0=Bandeja de entrada
1=enviados
2=eliminados
3=favoritos
Esta tabla y la de estado_receptor serian asi??????

Creo que es asi pero necesito tu confirmacion.


Para enviar mensajes: insertas UN registro donde:

EMISOR, el id del usuario en esta session( Esto seria de la tabla Usuarios nombre_user o de la tabla avisos nombre_user creo que de Usuarios
RECEPTOR,¿........................................ .................................................. .....?
ESTADO_EMISOR 2, cada vez que el usuario envia, se guarda en enviados
ESTADO_RECEPTOR 0, para el receptor, inicialmente el mensaje va a la bandeja de entrada

En el receptor no tienes nada?????????

Asi seria el upload en la pagina principal :

Upload de enviados
emisor=nombre_user parámetro tabla usuarios nombre_user Referencia por ID no por NOMBRE(cual)
receptor=nombre por la variable de session MM_Username Referencia por ID no por NOMBRE(cual)
emisor=estado_emisor por el parametro aviso_id ) ¿Esto es asi?
receptor=estado_receptor por el parametro usuario_id )¿Esto es asi?
Tambien en recibidos,favoritos,eliminados

Si por ID pero por cual ??? por aviso_id o por el usuario_id


Gracias y perdona por todo por lo ultimo que pones llevas razon en todo.
Pero entre Hipoteca,niños,Edad y Problemas diversos y aun sabiendo que no estoy Haciendo bien,
Necesito conseguir esto.

Un saludo y GRACIAS......................................
  #8 (permalink)  
Antiguo 21/02/2012, 06:45
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Sistemas de avisos

Esta tabla y la de estado_receptor serian asi?????? Si, pueden ser así. Para los estados yo haria una nueva tabla estados:
id_estado nombre
En las tablas de estado_emisor y estado_receptor no pones el nombre del estado sino el id del estado.



Para enviar mensajes: insertas UN registro donde:

EMISOR, el id del usuario en esta session( Esto seria de la tabla Usuarios nombre_user o de la tabla avisos nombre_user creo que de Usuarios NO, nunca el nombre, siempre el ID del usuario
RECEPTOR, es el que recibe el mensaje, equivale al campo FROM de un email. Como ya te comenté antes, "emisor" y "receptor" son conceptos muy confusos, de ahí que tengas tantos problemas para entenderlo.
ESTADO_EMISOR 2, cada vez que el usuario envia, se guarda en enviados. Es un ejemplo, pero por lo general, si mando un email, automaticamente se guarda en mi carpeta de enviados. Puede ser cualquier cosa que tu quieras.
ESTADO_RECEPTOR 0, para el receptor, inicialmente el mensaje va a la bandeja de entrada. Idem anterior.

En el receptor no tienes nada????????? Si vas a tener una tabla de mensajes y otras dos de estados, entonces, por cada mensaje que se envia has de tener un registro en la tabla estado_receptor y estado_emisor. No conozco los detalles de tu aplicación pero por cada mensaje, 3 inserts:
1 para el mensaje
1 en estado_emisor
1 en estado_receptor


Asi seria el upload en la pagina principal :

Upload de enviados
emisor=nombre_user parámetro tabla usuarios nombre_user Referencia por ID no por NOMBRE(cual)
receptor=nombre por la variable de session MM_Username Referencia por ID no por NOMBRE(cual)
emisor=estado_emisor por el parametro aviso_id ) ¿Esto es asi?
receptor=estado_receptor por el parametro usuario_id )¿Esto es asi?
Tambien en recibidos,favoritos,eliminados NO, nada de esto es así. Empieza de nuevo.
Tienes un sistema de mensajes. Cada mensaje es un registro que se guarda en una DB.
Para saber de quién son y a quién van los mensajes, en cada registro de mensaje guardas los id de usuario, de manera que en tu DB se ve algo así (por cada mensaje):
id_mensaje asunto cuerpo emisor receptor
4544354 Hola Mensaje de prueba 23 56
Para saber quienes son el 23 y el 56 lo tienes que guardar en la tabla de usuarios.
A su vez, en las tablas 'estado_receptor' y 'estado_emisor' guardas un registro en cada una, de manera:
id_mensaje id_estado
4544354 456
El id de mensaje lo obtienes de la tabla mensajes, el id_estado de la tabla estado.
FIJATE QUE TODO SE REFERENCIA POR ID, NUNCA POR OTRA COSA.

Las carpetas a que te refieres, enviados, eliminados, etc... se guardan en otra tabla que se puede llamar estados o carpetas. Si el emisor mueve el mensaje a la carpeta eliminados, entonces actualizas la tabla, en el mensaje 34324, el estado es X.

No sé si lo estás pillando, a ver si esta vez funciona. Saludos,
__________________
Fere libenter homines, id quod volunt, credunt.
  #9 (permalink)  
Antiguo 21/02/2012, 06:55
 
Fecha de Ingreso: agosto-2011
Mensajes: 165
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Sistemas de avisos

Voy a intentar conprender lo que me dices aunque no es facil
Cuando hablas de carpetas no lo entiendo muy bien
¿ Hay que crear una carpeta de windows que se llame X en mi Pc o estas refiriendote a
la base de datos????

Gracias por todo y te doy respuesta lo antes posible.

Te daria un beso pero no se como poner el codigo en PHP.
  #10 (permalink)  
Antiguo 21/02/2012, 07:03
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Sistemas de avisos

Nooo, nada de carpetas, después te mando un ejemplo.
__________________
Fere libenter homines, id quod volunt, credunt.
  #11 (permalink)  
Antiguo 21/02/2012, 07:30
 
Fecha de Ingreso: agosto-2011
Mensajes: 165
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Sistemas de avisos

Vale ya estan las 4 tablas necesarias
Tabla avisos

1 aviso_id int(10) UNSIGNED No Ninguna AUTO_INCREMENT
2 texto varchar(150) latin1_spanish_ci No Ninguna
3 asunto varchar(128) latin1_spanish_ci No Ninguna
4 emisor int(11)
5 receptor int(11)
6 estado_emisor tinyint(11)
7 estado_receptor tinyint(11)
8 fecha timestamp on update CURRENT_TIMESTAMP No CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

Tabla estado_emisor

estado_emisor tinyint(11)
estado_name varchar 30

Tabla estado_receptor

estado_receptor tinyint(11)
estado_name varchar 30

Esto campos insectados en las dos tablas estado_emisor y estado_receptor

0 Bandeja de entrada
1 Enviados
3 Favoritos
4 Eliminados
5 Borradas

Tabla estado:

id_estado tinyint(11) Esta seria asi????

Vale ahora tengo estas 6 paginas necesarias administrarperfiles.php aqui esta el 1 formulario el que envia el aviso.

Formulario de insectar registro a la tabla avisos

CAMPOS:
aviso_id
emisor
receptor
estado_emisor
estado_receptor

lUEGO despues de enviarlo lo recibo todo en la pagina acceso.php

Y ahi estarian los enlaces o upload

Despues tengo 4 paginas PHP enviados,recibidos,favoritos y eliminados .

( aqui deveria de estar el aviso pero despues tambien dos upload dirijidos

1. para enviar el aviso a favoritos y otro para mandar a eliminados con upload

estos upload tiene los campos de la tabla avisos:

aviso_id
emisor
receptor
estado_emisor
estado_receptor

Son necesarios todos estos campos o solo algunos???????

Bueno en la pagina de recibidos seria igual aunque alomejor los parametros sean diferentes.
en la pagina de favoritos solo habria el de eliminar y en la pagina de eliminados solo eliminar
me imagino que esto lo entiendas perfectamente.

Para que sepas como esta hecho.......

Tambien no se como quedaria el codigo

<?php
mysql_select_db('foros');
session_start();
$estado_emisor = isset($_GET['estado_emisor ']) ? $_GET['estado_emisor '] : 0;
$sql = "SELECT * FROM avisos A, estado_emisor E_A WHERE E_A.estado_emisor =A.estado_emisor AND E_A.estado_emisor = $estado_emisor AND A.nombre='" .
$res = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($res) < 1)
{
echo "no hay datos";
}
else
{
while($row=mysql_fetch_array($res))
{
echo $row[0];
}
}
?>
y otro para receptor igual pero cambiando los campos necesarios.

Última edición por yolanda16568; 21/02/2012 a las 10:48
  #12 (permalink)  
Antiguo 21/02/2012, 13:10
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Sistemas de avisos

Vamos a suponer para este ejemplo que estamos con un sistema de mensajería. Esencialmente un mail, un aviso o un
sms son la misma cosa. Tienen un emisor, un receptor y un texto.
En este caso concreto emularemos la funcionalidad de cualquier cliente de correo como Hotmail, Gmail, etc, a
saber:
Un usuario logeado en el sistema puede enviar y recibir mensajes.
Los mensajes se pueden mover a distintas carpetas o eliminar.
Los mensajes se pueden contestas o reenviar a un destinatario cualquiera.

NO vamos a entrar en temas de diseño, objetos, patrones, etc... esta es la versiń más básica posible.

Según lo anterior, necesitamos:
0. Una tabla usuarios para identificarlos en el sistema, caso contrario no se podrían identificar los mensajes.
Es decir, necesito saber quién envía y quién recibe, si no, no tengo sistema de mensajes ni nada.Esta tabla se puede extender para agregar más atributos según sea necesario, para este ejemplo es suficiente.
1. Tabla para los mensajes, que llamaremos 'messages':
Nótese que los campos emisor y receptor hacen referencia a los id de usuario de la tabla 'users'.
De todos los campos, reuiqere especial atención el campo owner. Este campo indica el propietario del mensaje, para comprender este tema hay que pensar en el envio de un mail:

Usuario A envía a usuario Z un email.
Usuario Z recibe el email en su Bandeja de entrada.
Usuario A guarda una copia de ese mensaje en la carpeta 'Enviados'.
Por tanto, tenemos DOS MENSAJES. Como existen dos registros distintos y separados cada usuario puede hacer con el mensaje lo que quiera sin afectar a los otros.
Si por el contrario guardamos sólo una copia del mensaje, entonces si Usuario A lo borra o lo mueve a la carpeta 'Importantes', entonces usuario Z no encontraría el mensaje.
De aquí la necesidad de tener siempre DOS mensajes, o sea, DOS registros de mensaje.
Este enfoque evita la necesidad de más tablas.

2. Una tabla de carpetas. Esta tabla tiene la unica finalidad de guardar nombres de carpetas, de esta manera puedo referenciar las carpetas por id y no por nombre que no tiene sentido. Nótese que una 'carpeta' al estilo Hotmail (bandeja de entrada, eliminados, etc) funciona de la misma manera que un 'estado' o 'atributo' de un mensaje. Es decir que es simplemente un dato para clasificar el elemento mensaje.

De esta forma, la DB quedaría así:

Código MySQL:
Ver original
  1. CREATE DATABASE /*!32312 IF NOT EXISTS*/`mensajes` /*!40100 DEFAULT CHARACTER SET latin1 */;
  2.  
  3. USE `mensajes`;
  4.  
  5. /*Table structure for table `folders` */
  6.  
  7. DROP TABLE IF EXISTS `folders`;
  8.  
  9. CREATE TABLE `folders` (
  10.   `id` INT(11) NOT NULL AUTO_INCREMENT,
  11.   `name` VARCHAR(64) DEFAULT NULL COMMENT 'Nombre',
  12.   PRIMARY KEY (`id`)
  13.  
  14. /*Data for the table `folders` */
  15.  
  16. INSERT  INTO `folders`(`id`,`name`) VALUES (1,'Entrada'),(2,'Personales'),(3,'Trabajo'),(4,'Importantes');
  17.  
  18. /*Table structure for table `messages` */
  19.  
  20. DROP TABLE IF EXISTS `messages`;
  21.  
  22. CREATE TABLE `messages` (
  23.   `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Id unico',
  24.   `subject` varchar(128) DEFAULT NULL COMMENT 'Asunto',
  25.   `body` text COMMENT 'Cuerpo del mensaje',
  26.   `to` int(11) DEFAULT NULL COMMENT 'emisor, id de usuario',
  27.   `from` int(11) DEFAULT NULL COMMENT 'receptor, id de usuario',
  28.   `sended_on` datetime DEFAULT NULL COMMENT 'fecha de envio',
  29.   `read` tinyint(1) DEFAULT NULL COMMENT '1 si el mensaje fue leido por el destinatario, 0 caso contrario',
  30.   `folder_id` int(11) DEFAULT NULL COMMENT 'La carpeta donde se encuentra el mensaje',
  31.   `owner` int(11) DEFAULT NULL COMMENT 'Propietario del mensaje',
  32.   PRIMARY KEY (`id`),
  33.   KEY `FK_messages_from` (`from`),
  34.   KEY `FK_messages_to` (`to`),
  35.   KEY `FK_messages` (`folder_id`),
  36.   KEY `FK_messages_owner` (`owner`),
  37.   CONSTRAINT `FK_messages_owner` FOREIGN KEY (`owner`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  38.   CONSTRAINT `FK_messages` FOREIGN KEY (`folder_id`) REFERENCES `folders` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  39.   CONSTRAINT `FK_messages_from` FOREIGN KEY (`from`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  40.   CONSTRAINT `FK_messages_to` FOREIGN KEY (`to`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
  41.  
  42. /*Data for the table `messages` */
  43.  
  44. /*Table structure for table `users` */
  45.  
  46. DROP TABLE IF EXISTS `users`;
  47.  
  48. CREATE TABLE `users` (
  49.   `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Id unico',
  50.   `login` char(8) DEFAULT NULL COMMENT 'el nombre de usuario en el sistema',
  51.   `name` varchar(64) DEFAULT NULL COMMENT 'nombre real',
  52.   `surname` varchar(64) DEFAULT NULL COMMENT 'apellido',
  53.   `password` char(8) DEFAULT NULL COMMENT 'password',
  54.   PRIMARY KEY (`id`)
  55.  
  56. /*Data for the table `users` */
  57.  
  58. insert  into `users`(`id`,`login`,`name`,`surname`,`password`) values (1,'user_a','Jose','Josete','12345687'),(2,'user_b','Pepe','Parada','12345678'),(3,'user_c','Carlos','Carlongo','12345678');
  59.  
  60. /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
  61. /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
  62. /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
  63. /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;


Según lo dicho, las funciones mínimas que nos hacen falta son:

enviarMensaje($from, $to, $subject, $body) //envia un mensaje de from a to
eliminarMensaje($mensaje) //Elimina mensaje del buzón
moverMensaje($mensaje, $carpeta) //Mueve el mensaje a la carpeta indicada
listarCarpeta($carpeta, $usuario) //muestra la carpeta del usuario indicado

Otras funciones:
login($user, $password) //acceso a la app
listarCarpetas() //Devuelve todas las carpetas para un usuario

//extender aquí tanto como sea necesario

Los archivos que se necesitan para este ejemplo son
db.php //archivo con la info de conexión a la base de datos
funciones.php //Las funciones antes listadas
index.php //El archivo principal
login.php //Archivo de login
enviar.php //Archivo con el formulario de envio de un mensaje

Todo el código completo está aqui.
Tarea para el hogar:
0. configurar el archivo db.php antes de usarlo y comprobar todo el código
1. terminar la aplicación.
2. estudiar co*o!!!
3. no me vengas con mensajes de error ni tonterías, el código funciona

Mañana no creo que me conecte pero si tienes algo postea, saludos
__________________
Fere libenter homines, id quod volunt, credunt.
  #13 (permalink)  
Antiguo 22/02/2012, 02:57
 
Fecha de Ingreso: agosto-2011
Mensajes: 165
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Sistemas de avisos

Muy bueno

Tengo problemas te comento una cosa:

El codigo funciona

Como veras en lo que, te he mandado.
tiene un Control de Usuarios
admin,premium,user

Agregar a lo mio lo tuyo se puede.
Y al reves?????

Última edición por yolanda16568; 22/02/2012 a las 13:52
  #14 (permalink)  
Antiguo 23/02/2012, 01:18
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Sistemas de avisos

En el ejemplo que te mandé tienes una tabla usuarios que puedes extender sin problemas.
La solcuißon correcta siguiendo con el mismo modelo sería:
1. Agregar una tabla TIPO DE USUARIOs o similar, algo como:
id nombre
1 Admin
2 Premium
3 Normal
4 Otro

2. En la tabla usuarios, agregas un campo que puede ser, por ejemplo, tipo_id y que hace referencia al ID DE TIPO DE USUARIO de la tabla tipo de usuarios. Así, la tabla usuarios quedaría así:

CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Id unico',
`login` char(8) DEFAULT NULL COMMENT 'el nombre de usuario en el sistema',
`name` varchar(64) DEFAULT NULL COMMENT 'nombre real',
`surname` varchar(64) DEFAULT NULL COMMENT 'apellido',
`password` char(8) DEFAULT NULL COMMENT 'password',
`tipo` int(11) DEFAULT NULL COMMENT 'Tipo de usuario',
PRIMARY KEY (`id`),
KEY `FK_users_tipo` (`tipo`),
CONSTRAINT `FK_users_tipo` FOREIGN KEY (`tipo`) REFERENCES `tipo_usuarios` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1


La DB completa quedará así:

Código MySQL:
Ver original
  1. CREATE DATABASE /*!32312 IF NOT EXISTS*/`mensajes` /*!40100 DEFAULT CHARACTER SET latin1 */;
  2.  
  3. USE `mensajes`;
  4.  
  5. /*Table structure for table `folders` */
  6.  
  7. DROP TABLE IF EXISTS `folders`;
  8.  
  9. CREATE TABLE `folders` (
  10.   `id` INT(11) NOT NULL AUTO_INCREMENT,
  11.   `name` VARCHAR(64) DEFAULT NULL COMMENT 'Nombre',
  12.   PRIMARY KEY (`id`)
  13.  
  14. /*Data for the table `folders` */
  15.  
  16. INSERT  INTO `folders`(`id`,`name`) VALUES (1,'Entrada'),(2,'Enviados'),(3,'Trabajo'),(4,'Importantes');
  17.  
  18. /*Table structure for table `messages` */
  19.  
  20. DROP TABLE IF EXISTS `messages`;
  21.  
  22. CREATE TABLE `messages` (
  23.   `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'Id unico',
  24.   `subject` VARCHAR(128) DEFAULT NULL COMMENT 'Asunto',
  25.   `body` TEXT COMMENT 'Cuerpo del mensaje',
  26.   `to` INT(11) DEFAULT NULL COMMENT 'emisor, id de usuario',
  27.   `from` INT(11) DEFAULT NULL COMMENT 'receptor, id de usuario',
  28.   `sended_on` DATETIME DEFAULT NULL COMMENT 'fecha de envio',
  29.   `read` TINYINT(1) DEFAULT NULL COMMENT '1 si el mensaje fue leido por el destinatario, 0 caso contrario',
  30.   `folder_id` INT(11) DEFAULT NULL COMMENT 'La carpeta donde se encuentra el mensaje',
  31.   `owner` INT(11) DEFAULT NULL COMMENT 'Propietario del mensaje',
  32.   PRIMARY KEY (`id`),
  33.   KEY `FK_messages_from` (`from`),
  34.   KEY `FK_messages_to` (`to`),
  35.   KEY `FK_messages` (`folder_id`),
  36.   KEY `FK_messages_owner` (`owner`),
  37.   CONSTRAINT `FK_messages` FOREIGN KEY (`folder_id`) REFERENCES `folders` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  38.   CONSTRAINT `FK_messages_from` FOREIGN KEY (`from`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  39.   CONSTRAINT `FK_messages_owner` FOREIGN KEY (`owner`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  40.   CONSTRAINT `FK_messages_to` FOREIGN KEY (`to`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
  41.  
  42. /*Data for the table `messages` */
  43.  
  44. INSERT  INTO `messages`(`id`,`subject`,`body`,`to`,`from`,`sended_on`,`read`,`folder_id`,`owner`) VALUES (1,'loco','Loco dsf adsf asdfdsafdsaf',1,2,'0000-00-00 00:00:00',0,1,1);
  45.  
  46. /*Table structure for table `tipo_usuarios` */
  47.  
  48. DROP TABLE IF EXISTS `tipo_usuarios`;
  49.  
  50. CREATE TABLE `tipo_usuarios` (
  51.   `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'UNique id',
  52.   `nombre` VARCHAR(32) DEFAULT NULL COMMENT 'descripcion',
  53.   PRIMARY KEY (`id`),
  54.   CONSTRAINT `FK_tipo_usuarios` FOREIGN KEY (`id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
  55.  
  56. /*Data for the table `tipo_usuarios` */
  57.  
  58. INSERT  INTO `tipo_usuarios`(`id`,`nombre`) VALUES (1,'Admin'),(2,'Normal'),(3,'Premium');
  59.  
  60. /*Table structure for table `users` */
  61.  
  62. DROP TABLE IF EXISTS `users`;
  63.  
  64. CREATE TABLE `users` (
  65.   `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'Id unico',
  66.   `login` CHAR(8) DEFAULT NULL COMMENT 'el nombre de usuario en el sistema',
  67.   `name` VARCHAR(64) DEFAULT NULL COMMENT 'nombre real',
  68.   `surname` VARCHAR(64) DEFAULT NULL COMMENT 'apellido',
  69.   `password` CHAR(8) DEFAULT NULL COMMENT 'password',
  70.   `tipo` INT(11) DEFAULT NULL COMMENT 'Tipo de usuario',
  71.   PRIMARY KEY (`id`),
  72.   KEY `FK_users_tipo` (`tipo`),
  73.   CONSTRAINT `FK_users_tipo` FOREIGN KEY (`tipo`) REFERENCES `tipo_usuarios` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
  74.  
  75. /*Data for the table `users` */
  76.  
  77. INSERT  INTO `users`(`id`,`login`,`name`,`surname`,`password`,`tipo`) VALUES (1,'user_a','Jose','Josete','12345678',1),(2,'user_b','Pepe','Parada','12345678',2),(3,'user_c','Carlos','Carlongo','12345678',3);

Para obtener los datos del usuario Y el tipo de usuario, utilizas esto:

Código MySQL:
Ver original
  1. SELECT U.*, T.nombre FROM users U LEFT JOIN tipo_usuarios T ON (U.tipo = T.id)

Saludos,
__________________
Fere libenter homines, id quod volunt, credunt.
  #15 (permalink)  
Antiguo 23/02/2012, 09:08
 
Fecha de Ingreso: agosto-2011
Mensajes: 165
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Sistemas de avisos

Loca, me estoy volviendo loca.
Eh conseguido meter un nuevo usuario en lo tuyo.
he logrado que segun el usuario que entre tenga su foto
el control de usuarios intento pero no fun.
creo un campo enum('Administrador', 'Usuario', 'Premium')
Desde la paguina de login intento hacer con dreamweaver.
con comportamiento de servidor de conectar usuario
si todo va bien entraria en index y algo va mal en error.php pero no funciona.


Mis necesidades.
Yo quiero un foro con sistemas de mensajes
no se si recogistes los ficheros que te deje, dime algo.
Oh si tuvieses en ver de lo que me mandastes, uno un poco superior con mas cosas.
Que tenga foro, avatar, sistema de mensajes y un control de Usuarios.

Dime algo, Un saludo.

Última edición por yolanda16568; 23/02/2012 a las 12:47
  #16 (permalink)  
Antiguo 24/02/2012, 00:35
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Sistemas de avisos

Hola Yolanda, no, no he recibido ningún archivo.
Respecto de tu problema, no sé cómo funciona Dreamweaver y hasta donde recuerdo es bastante malo. Todas esas funciones de conexión a DB, consultas, etc, son una basura, sólo te darán problemas.
Si no logras hacer nada que funcione, entonces te recomiendo que te descargues un software de foros como phpbb o phpnuke que son muy fáciles de instalar y tienen todas las funciones que necesitas.
__________________
Fere libenter homines, id quod volunt, credunt.
  #17 (permalink)  
Antiguo 24/02/2012, 04:23
 
Fecha de Ingreso: agosto-2011
Mensajes: 165
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Sistemas de avisos

Mira aqui el codigo este foro_mensajes
http://www.parlacomputer.es/usuarios/descargas.php
Tengo problemas para hacer el control de usuarios no he utilizado tu ultima tabla esta con lo mio.
En los avisos cuando envio todo bien pero no me dice a quien se lo envio
Cuando recibo todo bien pero necesitaria los datos del que envia su avatar y perfil.
En los mensajes sale el asunto pero no todo el mensaje
tambien quiero su avatar.

El foro en lo mio me funciona pero en lo tuyo tengo un fantasma esplico
en la index me salen las categorias por cierto es igual que tu haces las carpetas
me sale con un codigo el total de publicaciones el ultimo post.
todo bien con ese mismo codigo en la pagina categorias.php y solo teniendo que cambiar
la tabla de la base de datos que daria los temas pues no va, no puedo terminarlo

Mira asi yo le pongo que solo lo vean los admin y me funciona en el tuyo no va.

<?php
if($_SESSION['MM_UserGroup']=="admin"){
?> Aqui dentro solo lo veria el administrador
<?php
}
?>

Dime lo antes posible que lo has recibido y quito el enlace por favor o quitalo Tú.

Un saludo y mil Gracias.....................

Última edición por yolanda16568; 24/02/2012 a las 04:31
  #18 (permalink)  
Antiguo 24/02/2012, 05:59
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Sistemas de avisos

Aquí tienes el código actualizado.

Comentarios:

1. Te has cargado todo el tema sessiones al pegar código Dreamweaver. Si agregas código, tienes que ser DESPUES del código que ya tienes.
2. En los avisos cuando envio todo bien pero no me dice a quien se lo envio. //Cuándo y dónde tiene que "decirlo"?? Te refieres a que quieres un desplegable con los nombres??
3. Cuando recibo todo bien pero necesitaría los datos del que envía su avatar y perfil.//Las selects están mal, además hay codigo basura por todas partes. Hecho
4.En los mensajes sale el asunto pero no todo el mensaje también quiero su avatar. //Idem anterior
5. El foro en lo mio me funciona pero en lo tuyo tengo un fantasma esplico: en la index me salen las categorias por cierto es igual que tu haces las carpetas me sale con un codigo el total de publicaciones el ultimo post. todo bien con ese mismo codigo en la pagina categorias.php y solo teniendo que cambiar la tabla de la base de datos que daria los temas pues no va, no puedo terminarlo. //Supongo que te refieres a que quieres una página para administrar las categorias. -> Agregado un link en el extremo superior izquierdo "Agregar categoria" P.D.: tú si que eres un fantasma...
6. Mira asi yo le pongo que solo lo vean los admin y me funciona en el tuyo no va.

Código PHP:
Ver original
  1. <?php
  2. if($_SESSION['MM_UserGroup']=="admin"){
  3. ?> Aqui dentro solo lo veria el administrador
  4. <?php
  5. }
  6. ?>

Esto no puede funcionar porque la variable $_SESSION['MM_UserGroup'] no existe. Con los cambios que hice, esto quedaria:

Código PHP:
Ver original
  1. <?php
  2. if($_SESSION['nombre']=="admin"){ //Esta es la variable que contiene el tipo de usuario. Te has cargado todo el sistema de sessiones al pegar el código de MM
  3. ?> Aqui dentro solo lo veria el administrador
  4. <?php
  5. }
  6. ?>

7. Dime lo antes posible que lo has recibido y quito el enlace por favor o quitalo Tú. //Puedes quitarlo
8. Un saludo y mil Gracias..................... //Saludo y mil de nadas
__________________
Fere libenter homines, id quod volunt, credunt.
  #19 (permalink)  
Antiguo 24/02/2012, 07:57
 
Fecha de Ingreso: agosto-2011
Mensajes: 165
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Sistemas de avisos

En la pagina index he puesto las dos fotos y me da los dos usuarios.

<?php echo obtenerNombreUsuario($con, $men['from'])?>
<?php echo obtenerNombreUsuario($con, $men['to'])?>

Con este codigo me da la foto del usuario que entra en session.
!!!!!!!Quiero que en bandeja de entrada me de los dos nombres y las dos fotos!!!!!!!!!!!

1.<div align="center">
<div align="center"><span class="izq">
<input type="hidden" name="id" value="<?php echo $men['id']?>" />
<img src="imagen/<?php echo $_SESSION['imagen']?>" alt="" width="75" height="65" border="0" /></span><br />
<?php echo obtenerNombreUsuario($con, $men['from'])?><br />
</div>

2.<div align="center"><strong><span class="izq">
<img src="imagen/<?php echo $_SESSION['imagen']?>" alt="" width="75" height="65" border="0" /></span><br />
<?php echo obtenerNombreUsuario($con, $men['to'])?><br />
</strong></div>
</div>


Sobre lo del admin.
<?php
if($_SESSION['nombre']=="admin"){
?> Aqui dentro solo lo veria el administrador
<?php
}
?>
Me da este error:¿Sabes Porque?
Notice: Undefined index: nombre in C:\xampp\htdocs\mm\index.php on line 251

Tengo problemas con lo del admin aunque ya me sale, cuando entras el tipo si es 1,2,3
pero en el foro quisiera que no se vea insectar categoria ni editar solo lo veria el admin(1)
Necesito en cada pagina diferenciar si algo lo ve solo admin o admin y premium, el normal no veria muchas cosas
en la pagina index como veras hay dos fotos en los messages he sacado los dos usuarios
pero necesito que las fotos vayas cambiando segun usuarios.
El avatar se llama Imagen es importante que quede asi en la base de datos NO HE QUITADO
el avatar pero es como si no estuviese tiene que ser imagen que tambien esta en la base de datos
Me salen los dos nombre del que envia y el que recibe quiero que valla a perfil.php ya hecha vaya al perfil de cada usuario
Tampoco me sale la fecha en el foro me sale perfectamente no se porque en lo de mensajes no sale, echale un vistazo me queda poco porfa ayudame a terminarlo.
dime si voy bien.
Un saludo y de Verdad Gracias por compartir tus conocimientos

Última edición por yolanda16568; 28/02/2012 a las 04:18
  #20 (permalink)  
Antiguo 28/02/2012, 16:54
 
Fecha de Ingreso: agosto-2011
Mensajes: 165
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Sistemas de avisos

El problema del admin esta Corregido y funciona
<?php
if($_SESSION['tipo']=="1"){
?>
<?php
}
?>

Última edición por yolanda16568; 01/03/2012 a las 05:32
  #21 (permalink)  
Antiguo 05/03/2012, 07:27
 
Fecha de Ingreso: agosto-2011
Mensajes: 165
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Sistemas de avisos

Tengo problemas con las imagen de emisor y receptor no salen con deverian salir.
No consigo lo de la fecha en la parte del foro si me funciona pero en la parte de los mensajes no.

De: <div align="center"><span class="izq"><img src="imagen/<?php echo $_SESSION['imagen']?>" alt="" width="74" height="64" /></span><br />
<?php echo obtenerNombreUsuario($con, $men['from'])?>
<input type="hidden" name="id" value="<?php echo $men['id']?>" />
</div>


Para: <div align="center"><span class="izq"><img src="imagen/<?php echo $_SESSION['imagen']?>
"alt="" width="74" height="64" /></span><br />
<?php echo obtenerNombreUsuario($con, $men['to'])?><br />
</div>



Este es el codigo de index que esta puesto sobre las imagenes

Última edición por yolanda16568; 05/03/2012 a las 09:57
  #22 (permalink)  
Antiguo 06/03/2012, 00:47
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Sistemas de avisos

Este código no puede funcionar porque las variables no tienen una referencia a una imagen, en tu archivo funciones.php agrega lo siguiente:

Código PHP:
Ver original
  1. function obtenerAvatarUsuario($con, $user_id){
  2.     $sql = "SELECT U.avatar FROM users U WHERE U.id = '$user_id';";
  3.     $query = mysql_query($sql, $con);
  4.     $fetch = mysql_fetch_assoc($query);
  5.     return $fetch['avatar '];
  6. }

entonces el código queda así:

Código PHP:
Ver original
  1. De: <div align="center"><span class="izq"><img src="imagen/<?php echo obtenerAvatarUsuario($con, $men['from']); ?>" alt="" width="74" height="64" /></span><br />
  2. <?php echo obtenerNombreUsuario($con, $men['from'])?>
  3. <input type="hidden" name="id" value="<?php echo $men['id']?>" />
  4. </div>
  5.  
  6.  
  7. Para: <div align="center"><span class="izq"><img src="imagen/<?php echo obtenerAvatarUsuario($con, $men['to']); ?>" width="74" height="64" /></span><br />
  8. <?php echo obtenerNombreUsuario($con, $men['to'])?><br />
  9. </div>

Saludos
__________________
Fere libenter homines, id quod volunt, credunt.
  #23 (permalink)  
Antiguo 06/03/2012, 10:10
 
Fecha de Ingreso: agosto-2011
Mensajes: 165
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Sistemas de avisos

Funciona muchas graciassssssssssssssssssssssssss


Pero tengo problemas con la fecha en la base de datos eh puesto TIMESTAMP
en el foro asi me funciona,pero no en los mensajes,
Creo que en la pagina de envia no sube la Fecha, campo sended_on
dime si quito TIMESTAMP y si tengo que cambiar algo mas.

Esto debe de ser una Tonteria pero no doy:

Mira ahora me salen todo bien pero quiero diriguir estos nombre a sus perfiles
Si entro como Yolanda a Yolanda le paso el de (puesto abajo) bien y al otro osea Mario para que pase
Mario a su Perfil.

Yolanda<?php echo $_SESSION['name']?>
Mario ¿................................................. .?


Gracias Muchas Gracias por compartir tus conocimientos.

Última edición por yolanda16568; 06/03/2012 a las 12:55
  #24 (permalink)  
Antiguo 07/03/2012, 07:15
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Sistemas de avisos

Pero tengo problemas con la fecha en la base de datos eh puesto TIMESTAMP
en el foro asi me funciona,pero no en los mensajes,
Creo que en la pagina de envia no sube la Fecha, campo sended_on
dime si quito TIMESTAMP y si tengo que cambiar algo mas.

Me parece que hay un error en la select que inserta los mensajes, la palabra NOW() debe estar sin comillas (en la función enviar mensaje):
Código PHP:
Ver original
  1. //Para el destinatario
  2.     $sql = "insert into `messages`
  3.     (`subject`,`body`,`to`,`from`,`sended_on`,`read`,`folder_id`,`owner`)
  4.     values
  5.     ('$subject','$body','$to','{$_SESSION['id']}',NOW(),'0','1','$to')";
  6.     if(!$query = mysql_query($sql, $con)) return false;
  7.     //Para el remitente
  8.     $sql = "insert into `messages`
  9.     (`subject`,`body`,`to`,`from`,`sended_on`,`read`,`folder_id`,`owner`)
  10.     values
  11.     ('$subject','$body','$to','{$_SESSION['id']}',NOW(),'0','2','{$_SESSION['id']}')";
Este campo, sended_on, NO es timestamp es datetime, o sea, fecha y hora.


Mira ahora me salen todo bien pero quiero diriguir estos nombre a sus perfiles
Si entro como Yolanda a Yolanda le paso el de (puesto abajo) bien y al otro osea Mario para que pase
Mario a su Perfil.
Primero necesitas un archivo que muestre el perfil del usuario, digamos, perfil.php:
Código PHP:
Ver original
  1. <?php
  2.  
  3. if(!isset($_GET['user_id'])) die("No se ha especificado un id de usuario....");
  4. if(!isset($_SESSION['session_name']) || $_SESSION['session_name'] != md5('demo'))
  5. {
  6.     header('Location: login.php');
  7.     exit();
  8. }
  9. //El usuario quiere enviar un mensaje;
  10. include_once 'funciones.php';
  11. $con = conectaDB(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
  12. //Esto pásalo al archivo funciones.php
  13. function obtenerPerfilUsuario($con, $user_id){
  14.     $sql = "SELECT U.* FROM users U WHERE U.id = '$user_id';";
  15.     $query = mysql_query($sql, $con);
  16.     $fetch = mysql_fetch_assoc($query);
  17.     return $fetch;
  18. }
  19.  
  20. $perfil = obtenerPerfilUsuario($con, $_GET['user_id']);
  21. //Pon estos datos en html con tablas, etc. etc...
  22. print_r($perfil);
  23.  
  24. ?>
El link para acceder al perfil de un usuario sería:
Código PHP:
Ver original
  1. <a href="perfil.php?user_id='EL_ID_DE_USUARIO_DE_YOLANDA'">Yolanda</a>
  2. <a href="perfil.php?user_id='EL_ID_DE_USUARIO_DE_PEPE'">Pepe</a>
  3. <a href="perfil.php?user_id='EL_ID_DE_USUARIO_DE_PUPI'">Pupi</a>


Gracias Muchas Gracias por compartir tus conocimientos. De nada muchas de nadas.
__________________
Fere libenter homines, id quod volunt, credunt.
  #25 (permalink)  
Antiguo 07/03/2012, 13:00
 
Fecha de Ingreso: agosto-2011
Mensajes: 165
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Sistemas de avisos

Funciona la fecha vamos dia y fecha Graciassssss

Pero no doy con lo de perfil te comento:
esto esta en index me sale las fotos y los nombres de esos nombres de ve
salir el parametro del nombre o del id de cada usuario osea cuando paso el puntero me diria el id del usuario
pero me da el id del menssages


Código PHP:
Ver original
  1. <div align="center"><a href="perfil.php?id=<?php echo $row_usuarios['id']; ?>"><span class="centro1"> <br />
  2.             <span class="izq2"><img src="imagen/<?php echo obtenerimagenUsuario($con, $men['from']); ?>" alt="" width="74" height="64" border="1" /></span><br />
  3.       <?php echo obtenerNombreUsuario($con, $men['from'])?>
  4.       <input type="hidden" name="id2" value="<?php echo $men['id']?>" />
  5.       </span><br />
  6.     </a></div></td>
  7.     <td><div align="center"><a href="perfil.php?id=<?php echo $row_usuarios['id']; ?>"><br />
  8.           <span class="izq2"><img src="imagen/<?php echo obtenerimagenUsuario($con, $men['to']); ?>" alt="" width="74" height="64" border="1" class="centro1" /></span> <br />
  9.       <input type="hidden" name="id" value="<?php echo $men['id']?>" />
  10.       <span class="centro1"><?php echo obtenerNombreUsuario($con, $men['to'])?></span></a></div>

En la pagina de perfil esta asi


Última edición por yolanda16568; 07/03/2012 a las 13:08
  #26 (permalink)  
Antiguo 07/03/2012, 13:09
 
Fecha de Ingreso: agosto-2011
Mensajes: 165
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Sistemas de avisos

Estoy intentando poner los codigos como tú, pero no se si esta bien.
Esta seria la pagina de perfil.php el codigo PHP y una tabla
para ver el nombre del usuario vamos su perfil.

Código PHP:
Ver original
  1. <?php require_once('Connections/mensajes.php'); ?>
  2. <?php
  3. if (!isset($_SESSION)) {
  4. }
  5. ?>
  6. <?php
  7.  
  8. if(!isset($_GET['user_id'])) die("No se ha especificado un id de usuario....");
  9. if(!isset($_SESSION['session_name']) || $_SESSION['session_name'] != md5('demo'))
  10. {
  11.     header('Location: login.php');
  12.     exit();
  13. }
  14. //El usuario quiere enviar un mensaje;
  15. include_once 'funciones.php';
  16. $con = conectaDB(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
  17. //Esto pásalo al archivo funciones.php
  18. function obtenerPerfilUsuario($con, $user_id){
  19.     $sql = "SELECT U.* FROM users U WHERE U.id = '$user_id';";
  20.     $query = mysql_query($sql, $con);
  21.     $fetch = mysql_fetch_assoc($query);
  22.     return $fetch;
  23. }
  24.  
  25. $perfil = obtenerPerfilUsuario($con, $_GET['user_id']);
  26. //Pon estos datos en html con tablas, etc. etc...
  27. print_r($perfil);
  28.  
  29. ?>[HIGHLIGHT="HTML"]
  30. <table width="206" border="1" align="center" class="negrita">
  31.   <tr>
  32.     <td colspan="2"> Usuario : <?php echo $_SESSION['name']?></td>
  33.   </tr>
  34.   <tr>
  35.     <td width="64">Apellidos</td>
  36.     <td width="130"><?php echo $_SESSION['surname']?></td>
  37.   </tr>
  38.   <tr>
  39.     <td>Tipo: </td>
  40.     <td><?php echo $_SESSION['tipo']?></td>
  41.   </tr>
  42.   <tr>
  43.     <td colspan="2"><a href="<?php echo $_SERVER['PHP_SELF']?>?salir">SALIR</a> <a href="lista_usuarios.php">
  44.       <?php
  45. if($_SESSION['tipo']=="1"){
  46. ?>
  47.       Lista de Usuarios</a>
  48.       <?php
  49. }
  50. ?></td>
  51.   </tr>
  52. </table>

[/HIGHLIGHT]

Última edición por yolanda16568; 07/03/2012 a las 13:15
  #27 (permalink)  
Antiguo 08/03/2012, 00:19
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Sistemas de avisos

Noooo.... en el archivo que te pasé, el perfil del usuario se guarda en la variable $perfil.
Por tanto, no sirve de nada que uses $_SESSION. A partir de la línea

Código PHP:
Ver original
  1. $perfil = obtenerPerfilUsuario($con, $_GET['user_id']);

en cada lugar donde tienes:
Código PHP:
Ver original
  1. $_SESSION['algo']

debe ser

Código PHP:
Ver original
  1. $_perfil['algo']

También elimina la linea print_r($perfil);
Saludos
__________________
Fere libenter homines, id quod volunt, credunt.
  #28 (permalink)  
Antiguo 08/03/2012, 03:38
 
Fecha de Ingreso: agosto-2011
Mensajes: 165
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Sistemas de avisos

Perdona lo torpe que soy, pero no te sé interpretar lo que quieres decirme.

Te comento como esta ahora mismo esta pagina index.php y lo que quiero.
En la pagina index.PHP entrando como yolanda en la bandeja de entrada.
Supongamos que me mandan un mensaje y me sale el nombre de quien me lo envia Repara2 y el mio propio Yolanda

asi:

Código PHP:
Ver original
  1. <div align="center"><span class="centro1"> <br />
  2. <span class="izq2"><img src="imagen/<?php echo obtenerimagenUsuario($con, $men['from']); ?>" alt="" width="74" height="64" border="1" /></span><br />
  3. <?php echo obtenerNombreUsuario($con, $men['from'])?>
  4. <input type="hidden" name="id" value="<?php echo $men['id']?>" />
  5. </span><br />
  6. </div></td>
  7. <td><div align="center"><br />
  8. <span class="izq2"><img src="imagen/<?php echo obtenerimagenUsuario($con, $men['to']); ?>" alt="" width="74" height="64" border="1" class="centro1" /></span> <br />
  9. <input type="hidden" name="id" value="<?php echo $men['id']?>" />
  10. <span class="centro1"><?php echo obtenerNombreUsuario($con, $men['to'])?></span></div>

Saldrian dos nombre :

Repara2 Yolanda quiero coger a cada uno y vincularlo con su perfil repara2 seria el que me lo envio y yolanda seria el usuario que recibio
en la casilla vinculo de dreamweaver donde le digo que usuario es y a que pagina quiero que valla.
tengo que poner algo como esto.

perfil.php=?

esta seria la vinculacion de este usuario y a esta pagina.

Despues tengo la pagina perfil.php

Asi (Pagina completa):

Código PHP:
Ver original
  1. <?php require_once('Connections/mensajes.php'); ?>
  2. <?php
  3. if (!isset($_SESSION)) {
  4. }
  5. ?>
  6. <?php  
  7. if(!isset($_GET['user_id'])) die("No se ha especificado un id de usuario....");
  8. if(!isset($_SESSION['session_name']) || $_SESSION['session_name'] != md5('demo'))
  9. {
  10.     header('Location: login.php');
  11.     exit();
  12. }
  13.  
  14. include_once 'funciones.php';
  15. $con = conectaDB(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
  16.  
  17. function obtenerPerfilUsuario($con, $user_id){
  18.     $sql = "SELECT U.* FROM users U WHERE U.id = '$user_id';";
  19.     $query = mysql_query($sql, $con);
  20.     $fetch = mysql_fetch_assoc($query);
  21.     return $fetch;
  22. }
  23.  
  24. $perfil = obtenerPerfilUsuario($con, $_GET['user_id']);
  25. ?>
  26. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  27. <html xmlns="http://www.w3.org/1999/xhtml">
  28. <head>
  29. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  30. <title>Buz&oacute;n de <?php echo $_SESSION['name'] ?> <?php echo $_SESSION['surname']?></title>
  31. <link href="tables.css" rel="stylesheet" type="text/css" />
  32. <style type="text/css">
  33. body {
  34.     background-image: url();
  35.     text-align: center;
  36.     background-color: #D3E4E5;
  37. }
  38. .izq {
  39.     text-align: center;
  40. }
  41. .centro {
  42.     text-align: center;
  43. }
  44. .izq1 {text-align: center;
  45. }
  46. </style>
  47. </head>
  48. <body>
  49. <table width="518" height="234" border="1" align="center" class="negrita">
  50.   <tr>
  51.     <td colspan="2"> Usuario : <?php echo $_perfil['name']?></td>
  52.   </tr>
  53.   <tr>
  54.     <td width="64">Apellidos</td>
  55.     <td width="130"><?php echo $_perfil['surname']?></td>
  56.   </tr>
  57.   <tr>
  58.     <td>Tipo: </td>
  59.     <td><?php echo $_perfil['tipo']?></td>
  60.   </tr>
  61.   <tr>
  62.     <td colspan="2"><a href="<?php echo $_SERVER['PHP_SELF']?>?salir">SALIR</a>
  63.       </td>
  64.   </tr>
  65. </table>
  66. </body>
  67. </html>

1 ¿dime si La pagina perfil.php esta bien asi.?
2 ¿dime en el codigo de arriba que tendria que cambia si tuviese que hacerlo.?

Gracias por soportar a una chica tan borriqua.(En Español burra u torpe).
Un saludo desde Madrid.

Última edición por yolanda16568; 08/03/2012 a las 04:45
  #29 (permalink)  
Antiguo 08/03/2012, 04:46
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Sistemas de avisos

Repara2 Yolanda quiero coger a cada uno y vincularlo con su perfil repara2 seria el que me lo envio y yolanda seria el usuario que recibio
en la casilla vinculo de dreamweaver tengo que poner algo como esto.

perfil.php=?


el link sería perfil.php?user_id=EL_ID_DEL_PERFIL_DE_USUARIO
__________________
Fere libenter homines, id quod volunt, credunt.
  #30 (permalink)  
Antiguo 08/03/2012, 06:19
 
Fecha de Ingreso: agosto-2011
Mensajes: 165
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Sistemas de avisos

Asi?

perfil.php?user_id=<?php echo $perfil['id']?>

Etiquetas: avisos, mysql, sistemas, sql, tabla, usuarios
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 12:43.