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

Чат на PHP

23.05.2014, 23:15. Показов 1396. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
У меня есть чат на PHP, я его вставил в "полную новость", но вот беда, люди, которые читают новость с айди 4 и айди 12, видят его как один чат. Как сделать, что бы люди в новости с айди 4 общались только с людьми, которые находятся в новости с айди 4 ??

Вот файл, который заставляет работать чат
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
<?php
 
    $function = $_POST['function'];
    
    $log = array();
    
    switch($function) {
    
         case('getState'):
             if(file_exists('cache/chat.txt')){
               $lines = file('cache/chat.txt');
             }
             $log['state'] = count($lines); 
             break; 
        
         case('update'):
            $state = $_POST['state'];
            if(file_exists('cache/chat.txt')){
               $lines = file('cache/chat.txt');
             }
             $count =  count($lines);
             if($state == $count){
                 $log['state'] = $state;
                 $log['text'] = false;
                 
                 }
                 else{
                     $text= array();
                     $log['state'] = $state + count($lines) - $state;
                     foreach ($lines as $line_num => $line)
                       {
                           if($line_num >= $state){
                         $text[] =  $line = str_replace("\n", "", $line);
                           }
         
                        }
                     $log['text'] = $text; 
                 }
              
             break;
         
         case('send'):
          $nickname = htmlentities(strip_tags($_POST['nickname']));
             $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\_\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
              $message = htmlspecialchars(strip_tags($_POST['message']));
         if(($message) != "\n"){
            
             if(preg_match($reg_exUrl, $message, $url)) {
                $message = preg_replace($reg_exUrl, '<a href="'.$url[0].'" target="_blank">'.$url[0].'</a>', $message);
                } 
             
            
             fwrite(fopen('cache/chat.txt', 'a'), "<span>". $nickname . "</span>" . $message = str_replace("\n", " ", $message) . "\n"); 
         }
             break;
        
    }
    
    echo json_encode($log);
 
?>
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.05.2014, 23:15
Ответы с готовыми решениями:

Чат на PHP
Добрый день. Мне необходимо сделать чат на PHP + MySQL + AJAX. В первую очередь хочется научиться делать это самому, поэтому прошу...

php чат
Здравствуйте , нужен совет по написанию чата.В общем есть input, в который вводится текст сообщения и кнопка отправить.В таблице есть 3...

Нужен php чат!
Помогите,делаю одну вещь,и нужен php чат с такими требованиями: 1)Чат на php,но без mysql базы,но если будет будет отвечать остальным...

15
 Аватар для Nick007
101 / 94 / 38
Регистрация: 30.09.2009
Сообщений: 442
25.05.2014, 03:09
либо под каждую новость отдельный файл чата, добавив к имени чата id новости :
PHP
1
2
$chatId = 4;
$fname = 'cache/chat_'.$chatId.'.txt';
либо хранить чат в бд и давать каждому сообщению идентификатор новости
1
0 / 0 / 1
Регистрация: 19.01.2014
Сообщений: 71
25.05.2014, 11:25  [ТС]
Работает, спасибо! Только теперь второй вопрос, как передать id новости в переменную ?
0
 Аватар для Nick007
101 / 94 / 38
Регистрация: 30.09.2009
Сообщений: 442
25.05.2014, 14:28
ну это зависит от того, как вы определяете новость
из описания темы не понятно чем вы пользуетесь и что участвует в задаче
просмотрите свою задачу выше описного кода, возожно там есть объяленная переменная,
либо она есть в массиве $_POST

Добавлено через 2 минуты
возможно это совсем тупо,
но думаю вам поможет:
PHP
1
$chat_id = $news_id;
)
0
0 / 0 / 1
Регистрация: 19.01.2014
Сообщений: 71
25.05.2014, 14:55  [ТС]
А если создавать каждый новый файл чата с +1 ? chat_1 , chat_2 и т.д. как это можно сделать?

Не помогло, айди новости находится в $_GET['id'], но как его внедрить в файл (содержание которого я написал в начале) не совсем представляю
0
 Аватар для Nick007
101 / 94 / 38
Регистрация: 30.09.2009
Сообщений: 442
25.05.2014, 15:31
PHP
1
$fname = 'cache/chat_'.$_GET['id'].'.txt';
Добавлено через 1 минуту
вам придется обнулить историю чата, в связи с введением изменения,
либо, если чат ранее был только один и новость одна,
переименовать исходный чат под новость по вашему выбору

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

Добавлено через 6 минут
тупо увеличивать номер файла не советую,
вам обязтельно нужно соблюдать связь имени файла и новости,
иначе связь между новостями и чатами будет утеряна,
не забывайте о возможном удалении новости или очитске чата.
1
0 / 0 / 1
Регистрация: 19.01.2014
Сообщений: 71
25.05.2014, 16:42  [ТС]
Вся сложность передать айди новости в файл, который создаёт логи. Структура у меня такая:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
                <div id="allbattle">
                    <?php 
                        
                        include ("news/view.php");
                    ?>
                </div>
 
                <div class="chat">
                
                    <?php 
 
                        include ("chat.php");
                    ?>
                </div>
GET[id] как раз таки обрабатывается в "news/view.php"

