Maksim_Capone
Умник
Привет всем. Делал чат себе, да он мне и не понадобился. Вот решил выложить вам.
Написан на php, MySQL , JS.
php файл.
Сам файл, где всё делается и выводится.
База данных, где хранятся все сообщения.
Написан на php, MySQL , JS.
php файл.
PHP:
<?php
session_start();
try {
// коннект к СУБД
$dbh = new PDO("mysql:dbname=name;host=hostname", "user", "pass", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
// получаем id последнего сообщения
$last_id = isset($_POST['last_id']) ? (int)$_POST['last_id'] : 0;
// текст
$text = isset($_POST['text']) ? trim($_POST['text']) : '';
if (!empty($text)) {
// вставка новой записи
$name = $_SESSION['Name'];// посмотрите эту строку, если у вас уже есть UCP то вместо 'Name' напишите свою переменную
$sth = $dbh->prepare("INSERT INTO `chat` (`name`,`text`) VALUES ('$name',:text)");
$sth->execute(array(':text' => $text));
}
// загружаем сообщения, которые были после последнего полученного нами, но не более 20
$sth = $dbh->prepare("SELECT * FROM `chat` WHERE `id` > :last_id ORDER BY `id` DESC LIMIT 20");
$sth->bindParam(':last_id', $last_id, PDO::PARAM_INT);
$sth->execute();
// отдаём массив сообщений в формате JSON
echo json_encode(array_reverse($sth->fetchall()));
} catch (PDOException $e) {
echo 'Ошибка подключения: ' . $e->getMessage();
}
PHP:
<script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>// подключаем библиотеку jquery, если уже есть, то уберите эту строку
<script>
$(function(){
var chat = $('#chat')[0]; // Окно чата
var form = $('#chat-form')[0]; // форма
// вешаем обработчик на отправку формы
$('#chat-form').submit(function(event){
// поле ввода
var text = $(form).find('textarea[type="text"]');
// выключаем форму пока не пришел ответ
$(form).find('input').attr("disabled", true);
// отправка сообщения
update(text);
// что бы форма не перезагружала страницу
return false;
});
function update(text) {
// что шлём
var send_data = { last_id: $(chat).attr('data-last-id') };
if (text)
send_data.text = $(text).val();
// шлём запрос
$.post(
'/engine/ajax.php',
send_data, // отдаём скрипту данные
function (data) {
// ссылка пришла?
if (data && $.isArray(data)) {
$(data).each(function (k) {
// формируем наше сообщение
var msg = $('<div><span class="label label-primary">' + data[k].created + '</span><span class="text-success"> ' + data[k].name + ' </span>: ' + data[k].text + '</div>');
// и цепляем его к чату
$(chat).append(msg);
// если ласт ид меньше пришедшего
if (parseInt($(chat).attr('data-last-id')) < data[k].id)
// запоминаем новый ласт ид
$(chat).attr('data-last-id', data[k].id);
});
// если это отправка, то при получении ответа, включаем форму
if (text) {
// вклчюаем форму
$(form).find('input').attr("disabled", false);
// и очищаем текст
$(text).val('');
}
// прокрутка
$(chat).scrollTop(chat.scrollHeight);
// обновим таймер
update_timer();
}
},
'JSON' // полученные данные рассматривать как JSON объект
);
}
// что бы при загрузке получить данные в чат, вызываем сразу апдейт
update();
// что бы окно чата обновлялось раз в 5 секунд, прицепим таймер
var timer;
function update_timer() {
if (timer) // если таймер уже был, сбрасываем
clearTimeout(timer);
timer = setTimeout(function () {
update();
}, 5000);
}
update_timer();
});
</script>
<style>
#chat { overflow: auto; height: 400px; }
</style>
<div class="container" style="margin-top: 50px;"><div class="row">
<div class="col-lg-12">
<div class="well">
<fieldset><div id="chat" data-last-id="0"></div> </fieldset>
</div></div></div>
<div class="row">
<div class="col-lg-12">
<div class="well">
<form id="chat-form">
<fieldset><div class="col-lg-12">
<textarea class="form-control" rows="3" type="text" id="chat-msg" placeholder="Введите сообщение..."></textarea>
<div class="form-group">
<br /><button type="submit" class="btn btn-primary">Отправить</button>
</div>
</div>
</fieldset></form></div></div></div>
</div>
PHP:
CREATE TABLE IF NOT EXISTS `chat` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(34) NOT NULL,
`text` varchar(255) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=177 ;
Последнее редактирование:
