За последние 24 часа нас посетил 22581 программист и 1117 роботов. Сейчас ищут 664 программиста ...

Готовое решение: AJAX-чат

Тема в разделе "Решения, алгоритмы", создана пользователем Amian, 18 мар 2007.

  1. Amian

    Amian Активный пользователь

    С нами с:
    15 мар 2007
    Сообщения:
    189
    Симпатии:
    0
    Сырой вариант с некоторыми лишними вещами(например ид и т.д.),но уже работает:

    1 - chat.php
    HTML:
    1. <Script Language='JavaScript'>
    2. function load2() {
    3. var load2 = window.open('chat_log.php','','scrollbars=yes,menubar=0,height=700,width=450,resizable=no,toolbar=no,location=0,status=0');
    4. }
    5. </head>
    6. <table align=center>
    7. <input type="button" value="enter chat room"    onclick="javascript:load2()">
    8. </form>
    9. </body>
    10. </html>
    2-chat_log.php

    HTML:
    1. <table align="center">
    2. <tr><td>
    3. <form method="post" action="ajax1.php">
    4. Name : <input type="text" name="login" />
    5. <input type="submit" value="login" />
    6. </form>
    7. </tr></td>
    8. </body>
    9. </html>
    3-ajax1.php

    PHP:
    1. <?php
    2. $_SESSION['login']=$_POST['login'];
    3. echo '
    4. <html>
    5. <head>
    6. <script src="clienthint.js">
    7. </script>
    8. </head>
    9. <body onload="showHint(\''.htmlSpecialChars($_SESSION['login']).'\')">
    10. <center><h3>Welcome to my chat</h3></center>
    11. <table align=center width=300>
    12. <caption><i>comments</i></caption>
    13. <tr align=center><td>
    14. <form name="Formy">
    15. <input type="text" id="txt1"
    16. onKeyDown="textCounter(this.form.txt1,this.form.remLen2,150)"
    17. onKeyUp="textCounter(this.form.txt1,this.form.remLen2,150)" />
    18. <input readonly type="text" name="remLen2" size="3" maxlength="3" value="150">
    19. <input type="reset" value="submit" onclick="Clicky(txt1.value,\''.htmlSpecialChars($_SESSION['login']).'\')">
    20. </form>
    21. </tr></td><tr><td>
    22. <span id="Hint"></span>
    23. <div id="txtHint"></div>
    24. </td></tr>
    25. </table>
    26. </body>
    27. </html>';
    28.  
    29. //echo "chekup : ".$_POST['login'];
    30. ?>
    4-clienthint.js


    [js]var xmlHttp;

    function showHint(name){
    xmlHttp=GetXmlHttpObject()
    if (xmlHttp==null)
    {
    alert ("Your browser does not support AJAX!");
    return;
    }


    var url="gethint.php";
    url=url+"?id=1";
    url=url+"&name=" + name;
    url=url+"&sid="+Math.random();
    xmlHttp.onreadystatechange=stateChanged;
    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);

    setTimeout("showHint(name)",1000);
    }

    function Clicky(comments,name){
    xmlHttp=GetXmlHttpObject()
    if (xmlHttp==null)
    {
    alert ("Your browser does not support AJAX!");
    return;
    }


    var url="gethint.php";
    url=url+"?comments=" + comments;
    url=url+"&name=" + name;
    url=url+"&sid="+Math.random();
    xmlHttp.onreadystatechange=stateChan;
    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);
    }


    function stateChanged()
    {
    if (xmlHttp.readyState==4)
    {
    document.getElementById("txtHint").innerHTML=xmlHttp.responseText;
    }
    }

    function stateChan()
    {
    if (xmlHttp.readyState==4)
    {
    document.getElementById("Hint").innerHTML=xmlHttp.responseText;
    }
    }

    function GetXmlHttpObject()
    {
    var xmlHttp=null;
    try
    {
    xmlHttp=new XMLHttpRequest();
    }
    catch (e)
    {
    try
    {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e)
    {
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    }
    return xmlHttp;
    }

    function textCounter(field,cntfield,maxlimit) {
    if (field.value.length > maxlimit)
    field.value = field.value.substring(0, maxlimit);
    else
    cntfield.value = maxlimit - field.value.length;
    }[/js]

    5-gethint.php:

    PHP:
    1. <?php
    2. if(!isset($_SESSION['login'])){
    3. //echo "session is unset";
    4. $_SESSION['login']=$_GET['name'];
    5. }
    6.  
    7. if(isset($_SESSION['login'])){
    8. //echo "hello ".$_SESSION['login'];
    9. $name=$_SESSION['login'];
    10. }else{
    11. echo "nnnoo";}
    12.  
    13. if(!isset($_SESSION['time'])){
    14. //echo "session is unset";
    15. $_SESSION['time']=time();
    16. }    
    17. $times=$_SESSION['time'];
    18. $id=$_GET['id'];
    19. $comments=htmlspecialchars($_GET['comments']);
    20.  
    21. $link=mysql_connect("host","login","password")
    22.  or die("Could not connect: " . mysql_error());
    23. mysql_select_db("ajax_chat")
    24.  or die("Could not select database: " . mysql_error());
    25.  
    26. $time=time();
    27. $data="INSERT INTO chat_log VALUES('$name','$id','$time')";
    28. mysql_query($data)
    29. or die("Could not perform operation: " . mysql_error());
    30.  
    31. if(isset($_GET['comments'])){
    32. $data="INSERT INTO chat VALUES('$name','$comments','$time')";
    33. mysql_query($data);
    34. }
    35.  
    36. // getting data from chat_log
    37. if(!isset($_GET['comments'])){
    38. $time=time()-5;
    39. $data="SELECT DISTINCT name FROM chat_log WHERE date>$time ORDER BY name";
    40. $resulty=mysql_query($data);
    41. $n=mysql_num_rows($resulty);
    42. $i=0;
    43. while($i<$n){
    44. $result=mysql_result($resulty,$i);
    45. echo "<br />login: ".$result;
    46. $i++;}
    47. echo "<br />";   
    48.  
    49. // going to retrive data from from the table now
    50. $data="SELECT * FROM chat WHERE date>$times";
    51. $resultz=mysql_query($data);
    52. $n=mysql_num_rows($resultz);
    53. $n=$n-1;
    54. while($n>(-1)){
    55. $result=mysql_result($resultz,$n,0);
    56. $out = "<br /><font color='red'>".$result."</font>";
    57. $result=mysql_result($resultz,$n,1);
    58. $out .= " : ".$result;
    59. echo $out;
    60. $n--;}
    61. }
    62. ?>
    [sql]CREATE TABLE chat_log(name VARCHAR(25),id SMALLINT,date MEDIUMINT);
    CREATE TABLE chat(name VARCHAR(25),comments VARCHAR(150),date MEDIUMINT);[/sql]
     
  2. bruto

    bruto Активный пользователь

    С нами с:
    18 сен 2006
    Сообщения:
    68
    Симпатии:
    0
    угу.. угу.. осталось решить проблему с кодировкой...
     
  3. GHostly_FOX

    GHostly_FOX Активный пользователь

    С нами с:
    30 ноя 2006
    Сообщения:
    6
    Симпатии:
    0
    Ктонить подскажет как именно решить проблему с кодировкой?!
    Я уже перелопатил кучу документации но так и не нашел =(
    Есть один вариант: при помощи iconv перекодировать но проверить немогу т.к. мой денвер ругается что нет такой комманды...
    можно ли решить проблему с кодировкой не на РНР а на Java непосредственно в этом месте кода:
    [js]document.getElementById("txtHint").innerHTML=xmlHttp.responseText;[/js]

    Может ктонить поможет?!
     
  4. Anonymous

    Anonymous Guest

    GHostly_FOX, ку, земляк. =)
    /* «Павлодар становиццо столицей программирования!» © Ося Бендер-Задунайский*/
     
  5. Anonymous

    Anonymous Guest

    Горбунов Олег
    А ты незнаешь ли как исправить проблему с кодировкой?!
     
  6. Битник

    Битник Активный пользователь

    С нами с:
    9 фев 2007
    Сообщения:
    103
    Симпатии:
    0
    У меня не работает. Выдаёт такое сообщение:

    Notice: Undefined index: comments in z:\home\chat\public_html\gethint.php on line 20
     
  7. vital72

    vital72 Активный пользователь

    С нами с:
    25 окт 2008
    Сообщения:
    1
    Симпатии:
    0
  8. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    vital72
    HTTP вообще не для чата. Если на любой чат навалится несколько тысяч юзеров, он будет жутко лагать.

    А этот сайт по ссылке скорее для рекламы какой-то ерунды, которую впаривают на последней ссылке.
    Любой человек, который прочтет ?1,?2,?3 - скажет: "что мне эти 3 мегабайта в час, когда у меня в месяц 10 гигов!". Там не сказано главного - как хреново серверу. Не сказано, что надо прилагать усилия, чтобы его оптимизировать.
     
  9. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Его оптимизировать не надо, нужно просто выкинуть базу данных)
     
  10. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    Ajax это ещё и футбольный клуб в Голландии :)

    А ещё есть Аякс Оилид и Аякс Теламонид
     
  11. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0