PHP
1
2
3
4
5
6
function battle() {
 
  if ( !isset($_GET["id"]) || !$_GET["id"] ) {
    homepage();
    return;
  }
а в файле chat.php , помимо шаблона, так же есть кусок скрипта который запускает файл process.php, который и создаёт логи (код в начале)

Как импортировать GET id в process.php ?
0
 Аватар для Nick007
101 / 94 / 38
Регистрация: 30.09.2009
Сообщений: 442
25.05.2014, 17:11
$_GET - это глобальная переменная
она видна в каждом из ваших файлов,
и определяется до вызова первого из них
и используется в не изменном виде, в каждом из ваших файлов, если только вы ее не переименуете где то.
PHP
1
2
3
4
if ( !isset($_GET["id"]) || !$_GET["id"] ) {
    homepage();
    return;
  }
это не обработка, тут домашняя страница выводится в случае отсутствия идентификатора новости.
(если $_GET["id"] отсутствует)
видимо вам нужно смотреть глубже, в функцию homepage()
и дублировать ее механизмы, либо пользоваться ее результатами.
к сожалению мне не известно что там у вас происходит,
а если в адресе что то передается, например ?id=4
то вам остается просто подставить это значение получив его из $_GET, или $_POST
смотря как вы скрипт вызываете, просто по ссылке или отправкой формы
0
0 / 0 / 1
Регистрация: 19.01.2014
Сообщений: 71
25.05.2014, 17:33  [ТС]
В адресе передаётся "?action=battle&id=142" , а глобальная переменная не работает в файле, который создаёт логи
0
 Аватар для Nick007
101 / 94 / 38
Регистрация: 30.09.2009
Сообщений: 442
25.05.2014, 17:53
а файл логов вызывается вместе со страницей или кроном?
до вызова логов или в файле есть переопределение $_GET ?
если в переменной нет данных, то либо они туда вообще не попадают,
либо где то подменяются
0
0 / 0 / 1
Регистрация: 19.01.2014
Сообщений: 71
25.05.2014, 17:58  [ТС]
Они туда, скорее всего, вообще не попадает, так как создание логов вызывается раньше.
0
 Аватар для Nick007
101 / 94 / 38
Регистрация: 30.09.2009
Сообщений: 442
25.05.2014, 17:59
но скорее всего, раз у вас обработка homepage() при отсутствии переменной,
вам ее надо предопределять
кстати, а что у вас должно быть в id если она пустая?
0
0 / 0 / 1
Регистрация: 19.01.2014
Сообщений: 71
25.05.2014, 18:11  [ТС]
Если пустая
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
<?php 
    include("config/connbd.php");
?>
<?php foreach ( $results['articles'] as $article ) 
{ ?>
<div id="news">
    <div class="avatarbattle">
    <?php echo "<img src='" . htmlspecialchars( $article->avatar ) . "'>";?>    
    </div>
        <div class="centrbattle">
        <a href="profile.php?steamid=<?php echo $article->proid?>"><?php echo htmlspecialchars( $article->login )?></a>
    </br></br>
        Rares: <?php echo "<strong>" . $article->rares . "</strong>"; ?>
        </br>
        <?php 
        echo date('j F', $article->publicationDate)
        ?> 
        </div>
    <div id="gobattle">
                <?php
$result = mysql_query("SELECT `readybattle` FROM `articles` WHERE `id` = ".$article->id."");
$readybattle = mysql_fetch_array($result);
$allbattle = "<img src=/images/check.png  border=0 width=16px height=14px>";
 
if ($readybattle['readybattle'] == "1"){
echo $allbattle;
} else {
 
}
?>
    </br></br></br>
                <?php
$result = mysql_query("SELECT `readybattle` FROM `articles` WHERE `id` = ".$article->id."");
$readybattle = mysql_fetch_array($result);
$allbattle = "<a href='battle.php?action=battle&amp;id=$article->id'>Go battle</a>";
 
if ($readybattle['readybattle'] == "1"){
 
} else {
echo $allbattle;
}
 
?>
    </div>
</div>
 
<?php } 
?>
выводятся новости
0
 Аватар для Nick007
101 / 94 / 38
Регистрация: 30.09.2009
Сообщений: 442
25.05.2014, 18:27
а где вы такой тег раздобыли?: </br>
скорее всего вам нужно завести общий чат: chat_all.txt
и выводить его в случае вызова без get['id']
но если вы собираетесь как то выводить сообщения чата на главной около каждой новости,
то у вас там есть переменная $article->id

вообще, думаю вам не нужно выводить чат , если не определена конкретная новость а выводится список новостей

Добавлено через 1 минуту
тоисть если просматривается конкретная статья и полностью, то чат выводим,
а если вывдится сокращенный список статей, на главной, то чат не выводим
0
0 / 0 / 1
Регистрация: 19.01.2014
Сообщений: 71
25.05.2014, 18:34  [ТС]
Цитата Сообщение от Nick007 Посмотреть сообщение
тоисть если просматривается конкретная статья и полностью, то чат выводим,
а если вывдится сокращенный список статей, на главной, то чат не выводим
Оно так и выводится, чат появляется только в полной новости. Есть ли какой-то дополнительный вариант, чтобы не делать через айди новости? Или как-то через БД, или как-то еще...
0
 Аватар для Nick007
101 / 94 / 38
Регистрация: 30.09.2009
Сообщений: 442
25.05.2014, 19:01
Лучший ответ Сообщение было отмечено doberman41k как решение

Решение

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

скоре всего нужный и удобный для вас вариант уже есть,
но вы смотите как то мимо него.

выводите чат теми же средствами что и саму статью,
просто подменив источник
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.05.2014, 19:01
Помогаю со студенческими работами здесь

Чат на php из интернета
Скачал чат на php из интернета, а когда я поднял его через xampp - а он выдают вот такую ошибку, при этом не работает вход сам в чат. ...

Фиксированный чат на php
Доброго времени суток! Я новичок на писаний веб приложений на php. И вот возник такой вопрос нужно сделать как бы сайт когда на него...

Как создать чат на php?
Как создать чат на php. Дайте кто-нибудь пособие или программы

Php + jquery + mysqli чат
Хочу создать на сайте раздел онлайн чатов, где каждый сможет создать свою &quot;беседу&quot;. Никак не пойму с чего начать и какую структура для...

Как сделать чат на php
По мотивам возникающих в последнее время тем по поводу чатов: https://www.cyberforum.ru/php/thread2278690.html ...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка 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, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru