17-04-2007, 15:08
|
#1 (permalink)
|
|
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> ';
chat_div.innerHTML += '<span class="chat_time">' + time_node[0].firstChild.nodeValue + '</span> ';
chat_div.innerHTML += text_node[0].firstChild.nodeValue + ' </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;
?>
|
|
|
|