Avatar billede scaniav8 Nybegynder
22. juni 2005 - 15:25 Der er 25 kommentarer og
1 løsning

Opdatere onlinetid og kroner på chat

Hey...

Jeg har en kode som skal opdatere onlinetid/kroner mens man er inde på chatten.
Altså dvs. en refresh hvert minut for onlinetid, men hvad med kroner når man kun skal have 6 i timen??
Når den laver den update hvert minut, så opdaterer den jo kun onlinetiden som i kan se:



<?php
session_start();
if (session_is_registered("Brugernavn")) {

include("mysql.php");

$res = mysql_query("SELECT * FROM brugersystem WHERE Brugernavn = '$_SESSION[Brugernavn]'");
$row = mysql_fetch_array($res);

if($_GET[page] == "e"){
$_SESSION[updatime] = time();
header("Location: ?page=s");
}
elseif($_GET[page] == "s"){
echo'<META HTTP-EQUIV=Refresh CONTENT="60; URL=?page=a">';
}
elseif($_GET[page] == "a"){

$loggout = time();
$additional_online_seconds = $loggout - $_SESSION[updatime];

$points = ($additional_online_seconds / 60) / 10;

mysql_query("UPDATE brugersystem SET onlinetid = $row[onlinetid]+$additional_online_seconds WHERE Brugernavn = '$_SESSION[Brugernavn]'");
mysql_query("UPDATE brugersystem SET kroner = $row[kroner]+$points WHERE Brugernavn = '$_SESSION[Brugernavn]'");
echo'<META HTTP-EQUIV=Refresh CONTENT="0; URL=?page=e">';
}
}
?>


Nogle der kan se hvad jeg skal rette?
Avatar billede nielle Nybegynder
22. juni 2005 - 17:48 #1
Jeg ventede egentlig bare på at få noget respons fra dig i det oprindelige spørgsmål:

http://www.eksperten.dk/spm/625640
Avatar billede scaniav8 Nybegynder
22. juni 2005 - 18:21 #2
Hmm jeg regnede med jeg kunne få noget kode jeg kunne bruge :) jeg forstod ikke rigtigt dit spg, så besluttede mig for at oprette spørgesmålet igen..!
Avatar billede nielle Nybegynder
22. juni 2005 - 18:36 #3
Sjov måde at takke for mit hidtidige indsats på at hjælpe dig. :^|

Jeg har da ellers angivet to mulige løsningsmodeller, og hvis der er noget du ikke lige forstår ved dem, så er jeg da villig til at forklare mig bedre. Men det kræver jo at du giver mig noget respons.
Avatar billede scaniav8 Nybegynder
22. juni 2005 - 19:42 #4
well siden der var gået 8-9 dage regnede jeg ikke med du ville svare :P men ok...

Kan du komme med en kode der kan hjælpe?
Avatar billede nielle Nybegynder
22. juni 2005 - 21:33 #5
Mine to forskellige foreslag krævede hver især at du laver en ænding i databasen; Enten laver dit kroner-felt om fra et integer-felt til et float-felt (sådan at du kan tælle kroner & ører). Eller du indføre et felt som tæller reloads. Alt efter hvilken du vælger, skal koden tilpasses på forskellige måder. Så det er det valg du først have taget.
Avatar billede scaniav8 Nybegynder
22. juni 2005 - 21:54 #6
Jeg kan godt ændre det så det er kroner og øre..!
Det er gjort nu :)
Avatar billede nielle Nybegynder
22. juni 2005 - 22:20 #7
Fint. Det næste punkt består så i at beregne prisen; Det er det du lige nu gør i linjen:

$points = ($additional_online_seconds / 60) / 10;

Korrekt?
Avatar billede scaniav8 Nybegynder
23. juni 2005 - 12:09 #8
Jep
Avatar billede nielle Nybegynder
24. juni 2005 - 19:17 #9
I så fald skal du først og fremmest regne dine point ud i decimaltal. Når man bare bruger "/" imellem to heltal så bruges der heltalsdivision. Tricket består derfor i at introducere et decimaltal:

