Link to home
Start Free TrialLog in
Avatar of runnerjp
runnerjp

asked on

counting users on pages.

throughout my site i track users...
i have a forum section and want to display how many users and who is viewing the forum...

the thing is i store the page next to the username that they are on and im woundering if i could search for short hand of the url... examples will help make this clearer...

here are a few examples of links on my forum

index.php?page=post&forum=<?php echo $forum?>
index.php?page=mainforums
index.php?page=reply&id=<? echo $id ?>

and so on... as you guys can see there are alot of veriations... is there away to search for the links that contain

index.php?page=reply
index.php?page=mainforums
index.php?page=post

to just display them??
Avatar of Roger Baklund
Roger Baklund
Flag of Norway image

Where is the data stored? In a database? In a text file? Need more info...
Avatar of runnerjp
runnerjp

ASKER

sorry ok its stored in a database... below is how i store the information..
$timestamp = time();
$timeout = $timestamp - 180;
$username= get_username($_SESSION['user_id']);
function selfURL() { 
$s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : "";
$protocol = strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$s; 
$port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]); 
return $protocol."://".$_SERVER['SERVER_NAME'].$port.$_SERVER['REQUEST_URI']; } 
function strleft($s1, $s2) { return substr($s1, 0, strpos($s1, $s2)); }
$filename = (selfURL());
//Insert User
$insert = mysql_query("REPLACE INTO `useronline` SET `timestamp`='$timestamp', `ip`='".$_SERVER['REMOTE_ADDR']."', `file`='$filename',`user`='$username',`user_id`='".$_SESSION['user_id']."'") 
or die(mysql_error()); 
?>

Open in new window

To select records from a database you would use the SQL SELECT statement. Something like this:

SELECT user, FROM useronline WHERE file LIKE "%index.php?page=reply%";

The LIKE operator allows a wildcard type search, % means any sequence of any characters.

To find currently online users (last ten minutes) within a particular page, the PHP would be something like the below:
$page = "index.php?page=mainforums";
$sql = "SELECT * FROM useronline 
  WHERE file LIKE '%$page%' AND
  timestamp > now() - interval 10 minute";
$res = mysql_query($sql) or die('Error: '.mysql_error());
if(mysql_num_rows($res) > 0) {
  echo '<div class="CurrentlyOnline">';
  while($row = mysql_fetch_assoc($res))
    echo $row['user'].'<br />';
  echo '</div>';
}

Open in new window

A should hurry to add that the database server can not use an index when you start the search phrase with %. It would be better for performance if you could do like this:


   WHERE file LIKE 'http://mydomain.com/path/$page%'

Open in new window

well i display my pages like so... http://mysite.com/members/index.php?page=reply
Yes... if $page contains "index.php?page=reply" you would use this:


  WHERE file LIKE 'http://mysite.com/members/$page%'

Open in new window

If I am not answering your question, I may have misunderstood. Please elaborate.
your kinda getting there lol

thing is its an include link so i have many files with index... im just looking for those with

index.php?page=reply
index.php?page=mainforums
index.php?page=post
ASKER CERTIFIED SOLUTION
Avatar of Roger Baklund
Roger Baklund
Flag of Norway image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
thats 100% what i was looking for.. i will start work on it right away ty