Avatar billede inctor Nybegynder
18. november 2005 - 10:53 Der er 36 kommentarer og
1 løsning

Hvordan lavet jeg et simpelt level system ?

Haii Eksperter ..

Vil en af jer hjælpe mig med et simpelt men funktionelt level system ?

det skal være sån at den tæller hvor lang tid man har været online , og så mellem visse timer skal den så omsætte det til et level , fx Mellem 1 til 5 er det level 1 mellem 5 til 10 er det level 2 osv .. det er bare nogen eksempler .. og så når den har regnet ud hvad lvl man har , så skal den gemme det i Databasen i en tabel som hedder "users" og row som hedder "lvl" ...
eR det noget i kan hjælpe Meed? hvor mange oplysninger skal i bruge ? jeg sætter gerne flere point ud hvis det blir nødvendigt ..

100 Point til at starte med , ligger flere ud hvis det er nødvendigt .. !
Avatar billede jakobdo Ekspert
18. november 2005 - 20:20 #1
Prøv at se her:

<?php
//http://exp.dk/spm/665517

function calcLevel($login_time_UNIX)
{
    $difference = time() - $login_time_UNIX;
    $fullHours  = floor($difference / 3600);
    $level = 0;
    switch(true)
    {
        case $fullHours > 0 && $fullHours <= 5:
            $level = 1;
            break;
        case $fullHours > 5 && $fullHours <= 10:
            $level = 2;
            break;
        case $fullHours > 10 && $fullHours <= 15:
            $level = 3;
            break;
        case $fullHours > 15 && $fullHours <= 20:
            $level = 4;
            break;
        case $fullHours > 20 && $fullHours <= 25:
            $level = 5;
            break;
        case $fullHours > 25 && $fullHours <= 30:
            $level = 6;
            break;
        case $fullHours > 30 && $fullHours <= 35:
            $level = 7;
            break;
        case $fullHours > 35 && $fullHours <= 40:
            $level = 8;
            break;
        case $fullHours > 40 && $fullHours <= 45:
            $level = 9;
            break;
        case $fullHours > 45 && $fullHours <= 50:
            $level = 10;
            break;
        default:
            $level = 0;
    }
    return $level;
}

$test = mktime(11, 0, 0, 11, 18, 2005);
echo calcLevel($test);

?>
Avatar billede jakobdo Ekspert
18. november 2005 - 20:21 #2
Når du trækker login tiden ud af din database, så bruge:
SELECT UNIX_TIMESTAMP(datotid) AS unix WHERE user = brugerID

og hvor du så vil bruge level, laver du:
echo calcLevel($row["unix"]);
Avatar billede inctor Nybegynder
20. november 2005 - 16:59 #3
Hvilke Tabeller / Rows skal jeg så oprette i min db ? kan se jeg skal lave en row som hedder "unix" men hvad hedder tabellen ? kan du skrive den så at den kommer til at ligge i Tabellen users ? eller gør den det ?
Avatar billede inctor Nybegynder
20. november 2005 - 17:01 #4
WHERE user = brugerID

Der skal vel stå:

WHERE username = userid .... ?

hvordan er det den trækker id'et ud ? er det ikke:

$id=[getid]

eller noed i den stil ???
Avatar billede inctor Nybegynder
20. november 2005 - 17:08 #5
hvad skal den så hedde i den her?

print "<img src=\"png.php?lvl=calcLevel($row["unix"])\">";

??? skal den se sådan ud ellR hvad ? ^^^^^^
Avatar billede inctor Nybegynder
20. november 2005 - 17:40 #6
Jeg har prøvet , jeg kan ikk få den til at virke .. der skal vel stå noget før :
SELECT UNIX_TIMESTAMP(datotid) AS unix WHERE user = brugerID der skal vel stå $  ????

den ser sån ud:

$SELECT UNIX_TIMESTAMP(datotid) AS unix WHERE (username='$id');

har jeg lavet fejl ?
Avatar billede jakobdo Ekspert
20. november 2005 - 20:17 #7
mysql_query("SELECT UNIX_TIMESTAMP(datotid) AS unix WHERE user = ".$_SESSION["brugerID"]." LIMIT 1");
Avatar billede inctor Nybegynder
20. november 2005 - 23:01 #8
altså PHP filen kommer så til at se således ud:

<php include="sql.php";
//http://exp.dk/spm/665517
function calcLevel($login_time_UNIX)
{
    $difference = time() - $login_time_UNIX;
    $fullHours  = floor($difference / 3600);
    $level = 0;
    switch(true)
    {
        case $fullHours > 0 && $fullHours <= 5:
            $level = 1;
            break;
        case $fullHours > 5 && $fullHours <= 10:
            $level = 2;
            break;
        case $fullHours > 10 && $fullHours <= 15:
            $level = 3;
            break;
        case $fullHours > 15 && $fullHours <= 20:
            $level = 4;
            break;
        case $fullHours > 20 && $fullHours <= 25:
            $level = 5;
            break;
        case $fullHours > 25 && $fullHours <= 30:
            $level = 6;
            break;
        case $fullHours > 30 && $fullHours <= 35:
            $level = 7;
            break;
        case $fullHours > 35 && $fullHours <= 40:
            $level = 8;
            break;
        case $fullHours > 40 && $fullHours <= 45:
            $level = 9;
            break;
        case $fullHours > 45 && $fullHours <= 50:
            $level = 10;
            break;
        default:
            $level = 0;
    }
    return $level;
}

$test = mktime(11, 0, 0, 11, 18, 2005);
echo calcLevel($test);

?>
<?
mysql_query("SELECT UNIX_TIMESTAMP(datotid) AS unix WHERE username = ".$_SESSION["id"]." LIMIT 1");
?>
<?
echo calcLevel($row["unix"]);
?>

elleR hvad ? men hvor har den row fra? altså $row["unix"] ...
hvis det ikk eR rigtigt vil du så ikk lige skrive den hele ? altså den php fil .. og sige hvilken Row's jeg skal lave ..
Avatar billede jakobdo Ekspert
21. november 2005 - 08:00 #9
$query = mysql_query("SELECT UNIX_TIMESTAMP(datotid) AS unix WHERE username = ".$_SESSION["id"]." LIMIT 1");
if(mysql_num_rows($query)>0)
{
$row = mysql_fetch_assoc($query);
echo calcLevel($row["unix"]);
}
Avatar billede inctor Nybegynder
21. november 2005 - 19:11 #10
Den siger fejl i linie 141..

Line 141: if(mysql_num_rows($query)>0)

Sån her ser fejlen ud når jeg ser den på siden:

0
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\websider\vhosts\DOMÆNE.dk\httpdocs\chatnet\loginok.php on line 141
Avatar billede jakobdo Ekspert
21. november 2005 - 19:35 #11
Så er der noget galt i den sql vi har lavet ovenover.
Avatar billede inctor Nybegynder
21. november 2005 - 19:47 #12
Hvor henne er fejlen Såå ? jeg kan ikk se den ..
Avatar billede jakobdo Ekspert
21. november 2005 - 19:51 #13
Prøv efter:
$query = mysql_query("SELECT UNIX_TIMESTAMP(datotid) AS unix WHERE username = ".$_SESSION["id"]." LIMIT 1");
echo mysql_error();
og så:
if(mysql_num_rows($query)>0)
{
$row = mysql_fetch_assoc($query);
echo calcLevel($row["unix"]);
}
Avatar billede inctor Nybegynder
21. november 2005 - 20:09 #14
jeg får denne fejl:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE bow know = 17' at line 1
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\websider\vhosts\Domæne.dk\httpdocs\chatnet\lvl2.php on line 48

Linie 48:
if(mysql_num_rows($query)<0)
if(mysql_num_rows($query)>0)

Det eR den samme , prøvede bare at vende >< om , men får samme fejl uanset hvad ..
Avatar billede inctor Nybegynder
21. november 2005 - 20:12 #15
skal der ikk oZz være en Select til den her :

