Перейти к контенту

Рекомендуемые сообщения

Вот задумал я написать себе чат для форума, чтоб IB тэги определял, аватары показывал. Ну там приваты, кики, баны - это само собой. Так-то вроде бы все просто сделать, но вот сталкнулся с какой проблемой - на форме поле с текстом и кнопочка. Жму кнопочку - форма сабмитится, но не очищается :D. Че-то не пойму как ее очищать-то автоматом. И еще проблемка - вроде тэги для автообновления фрэйма ответов вставил, а в IE не пашет, только в Опере. Я в PHP только начинающий. В принципе курс языков высокого уровня сдал на отлично, но тут че-то не доезжаю немного. Вот собственно код:

<?php
require ('conf_global.php');
function showchat(){
   global $INFO;
?>
<html>
<head>
<META HTTP-EQUIV="Refresh" CONTENT="5; URL=index.php?act=chat&task=msgs#end">
</head>
<body bgcolor=#000000 text=#ffffff leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<script language='Javascript'>
<!--
    function ins_code(text){
          parent.input.document.REPLIER.msg.value += text;
          parent.input.document.REPLIER.msg.focus();
    }
   -->
</script>
<?
  $file=file("{$INFO['home_url']}/chat.dat");
  for($i=0;$i<count($file);$i++)
  {
  $string.=$file[$i];
  }

echo preouttext($string);
?>
<a name="end"></a>
</body>
</html>
<?
}

//подготавливаем строчку для записи
function preintext($txt) {
global $ibforums, $INFO;
require "./sources/lib/post_parser.php";
$parser=new post_parser;
   $text=trim($txt);
if (!($text=="")) {
       $text=$txt;
       $text=$parser->convert(array('TEXT'=>$ibforums->input['msg'],'SMILIES'=>1,'CODE'=>1));
       $line='<!--line-->';
       $endline='<!--eol-->';
       $author='<!--author&'.$ibforums->member['name'].'-->';
       $msg='<!--msg-->';
       $emsg='<!--emsg-->';
 $text=$line.$author.$msg.$text.$emsg.$endline;
   }
return $text;
}

//вытаскиваем инфу из файла
function preouttext($txt){
global $ibforums, $INFO;
//Разбиваем базу на строки
preg_match_all("#<!--line-->.+?<!--eol-->#", $txt, $lines);
//Если в файле слишком много строчек - очищаем его, оставляя только последние
if (count($lines[0])>100) {
$open=fopen("{$INFO['base_dir']}/chat.dat","w+");
for($i=count($lines[0])-109;$i<count($lines[0]);$i++)
  {
  $string.=$lines[0][$i]."\n";
  }
fwrite ($open,$string);
fclose ($open);
}
for ($i=0; $i< count($lines[0]); $i++) {
 //Вычленяем нужную инфу из строк
 $line=$lines[0][$i];
 preg_match ("#<!--msg-->.+?<!--emsg-->#", $line, $ms);
 preg_match ("#<!--author&(.+?)-->#", $line, $auth);
 $msg=preg_replace("#<!--msg-->#", "", $ms[0]);
 $msg=preg_replace("#<!--emsg-->#", "", $msg);
 $author=$auth[1];
 $aut="'".$author.", '";
 $text.='<b><a href="#" onClick="ins_code('.$aut.'); return false" style=text-decoration:none><font color=#ffffff>'.$author.'</font></a></b>: '.$msg.'<br>';
}
return $text;
}

function inputform(){
?>
<html>
<body bgcolor=#000077>
<form name=REPLIER method=post action="index.php?act=chat&task=msg" target=chatwindow autocomplete=off>
<input type=text size=50 name=msg class="form" value="">
<input type=submit value="Send" class="form">
</form>
</body>
</html>
<?
}
if ($ibforums->input['task']=='')
{
?>
<title><? echo $ibforums->vars['home_name']; ?> Live Chat</title>
<frameset cols=*,115 MARGINWIDTH=0 MARGINHEIGHT=0 FRAMEBORDER=NO BORDER=0 FRAMESPACING=0 NORESIZE>
<frameset rows=*,50 MARGINWIDTH=0 MARGINHEIGHT=0 FRAMEBORDER=NO BORDER=0 FRAMESPACING=0 NORESIZE>
<frame name="chatwindow" src="index.php?act=chat&task=msgs#end" scrolling=auto frameborder=no framespacing=0 noresize>
<frame name="input" src="index.php?act=chat&task=input" scrolling=no frameborder=no framespacing=0 noresize MARGINWIDTH=0 MARGINHEIGHT=0>
</frameset>
<frame name="list" src="index.php?act=chat&task=online" scrolling=no frameborder=no framespacing=0 noresize MARGINWIDTH=0 MARGINHEIGHT=0>
</frameset>
<?
}
else if ($ibforums->input['task']=='msgs') {
header("Pragma: no-cache");
showchat();
}
else if ($ibforums->input['task']=='input'){
header("Pragma: no-cache");
   inputform();
}
else if ($ibforums->input['task']=='msg') {
header("Pragma: no-cache");
   $text=preintext($ibforums->input['msg']);
   if (!($text=="")){
 $open=fopen("{$INFO['base_dir']}/chat.dat","a");
 fwrite($open,$text."\n");
 fclose($open);
   }
   showchat();
}
else if ($ibforums->input['task']=='online') {

?>
<html>
<body bgcolor=#000077>
<center><font color=#ffffff><b>Online list</b></font></center>
</body>
</html>
<?
}

?>

Как это поставить - нужно создать файлик chat.php, поместить туда код, а сам файлик в sources закинуть. В index.php нужно вписать после

'buddy' => "browsebuddy",

строчку

'chat' => 'chat',

А так же создать в корне форума файл chat.dat c chmod 0666.

Он конечно весь глючный и сырой, но может подскажете конкретно по вопросам?

 

Добавлено:

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

Ссылка на комментарий
Поделиться на других сайтах

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

В чат можно зайти по ссылке index.php?act=chat

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.