Helpful Information
 
 
Category: vBulletin.org Forum
Top Posters during XXXX

I am using a php file to display the top ten posters:

<?php

require("global.php");

$db_link = @mysql_pconnect("$dbservername", "$dbusername", "$dbpassword");
mysql_select_db("$dbname");

?>

<table cellpadding="4" cellspacing="1" width="100%">
<tr>
<td><small><strong>TOP POSTERS</strong></small></td>
<td align="center"><small><strong>POSTS</strong></small></td>
</tr>
<?php
$top_post = top_posters();
while( $row = mysql_fetch_row($top_post) )
{
print('<tr>');
print('<td>');
print('<a href="member.php?s=&action=getinfo&userid=');
print($row[0]);
print('" target="_top">');
print($row[1]);
print('</a></td>');
print('<td align="center">');
print($row[2]);
print('</td>');
print('</tr>');
}
mysql_free_result ($top_post);
?>
</table>

<?php

function top_posters()
{
$cur_time = mktime(date(G), date(i), date(s), date(m), date(d), date(Y));
$query = 'SELECT userid, username, posts ' .
'FROM user ' .
'ORDER BY posts DESC LIMIT 3';
$result = mysql_query($query)
or die('top_posters query failed');
return($result);
}

?>

IRC may recognise this :)

My question is, is there a way to set this so it displays the top posters of the last 7 days and the number of posts during that time period?

I had tried changing some things and got the top list for last 7 days, but it would only display the total number of posts, not just for those 7 days..

I hope Im making sense.

I did something like this only I calculate based on the past 24 hours.


$numberHighPostPerPage = 10; //set for this paste of teh script
$curTime = localtime();
$uts = time() - ($curTime[2]*3600 + $curTime[1]*60 + $curTime[0]);
$lts = $uts - (86401); // 3600 * 24 + 1 (to be completely honest about "yesterday")
unset($curTime);

$users = $DB_site->query("
SELECT post.userid, user.username, COUNT(post.userid) AS count
FROM post
LEFT JOIN user ON post.userid=user.userid
WHERE dateline >= $lts AND dateline <= $uts
GROUP BY post.userid
ORDER BY count DESC
LIMIT $numberHighPostPerPage"
);

while ($user = $DB_site->fetch_array( $users ) )
{
eval( "\$highpostbits .= \"".gettemplate("highpostbit")."\";");
$numhp++;
}
for ( ; $numhp < $numberHighPostPerPage; $numhp++ )
{
$user[userid] = "-1"; $user[username] = "Unclaimed"; $user[count] = "0";
eval( "\$highpostbits .= \"".gettemplate("highpostbit")."\";");
}
eval( "\$highpost = \"".gettemplate("highpost")."\";");



Change the line:
$lts = $uts - (86401);

to:
$its = $uts - (604800);


Then add the templats: highpost, and highpostbit. In the highpost bit you can use $user[userid] $user[username] and $user[count].

What this will also do, if there are less then $numberHighPostPerPage top posters it will fill the remaining slots with "Unclaimed".


This is a part of the site integration script I am writing for my site.

Using

<?php

$templatesused = "highpost,highpostbit";
require ("global.php");

$numberHighPostPerPage = 10; //set for this paste of the script
$curTime = localtime();
$uts = time() - ($curTime[2]*3600 + $curTime[1]*60 + $curTime[0]);
$lts = $uts - (604800); // 3600 * 24 + 1 (to be completely honest about "yesterday")
unset($curTime);

