Как сделать личные сообщения php
Скрипт личных сообщений на PHP
Приветствую! Сегодня будем учиться создавать систему личных сообщений на PHP. Для чего это нужно, думаю, всем будет понятно. Предположительно, на вашем сайте есть некоторые пользователи, которые бы хотели связываться между собой не прибегая к помощи посторонних сервисов и оставаясь на вашем сайте. PHP сообщения решают эту проблему. Мы сделаем скрипт личных сообщений на PHP, который будет состоять из таблицы БД для хранения личных сообщений, скрипта отправки сообщения и скрипта чтения сообщения.
Создания таблицы БД на PHP:
Начнем с базы данных для наших личных сообщения. Она представляет собой таблицу со следующими полями:
Мы назовем таблицу messages. Вот код создания такой таблицы БД:
После этого начнем работу над клиентской частью — напишем форму отправки сообщения и php-обработчик формы отправки.
Форма отправки сообщения 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. Использование данной техники позволит безошибочно выводить порядочность сообщений.
Отправка сообщений через API VK средствами PHP для ленивых
Что мы будем делать: настроим отправку сообщений от имени конкретного пользователя в несколько чатов и другим пользователям используя HTTP запрос средствами PHP, с минимальными усилиями.
Собственно, одними сообщениями мы не ограничимся. Все будет работать через standalone приложение vk по тому принципу, что мы потенциально сможем делать все действия, которые будут доступны этому самому пользователю (точнее все то, на что мы выдадим сами себе права, но об этом чуть позже).
Сообщения рассматриваем именно по той причине, что с ними можно работать только в standalone-приложениях.
План действий:
1. Создаем приложение
2. Получаем access_token
3. отправляем сообщения
1. Создаем приложение
Этот пункт делать под тем аккаунтом, к которому будет привязано приложение (Не обязательно тот же, с которого будут идти сообщения).
Имя пишем какое угодно — фигурировать оно нигде не будет.
Тип — Standalone-приложение.
Далее потребуется ввести код с смс-ки которая придет на привязанный к аккаунту номер. После ввода кода ничего не меняем в полях, идем в настройки и копируем ID приложения.
Больше тут можно ничего не трогать.
2. Используя ID и secret_key из приложения получаем access_token
access_token — строка из некоторого количества символов, которая будет отправляться с POST запросом для выполнения каких то функций. Собственно, к ней привязано, от имени какого пользователя будем действовать и что нам можно будет делать.
Для этого создаем на сайте страничку вот с таким кодом:
$client_id — собственно, ID нашего приложения из пункта 1.
$scope — список прав, которые мы можем делать от имени нашего пользователя. Конктерно, для нашей задачи подходит именно такой: возможность доступа в любое время (offline), и доступ к сообщениям (messages). Если надо больше, полный список тут. Можно выставлять либо битовой маской, либо перечислить названия.
Далее, важный момент: Заходим на нашу страничку с кнопкой, будучи залогованы в ВК под тем пользователем, от имени которого будем работать, и жамкаем по кнопочке. Появится подобный запрос:
Помимо пункта доступ к общей информации, все остальные пункты будут соответствовать списку разрешений, которые были переданы в scope. Жмем далее и видим следующее:
Красным выделен acces_token, ради которого весь второй пункт и писался.
3. HTTP запросами, передавая через POST параметры отправляем сообщения или используем любые другие методы API
Для нетерпеливых, проверить что все работает можно так:
Заменяем нули в конце на наш acces_token и переходим по этой ссылке в браузере.
Что произойдет:
Сообщение с текстом из параметра message будет отправлено пользователю c указанным user_id. (Если оставить как есть — придет мне. Я не обижусь).
Параметры получателя:
Полный список методов (при параметре scope=offline,messages) работать можно будет, соответственно только с разделом сообщений.
Ну и напоследок функция для отправки сообщения через POST. Простая, как автомат Калашникова — просто для наглядности:
Система диалогов на php, как в контакте
В этой статье я расскажу про систему диалогов на php, которую я создал на одном из сервисов компании, где я работаю.
Изначально, хотелось получить систему, которая бы повторяла функционал диалоговой системы контакта. Требования были следующие: скрипт не должен требовать установки на сервер дополнительных средств (поддержка long-pool запросов, phpdemon, поддержки websocket и т.п), позволять создавать диалог неограниченного числа пользователей и работать на обычном ajax-post сообщении с сайтом.
Для начала создадим структуру БД
Когда один пользователь хочет написать сообщение другому, скрипт ищет подходящий диалог. Диалог, является подходящим, если в нем участвую те же лица. Т.е. если мы раньше писали этому человеку, и никого больше не подключали к этому диалогу, то он подходит. Если же подходящего диалога нет, то создаем новый. Диалог и пользователь связаны таблицей user_to_dialog. Когда пользователь посылает сообщение, оно записывается в табличку message. А информация о том, кому оно предназначено лежит в табличке message_to_user. По сути, эта таблица избыточна, так как у нас уже есть информация кому показывать сообщение исходя из данных user_to_dialog. Но мне было так удобно. Можете это изменить в своем форке.
Перейдем к коду.
Структура класса dialog
поле user_id_field нужно для того, чтобы пристроить скрипт к Вашей бд, в которой возможно уже есть система пользователей.
Как использовать
Создаем экземпляр класса dialog
Получить все диалоги пользователя
получить все сообщения из текущего дилога
получить только новые сообщения
Отправка сообщения в диалог
Поиск подходящего диалога и добавление туда всех пользователей
Протестировать систему можно скачав пример с гитхаба, либо на моем сайте в demo.
Разумеется, это мой очередной велосипед.
Платная консультация по вопросам 2500 руб/час
Прочитали статью и остались вопросы? Меня зовут Валерий и я её автор. С радостью объясню Вам в скайпе все затруднительные моменты, которые остались за рамками статьи!
Добавить комментарий
Комментарии
да это просто ошибка примера. action=get_new_messages просто нужно чтобы попасть в блок кода
чтобы получить все новые сообщения
Можете подсказать как в этом примере изменить, что бы ник не давался новый к новому ip, а писался один и тот же только впереди него просто новая цифра добавлялась, и не важно с какого компьютера ты сидишь, с каждым новым сообщением с любого компьютера, был новый ник с новой цифрой!
Как-то так, в index.php начиная с 7 строки
А вообще это же всего лишь пример)
Ну если полностью заменить на предыдущее то что там находилось, то это 9-ая строчка!
$db->update(‘user’,array(‘name’=>’user’.$id,’id =’.$id); // заменяем имя на user
Как допилить Ваш скрипт чтоб организовать на сайте диалоги?
В итоге при отправке сообщений одному и тому же пользователю в БД каждый раз создаётся новый диалог?!
А всё из-за логики, а вернее всякое отсутствие логики.
select count(utd.userid) as cnt,utd.dialogid,dg.hash from #_user_to_dialog as utd left join #_dialog as dg on dg.id=utd.dialogid
where utd.dialogid in (select dialogid from #_user_to_dialog where userid=’.intval($userlist[0]).’ and dialogid in(select dialogid from #_user_to_dialog where userid=’.$this->userid.’)) group by utd.dialogid;
Что переводится дословно по-русски: выбрать значения из таблицы то кому адресовано сообщение ГДЕ идентификатор диалога равен выборке идентификатора диалога из этой же таблицы. Это что за идиотизм? Выбрать самого себя что-ли. Или выбрать той записи, которой не существует?!
говоря по русски: берем количество юзеров в диалоге, номер диалога и его хеш для каждого диалога где был задействован сам юзер и при этом был задействован его собеседник.
Все вроде верно, предложите свое написание подобного запроса, я внесу правки в исходники. Проект таки опенсорс и работает уже в куче проектов. Разумеется доработанный, когда писал эту статью он был сырой.
Много ошибок и недоработок в системе диалогов!
Например, первое: строка 154 у Вас
$this->db->getRows(‘select userid from #_user_to_dialog where dialogid=’.$this->id); // под вопросом, нужно ли добавлять отправителю сообщение
ответ: нет, не добавлять! Зачем добавлять информацию для отправителя? Чтобы при подсчёте новых сообщений для него же самого его же сообщение отображалось и считалось, как новое!
Для чего результат работы функции сохранять в атрибут класса?
Как создать систему личных сообщений или переписку пользователей на сайте php mysql?
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Сервис Личных сообщений на сайте
Добрый вечер, есть сайт с регистрацией и авторизацией, есть личная страница юзера. Вот, мне теперь.
Как прочитать видео или картинку из личных сообщений вк?
Я могу читать текстовые личные сообщения из вк. А если в личные сообщения кто то отправил видео.
Отображение новых личных сообщений на сайте
Уважаемые форумчане. Подскажите плиз. Как вывести кол-во новых личных сообщений на главную. Как на.
Как создать систему друзей php mysql
Как создать систему друзей, то-есть: Отправляем заявку в друзья пользователю, а он подтверждает.
И ключи от квартиры передадим. По e-mail
_NE_KAKIX_IMEN_, если что не получается, выкладывайте код. Или Вы хотите, чтобы за Вас все написали.
именно так, намек на это прослеживается и в других постах ТС
С некоторых времен я стал задаваться вопросом (риторическим, конечно):
Люди приходят на форум и просят (это в лучшем случае, а то и требуют), чтобы за них написали. Причем приходят не в фриланс, а на обычные ветки. Но, если люди интересуются тем или иным языком (или другой наукой), то почему бы не начать изучение самому, а с непониманием чего-либо уже обращаться? Ведь это, по меньшей мере, интересно!
Кстати, эту тему в полной мере раскрывает Игорь Борисов из Специалиста (долгих лет ему). :drink:
это если интересуются, а если просто сессия и что-то в этом роде. лучше же на шару, чем фриланс
| Комментарий модератора | ||
| ||
Добавлено через 35 минут
Хорошо даю скрипт готовый помогите в нем разобраться:
Дамп таблицы:
что конкретно не понятно?
для начала, нужно в форме вывести,не Васька с Костиком, а пользователей из вашей базы.
Нету конечно) Я ссылку вывести не могу на список пользователей)
Добавлено через 30 минут
Думаю что бы вытащить пользователей сайта надо так:
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Как изучать mysql и php? Сначала php, а потом mysql или наоборот, или сразу?
Хочу изучить mysql и php. Как их изучать? Сначала php, а потом mysql или наоборот, или сразу и то и.
Как увеличить кол-во личных сообщений
Как увеличить кол-во лс с 200 до 1000 или более? Powered by vBulletin® Version 3.8.7 Добавлено.

Доброе время суток! Возникла проблема с почтой, а конкретно не могу вывести всю переписку.

Привет всем! Решил на сайт добавить функцию уведомления. Т.е. когда юзер заходит в личный кабинет.



