20. juli 2008 - 15:02Der er
11 kommentarer og 1 løsning
Online tid + point system
Hejsa!
Jeg har selv lavet mig et system der opdater hvor længe man har været online, samt et system der giver 5 point hver time (eller sådan skulle det være).
Problemet er at det ikke virker optimalt.
Derfor spørger jeg nogen der har erfaring inden for dette, der har lavet det før og ved hvordan det skal laves, om hvordan det er smartest at lave.
Jeg har min index fil, hvori jeg kalder sider vha. require (ex. if($_GET[p] == "blabla"){ require('blabla.php'); })
Så mit spørgsmål er stort set, hvordan laver man bedst et system der opdaterer hvor længe man har været online, samt giver 5 point hver time?
Jeg leder ikke efter en der giver færdige scripts, men en der vil hjælpe med at forklare det skal laves, og eventuelt hjælper mig med mine spørgsmål!
Hver gang en aktion laves på siden (eller med et ajaxkald i det skjulte): //Hvad er forskellen på tiden? $diff = time() - $_SESSION['login_time']; //Vi "nulstiller" point. $point = 0; //Hvis bruger har været her over en time. if($diff > 3600){ //3600 = time, 60 sekunder * 60 minutter. //Beregner point, baseret på hele timer. $point = floor($diff / 3600); } //Vi trækker tiden fra login_time, som brugeren allerede har fået point for. $_SESSION['login_time'] -= ($point * 3600);
// Bruger logger ind: $_SESSION['login_time'] = time();
// Forskellen på tiden: $diff = time()-$_SESSION['login_time'];
// Hvert femte minut skal der gives point: if($diff >= 300){ // Hvor mange point i timen?: $point = 5;
// Udregning på hvor mange point brugeren har ret til: $numb = floor($diff / 3600 * $point);
// Her skal pointene indsættes i databasen: mysql_query("UPDATE tabel SET point='$numb' WHERE brugernavn='$_SESSION[brugernavn]'") or die("Fejl: " . mysql_error());
// Ny login_time sættes: $_SESSION['login_time'] = time(); }
Oh ja, den glemmer jeg altid. Hvad angår online tid, kan man så gøre det sådan her:
// Bruger logger ind: $_SESSION['login_time'] = time();
// Forskellen på tiden: $diff = time()-$_SESSION['login_time'];
// Hvert femte minut skal der gives point: if($diff >= 300){ // Hvor mange point i timen?: $point = 5;
// Udregning på hvor mange point brugeren har ret til: $numb = floor($diff / 3600 * $point);
// Her skal pointene indsættes i databasen: mysql_query("UPDATE tabel SET point = point + $numb, online_tid = online_tid + $diff WHERE brugernavn='$_SESSION[brugernavn]'") or die("Fejl: " . mysql_error());
// Ny login_time sættes: $_SESSION['login_time'] = time(); }
Du mener i en session eller noget? Jeg vil gerne gemme online tiden, fordi at i brugerens præsentation står der hvor lang tid personen har været online
Gemme sekunder personen har været online i alt. Og så på baggrund af den info beregne point. Så du ikke gemmer point i databasen. Point bliver jo beregnet på baggrund af sekunder online. Så med mindre point kan bruges til at købe noget for eller lign, så kunne det være en ide.
Hejsa! Så er det fikset: if($_SESSION['brugernavn'] != ""){ // Forskellen på tiden: $diff = time()-$_SESSION['login_time'];
// Hvert femte minut skal der gives point: if($diff >= 300){ $time = time();
// Sætter status til offline, hvor folk har været for længe inaktiv mysql_query("UPDATE community SET status='Offline' WHERE timestamp < $time") or die("Fejl: " . mysql_error());
// Hvis man har været for længe inaktiv, bliver man logget ud if($_SESSION['timestamp'] < $time){ mysql_query("UPDATE community SET status='Offline' WHERE brugernavn='$_SESSION[brugernavn]'") or die("Fejl: " . mysql_error()); session_destroy(); exit("<script>document.location.href='?p=index'</script>"); } // Hvor mange point i timen?: $point = 3;
// Udregning på hvor mange point brugeren har ret til: $numb = $diff / 3600 * $point; list($before, $after) = split('[.]', $numb); $numb = $before.".".substr($after,0,1);
// Her skal pointene indsættes i databasen: $timestamp = time() + 900; mysql_query("UPDATE community SET monter = monter + $numb, online_tid = online_tid + $diff, timestamp = $timestamp WHERE brugernavn='$_SESSION[brugernavn]'") or die("Fejl: " . mysql_error());
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.