$users = $DB_site->query("
SELECT post.userid, user.username, COUNT(post.userid) AS count
FROM post
LEFT JOIN user ON post.userid=user.userid
WHERE dateline >= $lts AND dateline <= $uts
GROUP BY post.userid
ORDER BY count DESC
LIMIT $numberHighPostPerPage");

while ($user = $DB_site->fetch_array( $users ) )
{
eval( "$highpostbits .= \"".gettemplate("highpostbit")."\";");
$numhp++;
}
for ( ; $numhp < $numberHighPostPerPage; $numhp++ )
{
$user[userid] = "-1"; $user[username] = "Unclaimed"; $user[count] = "0";
eval( "$highpostbits .= \"".gettemplate("highpostbit")."\";");
}
eval( "$highpost = \"".gettemplate("highpost")."\";");

?>



I get parse errors?

Parse error: parse error in /www/influx9/forum/ztoppost.php(23) : eval()'d code on line 1

Parse error: parse error in /www/influx9/forum/ztoppost.php(23) : eval()'d code on line 1

Parse error: parse error in /www/influx9/forum/ztoppost.php(23) : eval()'d code on line 1

Parse error: parse error in /www/influx9/forum/ztoppost.php(23) : eval()'d code on line 1

Parse error: parse error in /www/influx9/forum/ztoppost.php(23) : eval()'d code on line 1

Parse error: parse error in /www/influx9/forum/ztoppost.php(23) : eval()'d code on line 1

Parse error: parse error in /www/influx9/forum/ztoppost.php(23) : eval()'d code on line 1

Parse error: parse error in /www/influx9/forum/ztoppost.php(23) : eval()'d code on line 1

Parse error: parse error in /www/influx9/forum/ztoppost.php(23) : eval()'d code on line 1

Parse error: parse error in /www/influx9/forum/ztoppost.php(23) : eval()'d code on line 1

Parse error: parse error in /www/influx9/forum/ztoppost.php(31) : eval()'d code on line 1

hey leadZERO

Can you post your templates?

The reason why you are getting parse errors is not because of a coding error on anyone's part.

It is a problem that vBulletin currently has with [ php ] blocks and escaped characters... watch this:

eval("\$bits .= \"".gettemplate("bit")."\";"); now the same code in a [ php ] block: eval("\$bits .= \"".gettemplate("bit")."\";"); As you can see, the code is not properly printed in the PHP block.

I did manage to get rid of the parse errors.. :) Trying to sort the templates now :p

Templates:

~highpost
<table width="165" border="0" cellspacing="0" cellpadding="0">
$highpostbits
</table>

~highpostbit
<tr bgcolor="#370000">
<td width="5"><img src="/images/spacer.gif" width="5"></td> <td><a href="/forum/member.php?s=$session[sessionhash]&action=getinfo&userid=$user[userid]"><font color="#E0E0E0">$user[username]</font></a></td>
<td>$user[count]</td>
<td width="5"><img src="/images/spacer.gif" width="5"></td>
</tr>


Those are copied straight from my templates, so just ignore things like my spacer GIF.

Works great leadZERO, I appreciate the help!

Originally posted by Kier
As you can see, the code is not properly printed in the PHP block.

Maybe it's cause Freddie fixed it (haven't looked for this specifically in the Bug Fixes thread yet) but they look exactly the same to me...

The \ is missing before $bits

Bane I got the same parse error as you. What did you do to fix it?

how do I change this code so I can run it in a different directory then my forum?

Snyx, I am running it through a SSI Include

<!-- include virtual="/forum/toppost.php"-->

Is this what you need? or you want to keep the file in a non forum directory?



Sarge, here is the corrected file: (Set for top posters in last 7 days)

Tried your attached file but Im getting this error:

Fatal error: Call to unsupported or undefined function localtime() in /home/sites/home/web/forum/toppost.php on line 7

When I try to call the .php in I get a bunch of NONSCENCE! Hummmm, I donno . . . .

Ok Thanks Bane

MY question... I posted on my test board just to check this out,

but it listed the top posters... not the top posters from the last 24!

IT is supposed to list the top posters from the last 24 right?

He changed my original version to display for the past seven days or something. Change the number of seconds difference between $uts and $lts to whatever 3600*24+1 is.

This seems to be cool. I wonder if you guys can modify the codes so i get a list of the last 10 posts (messages) instead of 10 posters!

just wondering....

<?php
// Set this to the max number of threads to display
$maxthreads = 10;

require("./admin/config.php");
$db=mysql_connect($servername,$dbusername,$dbpassword);
mysql_select_db($dbname);
$query = "SELECT * FROM thread ORDER BY lastpost DESC LIMIT $maxthreads";
$resultlatest = mysql_query($query,$db);
while ($latest_array = mysql_fetch_array($resultlatest)) {
echo "<a href=\"showthread.php?threadid=$latest_array[threadid]\">$latest_array[title]</a>";
}

?>










privacy (GDPR)