<?
function calcLevel($login_time_UNIX)
{
    $difference = time() - $login_time_UNIX;
    $fullHours  = floor($difference / 3600);
    $level = 0;
    switch(true)
    {
        case $fullHours > 0 && $fullHours <= 5:
            $level = 1;
            break;
        case $fullHours > 5 && $fullHours <= 10:
            $level = 2;
            break;
        case $fullHours > 10 && $fullHours <= 15:
            $level = 3;
            break;
        case $fullHours > 15 && $fullHours <= 20:
            $level = 4;
            break;
        case $fullHours > 20 && $fullHours <= 25:
            $level = 5;
            break;
        case $fullHours > 25 && $fullHours <= 30:
            $level = 6;
            break;
        case $fullHours > 30 && $fullHours <= 35:
            $level = 7;
            break;
        case $fullHours > 35 && $fullHours <= 40:
            $level = 8;
            break;
        case $fullHours > 40 && $fullHours <= 45:
            $level = 9;
            break;
        case $fullHours > 45 && $fullHours <= 50:
            $level = 10;
            break;
      }
    return $level;
}

$test = mktime(11, 0, 0, 11, 18, 2005);
?>


????

og hvilke Rows skal jeg lave i min db .. ?
Avatar billede jakobdo Ekspert
21. november 2005 - 20:15 #16
Problemet er det er noget galt i din sql.
Alt andet skulle være ok!
Hvad har du i din tabel?

Du skal jo som minimum have:
brugerID
onlinetid
Avatar billede inctor Nybegynder
21. november 2005 - 20:20 #17
vil du se et dump af den jeg tester den på ?


-- --------------------------------------------------------

--
-- Struktur-dump for tabellen `users`
--

