Как сделать личные сообщения php
Система личных сообщений с диалогами с помощью Mysql и PHP
Большинство CMS и форумов используют довольно устаревшую систему для переписки. Уже давно время поставило свои стандарты, поэтому необходимо идти нога в ногу с прогрессом.
В этом посте объясняется, как спроектировать систему обмена личными сообщениями в виде диалогов с использованием PHP и MySQL. Мы будем использовать Класс для работы с базой данных MySQL.
Перед началом хочу объяснить, что в данной статье будет описана структура и все методы работы с базой данный, которые включают исходные коды SQL запросов. Здесь не будет рассматриваться вопрос верстки дизайна переписки, поскольку это дело вкуса. Описанные здесь основы дадут возможность реализовать на своем сайте довольно неплохую систему переписки. Достаточно добавить асинхронную загрузку с помощью jQuery и будет вам переписка в виде диалогов аналогичная VK или Facebook.
Основные возможности системы переписки:
— Вывод диалогов получателей и отправителей сообщений.
— Возможность визуально пересмотреть, прочитано сообщение или нет.
— Просмотр количества непрочитанных сообщений.
— Удаление сообщений и диалогов индивидуально для каждого пользователя.
При создании системы переписки мы подробно разберем:
— Создание структуры базы данных.
— Создание диалога и отправка сообщения.
— Вывод диалогов пользователя и личных сообщений.
Чтобы реализовать систему обмена сообщениями, необходимо создать 3 таблицы: Users, Conversation и Messages.
Для логичной структуры и взаимосвязи таблиц, последняя таблица Messages должна содержать следующие поля:
Соответственно, если один пользователь удаляет сообщение, в собеседника сообщение не удаляется.
Благодаря такой реализации мы создали вполне логическую структуру построения системы личных сообщений в виде диалогов.
Будем следовать по порядку. Пользователь хочет написать сообщение другому пользователю, соответственно, при этом должна осуществляться следующая логика:
— Проверка на существование диалога между пользователями.
Перед данной логикой, на всякий случай, проверяем, не отправляет ли пользователь сообщение сам себе.
Следующим шагом мы выведем список всех диалогов пользователя. Для этого мы создадим запрос, в котором ищем все записи, в которых фигурирует данный пользователь (в данном случае с ID 1). Также сортировка будет происходить по полю непрочитанных сообщений, поэтому они всегда будут наверху и навиду:
После того, как мы отправили сообщение, просмотрели список диалогов, нам необходимо увидеть все сообщение с определенным пользователем, что полностью реализует следующий код:
Думаете это все? Ошибаетесь. Остается еще 2 важных функции, а именно удаления конкретного сообщения и диалога. Начнем с удаления сообщения:
Для удаления диалога выполняем код:
Самое важное, а это структура базы данных, было изложено. При проектировании вашей системы сообщений, а это будет имеено ваша, потому что для каждого проекта необходимый свой функционал, вам необходимо будет перерабатывать и дорабатывать код. В данной статье были упущены некоторые детали, например, обновления полей таблицы диалога при удалении сообщения, отображение аватарок при выводе сообщений, сортировка диалогов и другое, но если все описывать, так вам не будет над чем работать, поэтому усовершенствуйте свои знания в области запросов SQL и проектируйте свои, намного быстрее и качественные продукты.
Но, как бонус к статье, я опишу еще алгорит динамической работы, которая, в моем случае, реализована с помощью библиотеки jQuery.
Для реализации необходимо дополнительно иметь идентификаторы стилей start_id и last_id, которые обозначают ID первого и последнего сообщения, которые будут отображены польователю. Данные идентификаторы нужны для того, чтобы подгружать предыдущие сообщения, основываясь на start_id (10 записедо до данного ID), и новые сообщения, ID которых больше за last_id. Использование данной техники позволит безошибочно выводить порядочность сообщений.
PHP скрипт сообщений
При помощи php можно «отправлять сообщения» друг другу. Предположим что у на сайте есть пользователи и необходимо организовать систему личных сообщений.
Для реализации этого нам потребуются: таблица в БД для сообщений, скрипт для отправки сообщений и скрипт для чтения сообщений.
Идем по порядку-таблица. В таблице будут следующие поля: id, дата отправки, отправитель, получатель, содержимое сообщения и флаг.
Код создания таблицы будет выглядеть так, назовем её messages.
Дамп таблицы
CREATE TABLE IF NOT EXISTS `messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`data` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`from` int(11) NOT NULL,
`to` int(11) NOT NULL,
`message` text NOT NULL,
`flag` int(11) NOT NULL DEFAULT ‘0’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
В поле data будет дата отправки сообщения,поле from-уникальный номер отправителя,to-номер получателя,message-само сообщение и поле flag-отметка о том-прочтено сообщение или ещё нет.
Теперь займемся клиентской частью-напишем форму отправки сообщения и php обработчик формы отправки.
Форма отправки и обработчик
В форме отправки нам потребуется ввести сам текст сообщения и выбрать адресата. В форме укажем обработчик и метод передачи.
Подробнее о формах в phpчитайте тут.
Форма ввода сообщения
Обработчик отправки сообщения
Обработчик должен принять данные формы и записать их в БД.
/**
* Принимаем постовые данные. Очистим сообщение от html тэгов
* и приведем id получателя к типу integer
*/
$message= htmlspecialchars($_POST[‘message’]);
$to=(int)$_POST[‘to’];
/**
* Я использую библиотеку PDO
*/
$db_user=’db_username’;
$db_name=’db_name’;
$db_pass=’db_userpassword’;
$db = new PDO(‘mysql:dbname=’.$db_name.’; host=localhost’,$db_user,$db_pass);
$db->exec(«SET CHARACTER SET utf8»);
Теперь напишем скрипт, который выведет все сообщения,адресованные конкретному пользователю. Опять же подтягивайте номер пользователя из сессии или куки.
/**
* Номер пользователя,для которого отображать сообщения
*/
$u_id=1;
$db = new PDO(‘mysql:dbname=’.$db_name.’; host=localhost’,$db_user,$db_pass);
$db->exec(«SET CHARACTER SET utf8»);
И наконец последний скрипт, предназначенный для чтения сообщения из базы и отображения его пользователю.
Чтение сообщения
/**
* Получаем номер сообщения. Приводим его типу Integer
*/
$id_mess=(int)$_GET[‘id’];
$db = new PDO(‘mysql:dbname=’.$db_name.’; host=localhost’,$db_user,$db_pass);
$db->exec(«SET CHARACTER SET utf8»);
/**
* Достаем сообщение. Помимо номера сообщения ориентируемся и на id пользователя
* Это исключит возможность чтения чужого сообщения, методом подбора id сообщения
*/
$sql=»select * from messages where u_to = :u_to and >$sth=$db->prepare($sql);
$sth->bindParam(‘:u_to’,$u_id,PDO::PARAM_INT);
$sth->bindParam(‘:id_mess’,$id_mess,PDO::PARAM_INT);
$sth->execute();
$res=$sth->fetch(PDO::FETCH_ASSOC);
/**
* Установим флаг о прочтении сообщения
*/
$sql=»update messages set flag = 1 where u_to = :u_to and >$sth=$db->prepare($sql);
$sth->bindParam(‘:u_to’,$u_id,PDO::PARAM_INT);
$sth->bindParam(‘:id_mess’,$id_mess,PDO::PARAM_INT);
$sth->execute();
/**
* Выводим сообщение с датой отправки
*/
if($res[‘id’]<>») <
echo ‘
echo ‘Сообщение №’.$row[‘id’].’ О
Задавайте ваши вопросы. Все скрипты приаттачены к статье,качайте. На этом всё 🙂
Ссылки по теме
Помощь |
Задать вопрос | |
программы | |
обучение | |
экзамены | |
компьютеры | |
ICQ-консультанты | |
Skype-консультанты | |
Общая справка | |
Как оформить заказ | |
Тарифы доставки | |
Способы оплаты | |
Прайс-лист | |
Карта сайта | |
О нас |
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО. На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям. Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе. Создаем чат для сайта: HTML, JS, PHP и AJAXКогда обычных комментариев становится недостаточно, приходит время создать чат. С помощью чата пользователи общаются друг с другом, повышая интерес к сайту. Это важный элемент для вебинарных площадок, порталов со службой поддержки и страниц, где необходимо более живое, нефорумное общение. Гайд поможет на практике скомбинировать знания по HTML, JS, PHP и AJAX и создать готовый продукт. Если знаний ещё недостаточно, обратите внимание на курс «Веб-разработчик c нуля до PRO». Пишет о программировании, в свободное время создает игры. Мечтает открыть свою студию и выпускать ламповые RPG. Каким должен быть чатУдобство для пользователей превыше всего. Позаботьтесь, чтобы чат соответствовал современным требованиям: Каркас чата на HTMLВ первую очередь создаём форму отправки и контейнер для отображения сообщений: Задаём стилиПервый этап пройден: В первую очередь уделим внимание главным функциям чата, а после доработаем внешний вид. Основная часть чата |