Avatar billede supersquirrel Nybegynder
22. januar 2008 - 20:57 Der er 44 kommentarer

time istedet for minutter

Hejsa,

Jeg vil gerne have at man får 1 point hver time, istedet for hvert minut.

===============================================
<?php
$brugernavn = $_SESSION[brugernavn];
$pointsats = '1'; //Antal point der gives for hvert online-minut

$dbquery = mysql_query("select * from brugere where brugernavn = '$brugernavn'");
$dbarray1 = mysql_fetch_array($dbquery);

$tid = $dbarray['logintid'];
$sammenlign = time() - $tid;
$minutter = $sammenlign / 60;
if($minutter > 60){
$regn = $minutter - 60;
$min = round($regn);
}else{
$min = round($minutter);
}
$point = $min*$pointsats;
mysql_query("update brugere set point = point+'$point' where brugernavn = '$brugernavn'");
?>
=========================================

Tak på forhånd :)
Avatar billede jakobdo Ekspert
22. januar 2008 - 21:35 #1
60 minutter = 1 time.
Har du så ikke resten selv?
Du kunne måske blot rette 60 til 60*60, altså 3600.
Avatar billede supersquirrel Nybegynder
22. januar 2008 - 21:53 #2
Hvilken en af dem? o.o
Avatar billede jakobdo Ekspert
22. januar 2008 - 22:01 #3
Ja, det var godt spørgsmål. :o)
Det skal jeg lige bruge lidt tænke tid til!
Avatar billede supersquirrel Nybegynder
22. januar 2008 - 22:31 #4
Altså nu føler jeg en smule ironi her :P
Det skulle vel ikke være $minutter = $sammenlign / 60; ? *G*
Avatar billede jakobdo Ekspert
23. januar 2008 - 06:21 #5
Sådan var det ikke ment, undskyld.
Jeg sad bare lige i en anden opgave.
Men er dette ikke ok?

<?php
$brugernavn = $_SESSION[brugernavn];
$pointsats = '1'; //Antal point der gives for hvert online-minut

$dbquery = mysql_query("select * from brugere where brugernavn = '$brugernavn'");
$dbarray1 = mysql_fetch_array($dbquery);

$tid = $dbarray['logintid'];
$sammenlign = time() - $tid;
$timer = $sammenlign / 3600;
if($timer > 3600){
    $regn = $timer - 3600;
    $time = round($regn);
}else{
    $time = round($timer);
}
$point = $time*$pointsats;
mysql_query("update brugere set point = point+'$point' where brugernavn = '$brugernavn'");
?>
Avatar billede supersquirrel Nybegynder
23. januar 2008 - 15:16 #6
Det ser skam helt fint ud, og selvfølgelig ligger din anden opgave som nummer 1! :)
Men tænkte på, kan jeg mon sætte den i toppen af min index fil, sådan at den opdaterer ved hver time, istedet for hver gang man logger ud? :))
Avatar billede jakobdo Ekspert
23. januar 2008 - 17:45 #7
Du ville vel godt kunne lave noget udregning, men så bør du måske nøjes med at tjekke indlogningstiden (som du kunne gemme i en session) og tjekke den løbende.
Så overbelaster du ikke databasen med unødige kald.

Og mit svar kunne igen misforståes! :o)

"Men er dette ikke ok?" <- Jeg mente om min kode var ok! :o)
Avatar billede supersquirrel Nybegynder
23. januar 2008 - 18:09 #8
Misforstod ikke den der :)))
Men hvordan mener du med gemme den i en session også kalde den løbendE?
Avatar billede jakobdo Ekspert
23. januar 2008 - 18:24 #9
Brugeren kommer til login-formular.
Brugerens brugernavn og kodeord tjekkes mod databasen.
Er brugernavn og kodeord korrekt, så sætter du en session.
$_SESSION['logged_in'] = true; //eller hvad du nu kalder den.
Samtidig sætter du så også:
$_SESSION['login_tid'] = time();
Så tjekker du bare hele tiden LOGIN_TID mod TIME() og ser om der er gået mere end en time.
Avatar billede supersquirrel Nybegynder
23. januar 2008 - 19:03 #10
Så det må være noget med:

$tid = $_SESSION[login_tid];
$sammenlign = time() - $tid;
$timer = $sammenlign / 3600;
if($timer > 3600){
    $regn = $timer - 3600;
    $time = round($regn);
}else{
    $time = round($timer);
}
$point = $time*$pointsats;

Eller hva?
Avatar billede jakobdo Ekspert
23. januar 2008 - 19:09 #11
Ja!
Avatar billede supersquirrel Nybegynder
23. januar 2008 - 19:59 #12
så har jeg så lavet:
        if($point > 0){
            $sql = mysql_query("SELECT * FROM community WHERE brugernavn='$_SESSION[brugernavn]'") or die("Fejl: " . mysql_error());
            while($point = mysql_fetch_assoc($sql)){
                $total = $point[monter] + $point;
                mysql_query("UPDATE community SET monter='$total' WHERE brugernavn='$_SESSION[brugernavn]'") or die("Fejl: " . mysql_error());
            }
        }

skulle det ikke virke?
Avatar billede supersquirrel Nybegynder
23. januar 2008 - 20:04 #13
$pointsats = 1;
        $tid = $_SESSION[login_tid];
        $sammenlign = time() - $tid;
        $timer = $sammenlign / 3600;
        if($timer > 3600){
            $regn = $timer - 3600;
            $time = round($regn);
        }else{
            $time = round($timer);
        }
        $point = $time*$pointsats;
        if($point > 0){
            $sql = mysql_query("SELECT * FROM community WHERE brugernavn='$_SESSION[brugernavn]'") or die("Fejl: " . mysql_error());
            while($pointTotal = mysql_fetch_assoc($sql)){
                $total = $point[monter]+$point;
                mysql_query("UPDATE community SET monter='$total' WHERE brugernavn='$_SESSION[brugernavn]'") or die("Fejl: " . mysql_error());
            }
        }

Det virker ikke rigtigt..

Jeg har fået 330043 point, og der er ikke gået en time? o.o
Avatar billede jakobdo Ekspert
23. januar 2008 - 20:06 #14
Test om der regnes rigtigt i din kode! :o)
Udskriv data undervejs.

echo "Regn : $regn<br />";
osv...
Avatar billede supersquirrel Nybegynder
23. januar 2008 - 20:38 #15
Så det bare trist hvis brugeren bliver smidt ud :-P
Så skal brugeren jo starte helt forfra :P:P
Avatar billede jakobdo Ekspert
23. januar 2008 - 20:59 #16
Det er jo bare for at teste! :o)
Avatar billede supersquirrel Nybegynder
24. januar 2008 - 15:52 #17
$pointsats = 1;
        $tid = $_SESSION[login_tid];
        $sammenlign = time() - $tid;
        $timer = $sammenlign / 3600;
        if($timer > 3600){
            $regn = $timer - 3600;
            $time = round($regn);
        }else{
            $time = round($timer);
        }
        $point = $time*$pointsats;
        if($time > 1){
            $sql = mysql_query("SELECT * FROM community WHERE brugernavn='$_SESSION[brugernavn]'") or die("Fejl: " . mysql_error());
            while($pointTotal = mysql_fetch_assoc($sql)){
                $total = $point[monter]+$point;
                mysql_query("UPDATE community SET monter='$total' WHERE brugernavn='$_SESSION[brugernavn]'") or die("Fejl: " . mysql_error());
                $_SESSION[login_tid] = time();
            }
        }

Ser ikke ud til at virke helt optimalt.. :(
Den bliver ikke ved med at tilføje point efter hver time
Avatar billede jakobdo Ekspert
24. januar 2008 - 19:58 #18
Du skal jo som sådan også huske at trække de point fra, som allerede er blevet givet.
Avatar billede supersquirrel Nybegynder
27. januar 2008 - 01:51 #19
Forstår ikke helt, kan du eventuelt give et eksempel? :))
Avatar billede jakobdo Ekspert
27. januar 2008 - 18:22 #20
Hvis du har $sammenlign = time() - $tid;
Efter en time skulle det gerne give 1 point.
Efter  timer, får man så 2 point.
Altså 3 point i alt.
Det burde jo kun være et point pr time.
2 timer = 2 point.
Avatar billede supersquirrel Nybegynder
27. januar 2008 - 19:41 #21
Altså mit problem er at den slet ikke opdaterer ens point i databasen
Avatar billede supersquirrel Nybegynder
28. januar 2008 - 16:28 #22
Kunne man eventuelt lave noget i stil med:

(når man logger ind)
$_SESSION[login_tid] = time()+3600;

