PDA

View Full Version : [RELEASE] Update User Post Counts


12-05-2000, 10:39 PM
Well, here's a little script I wrote to update the post count stored in the user table with the actual number of
posts that user has made. When would you want to run something like this? Well, normally you should
never have to, but in case your user's post counts become inaccurate, you can reset them with this.

The main reason I wrote this, however, was to update a user's post count excluding certain fourms, for
example if you have a testing forum and don't want those posts included in the user's total. If you would
like to do something like this, just look at the comments in the script and make the changes needed.

Just name upload this code to admin/usercounts.php

Enjoy!


<?php

if (function_exists("set_time_limit")==1 and get_cfg_var("safe_mode")==0) {
set_time_limit(1200);
}

require ("global.php");

?>
<html>
<head>
<STYLE type=text/css>
BODY {
font-family: arial;
font-size: 10pt;
font-variant: normal;
font-style: normal;
}
P {
font-family: arial;
font-size: 10pt;
font-variant: normal;
font-style: normal;
}
</STYLE>
</head>
<body>

<?php
// ###################### Start user choices #######################
if (isset($action)==0 or $action=="") {

echo "<p><b>Update User Counts</b> - updates user post counts, excluding certain forums<br>\n";

echo doformheader("usercounts","updateuser");
echo "<table border=0>";
echo makeinputcode("Number of users to do per cycle","perpage","500");
echo doformfooter();

}

// ###################### Start update user #######################
if ($action=="updateuser") {
if (isset($perpage)==0 or $perpage=="") {
$perpage=500;
}
if (isset($startat)==0 or $startat=="") {
$startat=0;
}
$finishat=$startat+$perpage;

echo "<p>User ids:</p>";

$users=$DB_site->query("SELECT userid,username,posts FROM user WHERE userid>=$startat AND userid<$finishat ORDER BY userid DESC");
while ($user=$DB_site->fetch_array($users)) {

$userid=$user[userid];

// update user stuff

// If you want to exclude a certain forum, just add it to the query below
// Ex.: AND thread.forumid<>1

if ($posts=$DB_site->query_first("SELECT COUNT(post.postid) AS numberposts FROM post,thread WHERE thread.threadid=post.threadid AND post.userid=$userid")) {
$numposts=$posts[numberposts];
} else {
$numposts=0;
}

$DB_site->query("UPDATE user SET user.posts=$numposts WHERE userid=$user[userid]");

echo "$user[userid] $user[username] $numposts <br>\n";
flush();

}
if ($checkmore=$DB_site->query_first("SELECT userid FROM user WHERE userid>=$finishat")) {
echo "<script language=\"javascript\">window.location=\"usercounts.php?action=updateuser&startat=$finishat&perpage=$perpage\";</script>";
echo "<p><a href=\"usercounts.php?action=updateuser&startat=$finishat&perpage=$perpage\">Click here to continue updating users</a></p>";
} else {
echo "<p>All done!</p>";
}

}


?>
</body>
</html>

12-06-2000, 02:52 AM
It works great!!! Thanks Chris!!

12-06-2000, 11:04 AM
works great, and very easy to integrate into misc.php thnx

12-06-2000, 06:26 PM
I'm glad you guys like it! :)

12-07-2000, 01:01 AM
I like
if (function_exists("set_time_limit")==1 and get_cfg_var("safe_mode")==0) {
set_time_limit(1200);
} Smart thinkin'! :-)

12-07-2000, 02:06 PM
You could always just do:

@set_time_limit(1200);

:) "@" suppresses any error message.

12-07-2000, 02:23 PM
Originally posted by Ed Sullivan
:) "@" suppresses any error message.

Ahh I didn't know that, but thanks for the tip!

JJR512
05-01-2001, 12:33 AM
Can someone tell me if this will work for vB 2, or if not, how to make something similar that will?

Chris Schreiber
05-01-2001, 12:38 AM
Yes it works the same for 2.0. :)

JJR512
05-01-2001, 12:59 AM
OK, there's something I don't get.

I ran this script just after I imported from UBB, and peoples counts jumped, in some cases quite a bit. I expected this, because UBB never decriments the post count. So all the posts that were deleted still count for who posted them. Now vB does decriment the post count if you delete someone's posts, so I expected the count to be accurate.

But I just saw someone's post count drop by almost 600 posts. That should not be.

Here's another curious thing. What does this script do...where does it get its number, the number that it sets a person's post count to?

And what does this query do:
SELECT COUNT(*) FROM post WHERE userid='384';
That's an example using my user ID. After I ran this script, my post count was 6736, which is about what it was before (I don't remember it exactly). But if I run the above query on the database, I get a number of 7056. Which one is right?

bira
05-01-2001, 01:50 AM
Chris, question: since I used to prune threads/posts on UBB (up until I moved to vB a year ago), wouldn't the post count now REDUCE for the users, because it won't include the posts that are not in the database?

Xenon
05-01-2001, 09:23 PM
Works great, and ist just what i needed :)

webhost
07-13-2001, 04:31 PM
[B[Chris[/B]

I used your hack and it worked great.

I have one problem though. My total post count is lower than the sum of all member posts. Is there away I could add the difference to the total post sum?