PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Online Rekord immer wieder reset


RolandCP
24.07.2005, 13:23
Ich habe das Problem bemerkt, dass der Online Rekord nie lange hält. Sprich nach einiger Zeit wird wieder ein Online Rekord angezeigt, der kleiner ist, als noch vor ein paar Stunden.

An was kann das denn liegen?

RolandCP
25.07.2005, 14:24
Kann hier niemand helfen? Der Rekord wird ständig rauf UND runter geschraubt. Er bleibt einfach nicht am Maximalpunkt hängen.

Mone
25.07.2005, 16:38
Das Problem hatte ich gestern auch, nachdem ich an den Scripten was geändert hatte. Ich hatte den Code zum Anzeigen des Rekords in ein anderes Script eingefügt, damit er dort auch angezeigt wird. Dabei hatte ich aber folgendes vergessen:

$specialtemplates = array(
// weitere Variablen
'maxloggedin',
};
(Das muss in dem Script stehen, wo der Rekord angezeigt werden soll, ziemlich am Anfang.)

Hast du denn etwas an den Scripten geändert?

RolandCP
25.07.2005, 17:43
Geändert habe ich nichts, jedoch habe ich die Anzeige von Online Rekord und logged in User auch auf einer anderen Non-vB PHP Seite eingebaut. Es wird dort auch alles richtig angezeigt. Templates benutzt diese Seite aber nicht, sondern ich habe dort einfach nur die gleiche Routine eingesetzt wie in der vB Index Page.

Was sollte ich jetzt machen?

Folgender Code steht in der non-vB Seite mit der Ausgabe ganz unten:


require_once(PATH.'/includes/functions_bigthree.php');

$activeusers = '';
if ($vboptions['displayloggedin'])
{
$datecut = TIMENOW - $vboptions['cookietimeout'];
$numbervisible = 0;
$numberregistered = 0;
$numberguest = 0;

$forumusers = $DB_site->query("
SELECT
user.username, (user.options & $_USEROPTIONS[invisible]) AS invisible, user.usergroupid,
session.userid, session.inforum, session.lastactivity,
IF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid
FROM " . TABLE_PREFIX . "session AS session
LEFT JOIN " . TABLE_PREFIX . "user AS user ON(user.userid = session.userid)
WHERE session.lastactivity > $datecut
" . iif($vboptions['displayloggedin'] == 1, "ORDER BY username ASC") . "
");

if ($bbuserinfo['userid'])
{
// fakes the user being online for an initial page view of index.php
$bbuserinfo['joingroupid'] = iif($bbuserinfo['displaygroupid'], $bbuserinfo['displaygroupid'], $bbuserinfo['usergroupid']);
$userinfos = array
(
$bbuserinfo['userid'] => array
(
'userid' => $bbuserinfo['userid'],
'username' => $bbuserinfo['username'],
'invisible' => $bbuserinfo['invisible'],
'inforum' => 0,
'lastactivity' => TIMENOW,
'usergroupid' => $bbuserinfo['usergroupid'],
'displaygroupid' => $bbuserinfo['displaygroupid'],
)
);
}
else
{
$userinfos = array();
}
$inforum = array();

while ($loggedin = $DB_site->fetch_array($forumusers))
{
$userid = $loggedin['userid'];
if (!$userid)
{ // Guest
$numberguest++;
$inforum["$loggedin[inforum]"]++;
}
else if (empty($userinfos["$userid"]) OR ($userinfos["$userid"]['lastactivity'] < $loggedin['lastactivity']))
{
$userinfos["$userid"] = $loggedin;
}
}

foreach($userinfos AS $userid => $loggedin)
{
$numberregistered++;
if ($userid != $bbuserinfo['userid'])
{
$inforum["$loggedin[inforum]"]++;
}
$loggedin['musername'] = fetch_musername($loggedin);

if (fetch_online_status($loggedin))
{
$numbervisible++;
eval('$activeusers .= ", ' . fetch_template('forumhome_loggedinuser') . '";');
}
}

// memory saving
unset($userinfos, $loggedin);

$activeusers = substr($activeusers , 2); // get rid of initial comma

$DB_site->free_result($loggedins);

$totalonline = $numberregistered + $numberguest;
$numberinvisible = $numberregistered - $numbervisible;

// ### MAX LOGGEDIN USERS ################################
$maxusers = unserialize($datastore['maxloggedin']);
if (intval($maxusers['maxonline']) <= $totalonline)
{
$maxusers['maxonline'] = $totalonline;
$maxusers['maxonlinedate'] = TIMENOW;
build_datastore('maxloggedin', serialize($maxusers));
}

$recordusers = $maxusers['maxonline'];
$recorddate = vbdate($vboptions['dateformat'], $maxusers['maxonlinedate'], true);
$recordtime = vbdate($vboptions['timeformat'], $maxusers['maxonlinedate']);

$show['loggedinusers'] = true;

echo "Insgesamt sind ".$totalonline." Benutzer online: ".$numberregistered." registrierte und ".$numberguest." Gäste.";
echo "<br><br>Registrierte Benutzer:<br>".$activeusers;
}
else
{
$show['loggedinusers'] = false;
}

Christian
25.07.2005, 17:49
Hast du mal versucht die (originale) index.php neu hochzuladen?

RolandCP
25.07.2005, 17:50
Die Index-Datei ist original, aber liegt es wirklich an dem obigen Problem?

Christian
25.07.2005, 17:53
Die Index-Datei ist original, aber liegt es wirklich an dem obigen Problem?Das beantwortet meine Frage nicht, hast du mal versucht sie neu hochzuladen?

RolandCP
25.07.2005, 18:03
Ja hab ich probiert. Keine Lösung. Und wie gesagt, der Code ist ja auch in einer non-vB Page.

Mone
25.07.2005, 18:07
Folgender Code steht in der non-vB Seite mit der Ausgabe ganz unten:

// ...
if (intval($maxusers['maxonline']) <= $totalonline)
{
$maxusers['maxonline'] = $totalonline;
$maxusers['maxonlinedate'] = TIMENOW;
build_datastore('maxloggedin', serialize($maxusers)); // <== raus!
}
Nimm diese Zeile aus der non-vB-Seite raus. Sie bewirkt, dass der Rekord neu in die Datenbank geschrieben wird. Er wird aber vorher gar nicht aus der DB gelesen, deshalb wird er immer wieder neu geschrieben.

Die vorgeschlagene Lösung hat dann nur den kleinen Schönheitsfehler, dass ein Rekord, wenn er genau beim Anzeigen dieser Seite erreicht wird, nicht in die DB eingetragen wird.

Ich kenne die vB-Scripte noch nicht so gut, weil ich mich erst kurz damit beschäftige, sonst könnte ich dir sagen, wie du deine non-vB-Seite ergänzen kannst, damit alles richtig funktioniert.

RolandCP
25.07.2005, 18:12
Noch zu erwähnen wäre, dass ich am Seitenanfang eine vB Login-Prozedur habe.

// ####################### VERZEICHNIS WECHSELN ###########################
chdir(PFADZUMFORUM);
// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);

// #################### DEFINE IMPORTANT CONSTANTS #######################
define('NO_REGISTER_GLOBALS', 1);
define('THIS_SCRIPT', 'index');

// ################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array();

// get special data templates from the datastore
$specialtemplates = array();

// pre-cache templates used by all actions
$globaltemplates = array();

// pre-cache templates used by specific actions
$actiontemplates = array();

// ######################### REQUIRE BACK-END ############################
require_once('./global.php');

Mone
25.07.2005, 18:16
Noch zu erwähnen wäre, dass ich am Seitenanfang eine vB Login-Prozedur habe. Prima ;), dann versuch mal folgendes:

Suche:
$specialtemplates = array();

Ersetze das durch:
$specialtemplates = array(
'maxloggedin',
};

RolandCP
26.07.2005, 08:52
Vielen Dank. Scheint jetzt zu funktionieren.