(i toppen af site)
$timeNu = time();
if($timeNu >= $_SESSION[login_tid]){
Giv point her..
$_SESSION[login_tid] = time()+3600;
}

- Kan det gøres på den måde?
Avatar billede jakobdo Ekspert
28. januar 2008 - 21:42 #23
Avatar billede supersquirrel Nybegynder
28. januar 2008 - 22:36 #24
Det ser godt ud! :)
Er det en af overstående koder?

Eller måske du ville kunne smide den herind, hvis det ikke er? :)
Avatar billede jakobdo Ekspert
29. januar 2008 - 06:41 #25
<?php
//http://www.eksperten.dk/spm/816057
session_start();

if(isset($_GET['reset']))
{
    $_SESSION['login_time'] = time();
    $_SESSION['login_point'] = 0;
}

echo '<h3>1 minut (60 sekunder) = 1 point</h3>';

if(!isset($_SESSION['login_time'])){
    $_SESSION['login_time'] = time();
    $_SESSION['login_point'] = 0;
    echo 'Det er dit f&oslash;rste bes&oslash; her p&aring; siden.<br />';
}

$diff = time() - $_SESSION['login_time'];
if(($diff - ($_SESSION['login_point']*60)) > 60)
{
    $_SESSION['login_point']+= floor(($diff - ($_SESSION['login_point']*60))/60);
}

echo 'Det er : ' . $diff . ' sekunder siden du kom på siden<br />';
echo 'Du har : ' . $_SESSION['login_point'] . ' point<br />';

echo 'Tryk nu F5 eller <a href="816057exp.php">HER</a><br />';

echo '<a href="816057exp.php?reset=true">Restart</a><br />';

?>
Avatar billede supersquirrel Nybegynder
29. januar 2008 - 14:31 #26
Nice! :) Tak!

Men nu vil jeg lige være helt sikker.
Hvor skal jeg putte de forskellige dele ind?

Kunne forestille mig at dette skulle i toppen af siden:
$diff = time() - $_SESSION['login_time'];
if(($diff - ($_SESSION['login_point']*60)) > 60)
{
    $_SESSION['login_point']+= floor(($diff - ($_SESSION['login_point']*60))/60);
}

Og dette skulle i login delen:
if(isset($_GET['reset']))
{
    $_SESSION['login_time'] = time();
    $_SESSION['login_point'] = 0;
}

eller hvordan skal det hænge sammen? :)
Avatar billede jakobdo Ekspert
29. januar 2008 - 15:22 #27
Det er faktisk korrekt ja!
Det kan dog være det skal rettes lidt til, men håber du selv kan tænke lidt! :o)
Avatar billede supersquirrel Nybegynder
29. januar 2008 - 16:00 #28
Vil jeg da prøve! :)
Ellers skriver jeg da lige her igen :D
Avatar billede supersquirrel Nybegynder
29. januar 2008 - 16:01 #29
Kunne måske forestille mig at
if(isset($_GET['reset']))
{
    $_SESSION['login_time'] = time();
    $_SESSION['login_point'] = 0;
}
skal laves om til
    $_SESSION['login_time'] = time();
    $_SESSION['login_point'] = 0;

? :)
Avatar billede supersquirrel Nybegynder
29. januar 2008 - 16:31 #30
$diff = time() - $_SESSION['login_time'];
if(($diff - ($_SESSION['login_point']*60)) > 60) {
    $_SESSION['login_point']+= floor(($diff - ($_SESSION['login_point']*60))/60);
        mysql_query("UPDATE community SET monter='$_SESSION[login_point]' WHERE brugernavn='$_SESSION[brugernavn]'") or die("Fejl: " . mysql_error());
}

Sådan ser den så ud :o)


- Hvordan får jeg det til at give 1 point hver time? :o)

Skal denne ændres
$_SESSION['login_point']+= floor(($diff - ($_SESSION['login_point']*60))/60);
til
$_SESSION['login_point']+= floor(($diff - ($_SESSION['login_point']*60)));

??
Avatar billede jakobdo Ekspert
29. januar 2008 - 20:18 #31
Ret 60 til 3600
Avatar billede supersquirrel Nybegynder
29. januar 2008 - 21:48 #32
Ser ud til at virke helt perfekt!

Men nu kom jeg lige til at tænke på, hvad når brugeren logger ud?
Tiden skulle jo helst *stoppe* der, og så forsætte hvor den kom til når man logger ind igen..

