Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Создание на сайте системы обмена сообщениями

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Создание на сайте системы обмена сообщениями посредством php and mysql
Local
Отправлено: 24 Июня, 2012 - 18:05:23
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




Добрый день уважаемые пользователи.
Возник вопрос,как можно про но эфективнее создать систему обмена сообщениями на сайте?
Суть задачи состоит в следующем.
Пользователь зашел на страничку у себя в почте,и ему показывался список тех с кем он переписывался,причем новые в самом верху списка,при нажатии на ссылку ему показывался весь лог переписки,по примеру как в чате.
Так же состоит задача в том чтобы была возможность удаления сообщения,но только у себя,у собеседника оно сохранялось.
Помгите продумать логику.Заранее спасибо.
 
 Top
DelphinPRO
Отправлено: 24 Июня, 2012 - 19:09:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




делаете таблицу для сообщений.
примерная структура

CODE (text):
скопировать код в буфер обмена
  1. ID | from_user | to_user | message | deleted


Далее элементарно. При отправке сообщения пишете в таблицу идентификаторы пользователей (от кого и кому) и текст сообщения.

При выводе сообщений делаете выборку по from_user, to_user сортируя по ID в обратном порядке и отфильтровывая сообщения с флагом deleted.
При удалениия сообщения пользователем, ставите флаг deleted.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Local
Отправлено: 24 Июня, 2012 - 19:19:02
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




DelphinPRO пишет:
делаете таблицу для сообщений.
примерная структура

CODE (text):
скопировать код в буфер обмена
  1. ID | from_user | to_user | message | deleted


Далее элементарно. При отправке сообщения пишете в таблицу идентификаторы пользователей (от кого и кому) и текст сообщения.

При выводе сообщений делаете выборку по from_user, to_user сортируя по ID в обратном порядке и отфильтровывая сообщения с флагом deleted.
При удалениия сообщения пользователем, ставите флаг deleted.

Логично,но
1 Пользователю отправившему сообщение необходимо указать прочел его собеседник или нет.
2 Собеседнику необходимо узнать о письме,то есть нужна для обоих случая метка о прочтении.
2 С тем вариантом что поле делетед будет для одного пользователя получается что при отправке сообщения нам необходимо сделать его копию
Лишний мусор в базе я так думаю
 
 Top
DelphinPRO
Отправлено: 24 Июня, 2012 - 19:43:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




1. Добавьте еще одно поле readed
2. если readed = 0 значит сообщение новое и не прочитано получателем. Выводите ему сообщение\значок\что-то еще
3. Про копию не понял O_o Зачем? 0 - сообщение видно; 1 - сообщение не видно получателю, 2 - сообщение не видно отправителю, 3 - оба собеседника удалили сообщение - не видно обоим.
(Добавление)
PS и не цитируйте, пожалуйста, сообщения полностью. (здесь, на форуме Улыбка )


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Local
Отправлено: 24 Июня, 2012 - 19:53:51
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




[quote=DelphinPRO][/quote]
Хм,примем ко вниманию,но опять же каким запросом вывести все это как сообщения в чате.
 
 Top
tuareg
Отправлено: 24 Июня, 2012 - 22:41:34
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Local пишет:
DelphinPRO пишет:

Хм,примем ко вниманию,но опять же каким запросом вывести все это как сообщения в чате.

А в чем проблема?
Добавьте поле с временем создания сообщения.
Для вывода получателю выводите отсортированные readed,по дате написания
А для вывода истории переписки отсортированные по дате
 
 Top
okwel
Отправлено: 30 Марта, 2013 - 18:55:41
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Март 2013  


Помог: 0 раз(а)




Нет! Создаем таблицу как минимум с 7 полями. (можно ещё добавить дату, время, IP и др.)

id, author, recipient, room_author, room_recipient, message, status

CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE `table` (
  2.   `id` int(5) NOT NULL AUTO_INCREMENT,
  3.   `author` varchar(30) CHARACTER SET utf8 NOT NULL,
  4.   `recipient` varchar(30) CHARACTER SET utf8 NOT NULL,
  5.   `room_author` int(1) NOT NULL,
  6.   `room_recipient` int(1) NOT NULL,
  7.   `message` varchar(1000) CHARACTER SET utf8 NOT NULL,
  8.   `status` int(1) DEFAULT '1',
  9.   PRIMARY KEY (`id`)
  10. ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;


id - порядковый номер
author - Отправитель сообщения
recipient - Отправитель сообщения
room_author - Текущее положение сообщения
room_recipient - Текущее положение сообщения
message - Текст сообщения
status - Статус (прочитано/непрочитано)

Состояние room_author и room_recipient может быть только таким:
0 Удаленно
1 Входящие
2 Спам
3 Отправленные
4 Корзина

Состояние status:
0/1 Прочитано/Непрочитано

Когда автор отправляет сообщение то делатеся такая запись в базу:

CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO TABLE SET author=max, recipient=anna, room_author=3, room_recipient=1, message=text....,  STATUS=1


Т.е. для отправителя и получателя создаются личные положения сообщения.

Если получатель прочитал сообщение из папки "Входящие" то запись такая:

CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE TABLE SET STATUS=0 WHERE recipient=anna AND room_recipient=1


Перенос сообщения например в карзину происходит следующим способом:

CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE TABLE SET room_recipient=4 WHERE recipient=anna AND room_recipient=1


Удаляется вот так:

CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE TABLE SET room_recipient=0 WHERE recipient=anna AND room_recipient=4


В данной ситуации получатель присваивает значение room_recipient =0
И с нулевым значением получатель не видет сообщения

Если оба пользователя удалили одно сообщение т.е. room_recipient=0 и room_author=0 то запись можно вообще удалить!

CODE (SQL):
скопировать код в буфер обмена
  1. DELETE FROM TABLE WHERE room_recipient=0  AND room_author=0


Может кто придум и проще. Но я пробывал разными способами и смог придумать более простой способ только так! Радость

(Отредактировано автором: 30 Марта, 2013 - 19:02:01)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB