За последние 24 часа нас посетили 18104 программиста и 1684 робота. Сейчас ищут 1050 программистов ...

Статья про создиние простого Ajax чата

Тема в разделе "JavaScript и AJAX", создана пользователем *SaT*, 27 сен 2009.

  1. *SaT*

    *SaT* Активный пользователь

    С нами с:
    13 апр 2008
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Г. Белгород
    Кто нибудь может написать статью про создание простого Ajax чата????

    Типа такого: http://melnaron.net/melchat-beta/ или на подобие ( но только не про мини-чат ).

    Очень хочется написать свой простенький ЧаТ но к сожелению знаний нехватает.

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



    Заранее большое спасибо.
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    А если никто не может написать такую статейку то давайте все вместе разберём чаты
    Mel-Chat ( демо: http://melnaron.net/melchat-beta/ Офф. сайт: http://melnaron.net/ )
    ИЛИ
    Blueimp-Chat ( демо: http://chat.ecobytes.net/ Офф. сайт: https://blueimp.net/ajax/ )

    По деталям ( впишем в код комментарии на русском языке каждой функции чата ) и напишем статейку об одном из чатов, прочитав которую человек будет знать что за код относится к какой функции чата.


    О чате писать сначала лучше без интеграций к каким либо форумам, CMS и т.д.
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    О, могу. Давно хотел. Только не знаю, когда :) На неделе может рожу :)
     
  3. *SaT*

    *SaT* Активный пользователь

    С нами с:
    13 апр 2008
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Г. Белгород
    Kreker хорошо, буду ждать ваших сообщений
     
  4. *SaT*

    *SaT* Активный пользователь

    С нами с:
    13 апр 2008
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Г. Белгород
    Создание PHP-AJAX чата

    Я нашёл статейку про создание чата:
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Приветствую!
    Эта статья для тех кто желает сам сделать свой чат на php с применением ajax. В ней я расскажу о том как самому сделать простой чат.
    [​IMG]
    Необходимые знания:
    1. Начальные знания в php. Такие как: Как подключиться к базе данных mysql?
    2. Начальные знания в html и css.
    3. Начальные знания в JavaScript и jQuery. (даже если вы только слышали о jQuery, но не работали с ним)
    Итак начнём!
    Для начала создадим новую базу данных в MySQL и выполним SQL запрос:
    [sql]CREATE TABLE `messages` (
    `id` int(5) NOT NULL AUTO_INCREMENT,
    `name` char(255) character SET utf8 NOT NULL,
    `text` text character SET utf8,
    PRIMARY KEY (`id`)
    );[/sql]
    В этой таблице у нас будут храниться сообщения чата.
    1. id – номер сообщения, он должен быть помечен как AUTO_INCREMENT для того что бы для каждого сообщения создавался уникальный индекс.
    2. name – имя пользователя отправившего сообщение
    3. text – само сообщение
    Можно так же расширить список полей, например время сообщения, и так далее.
    Теперь приступим к созданию клиентской части чата. Она у нас будет реализована в файле index.php:
    HTML:
    1. <!-- Указываем DOCTYPE -->
    2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    3. <title>PhpAjaxChat</title>
    4. <!-- У нас всё работает в UTF-8 -->
    5. <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    6. <!-- Загружаем стили для чата -->
    7. <link rel="stylesheet" type="text/css" media="screen" href="css.css" />
    8. <!-- Подключаем jQuery -->
    9. <script type="text/javascript" src="jquery.js"></script>
    10. <!-- Сам код нашего чата -->
    11. <script type="text/javascript">
    12. $(document).ready(function () {
    13.     $("#pac_form").submit(Send); // вешаем на форму с именем и сообщением событие которое срабатывает кодга нажата кнопка "Отправить" или "Enter"
    14.     $("#pac_text").focus(); // по поле ввода сообщения ставим фокус
    15.     setInterval("Load();", 2000); // создаём таймер который будет вызывать загрузку сообщений каждые 2 секунды (2000 миллисекунд)
    16. });  
    17. // Функция для отправки сообщения
    18. function Send() {
    19.     // Выполняем запрос к серверу с помощью jquery ajax: $.post(адрес, {параметры запроса}, функция которая вызывается по завершению запроса)
    20.     $.post("ajax.php",
    21.         {
    22.         act: "send",  // указываем скрипту, что мы отправляем новое сообщение и его нужно записать
    23.         name: $("#pac_name").val(), // имя пользователя
    24.         text: $("#pac_text").val() //  сам текст сообщения
    25.     },
    26.      Load ); // по завершению отправки вызываем функцию загрузки новых сообщений Load()
    27.     $("#pac_text").val(""); // очистим поле ввода сообщения
    28.     $("#pac_text").focus(); // и поставим на него фокус
    29.     return false; // очень важно из Send() вернуть false. Если этого не сделать то произойдёт отправка нашей формы, те страница перезагрузится
    30. }
    31. var last_message_id = 0; // номер последнего сообщения, что получил пользователь
    32. var load_in_process = false; // можем ли мы выполнять сейчас загрузку сообщений. Сначала стоит false, что значит - да, можем
    33. // Функция для загрузки сообщений
    34. function Load() {
    35.     // Проверяем можем ли мы загружать сообщения. Это сделано для того, чтобы мы не начали загрузку заново, если старая загрузка ещё не закончилась.
    36.     if(!load_in_process)
    37.     {
    38.             load_in_process = true; // загрузка началась
    39.             // отсылаем запрос серверу, который вернёт нам javascript
    40.             $.post("ajax.php",
    41.             {
    42.                   act: "load", // указываем на то что это загрузка сообщений
    43.                   last: last_message_id, // передаём номер последнего сообщения который получил пользователь в прошлую загрузку
    44.                   rand: (new Date()).getTime()
    45.             },
    46.                function (result) { // в эту функцию в качестве параметра передаётся javascript код, который мы должны выполнить
    47.                     eval(result); // выполняем скрипт полученный от сервера
    48.                     $(".chat").scrollTop($(".chat").get(0).scrollHeight); // прокручиваем сообщения вниз
    49.                     load_in_process = false; // говорим что загрузка закончилась, можем теперь начать новую загрузку
    50.             });
    51.     }
    52. }
    53. <div style="padding: 100px;">
    54. <h1>Php Ajax Chat</h1>
    55. <!-- Вот в этих 2-х div-ах будут идти наши сообщения из чата -->
    56. <div class="chat r4">
    57. <div id="chat_area"><!-- Сюда мы будем добавлять новые сообщения --></div>
    58. </div>
    59. <form id="pac_form" action=""><!-- Наша форма с именем, сообщением и кнопкой для отправки -->
    60. <table style="width: 100%;">
    61.         <tr>
    62.                 <td>Имя:</td>
    63.                 <td>Сообщение:</td>
    64.                 <td></td>
    65.         </tr>
    66.         <tr>
    67.                 <!-- Поле ввода имени -->
    68.                 <td><input type="text" id="pac_name" class="r4" value="Гость"></td>
    69.                 <!-- Поле ввода сообщения -->
    70.                 <td style="width: 80%;"><input type="text" id="pac_text" class="r4" value=""></td>
    71.                 <!-- Кнопка "Отправить" -->
    72.                 <td><input type="submit" value="Отправить"></td>
    73.         </tr>
    74. </form>
    75. </div>
    76. </body>
    77. </html>
    css.css:
    [css]* {
    margin: 0;
    padding: 0;
    }
    body {
    font: normal normal normal 16px "Trebuchet MS", Arial, Times;
    color: #000000;
    }
    .chat {
    height: 500px;
    overflow: auto;
    position: relative;
    text-align: left;
    border: solid #818181 1px;
    }
    .chat div {
    position: absolute;
    }
    .chat span {
    display: block;
    }
    input[type=text],textarea {
    width: 100%;
    font: normal normal normal 16px "Trebuchet MS", Arial, Times;
    border: solid #818181 1px;
    }
    .r4 {
    -moz-border-radius: 4px;
    -khtml-border-radius: 4px;
    -webkit-border-radius: 4px;
    border-radius: 4px;
    }[/css]
    Теперь приступим к созданию серверной части чата ajax.php:
    PHP:
    1. <?php
    2. // настройки для подключения к MySQl
    3. $config = array( 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'dbname' => 'pacdb' );
    4. // подключаемся к MySQL, если не вышло то выходим
    5. if( !mysql_connect($config['hostname'], $config['username'], $config['password']) )
    6. {
    7.         exit();
    8. }
    9. // Выбираем базу данных, если не вышло то выходим
    10. if( !mysql_select_db($config['dbname']) )
    11. {
    12.         exit();
    13. }
    14. mysql_query("SET NAMES 'utf8'"); // говорим MySQl'у то что мы будем работать с UTF-8
    15. Header("Cache-Control: no-cache, must-revalidate"); // говорим браузеру что-бы он не кешировал эту страницу
    16. Header("Pragma: no-cache");
    17. Header("Content-Type: text/javascript; charset=utf-8"); // говорим браузеру что это javascript в кодировке UTF-8
    18. // проверяем есть ли переменная act (send или load), которая указываем нам что делать
    19. if( isset($_POST['act']) )
    20. {
    21.         // $_POST['act'] - существует
    22.         switch ($_POST['act'])
    23.         {
    24.                 case "send" : // если она равняется send, вызываем функцию Send()
    25.                         Send();
    26.                         break;
    27.                 case "load" : // если она равняется load, вызываем функцию Load()
    28.                         Load();
    29.                         break;
    30.                 default : // если ни тому и не другому  - выходим
    31.                         exit();
    32.         }
    33. }
    34. // Функция выполняем сохранение сообщения в базе данных
    35. function Send()
    36. {
    37.         // тут мы получили две переменные переданные нашим java-скриптом при помощи ajax
    38.         // это:  $_POST['name'] - имя пользователя
    39.         // и $_POST['text'] - сообщение
    40.         $name = substr($_POST['name'], 0, 200); // обрезаем до 200 символов
    41.         $name = htmlspecialchars($name); // заменяем опасные теги (<h1>,<br>, и прочие) на безопасные
    42.         $name = mysql_real_escape_string($name); // функция экранирует все спец-символы в unescaped_string , вследствие чего, её можно безопасно использовать в mysql_query()
    43.         $text = substr($_POST['text'], 0, 200); // обрезаем до 200 символов
    44.         $text = htmlspecialchars($text); // заменяем опасные теги (<h1>,<br>, и прочие) на безопасные
    45.         $text = mysql_real_escape_string($text); // функция экранирует все спец-символы в unescaped_string , вследствие чего, её можно безопасно использовать в mysql_query()
    46.         // добавляем новую запись в таблицу messages
    47.         mysql_query("INSERT INTO messages (name,text) VALUES ('" . $name . "', '" . $text . "')");
    48. }
    49. // функция выполняем загрузку сообщений из базы данных и отправку их пользователю через ajax виде java-скрипта
    50. function Load()
    51. {
    52.         // тут мы получили переменную переданную нашим java-скриптом при помощи ajax
    53.         // это:  $_POST['last'] - номер последнего сообщения которое загрузилось у пользователя
    54.         $last_message_id = intval($_POST['last']); // возвращает целое значение переменной
    55.         // выполняем запрос к базе данных для получения 10 сообщений последних сообщений с номером большим чем $last_message_id
    56.         $query = mysql_query("SELECT * FROM messages WHERE ( id > $last_message_id ) ORDER BY id DESC LIMIT 10");
    57.         // проверяем есть ли какие-нибудь новые сообщения
    58.         if( mysql_num_rows($query) > 0 )
    59.         {
    60.                 // начинаем формировать javascript который мы передадим клиенту
    61.                 $js = 'var chat = $("#chat_area");'; // получаем "указатель" на div, в который мы добавим новые сообщения
    62.                 // следующий конструкцией мы получаем массив сообщений из нашего запроса
    63.                 $messages = array();
    64.                 while ( $row = mysql_fetch_array($query) )
    65.                 {
    66.                         $messages[] = $row;
    67.                 }
    68.                 // записываем номер последнего сообщения
    69.                 // [0] - это вернёт нам первый элемент в массиве $messages, но так как мы выполнили запрос с параметром "DESC" (в обратном порядке),
    70.                 // то это получается номер последнего сообщения в базе данных
    71.                 $last_message_id = $messages[0]['id'];
    72.                 // переворачиваем массив (теперь он в правильном порядке)
    73.                 $messages = array_reverse($messages);
    74.                 // идём по всем элементам массива $messages
    75.                 foreach ( $messages as $value )
    76.                 {
    77.                         // продолжаем формировать скрипт для отправки пользователю
    78.                         $js .= 'chat.append("<span>' . $value['name'] . '&raquo; ' . $value['text'] . '</span>");'; // добавить сообщние (<span>Имя &raquo; текст сообщения</span>) в наш div
    79.                 }
    80.                 $js .= "last_message_id = $last_message_id;"; // запишем номер последнего полученного сообщения, что бы в следующий раз начать загрузку с этого сообщения
    81.                 // отправляем полученный код пользователю, где он будет выполнен при помощи функции eval()
    82.                 echo $js;
    83.         }
    84. }
    85. ?>
    Чат готов!
    Скачать чат можно ТУТ.
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Статью я брал вот отсюда: http://blog.elfet.ru/jquery/php-ajax-chat/
    Кто нибудь может написать для этого скрипта авторизацию типа ВХОД ( Ник, Пароль (для тех кто зарегистрирован(регистрация по желанию)) ) РЕГИСТРАЦИЯ ( Ник, Пароль, Подтверждение пароля ).
     
  5. kostyl

    kostyl Guest

    Кто нибудь может. Но иногда все просто так лень делать и приходится платить за работу. Оплата обсуждается в другом разделе форума.
     
  6. basist

    basist Активный пользователь

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    *SaT*, может пригодится:


    Comet
    там же и чат есть, но без регистрации)
     
  7. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Уф, я начал писать уже давно, но в связи со многими обстоятельствами статья остановилась на 25%.
    В принципе, JS часть чата я реальзовал так же, как в статье, которую ты нашел. Думаю, мне смысла писать дальше нет, т.к. этот довольно хорош.
     
  8. *SaT*

    *SaT* Активный пользователь

    С нами с:
    13 апр 2008
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Г. Белгород
    Давайте все вместре модифицируем этот чат.
     
  9. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Не, прости, я пас. Вымотался за сегодня. А завтра тоже никак. И потом тоже...
    Учись программить! К нам пойдешь)