Hvordan kan det gøres?
Avatar billede jakobdo Ekspert
30. januar 2008 - 06:41 #33
Der er ingen events der trigges når en bruger logger af.
Hvis brugeren klikker på LOG AF, så kan du lave noget kode der gemmer overskydende minutter/sekunder.
Hvis brugeren bare lukker sin browser på X, så kan du intet gøre.
Avatar billede jakobdo Ekspert
30. januar 2008 - 06:42 #34
Eller man kan lave noget med Ajax, som ligger og kører i baggrunden og det er ikke noget jeg lige vil kaste mig ud i og lave nu! :o)
Avatar billede supersquirrel Nybegynder
30. januar 2008 - 17:12 #35
Ja det tænkte jeg på, den med at gemme min/sek.
Men hvordan ser mysql ud til det?

Altså hvordan skal jeg ligge det ind, og hente det frem og lægge det til ved login, så den forsætter hvor den slap? :o)
Avatar billede jakobdo Ekspert
30. januar 2008 - 19:28 #36
Du skal gemme det som ikke går op i 60 eller 3600
Det kan du gøre med:
$diff % 3600
Så får du resten.
Avatar billede supersquirrel Nybegynder
30. januar 2008 - 20:59 #37
Nu kan det godt være mig der er dum :P,
men forstår ikke helt hvad du mener.

Det er helt forståeligt hvis du ikke rigtig har lyst til at hjælpe mere med dette spørgsmål, men vil sætte stor pris på hvis du lige kunne hjælpe mig med det sidste her! :D

Hvis ikke, så skal du have mange mange mange tak for hjælpen, og send endelig svar! :)
Avatar billede jakobdo Ekspert
30. januar 2008 - 21:07 #38
Det er ikke fordi jeg ikke vil hjælpe!
Men det jeg mener er, du skal jo have fundet de sekunder, som endnu ikke er givet i point.
Det kan du måske også lave med:

$resten_af_sekunder_som_skal_gemmes = $diff - ($_SESSION['login_point'] * 3600);
Og så kan jeg godt lide at folk selv prøver og tænker lidt selv. :o)
Avatar billede supersquirrel Nybegynder
30. januar 2008 - 21:12 #39
Prøvede skam selv at regne ud hvad du mente med $diff % 3600 - men forstod det ikke :D
Avatar billede jakobdo Ekspert
30. januar 2008 - 21:34 #40
Forstod du den nu? :o)
Avatar billede supersquirrel Nybegynder
30. januar 2008 - 21:49 #41
Altså jeg kan forstå at i logud skal denne liges:

$timeBack = $diff - ($_SESSION['login_point'] * 3600);
update sql blabla set timeBack=$timeback where bruger blabla

Det burde være sådan, korrekt?

Men hvad så med i login, hvordan skal jeg så ligge det til? :P
Avatar billede jakobdo Ekspert
31. januar 2008 - 11:57 #42
Der skal du tage det med i beregningen. :o)

$diff = time() - $_SESSION['login_time'] + $POINT_FRA_DATABASEN;
Avatar billede supersquirrel Nybegynder
31. januar 2008 - 17:30 #43
(hehehe)
Så nu vil jeg lieg have det HELT på det rene :P

I TOPPEN SÆTTER JEG:
$diff = time() - $_SESSION['login_time'];
if(($diff - ($_SESSION['login_point']*3600)) > 3600) {
    $_SESSION['login_point']+= floor(($diff - ($_SESSION['login_point']*3600))/3600);
        mysql_query("UPDATE community SET monter='$_SESSION[login_point]' WHERE brugernavn='$_SESSION[brugernavn]'") or die("Fejl: " . mysql_error());
}

I LOGIN SÆTTER JEG:
$diff = time() - $_SESSION['login_time'] + $POINT_FRA_DATABASEN;
$POINT_FRA_DATABASEN; Er så de point man allerede har (ect. 11 point)

I LOGUD SÆTTER JEG:
$timeBack = $diff - ($_SESSION['login_point'] * 3600);
update sql blabla set timeBack=$timeback where bruger blabla

- Stemmer alt dette? :P
Avatar billede jakobdo Ekspert
31. januar 2008 - 19:17 #44
Jeg ved ikke om det stemmer, det er dig som kan teste om det rent faktisk virker! :o)

$POINT_FRA_DATABASEN er en stave fejl.
Det skulle være SEKUNDER, TIMEBACK
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