Chat за допомогою mysql і php. Пишемо чат на рнр

Chat за допомогою mysql і php. Пишемо чат на рнр

план

У даній статті ми будемо створювати простенький чат, який можна легко запустити на будь-якому сервері, на якому є підтримка PHP. Не потрібно ніяких баз даних, тому що вся інформація про чат буде зберігатися в простому текстовому файлі. Застосовувана технологія:

PHP - буде керувати всіма сторонніми матеріалами додатки
- Запис нових повідомлень в текстовий файл
- Читання нових повідомлень з текстового файлу
- Запит стану текстового файлу
- Основна безпеку

jQuery / javascript - управління клієнтською стороною додатки. Цей додаток розроблено AJAX, що означає, що повідомлення будуть з'являтися у спливаючому вікні (як ваші, так і співрозмовників), без вимог перезавантаження сторінки.
- Періодичний запит сервера на наявність нових повідомлень
- Додавання нових повідомлень у вікно чату
- Прокрутка вікна чату до нових повідомленнями
- Запит і установка імені користувача
- Обмеження розміру повідомлень, щоб уникнути величезних творів у вікні чату
- Основна безпеку

текстовий файл - зберігає історію чату

Відійдемо від плану

У даній статті ми охопимо різні цікаві речі і технології, і в кінцевому рахунку, отримаємо чат. Правда, такий чат буде складно назвати найкращим чатом з найбільшою кількістю можливостей. Ви не зможете кикать або банити людей. Кілька людей можуть ставити собі однакове ім'я. Ви не зможете бачити всіх активних учасників чату. Іншими словами, це вам не IRC. Це просто цікаве і веселе демо, яке навіть можна застосувати в декількох ситуаціях. Якщо у вас є бажання надалі поліпшити ваш чат і додати багато різних функцій, то ми б радили вам стежити за матеріалами нашого сайту!

Основна структура HTML

jQuery / PHP Chat


Your message:




Дивіться, трохи дорогоцінної розмітки. Насправді, 50% того, на що ви дивитеся, не має ніякого відношення до спрямованістю даної статті. Оформлення сторінки центрує речі. Подвійні div'и, застосовані до розмітки чату і вікна повідомлень використовуються лише для додавання (не дуже-то і потрібного) ефекту подвійний кордону вікна повідомлень.

Найважливішими областями є textarea з ідентифікатором «sendie», і div вікна повідомлень. На цьому буде вказувати javascript.

Частина движка на javascript

Ми збираємося домогтися трохи об'єктного орієнтування за допомогою javascript. Ми створимо функцію Чата, яка буде верхньому ланкою в зв'язці з іншими функціями, пов'язаними з речами, які належать до чату.

Function Chat () (
this.update \u003d updateChat;
this.send \u003d sendChat;
this.getState \u003d getStateOfChat;
}
UpdateChat буде давати запит серверу про наявність нових ліній в текстовому файлі. Якщо ж вони присутні, то функція опублікує їх у вікні чату. sendChat буде задіяна, коли повідомлення вже буде надруковано і буде натиснута кнопка відправки повідомлення. Функція пропустить дані на сервер для подальшої обробки. getStateOfChat опитує сервер про кількість ліній в текстовому файлі, що дозволяє порівняти дані і визначити, чи є нові рядки чи ні. Дана інформація повертається також як і JSON. А функції виглядають так:

// gets the state of the chat
function getStateOfChat () (
if (! instanse) (
instanse \u003d true;
$ .Ajax ((
type: "POST",
url: "process.php",
data: (
"Function": "getState",
"File": file
},
dataType: "json",
success: function (data) (
state \u003d data.state;
instanse \u003d false;
},
});
}
}

// Updates the chat
function updateChat () (
if (! instanse) (
instanse \u003d true;
$ .Ajax ((
type: "POST",
url: "process.php",
data: (
"Function": "update",
"State": state,
"File": file
},
dataType: "json",
success: function (data) (
if (data.text) (
for (var i \u003d 0; i< data.text.length; i++) {
$ ( "# Chat-area"). Append ($ ( "

"+ Data.text [i] +"

"));
}
}
document.getElementById ( "chat-area"). scrollTop \u003d document.getElementById ( "chat-area"). scrollHeight;
instanse \u003d false;
state \u003d data.state;
},
});
}
else (
setTimeout (updateChat, 1500);
}
}

// send the message
function sendChat (message, nickname)
{
updateChat ();
$ .Ajax ((
type: "POST",
url: "process.php",
data: (
"Function": "send",
"Message": message,
"Nickname": nickname,
"File": file
},
dataType: "json",
success: function (data) (
updateChat ();
},
});
}
Всі ці три функції використовують можливості AJAX в jQuery, а також пов'язують їх з PHP-файлом, який називається process.php. Його нам, звичайно ж, нам буде потрібно створити.

Частина движка на PHP

Частина інформації, яка передається з AJAX, є довільним значенням, і називається «function». Це просто дає файлу PHP інформацію про те, які речі потрібно виконати. Насамперед ми виставимо значення і налаштуємо перемикач оператора, який буде охоплювати всі можливі функції. Ми також встановимо чистий масив, в якому буде зберігатися значення, які будуть кодуватися в JSON, а потім передаватися назад.

Коли ми намагаємося активувати getState, буде читатися текстовий файл і прораховуватимуться число рядків. Після того, як ми оновлюємо сторінку, файл повністю прочитаний, і нові лінії повертаються назад. Коли ми відправляє повідомлення, то воно записується в текстовий файл, як нова лінія.

$ Function \u003d $ _POST [ "function"];

$ Log \u003d array ();

Switch ($ function) (

Case ( "getState"):
$ Lines \u003d file ( "chat.txt");
}
$ Log [ "state"] \u003d count ($ lines);
break;

Case ( "update"):
$ State \u003d $ _POST [ "state"];
if (file_exists ( "chat.txt")) (
$ Lines \u003d file ( "chat.txt");
}
$ Count \u003d count ($ lines);
if ($ state \u003d\u003d $ count) (
$ Log [ "state"] \u003d $ state;
$ Log [ "text"] \u003d false;
) Else (
$ Text \u003d array ();
$ Log [ "state"] \u003d $ state + count ($ lines) - $ state;
foreach ($ lines as $ line_num \u003d\u003e $ line) (
if ($ line_num\u003e \u003d $ state) (
$ Text \u003d $ line \u003d str_replace ( "\\ n", "", $ line);
}
}
$ Log [ "text"] \u003d $ text;
}

Case ( "send"):
$ Nickname \u003d htmlentities (strip_tags ($ _ POST [ "nickname"]));
$ Reg_exUrl \u003d "/(http|https|ftp|ftps)\\:\\/\\/+\\.(2,3)(\\/\\S*)?/";
$ Message \u003d htmlentities (strip_tags ($ _ POST [ "message"]));
if (($ message)! \u003d "\\ n") (
if (preg_match ($ reg_exUrl, $ message, $ url)) (
$ Message \u003d preg_replace ($ reg_exUrl, "". $ Url. "", $ Message);
}
fwrite (fopen ( "chat.txt", "a"), "". $ nickname. "". $ message \u003d str_replace ( "\\ n", "", $ message). "\\ n");
}
break;
}
echo json_encode ($ log);
?>
Візьмемося за справу

Нам буде потрібно написати трохи javascript, інакше свято так і не почнеться. Завантажте jQuery, довантажити наш «движок», потім виконайте кілька дій для того щоб зібрати кілька імен учасників чату, щоб вийшла розмова.

По ходу справи, давайте налаштуємо обмежувач довжини повідомлень і дамо функцію відправки повідомлень кнопці return.




Періодична перевірка наявності нових повідомлень

Нам буде потрібно використовувати функцію «update» для того, щоб опитувати наш текстовий файл на наявність нового тексту. Так як нам потрібно регулярний виклик функції update, ми використовуємо javascript-функцію setInterval ():


корисності

*
* Завантажити файли: (Cкачиваний: 2128)

В живому демо, я записую і відображаю IP-адреси тільки заради того, щоб перешкоджати несприятливим діям. Частенько анонімні чати викликають у людей бажання проявити себе з гіршого боку. Так що, раджу і вам записувати IP-адреси, в разі, якщо в подальшому знадобиться блокування того чи іншого IP.

замітка: Пам'ятайте, що цей додаток розроблено на PHP, так що ви не зможете просто завантажити файли і запустити їх у себе на комп'ютері, так як вам буде потрібно запустити локальний PHP-сервер. Також, при завантаженні файлів на сервер, не забувайте міняти права доступу до файлу «chat.txt», щоб сервер міг записувати в нього дані.

Привіт, шановні web-майстри! Я впевнений, що ви хочете, щоб ваш сайт активно відвідували, щоб відвідувачам було цікавий матеріал, розміщений на вашому сайті, щоб вони поверталися знову і знову. Швидше за все, у вас на сайті вже працює форум і гостьова книга. Але чогось все ж не вистачає ... Чого? Чату! Чату, в якому можна було б поспілкуватися, через якого відвідувачі будуть повертатися знову і знову ...

Що для цього потрібно?

Так у чому ж справа?! Давайте напишемо свій власний чат, який буде відповідати всім вашим вимогам, буде швидким і компактним.
Тепер давайте визначимося, що повинен вміти наш чат.
По-перше, він повинен реєструвати нових відвідувачів і забезпечувати вхід вже зареєстрованим.
По-друге, він повинен вміти вставляти смайлики - ці веселі маленькі картинки, без яких сьогодні не обходиться більшість чатів.
По-третє, користувачі повинні мати можливість спілкуватися в чаті, тобто особисто один з одним, щоб інші відвідувачі не бачили їх розмови (природно, крім адміністратора J)

Тепер визначимося, які технології ми будемо використовувати при розробці чату. Писати будемо на PHP, а для реєстрації користувачів інформацію про них будемо зберігати в базі даних MySQL. Сам же текст болталки (Болталка назвемо інформацію, якою обмінюються відвідувачі) буде знаходитися в текстовому файлі.

Для початку напишемо простенький чат, без Привату і адміністраторських функцій, в якому відвідувачі можуть реєструватися, спілкуватися один з одним, вставляти смайлики.

Виглядати він буде приблизно так.

Тепер я уточню ще кілька деталей, які необхідно обговорити ще до написання коду.

У текстовому файлі chat.txt (В ньому буде зберігатися наша «болталка») має перебувати не більше 20 останніх повідомлень (для зменшення трафіку і прискорення завантаження чату).

При вході в чат відвідувач повинен буде ввести логін (він же нік) і пароль, причому якщо такий логін вже зберігається в нашій таблиці бази даних, то скрипт повинен перевірити, чи вірний пароль, і якщо вірний, то перенаправити відвідувача в чат, а якщо невірний - повернути на головну сторінку для повторного введення логіна і пароля і повідомити йому, що пароль невірний. Якщо ж такого логіна в таблиці немає, то потрібно зареєструвати відвідувача, тобто додати в таблицю дані про нього (логін і пароль). Але окремої сторінки для реєстрації нового користувача (далі будемо називати відвідувачів «чатнікамі» J) робити не потрібно, інакше необхідність виробляти якісь додаткові дії для входу в чат відлякає досить значну частину відвідувачів.

Крім того, якщо ви плануєте створити невеликий чат, наприклад, для спілкування з друзями, то було б непогано записувати все, що вимовлялося в чаті, в окремий файл (назвемо його history.txt). Надалі можна буде зробити деякі дії над цим файлом (наприклад, кожен день о 12.00 відсилати вміст цього файлу вам на e-mail, а після цього очищати його). Але це будемо робити після того, як наш чат вже буде працювати.

Які файли потрібні для створення чату?

Тепер визначимося, які файли потрібно створити для роботи чату. Нижче наведено повний список файлів чату з описом, для чого потрібен той чи інший файл.

index.php - головна сторінка чату. Виводить на екран форму для введення логіна і пароля, а також інформацію, скоько зараз людина в чаті (і можливо, останні 20 реплік)

chat.php - ну, а це наш найголовніший і важливий файл. Що він тільки не робить: перевіряє відвідувачів на вірність пари логін-пароль, реєструє відвідувача, а крім того, підключає до себе досить велику кількість описаних нижче РНР-файлів.

chat.inc.php - це РНР-файл містить в собі HTML-документ з фреймами, без яких не обходиться не один поважаючий себе чат, а також невеликий шматок РНР-коду.

send.php - цей файл виводить на екран форму з текстовими полями для введення реплік, вставки смайликів і інших корисних речей, а також поле для вибору співрозмовника (або для Обен в «Болталка», або для спілкування в «приваті»).

smiles.php - тут і так все зрозуміло. Цей файл буде в циклі виводити смайлики на екран і генерувати JavaScript-код для вставки коду смайлика в рядок репліки чатніка.

add.php - цей файл буде оформляти репліки чатніков і вставляти їх в файл chat.txt.

del.php - при виході чатніка з чату видаляє чатніка зі списку активних (тобто в даний момент обговорюють свої важливі проблеми і знаходяться в чаті).

includer.php - містить в собі 3 змінних: $ myserver, $ mylogin, $ mypassword. Змінна $ myserver вказує сервер, на якому знаходиться БД (зазвичай це - localhost), $ mylogin і $ mypassword - логін і пароль для підключення до БД.

text.php - РНР-файл, який відповідає за оновлення інформації в «Болталка».

users.php - РНР-файл, який виводить на екран список знаходяться в даний момент в чаті відвідувачів, а також генерує JavaScript-код для вставки ника обраного чатніка в віконце введення репліки.

logo.html - файл, що виводить логотип чату на екран.

chat.txt - а це «болталка» чату, в ній зберігаються останні 20 реплік.

history.txt - його призначення вже було описано вище.

chat_users.sql - SQL-файл, який містить структуру таблиці chat_users

logo_chat.jpg - логотип чату.

style.css - таблиця стилів, яка використовується в чаті.

1 ... 7.gif - 7 малюнків-смайликів, які використовуються в чаті.

А тепер потрібно згадати один момент, без пояснення якого ніяк не можна обійтися.

Що ще?

Як зазвичай люди йдуть з чату? Правильно, рідко хто натискає на кнопку вихід, зазвичай просто закривають вікно з чатом. Нам потрібно відстежувати ці моменти, щоб вчасно прибрати пішли чатніков зі списку знаходяться в чаті. А, припустимо, у людини щось сталося і він оновлює сторінку. Вплне реальна ситуація. Так ось, в обох цих випадках відбувається подія Unload. Його можна відстежити за допомогою JavaScript-обробника onUnload. Ця подія відбувається в поточному вікні безпосередньо перед вивантаженням документа. Так ось, при кожному з вищезгаданих дій відвідувача треба належним чином відреагувати: якщо чатнік виходить з чату, то видаляємо його зі списку активних відвідувачів, а якщо просто оновлює - то нічого не робимо. Але у нас же на різні дії реагує один і той же обробник! Як же вирішити цю проблему? Про це я докладніше розповім при описі роботи файлів chat.inc.php, send.php і del.php.
Якщо Ви хочете подивитися, як працює описаний в статті чат, можете зайти на http://chat.micro.org.ua і переконатися, що все описане в цій статті працює J.

починаємо роботу

Ну, а тепер, коли начебто все питання з'ясовані, можна приступати до безпосереднього набору коду. початку я буду писати повний код файлу, а потім буду детально описувати, що він робить. А перед набором коду створіть порожні файли chat.txt і history.txt.
Крім того, в той же каталог, в якому у вас знаходиться чат, покладіть 7 gif-файлів - це наші смайлики. Я думаю, що ви зможете знайти 7 смайликів в Інтернеті J, але все ж якщо у вас немає смайликів, можете взяти їх з http://chat.micro.org.ua.
Тепер створіть таблицю стилів style.css, вона знадобиться нам надалі для оформлення чату, хоча якщо ви не хочете використовувати CSS, можете не створювати її. Якщо ви все ж вирішили використовувати CSS, створіть два класи: normal і title, вони нам ще знадобляться J.
Тепер нам потрібен логотип чату. У мене логотипом є слово «MICRO», написане на синьому тлі золотими літерами висотою 55 і шириною 195 пікселів. Цей момент залишаю на Ваш розсуд.
Ну, а тепер - відкривайте свій улюблений РНР-редактор (сподіваюся, що це не блокнот J) і починайте ... Я почну з другорядних за своєю важливістю файлів. Щоб потім не відволікатися на їх опис під час пояснення роботи основних файлів.

Chat_users.sql

Для початку потрібно створити таблицю «chat_users» в базі даних. Отже, ось її код:

CREATE TABLE chat_users (
id int (10) NOT NULL auto_increment,
login text NOT NULL,
password text NOT NULL,
privat text NOT NULL,
active tinyint (2) NOT NULL default "0",
PRIMARY KEY (id)
) TYPE \u003d MyISAM;

Ми створили таблицю, в якій знаходиться п'ять стовпців:
1. id - ідентифікатор чатніка.
2. login - логін (нік) чатніка
3. password - пароль чатніка
4. privat - це заділ на майбутнє, коли ми будемо працювати над «Півато»
5. active - тут буде зберігатися лише одна цифра: 1 - якщо чатнік в даний момент знаходиться в чаті, і 0, якщо чатнік в даний момент не в чаті.
Тут немає нічого складного.

Incuder.php

$ Myserver \u003d "";
// Зазвичай це - localhost
$ Mylogin \u003d "";
// Ваш логін
$ Mypassword \u003d ""; //?\u003e
//Ваш пароль

Це - ваші дані для підключення до бази даних.

Logo.html









Тут і пояснювати особливо нічого. Ми створюємо HTML-документ, вставляємо в нього зображення-логотип чату і притискаємо його до Раям сторінки за допомогою рядка «TOPMARGIN \u003d 0 LEFTMARGIN \u003d 0 RIGHTMARGIN \u003d 0 MARGINHEIGHT \u003d 0 MARGINWIDTH \u003d 0».

Ну, а тепер приступимо до основних файлів чату.

Index.php




Чат на MICRO.ORG.UA



























Ласкаво просимо в Чат Мікропортал
Ваше ім'я (або нік):
Пароль (повинен відрізнятися від ника):
Примітка: якщо Ви заходите сюди в перший раз, то введіть свій пароль, і він буде запомнен системою


Програмування чату і розробка дизайну Ілля Барков



Поки що в цьому документі немає РНР-дескрипторів, але потім, при розширенні функціональності чату, тут будуть виводитися деякі дані про роботу чату.
У цьому файлі ми виводимо вхідну форму для введення логіна (ніка) і пароля, також за допомогою JavaScript перевіряємо, щоб поля для введення логіна і пароля не залишалися порожніми, а також, перевівши в нижній регістр і логін, і пароль, порівнюємо їх, щоб вони не збігалися (з міркувань елементарної захисту). Ну і ще виводимо заголовок чату (його назва) і copyright'и.
Дані з форми передаються в файл chat.php. Його то ми зараз і розглянемо.

Chat.php

error_reporting (0);
include ( "includer.php");
$ Login \u003d $ _ POST [ "login"];
$ Password \u003d $ _ POST [ "password"];
if (($ login! \u003d "") && ($ password! \u003d ""))
{
echo " Чат на MICRO.ORG.UA - ".strtoupper ($ login)."";
mysql_select_db ( "micro");
# Перевіряємо, чи зареєстрований такий нік в чаті

$ Result \u003d mysql_query ($ sql);

# Якщо людину з таким ніком немає в чаті, то реєструємо його і робимо активним
if (($ num_results \u003d\u003d "") || ($ num_results \u003d\u003d 0))
{
$ Sql \u200b\u200b\u003d "INSERT INTO` chat_users` VALUES ( "", "". $ Login. "", "". $ Password. "", "", "1") ";
$ Result \u003d mysql_query ($ sql);
include ( "chat.inc.php");
}
# Інакше перевіряємо: якщо він ввів вірний пароль - він входить в чат, інакше переходить на головну сторінку
else
{
$ Sql \u200b\u200b\u003d "SELECT * FROM` chat_users` WHERE `login` \u003d" ". $ Login." "And` password` \u003d "". $ Password. "" ";
$ Result \u003d mysql_query ($ sql);
$ Num_results \u003d mysql_num_rows ($ result);
if (($ num_results \u003d\u003d "") || ($ num_results \u003d\u003d 0))
{
echo "";
}
else
{
$ Sql \u200b\u200b\u003d "SELECT * FROM` chat_users` WHERE `login` \u003d" ". $ Login." "";
$ Result \u003d mysql_query ($ sql);
$ Num_results \u003d mysql_num_rows ($ result);
$ Row \u003d mysql_fetch_array ($ result);
$ Id \u003d $ row [ "id"];
$ Sql \u200b\u200b\u003d "DELETE FROM` chat_users` WHERE `id` \u003d". $ Id;
$ Result \u003d mysql_query ($ sql);
$ Sql \u200b\u200b\u003d "INSERT INTO` chat_users` VALUES ( "". $ Id. "", "". $ Login. "", "". $ Password. "", "", "1") ";
$ Result \u003d mysql_query ($ sql);
include ( "chat.inc.php");
}
}
}
else
{

}
?>

Що ми робимо в цьому файлі? Насамперед виставляємо придушення помилок (error_reporting (0)) - щоб не трапилося, відвідувачі не повинні бачити сообщеніяоб помилках. Далі підключаємо файл includer.php з даними для підключення до бази даних. Вибираємо з масиву POST значення логіна і пароля і, якщо вони не порожні (хоч ми вже й передбачили такий варіант в файлі index.php, але раптом хтось набере відразу http: //chat.***.com/chat.php , то в цьому випадку ми перекидаємо його на index.php), продовжуємо роботу сценарію. Потім перевіряємо, чи є у нас в таблиці chat_users користувач з таким іменем. Якщо немає (нік чи не зайнятий), то заносимо логін і пароль в таблицю - таким чином проходить реєстрація. Якщо ж такий логін вже є в таблиці, то перевіряємо, чи збігається пароль, введений відвідувачем, з паролем, що знаходяться в таблиці. Якщо немає, то створюємо JavaScript-код, що містить повідомлення про те, що пароль невірний, і перекидаємо його на сторінку index.php. Якщо ж все нормально (відповідна пара "логін-пароль» знайдена в таблиці, то видаємо відвідувачеві файл chat.inc.php). Крім тго, виробляємо деякі маніпуляції J над таблицею: заносимо в поле «active» цього відвідувача число 1, тобто робимо його активним.

Chat.inc.php

"">









У цьому файлі міститься набір фреймів, в яких містяться РНР-файли.
Коли спрацьовує подія onUnload, обробка подій передається файлу del.php. Детальніше про роботу цього файлу - в кінці статті.
Зверніть увагу - в кожен з документів, що знаходяться у фреймах (виняток - logo.html і smiles.html), ми передаємо за допомогою рядка запиту логін відвідувача. Навіщо це потрібно? Про це я розповім пізніше.

Text.php







error_reporting (0);

# Якщо в чаті більше 20 рядків, то прибираємо самі ранні, щоб у вікні залишалося не більше 20 рядків

$ File \u003d file ( "chat.txt");
$ Count \u003d count ($ file);

If ($ count\u003e $ num)
{

For ($ i \u003d ($ count- $ num); $ i<$count; $i++)
{
$ Str \u003d $ str. $ File [$ i];

}

$ Fp \u003d fopen ( "chat.txt", "w");
fwrite ($ fp, $ str);
}

$ File \u003d file ( "chat.txt");
$ Count \u003d count ($ file);

For ($ i \u003d 0; $ i<$count; $i++)
{
echo $ file [$ i]. "
";
}
?>


На цей документі варто звернути особливу увагу.
За допомогою рядка « »Ми виставляємо частоту оновлення файлу - п'ять секунд. За моїми спостереженнями, 5 секунд для нашого чату - оптимальне частота оновлення, адже файл, який буде кожен раз зчитуватися, складається всього лише з 20 рядків, тому чим швидше оновлюється text.php, тим для нас краще.
Природно, виставляємо придушення повідомлень про помилки.
Далі за допомогою функції file () ми зчитуємо інформацію з файлу chat.txt і виводимо інформацію на екран, попередньо замінюючи символи «\\ n» (перенесення рядка) на «
».
Зверніть увагу на рядки:
$ Num \u003d 20;
if ($ count\u003e $ num)
{

For ($ i \u003d ($ count- $ num); $ i<$count; $i++)
{
$ Str \u003d $ str. $ File [$ i];
$ Str \u003d ereg_replace ( "\\ r \\ n", "\\ n", $ str);
}

$ Fp \u003d fopen ( "chat.txt", "w");
fwrite ($ fp, $ str);
}
За допомогою цього коду ми залишаємо в «Болталка» лише останні 20 рядків. Ця перевірка виконується після того, як кількість рядків у файлі chat.txt перевищить 20.
І ще один важливий момент. Наш документ повинен прокручуватися вниз, щоб чатнікі бачили найостанніші репліки. Цього ми досягаємо, застосовуючи в тезі обробник події Load:

Smiles.html








")">

")">

")">

")">

")">

")">

")">



За допомогою JavaScript ми вставляємо в рядок репліки, що знаходиться в файлі send.php, код смайлика (наприклад, для п'ятого смайлика, що має ім'я 5.gif, код юудет таким:<5>). Пізніше, в файлі add.php, ми замість коду<5> вставимо , І у чатніков на екран виведеться нормальний смайлик.

Send.php
















error_reporting (0);
$ Login \u003d $ _ GET [ "login"];
?>
!}







В цей файл містяться дві форми. Перша з них містить два текстових поля (одне для введення імені співрозмовника, інше - для введення репліки) і кнопку «Сказати», яка передає дані цієї форми в файл add.php. Друга включає в себе лише одну кнопку «Вихід», натискання на яку активізує файл del.php і виводить відвідувача з чату. Звичайно, навряд чи хтось восполь цією кнопкою, але все ж ...
Крім того, обидві форми передають в файли-обробники логін чатніка.

Users.php



error_reporting (0);
include ( "includer.php");
$ Login \u003d $ _ GET [ "login"];
?>








$ Db \u003d mysql_connect ($ myserver, $ mylogin, $ mypassword);
mysql_select_db ( "micro");
$ Sql \u200b\u200b\u003d "SELECT * FROM` chat_users` WHERE `active` \u003d 1";
$ Result \u003d mysql_query ($ sql);
$ Num_results \u003d mysql_num_rows ($ result);
for ($ i \u003d 0; $ i<$num_results; $i++)
{

echo "
";
}
?>













Зараз в чаті:
". ($ I + 1).". ".Stripslashes ($ row [" login "])."


рекомендую:


1. Мікропортал

2. Наші форуми

3. Послуги


Правила чату:


1. Admin завжди правий.

2. Якщо Admin неправий, дивись пункт 1.

3. Якщо йдете - скористайтеся кнопкою "Вихід"

4. За флуд і лайки ви можете бути видалені з чату



За допомогою цього файлу ми виводимо на екран список активних відвідувачів (тобто тих, у яких в даний момент в поле «active» стоїть значення 1). Цей файл оновлюється кожні 10 секунд.
Крім того, ми виводимо в цьому файлі список сайтів, які рекомендуємо відвідати чатнікам (авось, хтось із них і клацне по посиланню, яке, до речі, відкриється в новому вікні), а також правила чату. Я не став надто перевантажувати відвідувачів правилами: не лаятися, не флудити, слухатися Admin'а. До речі, про Admin'e - в наступній статті я розповім вам, що це за Admin, і що ми будемо з його допомогою робити.

error_reporting (0);
$ File \u003d fopen ( "chat.txt", "a");
$ Filehis \u003d fopen ( "history.txt", "a");
for ($ i \u003d 1; $ i<8; $i++)
{
$ Message \u003d ereg_replace ( "<".$i.">","", $ Message);
}
# За допомогою цих рядків ми виділяємо з репліки адреси сайтів і e-mail'и.
\\\\ 2 ", $ message);
$ Message \u003d eregi_replace ( "([[: space:] () [()]) (www. [ [Email protected]:% _ \\ +. ~ #? & // \u003d] +) "," \\\\ 1 \\\\ 2 ", $ message);
$ Message \u003d eregi_replace ( "([[: space:] () [()]) (http: //. [ [Email protected]:% _ \\ +. ~ #? & // \u003d] +) "," \\\\ 1 \\\\ 2 ", $ message);
$ Message \u003d eregi_replace ( "[_ a-z0-9 -] + (\\. [_ A-z0-9 -] +) * @ + (\\. +) *", " \\0", $ Message);

Fwrite ($ file, "\\ n [". Date ( "H: i: s"). "] ". $ Login." \u003d\u003e ". $ Who." : ". $ Message);
fwrite ($ filehis, "\\ n [". date ( "H: i: s"). "] ". $ Login." \u003d\u003e ". $ Who." : ". $ Message);

Header ( "Location: send.php? Login \u003d". $ Login);
?>
Отримавши з файлу send.php повідомлення, ми належним чином форматіруем його: виділяємо e-mail'и, адреси сайтів, за допомогою символів «\u003d\u003e» поділяємо, хто до кого звертається і виділяємо звернення жирним шрифтом. Потім відкриваємо файл chat.txt і додаємо в його кінець новий рядок, що містить тільки що отформатированную репліку. Після цього повертаємо відвідувача назад до send.php.

Нарешті ми підійшли до найцікавішого місця роботи чату. Як я вже згадував на початку статті, перед нами виникає проблема. Якщо людина просто оновлює вікно чату, то ми з ним нічого не робимо, а якщо закриває вікно чату, то видаляємо його зі списку активних відвідувачів. Як цього добитися? Дивіться, як працює файл del.php.
error_reporting (0);
include ( "includer.php");
$ Login \u003d $ _ GET [ "login"];
$ Db \u003d mysql_connect ($ myserver, $ mylogin, $ mypassword);
mysql_select_db ( "micro");
$ Sql \u200b\u200b\u003d "SELECT * FROM` chat_users` WHERE `login` \u003d" ". $ Login." "";
$ Result \u003d mysql_query ($ sql);
$ Row \u003d mysql_fetch_array ($ result);
$ Id \u003d $ row [ "id"];
$ Password \u003d $ row [ "password"];
$ Privat \u003d $ row [ "privat"];
$ Sql \u200b\u200b\u003d "DELETE FROM` chat_users` WHERE `id` \u003d". $ Id;
$ Result \u003d mysql_query ($ sql);
$ Sql \u200b\u200b\u003d "INSERT INTO` chat_users` VALUES ( "", "". $ Login. "", "". $ Password. "", "". $ Privat. "", "0") ";
$ Result \u003d mysql_query ($ sql);
Header ( "Location: index.php");
?>

Насправді при будь-якій зміні документа ми виставляємо чатніку в «active» значення 0. Але якщо чатнік йде, то це значення 0 так і залишиться в його профілі, а якщо чатнік просто оновлює сторінку, то сценарій del.php спочатку заносить в профіль чатніка значення 0, а потім, після оновлення, сценарій chat.php заносить в профіль цього чатніка значення 1. Тобто по суті для чатніка нічого не змінюється - він вийшов, і його логін забирається зі списку активних відвідувачів, оновив сторінку - і все нормально, працює так, як і повинно було працювати.

В общем-то, всі файли, які я перерахував на початку статті, описані. Тепер у нас в підсумку є чат, нормально працюючий, вміє реєструвати нових відвідувачів, впускати вже зареєстрованих, створює комфортні умови для спілкування відвідувачів, що вміє вирішувати багато проблем, що виникають в процесі роботи, вміє розбавляти спілкування веселими смайликами і має багато-багато інших корисних функцій ...

Ну, а в наступній статті ми розширимо можливості нашого чату: створимо для чатніков можливість поспілкуватися в «приваті», інтерфейс адміністрування чату, а також сценарій Admin'a, який буде реагувати на все, що відбувається в чаті, який буде що-небудь оголошувати і, можливо, зможе відповідати на прості питання.

На цей раз все. Якщо у Вас будуть якісь питання - пишіть, постараюся вам відповісти. Успіхів!

Важливим аспектом при розробці комерційного веб-сайту є організація зворотного зв'язку з його аудиторією. І, звичайно ж, пряме спілкування з відвідувачами сайту набагато краще ніж листування по e-mail або заповнення контактних форм. Саме для цих цілей і було розроблено безліч програм для спілкування користувачів за допомогою текстових, аудіо або відео повідомлень

Скрипти для організації чатів, З якими ми хочемо вас познайомити, можна легко вбудувати в Ваш сайт, що дозволить підняти на нову висоту рівень спілкування відвідувачів сайту між собою і з онлайн консультантом корпоративного сайту або інтернет-магазину. Відразу обмовимося - всі зібрані тут скрипти відносяться до класу преміум, тобто не безкоштовні. Однак їх вартість знаходиться в цілком розумних межах, і не зробить помітного впливу на Ваш бюджет. Незабаром ми опублікуємо добірку з безкоштовними скриптами для створення чату. Підписуйтесь на нас в соціальних мережах або на RSS, щоб не пропустити пост.

PHP Flat Visual Chat

цей унікальний чат для організації онлайн консультанта, Крім свого основного призначення, може служити своєрідним гідом по Вашому сайту. У процесі спілкування Ви можете візуально виділити той чи інший елемент на сторінці сайту і показати його користувачеві. Цей автономний продукт має власну незалежну панель для управління акаунтами операторів.
Вартість: $ 16

ShoutCloud

ShouldCloud - гнучкий і володіє багатими можливостями PHP / AJAX чат, Який виключно легко інтегрується в сайт протягом декількох хвилин. Він не вимагає MySQL бази даних, а потрібні для роботи файли створює автоматично. Графічний інтерфейс автоматично під розміри контейнера, в якому розміщується чат.
Вартість: $ 8

Chat Plus Pro

Chat Plus PRO - потужний PHP / AJAX скрипт для чату з адаптивним інтерфейсом. З цим чудовим продуктом Ваші відвідувачі проведуть не одну безсонну ніч в неквапливих бесідах. У повідомленнях допускається використовувати зображення, посилання на відео в youtube або інші сайти. Підтримуються профілі користувачів, в які вони можуть розміщувати різну особисту інформацію. Можливе створення окремих «кімнат» за інтересами та розміщення їх на різних сайтах.
Вартість: $ 24

Social Meet Script

Social Meet Script виконаний в так званому tinder-стилі - додатки для пошуку знайомств і спілкування. Відкривши чат Ви зможете вибрати вподобаного Вам користувача і, якщо він відповість Вам взаємністю, почати спілкування. Social Meet Script має вбудований чат, систему геолокації, а також VIP-членство.
Вартість: $ 23

PHP Chat with Web

ClientEngage Visitor Chat - скрипт онлайн консультанта з широкими можливостями налаштування. Простий і зручний інтерфейс адміністратора. Примітною особливістю цього чату є наявність Windows-клієнта - Ви зможете бачити повідомлення, що приходять в області повідомлень на робочому столі і спілкуватися з клієнтами безпосередньо з Windows, навіть не заходячи в адміністративну панель сайту.
Вартість: $ 32

Quick PHP Chat

Quick PHP Chat - легкий у використанні скрипт для організації чату на Вашому сайті. Має 10 вбудованих колірних схем, що дозволяють налаштувати зовнішній вигляд відповідно до колірної гами Вашого сайту. Адміністративні функції дозволяють керувати акаунтами користувачів, зокрема «банити» окремих користувачів, а також повідомляти їм причину «бана».
Вартість: $ 7

PHP Support Center and Live Chat

PHP Support Center - система управління техподдержкой в мінімалістичному стилі. Орієнтований на організацію служби техпідтримки, дозволяє закріплювати операторів та адміністраторів за окремими компаніями, замовниками, відділами та користувачами. Існує можливість використання редактора mailchip для додання Вашим дискусійного листа унікального виду.
Вартість: $ 32

PHP Live Support Chat

PHP Live Chat - автономне додаток онлайн консультанта, Яке може бути вбудовано в будь-який сайт. На відміну від сервісів, що надають послугу миттєвого Ви отримуєте повну свободу в його використанні. Ніяких абонплат - заплатили один раз і користуєтеся скільки завгодно!
Вартість: $ 19

Boom Chat

Boomchat має доброзичливий користувальницький інтерфейс і ряд унікальних особливостей. Повністю інтерфейс забезпечує зручність використання на будь-яких пристроях, будь то комп'ютер, планшет або смартфон.
Вартість: $ 18

ReadyChat

Новий продукт від розробника DesignSkate. Значно вдосконалений в порівнянні з попередньою розробкою «moChat»: більш оптимізований і приємний на вид як для користувача, так і для адміністратора.
Вартість: $ 15

Simple Chat Script

Простий і легкий SimpleChat можна інтегрувати в будь-яку php-сторінку. має

Думаю, що кожен з Вас знає, що таке чат. І дуже часто на сайтах можна зустріти або маленькі чати, або досить великі і складні. У цій статті я опишу принцип створення чату. Зверніть увагу, що в цій статті не буде готового коду " скопіював-вставив", А тільки алгоритм, за допомогою якого Ви, володіючи необхідними знаннями, зможете зробити чат.

Ключова особливість чату в тому, що його вміст оновлюється автоматично. Звідси і виникають всі труднощі.

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

  • id - унікальний ідентифікатор.
  • name - ім'я, що залишив повідомлення. Тут також може бути, наприклад, user_id, що означає id користувача з іншої таблиці.
  • message - сам текст повідомлення.
  • date - дата відправлення повідомлення.

Безумовно, це тільки приклад. Ви можете додавати ще масу інших полів, тим самим, розширюючи можливості Вашого чату.

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













ім'я Повідомлення Дата
ім'я Повідомлення Дата




В даному коді знову ж все як приклад. Можна все сміливо міняти, але принцип повинен бути тим же: є місце, де виводяться повідомлення, причому вони виводяться в однаковому вигляді. Разом з полем, де виводяться повідомлення, є текстове поле і кнопка " Надіслати".

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

тепер займемося JavaScript:

І наприкінці, PHP-код (Додавання нових повідомлень):

/ * Отримуємо дані, отримані з JavaScript * /
$ Message \u003d $ _POST [ "message"];
$ Name \u003d $ _POST [ "name"];
$ Date \u003d date (); // Дізнаємося поточний час і дату
/ * Тут додаємо в таблицю новий запис * /
?>

І останній файл, які потрібно - це отримання всіх повідомлень з таблиці:

/ * Витягуємо всі записи з таблиці * /
/ * Отримуємо двовимірний масив з отриманих даних * /
/ * Перетворимо масив в json-формат і повертаємо його в javascript, де він вже буде виводитися * /
?>

Все, коло замкнулося, і чат заробив. Як бачите, зробити чат досить складно і потрібно володіти великим багажем знань. Але я сподіваюся, що дана стаття здорово полегшить Вам цю задачу. Абсолютно будь-який чат, який би він складний не був, заснований на принципах, описаних в даній статті, тому сміливо можете його використовувати як каркас.

HTML

Як завжди перший крок присвячений розмітці HTML. Наш документ будується відповідно до HTML5, що дозволяє використовувати новий, коротший синтаксис DOCTYPE, І опускати атрибут type в тегах script.

index.html

Робимо AJAX веб чат з використанням PHP, MySQL і jQuery | Демонстрація для сайту сайт

Для оптимізації завантаження, стилі включені в секції head, А файли JavaScript підключаються внизу документа, перед закриває тегом body.

Для організації прокручуваному області з рядками чату ми використовуємо плагін jScrollPane. Даний плагін має свої власні стилі, який включаються в секції head.

Розмітка чату складається з чотирьох основних елементів div - верхній панелі, контейнера чату, контейнера користувачів і нижній панелі. Останній div містить форми для реєстрації користувача і відправки повідомлення. Форма відправки повідомлення за замовчуванням прихована і виводиться, тільки якщо користувач успішно увійшов в систему чату.

Потім ми включаємо файли JavaScript: бібліотеку jQuery, плагін mousewheel (використовується в jScrollPane), плагін jScrollPane і наш файл script.js.


Схема бази даних

Перш ніж перейти до частини PHP, потрібно спочатку поглянути на організацію даних чату в базі даних MySQL.

Для нашого скрипта ми використовуємо дві таблиці. В таблиці webchat_users зберігається інформація про учасників чату. Таблиця має поля id , name , gravatar і last_activity . поле name визначено як унікальне, таким чином запобігає використання імен, що дублюються в чаті.


Іншим корисним властивістю поля з унікальним індексом є те, що запит на вставку даних завершиться з помилкою і властивість inserted_rows об'єкта MySQLi буде встановлено в значення 0, якщо спробувати вставити дублюються рядки. У класі PHP Chat дане властивість буде активно використовуватися.

поле last_activity містить значення часу. Значення оновлюється кожні 15 секунд для кожного користувача. Поле також визначено як індекс, що дозволяє швидко видаляти неактивних користувачів (значення в поле last_activity більше 15 означає, що користувач паче не переглядає вікно чату).

Таблиця webchat_lines містить записи в чаті. Зауважте, що ми зберігаємо ім'я автора і gravatar тут теж. Таке дублювання дозволяє нам відмовитися від використання витратної директиви join при запиті останніх записів - найбільш часто використовуваних в нашому додатку.


Визначення таблиць є в файлі tables.sql в исходниках. Ви можете використовувати текст запитів для створення таблиць. Також, при установці чату на свій хост, потрібно поміняти установки в ajax.php на ваші дані для з'єднання з базою MySQL.

PHP

Тепер у нас є база даних, давайте обговоримо скрипт PHP, який управляє чатом.

Перший файл, який ми розглянемо, ajax.php. Він обробляє запити AJAX від клієнтської частини з jQuery і виводить дані в форматі JSON.

ajax.php

/ * Конфігурація бази даних. Додайте свої дані * / $ dbOptions \u003d array ( "db_host" \u003d\u003e "", "db_user" \u003d\u003e "", "db_pass" \u003d\u003e "", "db_name" \u003d\u003e ""); / * Кінець секції конфігурації бази даних * / error_reporting (E_ALL ^ \u200b\u200bE_NOTICE); require "classes / DB.class.php"; require "classes / Chat.class.php"; require "classes / ChatBase.class.php"; require "classes / ChatLine.class.php"; require "classes / ChatUser.class.php"; session_name ( "webchat"); session_start (); if (get_magic_quotes_gpc ()) (// Видаляємо зайві Слеш array_walk_recursive ($ _ GET, create_function ( "& $ v, $ k", "$ v \u003d stripslashes ($ v);")); array_walk_recursive ($ _ POST, create_function ( " & $ v, $ k "," $ v \u003d stripslashes ($ v); "));) try (// З'єднання з базою даних DB :: init ($ dbOptions); $ response \u003d array (); // Обробка підтримуваних дій: switch ($ _ GET [ "action"]) (case "login": $ response \u003d Chat :: login ($ _ POST [ "name"], $ _ POST [ "email"]); break; case "checkLogged" : $ response \u003d Chat :: checkLogged (); break; case "logout": $ response \u003d Chat :: logout (); break; case "submitChat": $ response \u003d Chat :: submitChat ($ _ POST [ "chatText"] ); break; case "getUsers": $ response \u003d Chat :: getUsers (); break; case "getChats": $ response \u003d Chat :: getChats ($ _ GET [ "lastID"]); break; default: throw new Exception ( "Wrong action");) echo json_encode ($ response);) catch (Exception $ e) (die (json_encode (array ( "error" \u003d\u003e $ e-\u003e getMessage ())));)

Для зручності використовується оператор switch для визначення дій, які обробляє скрипт. Тут реалізовані підсистеми чату, функціональність входу / виходу та дії за запитом списку реплік і користувачів в режимі онлайн.

Висновок здійснюється у формі повідомлень JSON (які зручно обробляти за допомогою jQuery), помилки генерують виключення. оператор switch розподіляє всі запити відповідним статичним методам класу Chat, Який буде обговорюватися пізніше в даному розділі.

DB.class.php

Class DB (private static $ instance; private $ MySQLi; private function __construct (array $ dbOptions) ($ this-\u003e MySQLi \u003d @ new mysqli ($ dbOptions [ "db_host"], $ dbOptions [ "db_user"], $ dbOptions [ "db_pass"], $ dbOptions [ "db_name"]); if (mysqli_connect_errno ()) (throw new Exception ( "Помилка бази даних.");) $ this-\u003e MySQLi-\u003e set_charset ( "utf8");) public static function init (array $ dbOptions) (if (self :: $ instance instanceof self) (return false;) self :: $ instance \u003d new self ($ dbOptions);) public static function getMySQLiObject () (return self :: $ instance-\u003e MySQLi;) public static function query ($ q) (return self :: $ instance-\u003e MySQLi-\u003e query ($ q);) public static function esc ($ str) (return self :: $ instance-\u003e MySQLi-\u003e real_escape_string (htmlspecialchars ($ str));))

Клас DB - менеджер бази даних. Конструктор оголошений як private, Таким чином, об'єкт не може бути створений поза межами класу, і ініціалізація можлива тільки з статичного методу init (). Він бере масив з параметрами з'єднання з MySQL і створює екземпляр класу, який міститься в статичної змінної self :: $ instance. Таким чином, забезпечується існування єдиного з'єднання з базою даних в конкретний момент часу.

Інша частина класу реалізує комунікацію з базою даних, в основі якої лежить статичний метод query ().

ChatBase.class.php

/ * Базовий клас, який використовується класами ChatLine і ChatUser * / class ChatBase (// Даний конструктор використовується всіма класу чату: public function __construct (array $ options) (foreach ($ options as $ k \u003d\u003e $ v) (if (isset ($ this -\u003e $ k)) ($ this -\u003e $ k \u003d $ v;))))

Це простий базовий клас. Його основне призначення - визначити конструктор, який отримує масив параметрів, але зберігає тільки ті, які визначені в класі.

ChatLine.class.php

/ * Рядок чату * / class ChatLine extends ChatBase (protected $ text \u003d "", $ author \u003d "", $ gravatar \u003d ""; public function save () (DB :: query ( "INSERT INTO webchat_lines (author, gravatar, text) VALUES ( "" .DB :: esc ($ this-\u003e author). "", "" .DB :: esc ($ this-\u003e gravatar). "", "" .DB :: esc ($ this -\u003e text). "") "); // Повертаємо об'єкт MySQLi класу DB return DB :: getMySQLiObject ();))

клас ChatLine є похідним класом від ChatBase. Об'єкт даного класу можна легко створити за допомогою передачі конструктору масиву з текстом, ім'ям автора та елементом gravatar. властивість класу gravatar містить хеш md5 email адреси. Воно потрібне для отримання призначеного для користувача аватара, відповідного email адресою, з сайту gravatar.com.

Даний клас також визначає метод save, Який зберігає об'єкт в базі даних. Так як метод повертає об'єкт MySQLi, що міститься в класі DB, ви можете перевірити успішність завершення операції за допомогою властивості affected_rows.

ChatUser.class.php

Class ChatUser extends ChatBase (protected $ name \u003d "", $ gravatar \u003d ""; public function save () (DB :: query ( "INSERT INTO webchat_users (name, gravatar) VALUES (" ".DB :: esc ($ this -\u003e name). "", "" .DB :: esc ($ this-\u003e gravatar). "") "); return DB :: getMySQLiObject ();) public function update () (DB :: query (" INSERT INTO webchat_users (name, gravatar) VALUES ( "" .DB :: esc ($ this-\u003e name). "", "" .DB :: esc ($ this-\u003e gravatar). "") ON DUPLICATE KEY UPDATE last_activity \u003d NOW () ");))

Клас має властивості name і gravatar (Зверніть увагу на модифікатор доступу protected - властивості доступні в класі ChatBase, і ми можемо встановлювати їх значення в конструкторі).

У класі визначено метод update (), Який оновлює поле last_activity значенням поточного часу. Таким чином показується, що користувач тримає вікно з чатом відритим і його треба враховувати як автора в режимі онлайн.

Chat.class.php - Частина 1

/ * Клас Chat містить публічні статичні методи, які використовуються в ajax.php * / class Chat (public static function login ($ name, $ email) (if (! $ Name ||! $ Email) (throw new Exception ( "Заповніть всі необхідні поля. ");) if (! filter_input (INPUT_POST," email ", FILTER_VALIDATE_EMAIL)) (throw new Exception (" Неправильна адреса email. ");) // Підготовка кеша gravatar: $ gravatar \u003d md5 (strtolower (trim ($ email))); $ user \u003d new ChatUser (array ( "name" \u003d\u003e $ name, "gravatar" \u003d\u003e $ gravatar)); // Метод save повертає об'єкт MySQLi if ($ user-\u003e save () - \u003e affected_rows! \u003d 1) (throw new Exception ( "Дане ім'я використовується.");) $ _SESSION [ "user"] \u003d array ( "name" \u003d\u003e $ name, "gravatar" \u003d\u003e $ gravatar); return array ( "status" \u003d\u003e 1, "name" \u003d\u003e $ name, "gravatar" \u003d\u003e Chat :: gravatarFromHash ($ gravatar));) public static function checkLogged () ($ response \u003d array ( "logged" \u003d\u003e false) ; if ($ _ SESSION [ "user"] [ "name"]) ($ response [ "logged"] \u003d true; $ response [ "loggedAs"] \u003d array ( "name" \u003d\u003e $ _SESSION [ "user"] [ "name "]," Gravatar "\u003d\u003e Chat :: gravatarFromHash ($ _ SESSION [" user "] [" gravatar "])); ) Return $ response; ) Public static function logout () (DB :: query ( "DELETE FROM webchat_users WHERE name \u003d" ".DB :: esc ($ _ SESSION [" user "] [" name "])." ""); $ _SESSION \u003d array (); unset ($ _ SESSION); return array ( "status" \u003d\u003e 1);)

Цей код виконує всю роботу. В операторі switch у файлі ajax.php вибиралися дії, які відповідали методам даного класу. Кожен з цих методів повертає масив, який потім конвертується в об'єкт JSON за допомогою функції json_encode () (Це відбувається внизу в файлі ajax.php).

Коли користувач входить в систему, його ім'я і gravatar зберігаються як елементи масиву $ _SESSION і стають доступні в наступних запитах.

Chat.class.php - Частина 2

Public static function submitChat ($ chatText) (if (! $ _ SESSION [ "user"]) (throw new Exception ( "Ви вийшли з чату");) if (! $ ChatText) (throw new Exception ( "Ви не ввели повідомлення . ");) $ chat \u003d new ChatLine (array (" author "\u003d\u003e $ _SESSION [" user "] [" name "]," gravatar "\u003d\u003e $ _SESSION [" user "] [" gravatar "]," text "\u003d\u003e $ chatText)); // Метод save повертає об'єкт MySQLi $ insertID \u003d $ chat-\u003e save () -\u003e insert_id; return array (" status "\u003d\u003e 1," insertID "\u003d\u003e $ insertID);) public static function getUsers () (if ($ _ SESSION [ "user"] [ "name"]) ($ user \u003d new ChatUser (array ( "name" \u003d\u003e $ _SESSION [ "user"] [ "name"])) ; $ user-\u003e update ();) // Видаляємо записи чату старше 5 хвилин і користувачів, неактивних протягом 30 секунд DB :: query ( "DELETE FROM webchat_lines WHERE ts< SUBTIME(NOW(),"0:5:0")"); DB::query("DELETE FROM webchat_users WHERE last_activity < SUBTIME(NOW(),"0:0:30")"); $result = DB::query("SELECT * FROM webchat_users ORDER BY name ASC LIMIT 18"); $users = array(); while($user = $result->fetch_object ()) ($ user-\u003e gravatar \u003d Chat :: gravatarFromHash ($ user-\u003e gravatar, 30); $ users \u003d $ user;) return array ( "users" \u003d\u003e $ users, "total" \u003d\u003e DB: : query ( "SELECT COUNT (*) as cnt FROM webchat_users") -\u003e fetch_object () -\u003e cnt); ) Public static function getChats ($ lastID) ($ lastID \u003d (int) $ lastID; $ result \u003d DB :: query ( "SELECT * FROM webchat_lines WHERE id\u003e". $ LastID. "ORDER BY id ASC"); $ chats \u003d array (); while ($ chat \u003d $ result-\u003e fetch_object ()) (// Повертаємо час створення повідомлення в форматі GMT (UTC): $ chat-\u003e time \u003d array ( "hours" \u003d\u003e gmdate ( "H" , strtotime ($ chat-\u003e ts)), "minutes" \u003d\u003e gmdate ( "i", strtotime ($ chat-\u003e ts))); $ chat-\u003e gravatar \u003d Chat :: gravatarFromHash ($ chat-\u003e gravatar) ; $ chats \u003d $ chat;) return array ( "chats" \u003d\u003e $ chats);) public static function gravatarFromHash ($ hash, $ size \u003d 23) (return "http://www.gravatar.com/avatar/" . $ hash. "? size \u003d". $ size. "& default \u003d". urlencode ( "http://www.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?size\u003d". $ size);))

jQuery відправляє запити getUsers () кожні 15 секунд. Ми використовуємо цей факт, щоб видалити репліки, які старше 5 хвилин і неактивних користувачів з бази даних. Потенційно можна було б видаляти дані записи в getChats , Але цей запит надходить кожну секунду і додаткове навантаження може вплинути на продуктивність програми.

У методі getChats () використовується функція gmdate виведення часу в форматі GMT. У клієнтської частини ми використовуємо годину і хвилину для установки в об'єкті JavaScript, а в результаті час відображається відповідно до часового поясу користувача.

Продовження у другій частині!

 

 

Це цікаво: