Сообщений между пользователями php

PHP скрипт сообщений

При помощи php можно «отправлять сообщения» друг другу. Предположим что у на сайте есть пользователи и необходимо организовать систему личных сообщений. Для реализации этого нам потребуются: таблица в БД для сообщений, скрипт для отправки сообщений и скрипт для чтения сообщений. Идем по порядку-таблица. В таблице будут следующие поля: id, дата отправки, отправитель, получатель, содержимое сообщения и флаг. Код создания таблицы будет выглядеть так, назовем её messages.

Дамп таблицы

В поле data будет дата отправки сообщения,поле from-уникальный номер отправителя,to-номер получателя,message-само сообщение и поле flag-отметка о том-прочтено сообщение или ещё нет. Теперь займемся клиентской частью-напишем форму отправки сообщения и php обработчик формы отправки.

Форма отправки и обработчик

В форме отправки нам потребуется ввести сам текст сообщения и выбрать адресата. В форме укажем обработчик и метод передачи. Подробнее о формах в phpчитайте тут.

Форма ввода сообщения

Обработчик отправки сообщения

Вот таким образом можно отправить сообщение одному пользователю от другого. В моем скрипте сообщение отправляется от пользователя с В вашем случае адрес отправителя берется из массива $_SESSION или $_COOKIE, смотря как у вас устроен сайт. Теперь напишем скрипт, который выведет все сообщения,адресованные конкретному пользователю. Опять же подтягивайте номер пользователя из сессии или куки.

Читайте также:  Save Text As File JavaScript | CodingNepal

И наконец последний скрипт, предназначенный для чтения сообщения из базы и отображения его пользователю.

Чтение сообщения

Вот и всё. Если вы поняли как Всё это работает — вы сможете сами сделать список отправленных сообщений. С помощью поля flag можно подсвечивать новые/непрочитанные сообщения. Задавайте ваши вопросы. Все скрипты приаттачены к статье,качайте. На этом всё 🙂

Тэги материала

Источник

Скрипт личных сообщений на PHP

Приветствую! Сегодня будем учиться создавать систему личных сообщений на PHP. Для чего это нужно, думаю, всем будет понятно. Предположительно, на вашем сайте есть некоторые пользователи, которые бы хотели связываться между собой не прибегая к помощи посторонних сервисов и оставаясь на вашем сайте. PHP сообщения решают эту проблему. Мы сделаем скрипт личных сообщений на PHP, который будет состоять из таблицы БД для хранения личных сообщений, скрипта отправки сообщения и скрипта чтения сообщения.

Создания таблицы БД на PHP:

Начнем с базы данных для наших личных сообщения. Она представляет собой таблицу со следующими полями:

  1. ID
  2. Дата отправки
  3. Отправитель
  4. Получатель
  5. Содержимое
  6. Флаг сообщения

Мы назовем таблицу 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″); $sql=»insert into messages (u_from,u_to,message,flag) values (:u_from,:u_to,:message,:flag)»; $sth=$db->prepare($sql); $sth->bindValue(‘:u_from’, 1);// 1 — ID отправителя $sth->bindValue(‘:u_to’, $to); $sth->bindValue(‘:message’, $message); $sth->bindValue(‘:flag’, 0); $sth->execute(); $error=$sth->errorInfo(); /** * Проверка результата запроса */ if($error[0]==0)< echo 'Сообщение успешно отправлено'; >else

В нашем случае сообщение отправляется от пользователя с в вашем же случае это может быть адрес, взятый из массивов $_SESSION либо $_COOKIE. Давайте напишем скрипт, который будет выводить все личные сообщения, отправленные посредством PHP определенному пользователю. Опять же, ID берите из уже обговоренных массивов $_SESSION либо $_COOKIE.

Чтение сообщений:

Последний скрипт направлен на чтение личных сообщений, которые он вытаскивает из БД.

/** * Номер пользователя */ $u_id=1; /** * Получаем номер сообщения. Приводим его типу Integer */ $id_mess=(int)$_GET[‘id’]; $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»); /** * Достаем сообщение. Помимо номера сообщения ориентируемся и на id пользователя * Это исключит возможность чтения чужого сообщения, методом подбора id сообщения */ $sql=»select * from messages where u_to = :u_to and * Установим флаг о прочтении сообщения */ $sql=»update messages set flag = 1 where u_to = :u_to and * Выводим сообщение с датой отправки */ if($res[‘id’]<>»)< echo '

‘.$res[‘message’].’

Дата отправки: ‘.$res[‘data’]; >else

Источник

Текстовый чат для сайта

image

Хочу поделиться опытом создания текстового чата на основе nginx-push-stream-module модуля Nginx, PHP и Javascript. Этот модуль функционирует по принципу long polling и может быть использован как для обмена мгновенными сообщениями между пользователями, так и для системы push–уведомлений.

Добавление модуля Nginx

Будем считать, что у вас уже установлен Nginx. Поэтому для начала нужно скачать и добавить модуль nginx-push-stream-module и пересобрать Nginx вручную. Подробное руководство по добавлению модуля можно найти здесь и здесь, думаю, нет смысла писать повторно.

Конфигурация

Для осуществления поддержки long polling, в конфигурации Nginx объявим точку публикации сообщений (в данном примере publish) и точку подписки для получения сообщений (в данном примере subscribe).

http < … server < … location /publish < push_stream_publisher admin; # определяет режим для данного блока push_stream_channels_path $arg_id; # id канала для публикации сообщения push_stream_store_messages on; # включение или отключение очереди сообщений allow 127.0.0.1; # делает публикацию сообщений доступной только с вашего сервера >location ~ /subscribe/(.*) < push_stream_subscriber long-polling ; # определяет блок как подписчика # (существуют разные режимы) push_stream_channels_path $1; # id канала для подписки push_stream_longpolling_connection_ttl 300s; # период времени, в течении которого подписчик # остается подключенным (ожидает сообщение) до # переподключения push_stream_last_received_message_time $arg_time; # время получения последнего сообщения push_stream_last_received_message_tag $arg_tag; # метка, определяющая последнее доставленное #сообщение >> push_stream_shared_memory_size 32M; > 

Внутри блока http нужно указать директиву push_stream_shared_memory_size, то есть размер выделяемой памяти.

Отправка сообщений в PHP

В PHP сообщения отправляем обычным POST методом.

$channel_id = subscriber1; //id канала для публикации сообщения $message=’Привет!’; // сообщение //отправка сообщения $ch = curl_init('http://127.0.0.1/publish?id='.$channel_id); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($message)); curl_exec($ch); curl_close($ch); 

Получение сообщений в Javascript (Jquery)

Есть несколько способов подписаться на канал, самый простой – Ajax запрос методом GET.

var channelId = subscriber1; //id подписчика var last_etag=0; //переменная для заголовка 'Etag' var last_time=null; //переменная для заголовка 'Last-Modified' function new_message() < $.ajax(< url: '/subscribe/' + channelId, type: "GET", dataType: 'json', beforeSend: function(xhr), success: function(data, status, xhr) < last_etag =xhr.getResponseHeader('Etag'); //присваиваем новое значение переменной last_etag // из заголовка 'Etag' ответа last_time =xhr.getResponseHeader('Last-Modified'); // присваиваем новое значение переменной last_time // из заголовка 'Last-Modified' ответа //здесь что-то делаем с полученным сообщением setTimeout(new_message, 500); // переподключаемся сразу после получения ответа >>) > new_message(); 

На этом все. Такой чат является кроссбраузерным, не требует наличия дополнительных плагинов у пользователей и подойдет для проектов любого масштаба. Вот видеочат, использующий данный текстовый чат.

Источник

Оцените статью