CREATE TABLE `users` (
  `id` int(5) NOT NULL auto_increment,
  `username` varchar(15) collate latin1_danish_ci NOT NULL default '',
  `password` varchar(32) collate latin1_danish_ci NOT NULL default '',
  `onlinetid` int(10) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `id` (`id`,`username`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_danish_ci AUTO_INCREMENT=151 ;

--

Sån ser den ud !
Avatar billede jakobdo Ekspert
21. november 2005 - 20:22 #18
Du har noget helt galt i din SQL.
Hvor kommer det her fra:
WHERE bow know = 17
Du skulle bruge SQL:
$query = mysql_query("SELECT UNIX_TIMESTAMP(datotid) AS unix WHERE username = ".$_SESSION["id"]." LIMIT 1");
Avatar billede inctor Nybegynder
21. november 2005 - 20:22 #19
Jeg har lavet en Include .. skal jeg ikk oZz have en Row som hedder unix ?
Avatar billede jakobdo Ekspert
21. november 2005 - 20:25 #20
Hvad er onlinetid for en fisk?
Er det et unix_timestamp som gemmes i den?
Avatar billede inctor Nybegynder
21. november 2005 - 20:27 #21
onlinetid er den tid som man har været online i, det var fra et tidligere system .. jeg prøvede men som ikk virkede .. Hvorn kan jeg se det ?
Avatar billede jakobdo Ekspert
21. november 2005 - 20:28 #22
Prøv at smid noget dump fra din users tabel.
Avatar billede inctor Nybegynder
21. november 2005 - 20:30 #23
det eR den der^^^^:


-- --------------------------------------------------------

--
-- Struktur-dump for tabellen `users`
--

CREATE TABLE `users` (
  `id` int(5) NOT NULL auto_increment,
  `username` varchar(15) collate latin1_danish_ci NOT NULL default '',
  `password` varchar(32) collate latin1_danish_ci NOT NULL default '',
  `onlinetid` int(10) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `id` (`id`,`username`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_danish_ci AUTO_INCREMENT=151 ;

--
Avatar billede jakobdo Ekspert
21. november 2005 - 20:32 #24
Ja, men jeg mener hvilken slags data du har i onlinetid.
Avatar billede inctor Nybegynder
21. november 2005 - 20:33 #25
Der er tal .. Hvad Mener duH helt konkret ? den fil som opdatere onlinetid ?
Avatar billede jakobdo Ekspert
21. november 2005 - 20:36 #26
Nej, hvad betyder det som står i onlinetid?
Er det antal sekunder?
Avatar billede inctor Nybegynder
21. november 2005 - 20:39 #27
Jaa , det skulle jeg mene .. 3600 skal der stå før man er online i en time ...
Avatar billede jakobdo Ekspert
21. november 2005 - 20:41 #28
Så retter du funktionen til:

function calcLevel($online_tid)
{
    $fullHours  = floor($online_tid / 3600);
    $level = 0;
    switch(true)
    {
        case $fullHours > 0 && $fullHours <= 5:
            $level = 1;
            break;
        case $fullHours > 5 && $fullHours <= 10:
            $level = 2;
            break;
        case $fullHours > 10 && $fullHours <= 15:
            $level = 3;
            break;
        case $fullHours > 15 && $fullHours <= 20:
            $level = 4;
            break;
        case $fullHours > 20 && $fullHours <= 25:
            $level = 5;
            break;
        case $fullHours > 25 && $fullHours <= 30:
            $level = 6;
            break;
        case $fullHours > 30 && $fullHours <= 35:
            $level = 7;
            break;
        case $fullHours > 35 && $fullHours <= 40:
            $level = 8;
            break;
        case $fullHours > 40 && $fullHours <= 45:
            $level = 9;
            break;
        case $fullHours > 45 && $fullHours <= 50:
            $level = 10;
            break;
      }
    return $level;
}

Og så kalder du den med:
echo calcLevel($row["onlinetid"]);
Avatar billede inctor Nybegynder
21. november 2005 - 20:46 #29
Skal :

$query = mysql_query("SELECT UNIX_TIMESTAMP(datotid) AS unix WHERE username = ".$_SESSION["id"]." LIMIT 1");
echo mysql_error();
if(mysql_num_rows($query) < 0){
$row = mysql_fetch_assoc($query);

stadig være deR ?
Avatar billede jakobdo Ekspert
21. november 2005 - 20:56 #30
$query = mysql_query("SELECT onlinetid WHERE username = ".$_SESSION["id"]." LIMIT 1");
if(mysql_num_rows($query) < 0)
{
$row = mysql_fetch_assoc($query);
echo calcLevel($row["onlinetid"]);
}
Avatar billede inctor Nybegynder
21. november 2005 - 21:01 #31
fejl i Linie 45 ..

Line 45: if(mysql_num_rows($query) < 0)
Avatar billede jakobdo Ekspert
21. november 2005 - 21:04 #32
Ja, men det var jo det vi fandt ud af før!
At du har et fejl i din SQL!
Af en eller anden årsag skriver du bow how i SQL!
Det ser ud som om du sætter det ind i stedet for username
Avatar billede inctor Nybegynder
21. november 2005 - 21:06 #33
Sån her ser min lvl fil ud:

<? include("inc/sql.php");

$query = mysql_query("SELECT UNIX_TIMESTAMP(datotid) AS unix WHERE username = ".$_SESSION["id"]." LIMIT 1");

function calcLevel($online_tid)
{
    $fullHours  = floor($online_tid / 3600);
    $level = 0;
    switch(true)
    {
        case $fullHours > 0 && $fullHours <= 5:
            $level = 1;
            break;
        case $fullHours > 5 && $fullHours <= 10:
            $level = 2;
            break;
        case $fullHours > 10 && $fullHours <= 15:
            $level = 3;
            break;
        case $fullHours > 15 && $fullHours <= 20:
            $level = 4;
            break;
        case $fullHours > 20 && $fullHours <= 25:
            $level = 5;
            break;
        case $fullHours > 25 && $fullHours <= 30:
            $level = 6;
            break;
        case $fullHours > 30 && $fullHours <= 35:
            $level = 7;
            break;
        case $fullHours > 35 && $fullHours <= 40:
            $level = 8;
            break;
        case $fullHours > 40 && $fullHours <= 45:
            $level = 9;
            break;
        case $fullHours > 45 && $fullHours <= 50:
            $level = 10;
            break;
      }
    return $level;
}
$query = mysql_query("SELECT onlinetid WHERE username = ".$_SESSION["id"]." LIMIT 1");
if(mysql_num_rows($query) < 0)
{
$row = mysql_fetch_assoc($query);
echo calcLevel($row["onlinetid"]);
}
?>
Avatar billede jakobdo Ekspert
21. november 2005 - 21:15 #34
Fang mig lige på MSN!
jakobdo (at) hotmail (dot) com
Avatar billede inctor Nybegynder
12. december 2005 - 19:10 #35
jakob skal du have point her? du hjalp mig trodsalt med at løse det og komme på vej så .. men lig et svar ..
Avatar billede jakobdo Ekspert
12. december 2005 - 20:00 #36
Svar!
Avatar billede jakobdo Ekspert
13. december 2005 - 23:24 #37
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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