Solved

counting users on pages.

Posted on 2008-10-24
10
245 Views
Last Modified: 2012-05-05
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??
0
Comment
Question by:runnerjp
  • 6
  • 4
10 Comments
 
LVL 39

Expert Comment

by:Roger Baklund
ID: 22796886
Where is the data stored? In a database? In a text file? Need more info...
0
 

Author Comment

by:runnerjp
ID: 22796928
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

0
 
LVL 39

Expert Comment

by:Roger Baklund
ID: 22797174
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

0
 
LVL 39

Expert Comment

by:Roger Baklund
ID: 22797227
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

0
 

Author Comment

by:runnerjp
ID: 22797616
well i display my pages like so... http://mysite.com/members/index.php?page=reply
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 39

Expert Comment

by:Roger Baklund
ID: 22798109
Yes... if $page contains "index.php?page=reply" you would use this:


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

Open in new window

0
 
LVL 39

Expert Comment

by:Roger Baklund
ID: 22798130
If I am not answering your question, I may have misunderstood. Please elaborate.
0
 

Author Comment

by:runnerjp
ID: 22798438
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
0
 
LVL 39

Accepted Solution

by:
Roger Baklund earned 500 total points
ID: 22798518
The code I gave you answers how to get the users of one of those three pages, right? Are you looking for a way to get all three at the same time? It would be somthing like this:
WHERE 

  file LIKE 'http://mysite.com/members/index.php?page=reply%' OR

  file LIKE 'http://mysite.com/members/index.php?page=mainforums%' OR

  file LIKE 'http://mysite.com/members/index.php?page=post%'

Open in new window

0
 

Author Closing Comment

by:runnerjp
ID: 31509675
thats 100% what i was looking for.. i will start work on it right away ty
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Deprecated and Headed for the Dustbin By now, you have probably heard that some PHP features, while convenient, can also cause PHP security problems.  This article discusses one of those, called register_globals.  It is a thing you do not want.  …
Part of the Global Positioning System A geocode (https://developers.google.com/maps/documentation/geocoding/) is the major subset of a GPS coordinate (http://en.wikipedia.org/wiki/Global_Positioning_System), the other parts being the altitude and t…
The viewer will learn how to count occurrences of each item in an array.
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.

912 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now