Old 17-04-2007, 15:08   #1 (permalink)
howdy
Registered User
 
Join Date: Dec 2006
Posts: 5
Ajax Chat - users online

i'm using a basic chat script and i'm trying to add a section for users currently logged in.

i only want to display the users who have posted in the last 2 min

getUsersOnline() and handleReceiveUsers() are the new info that doesn't seem to work. i know each of them are being called correctly, i can output from either function, but it looks like handleReceiveUsers() doesn't receive the xml data correctly

chat.php
PHP Code:
var sendReq = getXmlHttpRequestObject();
var receiveReq = getXmlHttpRequestObject();
var receiveReq2 = getXmlHttpRequestObject();
var lastMessage = 0;
var mTimer;
function startChat() {
    document.getElementById('txt_message').focus();
    getChatText();
    getUsersOnline();
}
function getXmlHttpRequestObject() {
    if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
    } else if(window.ActiveXObject) {
        return new ActiveXObject("Microsoft.XMLHTTP");
    } else {
        document.getElementById('p_status').innerHTML = 'Status: Cound not create XmlHttpRequest Object.  Consider upgrading your browser.';
    }
}
function getChatText() {
    if (receiveReq.readyState == 4 || receiveReq.readyState == 0) {
        receiveReq.open("GET", 'getChat.php?chat=1&last=' + lastMessage, true);
        receiveReq.onreadystatechange = handleReceiveChat; 
        receiveReq.send(null);
    }            
}
function getUsersOnline() {
    if (receiveReq2.readyState == 4 || receiveReq2.readyState == 0) {
        receiveReq2.open("GET", 'getChat.php?chat=1&last=' + lastMessage, true);
        receiveReq2.onreadystatechange = handleReceiveUsers; 
        var param = 'action=getusers';
        receiveReq2.send(param);
    }
}
function handleReceiveUsers() {
    if (receiveReq2.readyState == 4) {
        var users_div = document.getElementById('div_users');
        var xmldoc = receiveReq2.responseXML;
        var online_nodes = xmldoc.getElementsByTagName("online"); 
        var n_online = online_nodes.length
        for (i = 0; i < n_online; i++) {
            var user_node = online_nodes[i].getElementsByTagName("user");
            users_div.innerHTML += '<b>' + user_node[0].firstChild.nodeValue + '<b/><br/>';
        }
        mTimer = setTimeout('getChatText();',2000);
    }
}
function sendChatText() {
    if(document.getElementById('txt_message').value == '') {
        alert("You have not entered a message");
        return;
    }
    if (sendReq.readyState == 4 || sendReq.readyState == 0) {
        sendReq.open("POST", 'getChat.php?chat=1&last=' + lastMessage, true);
        sendReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        sendReq.onreadystatechange = handleSendChat; 
        var param = 'message=' + document.getElementById('txt_message').value;
        <?php 
        
include '../inc/functions.inc.php';
        include 
'../inc/config.inc.php';
        
mysql_connect($cfg_mysql_host$cfg_mysql_user$cfg_mysql_pass) or die(mysql_error());
        
mysql_select_db($cfg_mysql_db) or die(mysql_error());
        
$result mysql_query("SELECT fname, lname, username, displayname FROM fcms_users WHERE id = $login_id");
        
$r=mysql_fetch_array($result);
        
$fname $r['fname'];
        
$lname $r['lname'];
        
$username $r['username'];
        
$displayname $r['displayname'];
        switch(
$displayname) {
            case 
'1'$displayname $fname; break;
            case 
'2'$displayname $fname ' ' $lname; break;
            case 
'3'$displayname $username; break;
            default: 
$displayname $username; break;
        } 
?>param += '&name=<?php echo $displayname?>';
        param += '&chat=1';
        sendReq.send(param);
        document.getElementById('txt_message').value = '';
    }                            
}
function handleSendChat() {
    clearInterval(mTimer);
    getChatText();
}
function handleReceiveChat() {
    if (receiveReq.readyState == 4) {
        var chat_div = document.getElementById('div_chat');
        var xmldoc = receiveReq.responseXML;
        var message_nodes = xmldoc.getElementsByTagName("message"); 
        var n_messages = message_nodes.length
        for (i = 0; i < n_messages; i++) {
            var user_node = message_nodes[i].getElementsByTagName("user");
            var text_node = message_nodes[i].getElementsByTagName("text");
            var time_node = message_nodes[i].getElementsByTagName("time");
            chat_div.innerHTML += '<p></p><span class="chat_name">' + user_node[0].firstChild.nodeValue + '</span>&nbsp;';
            chat_div.innerHTML += '<span class="chat_time">' + time_node[0].firstChild.nodeValue + '</span>&nbsp;';
            chat_div.innerHTML += text_node[0].firstChild.nodeValue + '&nbsp;</p>';
            chat_div.scrollTop = chat_div.scrollHeight;
            lastMessage = (message_nodes[i].getAttribute('id'));
        }
        mTimer = setTimeout('getChatText();',2000);
    }
}

getChat.php
PHP Code:
<?php 
header
("Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); 
header("Last-Modified: " gmdate"D, d M Y H:i:s" ) . "GMT" ); 
header("Cache-Control: no-cache, must-revalidate" ); 
header("Pragma: no-cache" ); 
header("Content-Type: text/xml; charset=utf-8"); 

require(
'database.php'); 

if(isset(
$_POST['message']) && $_POST['message'] != '') { 
    
$sql "INSERT INTO fcms_chat_msgs(chat_id, user_id, user_name, message, post_time) VALUES (" 
            
db_input($_GET['chat']) . ", 1, '" db_input($_POST['name']) . 
            
"', '" db_input($_POST['message']) . "', NOW())"
    
db_query($sql); 


if(isset(
$_POST['action']) && $_POST['action'] == 'reset') { 
    
$lasthour date('Y-m-d h:m:s'strtotime(date('Y-m-d h:m:s'), "-1 hours")); 
    
$sql "DELETE FROM fcms_chat_msgs WHERE chat_id = " db_input($_GET['chat']) . " AND post_time <= '$lasthour'"
    
db_query($sql); 



$xml '<?xml version="1.0" ?><root>'
if(isset(
$_GET['action']) && $_GET['action'] == 'getusers') { 
    
$last2min date('Y-m-d h:m:s'strtotime(date('Y-m-d h:m:s'), "-2 min")); 
    
$sql "SELECT message_id, user_name FROM fcms_chat_msgs WHERE chat_id = " db_input($_GET['chat']) . " AND post_time <= '$last2min'"
    
$users_query db_query($sql); 
    while(
$users_array db_fetch_array($users_query)) { 
        
$xml .= '<online id="' $users_array['message_id'] . '">'
        
$xml .= '<user>' htmlspecialchars($users_array['user_name']) . '</user>'
        
$xml .= '</online>'
    } 
} else { 
    
$last = (isset($_GET['last']) && $_GET['last'] != '') ? $_GET['last'] : 0
    
$sql "SELECT message_id, user_name, message, date_format(post_time, '%r') as post_time" 
        
" FROM fcms_chat_msgs WHERE chat_id = " db_input($_GET['chat']) . " AND message_id > " $last
    
$message_query db_query($sql); 
    while(
$message_array db_fetch_array($message_query)) { 
        
$xml .= '<message id="' $message_array['message_id'] . '">'
        
$xml .= '<user>' htmlspecialchars($message_array['user_name']) . '</user>'
        
$xml .= '<text>' htmlspecialchars($message_array['message']) . '</text>'
        
$xml .= '<time>' $message_array['post_time'] . '</time>'
        
$xml .= '</message>'
    } 

$xml .= '</root>'
echo 
$xml
?>
  Reply With Quote
Reply



Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools Search this Thread
Search this Thread:

Advanced Search


Contact Us - Web Design Forums - Archive - Top
Search Engine Optimization by vBSEO 3.0.0 RC8