d1pro Опубликовано 11 Августа 2003 Жалоба Поделиться Опубликовано 11 Августа 2003 Вот задумал я написать себе чат для форума, чтоб IB тэги определял, аватары показывал. Ну там приваты, кики, баны - это само собой. Так-то вроде бы все просто сделать, но вот сталкнулся с какой проблемой - на форме поле с текстом и кнопочка. Жму кнопочку - форма сабмитится, но не очищается . Че-то не пойму как ее очищать-то автоматом. И еще проблемка - вроде тэги для автообновления фрэйма ответов вставил, а в 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.Он конечно весь глючный и сырой, но может подскажете конкретно по вопросам? Добавлено: И еще, что по-вашему мнению дает меньшую нагрузку на сервер - когда мессаги храняться в базе мускула или же как здесь - в текстовом файле. А то не охота заранее тупиковый путь выбирать... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
d1pro Опубликовано 11 Августа 2003 Автор Жалоба Поделиться Опубликовано 11 Августа 2003 Чисто теоретически должно работать с любыми версиями, но проверялось только с 1.2В чат можно зайти по ссылке index.php?act=chat Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.