Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 23.09.2016
Сообщений: 40

ребята написал чат ) но не высвечиваются сообщения!

26.11.2016, 17:58. Показов 640. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
сверялся с примером если что ибо ajax плохо знаю.сохранение в базу тоже не проходит

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php
// Указываем тип и кодировку
Header("Content-Type: text/html; charset=windows-1251");
?>
<!-- Указываем DOCTYPE -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>PhpAjaxChat</title>
<!-- У нас всё работает в UTF-8 -->
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
 
 
 
<!-- Подключаем jQuery -->
<script type="text/javascript" src="jquery.js"></script>
 
<!-- Сам код нашего чата -->
<script type="text/javascript">
$(document).ready(function () {
    $("#form").submit(Send); // вешаем на форму с именем и сообщением событие которое срабатывает кодга нажата кнопка "Отправить" или "Enter"
    $("#message").focus(); // по поле ввода сообщения ставим фокус
    setInterval("Load();", 1000); // создаём таймер который будет вызывать загрузку сообщений каждые 2 секунды (2000 милесукунд)
});    
// Функция для отправки сообщения
function Send() {
    // Выполняем запрос к серверу с помощью jquery ajax: $.post(адрес, {параметры запроса}, функция которая вызывается по завершению запроса)
    $.post("ajax.php",  
    {
        act: "Send",  // указываем скрипту, что мы отправляем новое сообщение и его нужно записать 
        message: $("#message").val() //  сам текст сообщения
    },
     Load ); // по завершению отправки вызвовем функцию загрузки новых сообщений Load()
 
    $("#message").val(""); // очистим поле ввода сообщения
    $("#message").focus(); // и поставим на него фокус
    
    return false; // очень важно из Send() вернуть false. Если этого не сделать то произойдёт отправка нашей формы, те страница перезагрузится
}
var last_message_id = 0; // номер последнего сообщения, что получил пользователь
var load_in_process = false; // можем ли мы выполнять сейчас загрузку сообщений. Сначала стоит false, что значит - да, можем
 
// Функция для загрузки сообщений
function Load() {
    
    //Убейся сранное дерьмо 
   // Проверяем можем ли мы загружать сообщения. Это сделанно для того, что бы мы не начали загрузку заново, если старая загрузка ещё не закончилась.
    if(!load_in_process)
    {
        load_in_process = true; // загрузка началась
                                          // отсылаем запрос серверу, который вернёт нам javascript  
        $.post("ajax.php", 
        {
            act: "load", // указываем на то что это загрузка сообщений
            last: last_message_id, // передаём номер последнего сообщения который получил пользователь в прошлую загрузку
            rand: (new Date()).getTime()
        },
        function (result) { // в эту функцию в качестве параметра передаётся javascript код, который мы должны выполнить
        
            eval(result); // выполняем скрипт полученный от сервера
            $(".chat").scrollTop($(".chat").get(0).scrollHeight); // прокручиваем сообщения вниз
            load_in_process = false; // говорим что загрузка закончилась, можем теперь начать новую загрузку
        });
    }
}
</script>
<body>
 
<div class="chat">
 
 
      <div class="chat r4">
            <div id="chat_area"><!-- —сюда новые сообщения -->   
              </div>
       </div>
        
        
        
<div class="chatsender">
 
   
   <!--ѕоключаю чат -->
<form action=""   autocomplete="no" id="form">
 
 
    <textarea  type="text"   id="message" placeholder="Напишите сообщение...."></textarea>
 
    <input  type="submit" value="Отправить" id="Send">







файл ajax.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?php
//подключаю конфиг и подключаюсь к базе
$config = array( 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'dbname' => 'boatclubbing' );
 
if( !mysql_connect($config['hostname'], $config['username'], $config['password']) )
{
    exit();
}
// Выбираем базу данных, если не вышло то выходим
if( !mysql_select_db($config['dbname']) )
{
    exit();
}
mysql_query("SET NAMES 'windows-1251'"); // говорим MySQl'у то что мы будем работать с windows-1251
 
Header("Cache-Control: no-cache, must-revalidate"); // говорим браузеру что-бы он не кешировал эту страницу
Header("Pragma: no-cache");
 
Header("Content-Type: text/javascript; charset=windows-1251"); // говорим браузеру что это javascript в кодировке windows-1251
 
