ПР08. Создание чата
Ваша задача - разработать чат,в котором участвую два пользователя usr1
и usr2
.
Для каждого пользователя чата предусмотреть поля для ввода текста сообщения и кнопку по нажатию на которую происходит отображения сообщения в чате.
После нажатия на кнопку "отправить" поле с текстом сообщения должно очищаться.
В чате должны отображаться все отправленные сообщения от пользователей(кроме пустых). Сообщения от разных пользователей должны отображаться с разной цветовой гаммой.
Простой пример создания чата
Прежде всего необходимо определиться со структурой БД. В данном примере БД состоит из двух таблиц usr
и msg
, которые хранять учётные записи пользователей и отправленые сообщения.
Примерная структура таблицы usr
была рассмотрена в предыдущих практических и лециях. Структура таблицы msg
представлена ниже
Имя столбца | Тип данных (размер) | Описание |
---|---|---|
id | INT | Индентификатор. Данное поле сделать первичным ключом и назначить автоматическое инкрементирование |
u_from | VARCHAR(50) | Пользователь, который написал сообщение |
u_to | VARCHAR(50) | Пользователь, которому отправляется сообщение от пользователя [u_from] |
status | ENUM('NEW', 'READED') | Принимает одно из двух значений: NEW - новое не прочитаное сообщение пользоватлем [u_to] ; READED - сообщение прочитано пользователем [u_to] |
msg | VARCHAR | Текст сообщения |
time | INT | Время отправки сообщения пользователем [u_from] |
Как видно из структуры таблицы, необходимо не только хранить "от кого" и "кому" пришло сообщение, но и его состояние. Т.е. пользователь его прочитал или нет.
Рассмотрим алгоритм работы чата на примере.
Первая страница - это форма авторизации и ссылка на форму регистрации пользователя. Пропустим эту часть и передём к основному.
После авторизации пользователя на сайте, осуществляется перенаправление на страницу chat.html
.
chat.html
каждые 5с осуществляется GET запрос к странице get.php
.
Страница get.php
(на стороне сервера) производит выборку одного самого позднего не прочитаного сообщения из таблицы msg
и отправляет его в качестве ответа на запрос.
SELECT * FROM msg WHERE status='NEW' AND u_to='usr1' ORDER BY time ASC LIMIT 1
В данном примере происходит выборка одной записи из таблицы msg
, в которой сообщение ещё не было прочитано пользователем usr1
и оно является самым позним из непрочитанных(ORDER BY time).
Далее необходимо поменять статус этого сообщения(на READED), по сколько считается что оно уже является прочитанным.
UPDATE msg SET status='READED' WHERE u_to='usr1' AND status='NEW' ORDER BY time ASC LIMIT 1
По нажатию на кнопку "Отправить" происходит GET запрос с передачей параметров - send.php?msg=[textmsg]
. Страница send.php
сохраняет в таблицу msg
присланое сообщение от пользователя. Выставля поле status
в NEW
.
Для записи в таблицу не обходимо не только текст самого сообщения, но и от кого пришло и кому прислать это сообщение. В данном случаи помогает суперглобальная переменная $_SESSION
, которая хранит текущую сессию пользователя. И по сколько чат необходимо реализовать для двух пользователей usr1
и usr2
, то достаточно поставить в скрипте send.php
небольшое сравнение
switch($_SESSION["login"]) {
case "usr1":
$u_to = "usr2";
break;
case "usr2":
$u_to = "usr1";
break;
}
Требования
ВНИМАНИЕ!! Во избежание ошибок рекмендется использовать для пользователей разные браузеры или же для одного из пользователей запустить страницу в режиме инкогнито.
- реализовать чат, в котором учавствуют два пользователя
- адрес Вашего сайта должне быть следующи - http://chat[N]/, где [N] - это Ваш номер по списку
- первая страница Вашего сайта - это форма авторизации пользователя и ссылка на отдельную страницу с регистрацией нового пользователя
- необходимо реализовать возможность вывода сообщений об ошибках(регисрации/авторизации и т.д.) и успешной регисрации/авторизации пользователя
- при упешной авторизации пользователя необходимо автоматически перенаправить его на страницу chat.html
- на странице chat.html должна быть область, в которой отображаются отправленые и принятые сообщения текущум пользователем
- на странице chat.html должна быть форма для отправки сообщений
- сообщения от разных пользователей должны отображаться с разной цветовой гаммой
- форма отправки сообщений должна автоматически очищаться после отправки сообщения
- страница chat.html НЕ ДОЛЖНА перезагружаться - ВСЕ запросы к серверной части Вашего сайта должны осуществляется с помощью AJAX