PDA

View Full Version : ## Little PHP Assistance ##


Mr Chad
12-21-2005, 11:02 PM
Ok well i have this when a special link is clicked it runs a php file that has this

$sql = "UPDATE " . TABLE_PREFIX . "user SET `vote_status`=1 WHERE `userid`=".$db->sql_prepare($vbulletin->userinfo['userid']);
$sqlr = $db->query_write($sql);
I also have a cron job that sets vote_status to 0 every 12 hours
all i need is somthing that will temp promote any user with vote_status=1 to a special user group, and it checks this every 12 hours to.

Chris M
12-21-2005, 11:10 PM
In the php file that is clicked on add:
//check the user isn't an admin, supermod or mod! (add more groups if necessary)
if (!(is_member_of($vbulletin->userinfo, array(5,6,7)))) {
$db->query_write("UPDATE " . TABLE_PREFIX . "user SET usergroupid = 'y' WHERE userid = ' . $vbulletin->userinfo['userid'] . '");
}

In your cron file:
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user SET usergroupid = 'z' WHERE usergroupid = 'y'");

Chris

Mr Chad
12-21-2005, 11:11 PM
how can i make it for just registered members as the default group.

Chris M
12-21-2005, 11:12 PM
if ($vbulletin->userinfo['vote_status'] == "1") {
// do stuff
}

Chris

Mr Chad
12-21-2005, 11:30 PM
Chris your code make my vote_status not needed.

//check the user isn't an admin, supermod or mod! (add more groups if necessary)
if (!(is_member_of($vbulletin->userinfo, array(5,6,7)))) {
$db->query_write("UPDATE " . TABLE_PREFIX . "user SET usergroupid = 'y' WHERE userid = ' . $vbulletin->userinfo['userid'] . '");
}

How do i just make it do it to the people that are just registered users (ID = 2)

Chris M
12-21-2005, 11:31 PM
Change:
if (!(is_member_of($vbulletin->userinfo, array(5,6,7)))) {
to:
if ((is_member_of($vbulletin->userinfo, 2)) && (!(is_member_of($vbulletin->userinfo, array(5,6,7))))) {

Chris

Mr Chad
12-21-2005, 11:35 PM
Thanks that did the trick.

Mr Chad
12-23-2005, 04:08 AM
Ok i need help on another thing:

ok i can pull the total amount of members like this

// get forum members
$querya="SELECT COUNT(*) AS users, MAX(userid) AS max FROM " . $TABLE_PREFIX . "user WHERE usergroupid!=4";
$numa = mysql_query_eval($querya,$link);
$numb = mysql_fetch_array($numa);
$numbermembers=number_format($numb['users']);
mysql_free_result($numa);


Anyone know how to pull the member with the highist userid and grab their user name?

Marco van Herwaarden
12-23-2005, 05:50 AM
You would need a seperate query for that.

Mr Chad
12-23-2005, 07:51 AM
You would need a seperate query for that.

how would i set it up tho? to get text i do SELECT what?

Marco van Herwaarden
12-23-2005, 08:11 AM
SELECT username FROM user ORDER BY posts DESC LIMIT 1;

Mr Chad
12-24-2005, 12:57 AM
never mind did it ^^

//get latest ecdownload
$queryf= "SELECT name AS newdownload FROM " . $TABLE_PREFIX . "dl_files ORDER BY id DESC LIMIT 1";
$latestdownloada = mysql_query_eval($queryf,$link);
$latestdownloadb = mysql_fetch_array($latestdownloada);
$latestdownload= $latestdownloadb['newdownload'];
mysql_free_result($latestdownloada);

Is there a way to get currently online? only useing the database?

//get total online
$queryh= "SELECT COUNT(*) AS online FROM " . $TABLE_PREFIX . "session";
$onlinea = mysql_query_eval($queryh,$link);
$onlineb = mysql_fetch_array($onlinea);
$online= number_format($onlineb['online']);
mysql_free_result($onlinea);

it gets a huge number... any way to fix this?



anyone?

Marco van Herwaarden
12-24-2005, 07:50 AM
You will have to limit to the rows with a dateline later then the current time minus cookie timeout.

Mr Chad
12-24-2005, 05:32 PM
You will have to limit to the rows with a dateline later then the current time minus cookie timeout.

wow, im over my head.

Marco van Herwaarden
12-24-2005, 07:50 PM
To put it more simple. Rows are added to the session table all the time. The table gets cleaned again once an hour (i think by default) by a scheduled task.

A user is 'online' however if his last action (page load) was less the the cookie timeout ago. So if the cookie timeout is set to 900 (seconds, 15 minutes, default), then you only want to rows from the session table of the last 900 seconds.

Mr Chad
12-24-2005, 10:30 PM
yea but the time it shows in the table is a huge number like 8 digits

How would i make it just count the rows with userid > 0

Marco van Herwaarden
12-25-2005, 07:31 AM
$queryh= "SELECT COUNT(*) AS online FROM " . $TABLE_PREFIX . "session WHERE userid > 0 AND lastactivity > " . (TIMENOW - $vbulletin->options['cookietimeout'])";