// проверяем есть ли переменная act (send или load), которая указываем нам что делать
if( isset($_POST['act']) ) 
{
    
    // $_POST['act'] - существует
    switch ($_POST['act'])
    {
        case "Send" : // если она раняется send, вызываем функцию Send()
            Send();
            break;
        case "load" : // если она раняется load, вызываем функцию Load()
            Load();
            break;
        default : // если ни тому и не другому  - выходим
            exit();
    }
}
// Функция выполняем сохранение сообщения в базе данных
function Send(){
    //тут я получаю переменную с текстом которая была отправленна javascript через ajax
    $message = $_POST['message'];
    $message = htmlspecialchars($message);
    $message = mysql_escape_string($message);
    $name = $prof_data["user"]; 
    $date = date("y-m-d h:i:s");
    // добавляем новую запись в таблицу messages
    mysql_query("INSERT INTO db_chat (name,message,date) VALUES ('" . $name . "', '" . $message . "' , '". $date . "')");
}
// функция выполняем загрузку сообщений из базы данных и отправку их пользователю через ajax виде java-скрипта
function Load(){
    // тут мы получили переменную переданную нашим java-скриптом при помощи ajax
    // это:  $_POST['last'] - номер последнего сообщения которое загрузилось у пользователя 
    $last_message_id = intval($_POST['last']); // возвращает целое значение переменной
    // выполняем запрос к базе данных для получения 10 сообщений последних сообщений с номером большим чем $last_message_id
    $query = mysql_query("SELECT * FROM db_chat WHERE ( id > $last_message_id ) ORDER BY id DESC LIMIT 10");
    // проверяем есть ли какие-нибудь новые сообщения
    if( mysql_num_rows($query) > 0 ){
        // начинаем формировать java-скрипт который мы передадим клиенту
        
        $js = 'var chat = $("#chat_area");'; // получаем "указатель" на div, в который мы добавим новые сообщения
        
        // следующий конструкцией мы получаем массив сообщений из нашего запроса
        $messages = array();
        while ( $row = mysql_fetch_array($query) )
        {
            $messages[] = $row;
        }
        
        // записываем номер последнего сообщения
        // [0] - это вернёт нам первый элемент в массиве $messages, но так как мы выполнили запрос с параметром "DESC" (в обратном порядке),
        // то это получается номер последнего сообщения в базе данных
        $last_message_id = $messages[0]['id'];
        
        // переворачиваем массив (теперь он в правильном порядке)
        $messages = array_reverse($messages);
        
        // идём по всем этементам массива $messages
        foreach ( $messages as $value )
        {
            // продолжаем формировать скрипт для отправки пользователю
            $js .= 'chat.append("<span >' . $value['name'] .  $value['message'] . $value['date'] . '</span>");'; // добавить сообщние (<span>Имя &raquo; текст сообщения</span>) в наш div 
        
        }
        
        $js .= "last_message_id = $last_message_id;"; // запишем номер последнего полученного сообщения, что бы в следующий раз начать загрузку с этого сообщения
        
        // отправляем полученный код пользователю, где он будет выполнен при помощи функции eval()
        echo $js;
            
    }
}
 
 
?>
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.11.2016, 17:58
Ответы с готовыми решениями:

Написал по урокам чат, работает только в локалке. Как по инету сделать?
Доброго времени суток! Написал по урокам сервер чат и клиент чат, в локалке работает отлично! (локалка через роутер Asus) через тот же...

для тех кто вконтакте написал чат на делфи конечно не предел но зацените
для тех кто вконтакте написал чат на делфи конечно не предел но зацените

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

3
268 / 268 / 109
Регистрация: 22.08.2013
Сообщений: 907
27.11.2016, 09:57
Есть такие инструменты для мониторинга запросов (в Firefox, например). Если ничего не запрашивается - проблема в JS-скрипте (нужно смотреть в консоль разработчика), если запрос отправляется корректно - проблема в PHP-скрипте (тут нужно, чтобы был включен вывод ошибок на стороне сервера + нужно смотреть в тело ответа чтобы починить те самые ошибки).
0
0 / 0 / 1
Регистрация: 23.09.2016
Сообщений: 40
27.11.2016, 10:48  [ТС]
может есть какие все-таки подсказки по коду .Какие еть предположения ?
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
27.11.2016, 11:06
Цитата Сообщение от sergey1998181 Посмотреть сообщение
подсказки по коду
Выше вам написали где посмотреть эти подсказки. Если вам просто лень открыть и почитать ошибки, то нам тем более лень.
Если вдруг в логах ошибок нет, то расставляйте var_dump по всему коду и смотрите что там внутри переменной, ожидаемое значение или что то левое.

Моя подсказка по коду это выкинуть комментарии уровня КЭП, которые мешают читать код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.11.2016, 11:06
Помогаю со студенческими работами здесь

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

Отправка сообщения в конкретный чат Skype
Добрый вечер! Прошу помощи. Не могу добиться, чтобы заработал код: отправить сообщение в конкретный групповой чат с указанным именем через...

Вывод сообщения через бота в чат
Добрый день, не знаю как реализовать что бы по тегу бота можна было выбрать файл,музыку,и тд. ну вот пример: Правила форума 5....

Чат: сообщения клиента не попадают в ListBox
Решил написать чат и столкнулся с такой вот проблемой что не выводятся в listbox пришедший ответ от сервера public void...

Односторонний чат: не работает после первого сообщения
Есть приложение - односторонний чат, но отправляет только одно сообщение. Код отправляющего сообщения: private void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru