Avatar billede supersquirrel Nybegynder
20. juli 2008 - 15:02 Der 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!

Tak på forhånd!
Avatar billede jakobdo Ekspert
20. juli 2008 - 15:29 #1
Altså jeg ville jo nok lave det ala:

//Bruger logger ind:
$_SESSION['login_time'] = time();

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);
Avatar billede supersquirrel Nybegynder
20. juli 2008 - 16:44 #2
Jeg kunne forestille mig noget i stil med:

// 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();
}

- Det burde klare pointene, ikke?
Avatar billede jakobdo Ekspert
20. juli 2008 - 17:16 #3
Vel ikke set point = $numb
Men SET point = point + $numb
Ellers får en bruger jo overskrevet tidligere point.
Avatar billede supersquirrel Nybegynder
20. juli 2008 - 17:22 #4
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();
}
Avatar billede supersquirrel Nybegynder
20. juli 2008 - 17:23 #5
Mere overskueligt:
SET point = point + $numb, online_tid = online_tid + $diff
Avatar billede jakobdo Ekspert
20. juli 2008 - 17:53 #6
tja...
eller også skal du bare holde dig til at gemme sekunder online...
Avatar billede supersquirrel Nybegynder
20. juli 2008 - 18:02 #7
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
Avatar billede jakobdo Ekspert
20. juli 2008 - 19:05 #8
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.
Avatar billede supersquirrel Nybegynder
20. juli 2008 - 19:20 #9
Det er nemligt det point'sne skal bruges til. Har selv haft din idé i tankerne.
Avatar billede supersquirrel Nybegynder
21. juli 2008 - 09:01 #10
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());

  // Ny login_time sættes:
  $_SESSION['login_time'] = time();
  $_SESSION['timestamp'] = time() + 900;
}
}

Tak for hjælpen :) Smid et svar
Avatar billede jakobdo Ekspert
21. juli 2008 - 09:21 #11
Svar!
Avatar billede jakobdo Ekspert
21. juli 2008 - 12:48 #12
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester