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

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

Вот задумал я написать себе чат для форума, чтоб 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

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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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

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

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