Как создать свой чат? Плюсы и минусы

Думаю, что каждый из Вас знает, что такое чат. И очень часто на сайтах можно встретить либо маленькие чаты, либо достаточно большие и сложные. В этой статье я опишу принцип создания чата . Обратите внимание, что в этой статье не будет готового кода "скопировал-вставил ", а только алгоритм, с помощью которого Вы, обладая необходимыми знаниями, сможете сделать чат .

Ключевая особенность чата в том, что его содержимое обновляется автоматически . Отсюда и возникают все трудности.

Для начала разберём с Вами структуру таблицы в базе данных . Вот те поля, которые обязательно потребуются:

  • id - уникальный идентификатор.
  • name - имя, оставившего сообщение. Здесь также может быть, например, user_id , означающий id пользователя из другой таблицы.
  • message - сам текст сообщения.
  • date - дата отправления сообщения.

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

Теперь необходимо вывести HTML-код :













Имя Сообщение Дата
Имя Сообщение Дата




В данном коде опять же всё как пример. Можно всё смело менять, но принцип должен быть тем же: есть место, где выводятся сообщения, причём они выводятся в одинаковом виде. Вместе с полем, где выводятся сообщения, есть текстовое поле и кнопка "Отправить ".

Обязательно для блока chat поставьте фиксированную высоту, чтобы при добавлении новых сообщений, у Вас этот блок не вырастал, также поставьте полосу прокрутки у него, чтобы можно было просмотреть все сообщения. Всё это делается с помощью CSS .

Теперь займёмся JavaScript :


function send() {
var message = document.getElementById("message").value;
var name = "Гость";
/* Здесь блок отправки POST-запроса с данными (например, через Ajax) */
}
function update() {
/* Здесь отправка запроса на получение всех сообщений (например, через Ajax) */
/* Здесь вывод сообщений в определённом формате прямо в HTML-код с использованием DOM, либо JQuery. */
}
setInterval("update()", 1000); // Обновление окна чата каждую секунду

И, наконец, PHP-код (добавление новых сообщений):

И последний файл, которые потребуется - это получение всех сообщений из таблицы:

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

В этом уроке мы будем создавать простое приложение веб-чата с помощью PHP и jQuery. Утилита такого типа прекрасно подойдет для системы онлайн-поддержки вашего сайта.

Введение

Приложение чата, которое мы сегодня построим, будет довольно простым. Оно будет включать в себя систему входа и выхода, возможности в AJAX-стиле, а также предложит поддержку нескольких пользователей.

Шаг 1: HTML разметка

Мы начнем этот урок с создания нашего первого файла index.php.

Chat - Customer Module

Welcome,

Exit Chat

  • Мы начнем наш html с обычных DOCTYPE, html, head, и body тагов. В таг head мы добавим наш заголовок и ссылку на нашу таблицу стилей css (style.css).
  • Внутри тага body, мы структурируем наш макет внутри блока - обертки #wrapper div. У нас будет три главных блока: простое меню, окно чата и поле ввода нашего сообщения; каждый со своим соответствующим div и id.
    • Блок меню #menu div будет состоять из двух абзацев. Первый будет приветствием пользователю и поплывет налево, а второй будет ссылкой на выход и поплывет направо. Мы также включим блок div для очистки элементов.
    • Блок чата #chatbox div будет содержать лог нашего чата. Мы будем загружать наш лог из внешнего файла с использованием ajax-запроса jQuery.
    • Последним пунктом в нашем блоке-обертке #wrapper div будет наша форма, которая будет включать в себя текстовое поле ввода для сообщения пользователя и кнопку отправки.
  • Мы добавляем наши скрипты последними, чтобы грузить страницу быстрее. Сначала мы вставим ссылку Google jQuery CDN, так как в этом уроке мы будем использовать библиотеку jQuery. Наш второй таг скрипта будет там, где мы будем работать. Мы загрузим весь наш код после того, как документ будет готов.
Шаг 2: Создание стиля CSS

Теперь мы добавим немного css, чтобы заставить наше приложение чата выглядеть лучше, чем стиль браузера по умолчанию. Код, указанный ниже будет добавлен в наш файл style.css.

/* CSS Document */ body { font:12px arial; color: #222; text-align:center; padding:35px; } form, p, span { margin:0; padding:0; } input { font:12px arial; } a { color:#0000FF; text-decoration:none; } a:hover { text-decoration:underline; } #wrapper, #loginform { margin:0 auto; padding-bottom:25px; background:#EBF4FB; width:504px; border:1px solid #ACD8F0; } #loginform { padding-top:18px; } #loginform p { margin: 5px; } #chatbox { text-align:left; margin:0 auto; margin-bottom:25px; padding:10px; background:#fff; height:270px; width:430px; border:1px solid #ACD8F0; overflow:auto; } #usermsg { width:395px; border:1px solid #ACD8F0; } #submit { width: 60px; } .error { color: #ff0000; } #menu { padding:12.5px 25px 12.5px 25px; } .welcome { float:left; } .logout { float:right; } .msgln { margin:0 0 2px 0; }

В вышеуказанном css нет ничего особенного, кроме того факта, что некоторые id или классы, для которых мы устанавливаем стиль, будут добавлены немного позже.

Как вы можете видеть выше, мы закончили строить пользовательский интерфейс чата.

Шаг 3: Используем PHP, чтобы создать форму входа.

Теперь мы реализуем простую форму, которая будет спрашивать у пользователя его имя, перед тем, как пустить его дальше.

Функция loginForm(), которую мы создали, состоит из простой формы входа, которая спрашивает у пользователя его/ее имя. Затем мы используем конструкцию if else, чтобы проверить, ввел ли пользователь имя. Если человек ввел имя, мы устанавливаем его, как $_SESSION["имя"]. Так как мы используем сессию, основанную на cookie, чтобы хранить имя, мы должны вызвать session_start() перед тем, как что-нибудь выводить в браузер.

Есть одна вещь, на которую вы возможно захотите обратить особое внимание - то, что мы использовали функцию htmlspecialchars(), которая конвертирует специальные символы в HTML сущности, тем самым защищая имя переменной, чтобы оно не стало жертвой межсайтового скриптинга (XSS). Мы также добавим эту функцию позже к текстовой переменной, которая будет опубликована в логе чата.

Отображение формы входа

Для того, чтобы показать форму логина в случае, если пользователь не вошел в систему, и следовательно, не сессия не создалась, мы используем другую инструкцию if else вокруг блока-обертки #wrapper div и тагов скрипта в нашем исходном коде. В противоположном случае, если пользователь вошел в систему и создал сессию, этот код спрячет форму входа и покажет окно чата.

Welcome,

Exit Chat

// jQuery Document $(document).ready(function(){ });

Приветствие и меню выхода из системы

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

Прежде всего, давайте добавим имя пользователя в сообщение приветствия. Мы сделаем это, выводя сессию имени пользователя.

Welcome,

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

// jQuery Document $(document).ready(function(){ //If user wants to end session $("#exit").click(function(){ var exit = confirm("Are you sure you want to end the session?"); if(exit==true){window.location = "index.php?logout=true";} }); });

Код jquery, приведенный выше просто показывает диалог подтверждения, если пользователь кликнет по ссылке выхода #exit. Если пользователь подтвердит выход, тем самым решив закончить сессию, мы отправим его в index.php?logout=true. Это просто создаст переменную с именем logout со значением true. Мы должны перехватить эту переменную с помощью PHP:

If(isset($_GET["logout"])){ //Simple exit message $fp = fopen("log.html", "a"); fwrite($fp, "User ". $_SESSION["name"] ." has left the chat session.
"); fclose($fp); session_destroy(); header("Location: index.php"); //Redirect the user }

Теперь мы увидим, существует ли get переменная "logout", используя функцию isset(). Если переменная была передана через url, такой, как ссылка, упомянутая выше, мы переходим к завершению сессии пользователя с текущим именем.

Перед уничтожением сессии пользователя с текущим именем с помощью функции session_destroy() мы хотим выводить простое сообщение о выходе в лог чата. В нем будет сказано, что пользователь покинул сессию чата. Мы сделаем это, используя функции fopen(), fwrite() и fclose(), чтобы манипулировать нашим файлом log.html, который, как мы увидим позднее, будет создан в качестве лога нашего чата. Пожалуйста, обратите внимание, что мы добавили класс "msgln" в блок div. Мы уж определили стиль css для этого блока.

Проделав это, мы уничтожаем сессию и перенаправляем пользователя на ту же страницу, где появится форма входа в систему.

Шаг 4: Поддержка пользовательского ввода данных

После того, как пользователь подтвердил свои действия в нашей форме, нам нужно захватывать его ввод с клавиатуры и писать его в лог нашего чата. Для того, чтобы сделать это, мы должны использовать jQuery и PHP, чтобы работать синхронно на стороне сервера и на стороне клиента.

jQuery

Практически все, что мы собираемся делать с jQuery для обработки наших данных, будет вращаться вокруг запроса на jQuery post.

//If user submits the form $("#submitmsg").click(function(){ var clientmsg = $("#usermsg").val(); $.post("post.php", {text: clientmsg}); $("#usermsg").attr("value", ""); return false; });

  • Перед тем, как мы что-то начнем делать, мы должны захватить пользовательский ввод, или то, что он напечатал в поток ввода #submitmsg. Этого можно достигнуть функцией val(), которая берет значение, установленное в поле формы. Теперь мы сохраняем это значение в переменную clientmsg.
  • Вот и наступает самая важная часть: запрос jQuery post. Она отправляет запрос POST в файл post.php, который мы создадим через мгновение. Он отправляет ввод клиента, или то, что было сохранено в переменную clientmsg.
  • В конце мы очищаем ввод #usermsg, очищая атрибут значения.
  • Пожалуйста обратите внимание, что код, указанный выше, пойдет в наш таг скрипта, где мы поместили jQuery код выхода из системы.

    PHP - post.php

    На данный момент мы имеем данные POST, отправляемые в файл post.php каждый раз, когда пользователь отправляет форму и посылает новое сообщение. Наша задача теперь захватить эти данные и записать их в лог нашего чата.

  • Прежде чем мы что-либо сделаем, мы должны начать файл post.php с помощью функции session_start(), так как мы будем использовать сессию по имени пользователя в этом файле.
  • Используя логическую isset, мы проверим, существует ли сессия для "name", перед тем, как что-то делать дальше.
  • Теперь мы захватим данные POST, которые jQuery послал в этот файл. Мы сохраним эти данные в переменную $text.
  • Эти данные, так же, как и вообще все данные, вводимые пользователем, будут храниться в файле log.html. Чтобы сделать это, мы откроем файл в режиме "a" функции fopen, который согласно php.net открывает файл только для записи; помещает указатель файла на конец файла. Если файл не существует, попытаемся создать его. Затем мы запишем наше сообщение в файл, используя функцию fwrite().
    • Сообщение, которое мы будем записывать, будет заключено внутри блока.msgln div. Он будет содержать дату и время, сгенерированную функцией date(), сессию имени пользователя и текст, которые также будет окружен функцией htmlspecialchars(), чтобы избежать XSS.

    И наконец, мы закрываем наш файл с помощью fclose().

  • Шаг 5: Отображение содержимого лога чата (log.html)

    Все, что пользователь разместил, обработано и опубликовано с помощью jQuery; оно записано в лог чата с помощью PHP. Единственное, что осталось сделать - это показать обновленный лог чата пользователю.

    Чтобы сэкономить нам немного времени, мы предварительно загрузим лог чата в блок #chatbox div, как если бы он что-то содержал.

    Мы используем процедуру, похожую на ту, что мы использовали в файле post.php, но на этот раз мы только читаем и выводим содержимое файла.

    Запрос jQuery.ajax

    Запрос ajax - это ядро всего, что мы делаем. Этот запрос не только позволяет нам посылать и принимать данные через форму без обновления страницы, но также и позволяет нам обрабатывать запрошенные данные.

    //Load the file containing the chat log function loadLog(){ $.ajax({ url: "log.html", cache: false, success: function(html){ $("#chatbox").html(html); //Insert chat log into the #chatbox div }, }); }

    Мы завернем наш ajax запрос в функцию. Вы увидите, зачем, прямо сейчас. Как вы можете видеть выше, мы использовали только три из объектов запроса jQuery ajax.

    • url : Строка URL для запроса. Мы используем имя файла лога нашего чата log.html.
    • cache : Это предотвратит кэширование нашего файла. Это обеспечит нам то, что всегда, когда мы посылаем запрос, мы будем иметь обновленный лог чата.
    • sucess : Это позволит нам прикрепить функцию, которая передаст запрошенные нами данные.

    Как вы видите, затем мы перемещаем запрошенные нами данные (html) в блок #chatbox div.

    Автопрокрутка

    Как мы, возможно, видели в других приложениях чатов, содержимое автоматически прокручивается вниз, если контейнер лога чата (#chatbox) переполняется. Мы воплотим простую и похожую возможность, которая будет сравнивать высоту полосы прокрутки контейнера до и после того, как мы выполним ajax запрос. Если высота полосы прокрутки стала больше после запроса, мы используем эффект анимации jQuery, чтобы прокрутить блок #chatbox div.

    //Load the file containing the chat log function loadLog(){ var oldscrollHeight = $("#chatbox").attr("scrollHeight") - 20; //Scroll height before the request $.ajax({ url: "log.html", cache: false, success: function(html){ $("#chatbox").html(html); //Insert chat log into the #chatbox div //Auto-scroll var newscrollHeight = $("#chatbox").attr("scrollHeight") - 20; //Scroll height after the request if(newscrollHeight > oldscrollHeight){ $("#chatbox").animate({ scrollTop: newscrollHeight }, "normal"); //Autoscroll to bottom of div } }, }); }

    • Сначала мы сохраним высоту полосы прокрутки блока #chatbox div в переменную oldscrollHeight перед выполнением запроса.
    • После того, как наш запрос вернет успех, мы сохраним высоту полосы прокрутки блока #chatbox div в переменную newscrollHeight.
    • Затем мы сравним высоту полосы прокрутки в обеих переменных, используя конструкцию if. Если newscrollHeight больше, чем oldscrollHeight, мы используем эффект анимации, чтобы прокрутить блок #chatbox div.
    Постоянное обновление лога чата

    Теперь может возникнуть вопрос, как часто мы будем обновлять новые данные, переданные между пользователями. Или перефразируя вопрос, с какой регулярностью мы будем отправлять постоянные запросы на обновление данных?

    SetInterval (loadLog, 2500); //Reload file every 2500 ms or x ms if you wish to change the second parameter

    Ответ на наш вопрос находится в функции setInterval. Эта функция будет запускать нашу функцию loadLog() каждые 2,5 секунды, которая будет запрашивать обновленный файл и делать автопрокрутку блока.

    Закончили

    Мы закончили! Я надеюсь, что вы изучили, как работает базовая система чата, и, если у вас есть какие-либо пожелания, я с радостью их приветствую. Это максимально простая система чата, которую вы можете создать как приложение чата. Вы можете оттолкнуться от нее и построить множественные чат комнаты, добавить админку, эмотиконы и т.д. Здесь ваш предел - это небо.

    Ниже привожу несколько ссылок, которые вы возможно захотите посмотреть, если задумаетесь о расширении этого приложения чата:

    • Защитите ваши формы ключами форм - избегайте XSS (межсайтового скриптинга) и подделок межсайтовых запросов.
    • Отправка формы без обновления страницы с использованием jQuery - расширьте наш ajax запрос
    • Как делать AJAX запросы на чистом Javascript - изучите, как работает кухня запросов на чистом javascript.
    • Следите за нами на

    Прежде чем создать чат для сайта, нужно понимать, что голосовые и текстовые вебчаты – важная особенность для интернет-проектов. Такой способ обеспечивает общение посетителей через интернет при помощи браузера. Этот способ реализован на веб-архитектуре клиента и Клиентский браузер является программой, которая запрашивает и принимает обратную информацию от сервера. Сервер работает на отдельном адресе, он принимает, хранит и отсылает информацию по запросу. Связь клиента с хостом сервера происходит по сетевому протоколу.

    Стандартные чаты устанавливаются пользователю на компьютер в виде программ. Второй вариант — интернет-чаты (общение в онлайн-интерфейсе).

    Интернет-чат является способом диалогового общения в реальном времени, выстроенной на основе Web-серверов. В вебчатах клиентскую часть сетевых приложений выполняет браузер, потому как в браузере существует язык JavaScript, на базе которого работают приложения по типу чатов.

    Чаты для общения с посетителями на сайте позволяют работать без дополнительной установки сторонних программ. Переписка между сервером и клиентами работает на разных технологиях. Обычно, программа клиентской части онлайн-чата разрабатывается на JavaScript, то есть реализована на Ajax.

    Делаем чат с помощью кода

    Создавать чаты для сайтов можно различными способами, но среди них выделяют два основных:

    Собственноручный, с помощью HTML. Это обычный документ, включающий библиотеки, таблицы стилей и скрипты JavaScript. Ниже представлен готовый код мини-чата:

    Используя JavaScript определим данный код внутри ul-элемента . Если нажать на “Write a message”, то выскакивает форма для сообщения. Вставляем код на станицу сайта.

    Специальные программы
  • Для примера можно взять ресурс, специализирующийся на создании чатов — Chatadelic.net (является частично платным). Проходим регистрацию и жмем на «Создать чат». После чего, придумываем название для чата, вписываем адрес блога, куда собираемся установить. Далее будет сгенерирован HTML-код, который и нужно поставить на страницы сайта.
  • Ознакомьтесь с сервисом, внимательно разберитесь с функциями в данном окне. Изучите инструкцию и оцените масштабы работы этим инструментом. Далее, настройте чат по Вашему желанию, поскольку здесь большое количество разных опций и каждый сможет персонализировать свой чат именно под себя.
  • Преимущества:
    • Можно администрировать и модерировать.
    • Звуковое сопровождение событий чата.
    • Подключение языка JavaScript.
    • Свои фоны и CSS-стили.
    • Обмен видео, ссылками, картинками.
    • Фильтрация нецензурной лексики.
    • Возможность ограничить скорость отправки сообщений.
    • Блокировка неугодных пользователей.
    • Статистика работы.
    • Интеграция в сайт.
    Сторонний софт

    Ниже хочу затронуть еще две популярные программы, которые устанавливает у себя на хосте Хорошим примером будут бесплатные приложения:

    • Redhelper — мощная система онлайн-консультирования и отличная бесплатная альтернатива на тарифе для некоммерческого использования. Установка простая и понятная — готовый код нужно загрузить на сайт аналогично счетчикам посещаемости и метрики. Зарегистрироваться и посмотреть функции можно на официальном сайте .
    • Siteheart (SiteHeart.com/ru/price)— современный и удобный инструмент, предлагает массу полезных решений, в том числе и установку приложений для работы через смартфон, а так же виджеты и расширения, ознакомиться можно на официальном сайте или скачать на других ресурсах.
    Где разумнее установить чат?

    Создать чат для сайта можно в таком месте, где он будет более заметен: этим местом может стать главная страница или страница статьи. Также, он может отображаться в виджете и футере. Как Вы уже поняли, установить его можно без особых навыков, знания кода и CSS стилей, все уже придумано, есть в свободном доступе, устанавливаем и пользуемся.

    Important!

    Не забудьте вписать правила поведения для тех, кто будет пользоваться чатом.

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