$points = (1.0 * $additional_online_seconds / 60) / 10;''

Det næste problem består nu i at finde ud af om dit PHP-system og om din database bruger engelsk eller dansk notation mht. kommatal. Har du mulighed for at fortælle mig det?
Avatar billede scaniav8 Nybegynder
26. juni 2005 - 22:42 #10
Hmm det ved jeg ikke lige :s
Avatar billede nielle Nybegynder
27. juni 2005 - 18:16 #11
Så må vi jo bare prøve os frem. :^)

Prøv med denne debug-version af din kode:

<?php
session_start();
if (session_is_registered("Brugernavn"))
{
    include("mysql.php");

    $res = mysql_query("SELECT * FROM brugersystem WHERE Brugernavn = '$_SESSION[Brugernavn]'");
    $row = mysql_fetch_array($res);

    if ($_GET[page] == "e")
    {
        $_SESSION[updatime] = time();
        header("Location: ?page=s");
    }
    elseif ($_GET[page] == "s")
    {
        echo'<META HTTP-EQUIV=Refresh CONTENT="60; URL=?page=a">';
    }
    elseif ($_GET[page] == "a")
    {
        $loggout = time();
        $additional_online_seconds = $loggout - $_SESSION[updatime];

        $points = (1.0 * $additional_online_seconds / 60) / 10;

        echo "DEBUG #1: " . $points . "<BR>";

        $SQL = "UPDATE brugersystem SET onlinetid = $row[onlinetid]+$additional_online_seconds WHERE Brugernavn = '$_SESSION[Brugernavn]'";
        echo "DEBUG #2: " . $SQL . <BR>;
        mysql_query($SQL);

        $SQL = "UPDATE brugersystem SET kroner = $row[kroner]+$points WHERE Brugernavn = '$_SESSION[Brugernavn]'";
        echo "DEBUG #3: " . $SQL . <BR>;
        mysql_query($SQL);

        echo "DEBUG #4: Done.";

        // echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL=?page=e">';
    }
}
?>

- og fortæl mig så hvad der bliver skrevet ud på skærmen. Så tager vi den derfra.
Avatar billede scaniav8 Nybegynder
01. juli 2005 - 17:46 #12
Den opdaterer kun onlinetid, ikke kroner..!
(rettede lige dine små fejl, f.x echo "DEBUG #3: " . $SQL . <BR>;, echo bliver ikke afsluttet hehe)
Avatar billede nielle Nybegynder
01. juli 2005 - 17:55 #13
Viser du mig ikke lige hvad der blev udskrevet på skærmen?
Avatar billede scaniav8 Nybegynder
01. juli 2005 - 18:09 #14
Den udskriver SQL kommandoen og bagefter skriver den "Done."
Avatar billede nielle Nybegynder
01. juli 2005 - 18:45 #15
Ja, og det er netop SQL kommandoen jeg gerne vil se. ;^)
Avatar billede nielle Nybegynder
01. juli 2005 - 19:00 #16
... output af alle 4 DEBUG-sætninger faktisk.
Avatar billede whizzper Nybegynder
04. juli 2005 - 16:50 #17
DEBUG #1: 0.063333333333333
DEBUG #2: UPDATE brugersystem SET onlinetid = 1066630+38 WHERE Brugernavn = 'direktør'
DEBUG #3: UPDATE brugersystem SET kroner = 3229+0.063333333333333 WHERE Brugernavn = 'direktør'
DEBUG #4: Done.



Det er den output jeg får..!
Avatar billede whizzper Nybegynder
04. juli 2005 - 16:51 #18
Læg mærke til at for HVER gang den opdatere bliver kroner resultatet: 0.063333333333333
Derfor kan den ikke nå at opdatere til ikke engang 1 krone :)
Avatar billede nielle Nybegynder
04. juli 2005 - 22:04 #19
For det første bør du omstrukture din 2. update sådan at der kommer til at stå:

UPDATE brugersystem SET kroner = kroner+0.063333333333333 WHERE Brugernavn = 'direktør'

- altså:

$SQL = "UPDATE brugersystem SET kroner = kroner+$points WHERE Brugernavn = '$_SESSION[Brugernavn]'";

Du behøver m.a.o. ikke at udtrække den krone-værd som der står i forvejen.

For det andet, kan det tænkes at din database meget hellere vil have sine tal med et decimal-komma i stedet for med et decimal-punktum. Altså på denne måde:

UPDATE brugersystem SET kroner = kroner+0,063333333333333 WHERE Brugernavn = 'direktør'

Dette kan du klare med en replace anvendt på $point:

$point = "" . $point;
$point = str_replace(".", ",", $point);
$SQL = "UPDATE brugersystem SET kroner = kroner+$points WHERE Brugernavn = '$_SESSION[Brugernavn]'";
Avatar billede scaniav8 Nybegynder
05. juli 2005 - 22:45 #20
[quote]
For det første bør du omstrukture din 2. update sådan at der kommer til at stå:

UPDATE brugersystem SET kroner = kroner+0.063333333333333 WHERE Brugernavn = 'direktør'

- altså:

$SQL = "UPDATE brugersystem SET kroner = kroner+$points WHERE Brugernavn = '$_SESSION[Brugernavn]'";
[/quote]

Hmm er det ikke det som står her allerede?
        $SQL = "UPDATE brugersystem SET kroner = $row[kroner]+$points WHERE Brugernavn = '$_SESSION[Brugernavn]'";
Avatar billede scaniav8 Nybegynder
05. juli 2005 - 23:16 #21
Hmm kan det LAVES så det virker?
Eller skal jeg splitte det ad og smide det ind i hver sin iframe, en iframe der opdaterer hvert 15. min (1 kr) og en frame der opdaterer hvert 1. min (minutter)
Avatar billede nielle Nybegynder
06. juli 2005 - 08:49 #22
05/07-2005 22:45:43> Det er mere et spørgsmål om at skrive puritansk SQL-kode. Forskellen på:

$SQL = "UPDATE brugersystem SET kroner = kroner+$points WHERE Brugernavn = '$_SESSION[Brugernavn]'";

- og:

$SQL = "UPDATE brugersystem SET kroner = $row[kroner]+$points WHERE Brugernavn = '$_SESSION[Brugernavn]'";

- er at i den første version, trækker man ikke værdien af feltet kroner ud. Der stå rent faktisk "... kroner = kroner+0.063333333333333 ..." og ikke "... kroner = 3229+0.063333333333333 ..."

Hvis man gør det på den første måde kan man altså spare sig et SQL-kals, nemlig det som trækker den nuværende værdi af kroner ud før at den opdateres.
Avatar billede nielle Nybegynder
06. juli 2005 - 19:42 #23
Hvorfor ikke lave det helt simpelt:

<?php
session_start();
if (session_is_registered("Brugernavn"))
{
    echo '<META HTTP-EQUIV=Refresh CONTENT="60; URL=?page=reload">';

    $prisPrMinut = 0.1;  // = 6 kr pr. 60 minutter;

    include("mysql.php");

    $SQL = "UPDATE brugersystem SET onlinetid = onlinetid + 60 WHERE Brugernavn = '" . $_SESSION["Brugernavn"] . "'";
    mysql_query($SQL);

    $SQL = "UPDATE brugersystem SET kroner = kroner + $prisPrMinut WHERE Brugernavn = '" . $_SESSION["Brugernavn"] . "'";
    mysql_query($SQL);
}
?>
Avatar billede nielle Nybegynder
11. juli 2005 - 20:01 #24
Hvad med noget respons her?
Avatar billede nielle Nybegynder
19. juli 2005 - 20:47 #25
?
Avatar billede scaniav8 Nybegynder
11. august 2005 - 19:07 #26
Jeg lavede det hver for sig, i hver sin iframe...det hastede lidt pga. beta versionen skulle åbne kl 21:00 :P
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