[PHP/ MySQL] Lastvisit mbv database

Pagina: 1
Acties:
  • 134 views sinds 30-01-2008
  • Reageer

  • Bolk
  • Registratie: Februari 2001
  • Niet online

Bolk

Change the equation.

Topicstarter
Yo P&W-ers,

Ik ben nu al ruim 2 uur aan het brainstormen over een lastvisit systeem op ons forum. Aangezien deze vanaf scratch geschreven is en niets van andere boards wil c/p-en moeten we alle problemen dus zelf oplossen.

Het gaat allemaal prima. Ik heb net een nieuw login-systeem gemaakt om ons aller 1337 Haxor DR te stoppen met het kijken in crew ed :P. Nu heb ik een session/ db systeem gemaakt die een 1malige check doet op de db en zo de session data uitlegd en een session aanmaakt (code zie hieronder).
PHP:
1
<?session_start();if(isset($sescookie) &amp;&amp; !isset($u)){    $cookie = explode(";",$sescookie);    $querycookie = mysql_query("SELECT * FROM session WHERE uid='$cookie[0]' AND sessid='$cookie[1]'");    $fetchcookie = mysql_fetch_array($querycookie);    $rowscookie = mysql_num_rows($querycookie);    if($rowscookie==1)    {        $u = $fetchcookie[uid];        session_register("u");    } else {        setcookie("sescookie","NULL",time()-1);    }}?>

Bovenstaand scriptje zorgt er dus voor dat je sessie data uitgelezen word. Wat ook in die sessie data staat is je lastvisit. Maar ik heb werkelijk echt geen idee hoe ik het volgende probleem moet oplossen:

Je komt op het forum, krijgt je uid toegewezen door een grab uit een cookie en db (zie script hierboven) en je bent logged-in. Nu wil ik ook dat ie je last visit laat zien (net zoals hier op GoT en VBB). Dit systeem werkte eerst bij ons op cookies, maar ik wil graag dat als je op een andere pc inlogd je oude lastvisit komt te staan.

Dit zelf is niet zo heel erg moeilijk alleen het volgende moet er ook bijkomen:

Als je binnen 900 sec (15 minuten) terugkomt op het forum mag er geen nieuwe lastvisit aangemaakt zijn. Dus gewoon doorsurfen waar je was. Ook als je je browser NIET sluit moet er na 15 minz WEL een update komen. Net zoals hier op GoT.

Heeft iemand enig idee om me op weg te helpen? 2 uur bezig, en een stukkie fruttig php in mijn editor dat niet werkt. Zie hier de session table die ik gemaakt heb:
code:
1
2
3
4
5
6
7
8
+----+----------------------------------+-----+------------+--------------+
| id | sessid                  | uid | lastvisit  | lastactivity |
+----+----------------------------------+-----+------------+--------------+
|  6 | ab49fb6d7d941601e0b519284fa555d9 |   2 | 1018012239 | 1018012239   |
|  2 | b560dd1dd63bd3dcb76c4e478d54e81b |   1 |     |         |
|  5 | 6f258707fbed49c2e8434ee45e1a0efc |   4 |     |         |
|  4 | 344e8b51908837c4953299b7a48694b9 |   3 |     |         |
+----+----------------------------------+-----+------------+--------------+

Alvast bedankt :)

Ik bespeur hier een zekere mate van onethische logica.


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

PHP:
1
<?if($current_time > $lastvisit + 15mins)   update_last_visit();?>

Is niet wat je zoekt? :)

  • Bolk
  • Registratie: Februari 2001
  • Niet online

Bolk

Change the equation.

Topicstarter
Op vrijdag 05 april 2002 15:33 schreef ACM het volgende:
PHP:
1
<?if($current_time > $lastvisit + 15mins)   update_last_visit();?>

Is niet wat je zoekt? :)
:o

Hmm, dat is natuurlijk een mogelijkheid. Nu moet ik alleen ff verzinnen wat die functie gaat worden ;) Nog meer hints? :P

Ik had dat btw wel:
PHP:
1
<?if(isset($u) and !isset($lastvisit)){        $time = time();    mysql_query("UPDATE session SET lastactivity='$time' WHERE uid='$u'");    $lastfetch = mysql_fetch_array(mysql_query("SELECT lastvisit, lastactivity FROM session WHERE uid='$u'"));    $lastv = $lastfetch[lastvisit]+900;    if(time()>=$lastv) {        $lastvisit = $lastfetch[lastactivity];        mysql_query("UPDATE session SET lastvisit='$lastfetch[lastactivity]' WHERE uid='$u'");        session_register("lastvisit");    } else {        $lastvisit = $lastfetch[lastvisit];        session_register("lastvisit");    }}?>

Dit werkt dus extreem brak :P

Ik bespeur hier een zekere mate van onethische logica.


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Pseudo-
code:
1
2
3
4
5
6
7
8
9
10
select last_visit
from   session
where  user_id = ...

Display on screen

update session
set    last_visit = nu()
where  last_visit < nu()- 15minuten
and    user_id = ....

Deze update vindt dus alleen plaats als je er de laatste 15 minuten niet bent geweest.
Dit opnemen in start van ieder scherm Display op scherm eventueel conditioneel maken, maar dan kan ook de update in dezelfde then tak

  • Bolk
  • Registratie: Februari 2001
  • Niet online

Bolk

Change the equation.

Topicstarter
Op vrijdag 05 april 2002 15:37 schreef Goodielover het volgende:
Pseudo-
code:
1
2
3
4
5
6
7
8
9
10
select last_visit
from   session
where  user_id = ...

Display on screen

update session
set    last_visit = nu()
where  last_visit < nu()- 15minuten
and    user_id = ....

Deze update vindt dus alleen plaats als je er de laatste 15 minuten niet bent geweest.
Dit opnemen in start van ieder scherm Display op scherm eventueel conditioneel maken, maar dan kan ook de update in dezelfde then tak
Ik snap dit niet helemaal, ACM zijn systeem is denk ik gemakkelijker, alleen ik zit nog steeds een end te kloten met lastvisit en lastactivity

Mijn brain klapt er bekant uit, logisch nadenken is nogal lastig atm :P

Ik bespeur hier een zekere mate van onethische logica.


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

code:
1
2
3
+----+----------------------------------+-----+------------+--------------+
| id | sessid                  | uid | lastvisit  | lastactivity |
+----+----------------------------------+-----+------------+--------------+

Slecht database model, Tenzij jij kan uitleggen wat voor nut jouw "ID" heeft.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Bolk
  • Registratie: Februari 2001
  • Niet online

Bolk

Change the equation.

Topicstarter
Op vrijdag 05 april 2002 17:44 schreef dusty het volgende:
code:
1
2
3
+----+----------------------------------+-----+------------+--------------+
| id | sessid                  | uid | lastvisit  | lastactivity |
+----+----------------------------------+-----+------------+--------------+

Slecht database model, Tenzij jij kan uitleggen wat voor nut jouw "ID" heeft.
Ik heb hem ff snel ingevoerd. Idd, die id is overbodig. Ik dacht dat ik hem nodig had maar was niet zo.

Ik bespeur hier een zekere mate van onethische logica.


  • Engineer
  • Registratie: Juni 2001
  • Laatst online: 04-05 00:03

Engineer

Software

.

[ Voor 99% gewijzigd door Engineer op 13-10-2018 11:56 ]


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op vrijdag 05 april 2002 17:52 schreef hdd het volgende:
[..]
Wtf heeft dat met het topic te maken :?
Meer dan dat de meeste mensen bedenken waarschijnlijk

De lastactivity zit namelijk gekoppeld aan de sessieid.

Dat idee staat haaks op wat hij vraagt. Namelijk wilt hij deze lastvisit helemaal niet op een sessie hebben maar op de gebruiker zelf. Immers moeten nieuwe berichten zo worden aangemerkt dat hij er 15 minuten niet is geweest, dat betekent dus dat als hij achter een andere computer gaat zitten (ander sessieid) dat hij toch dezelfde berichten gemarkeerd moet zien.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Bolk
  • Registratie: Februari 2001
  • Niet online

Bolk

Change the equation.

Topicstarter
Op vrijdag 05 april 2002 17:57 schreef dusty het volgende:

[..]

Meer dan dat de meeste mensen bedenken waarschijnlijk

De lastactivity zit namelijk gekoppeld aan de sessieid.

Dat idee staat haaks op wat hij vraagt. Namelijk wilt hij deze lastvisit helemaal niet op een sessie hebben maar op de gebruiker zelf. Immers moeten nieuwe berichten zo worden aangemerkt dat hij er 15 minuten niet is geweest, dat betekent dus dat als hij achter een andere computer gaat zitten (ander sessieid) dat hij toch dezelfde berichten gemarkeerd moet zien.
Ik heb het systeem zo gebouwd dat er per user maar 1 sessid mogelijk is. het is dus onmogelijk dat een user meerdere sessies heeft in de db.

Het enige probleem is nu hoe ik die lastvisit kan koppelen. Tis misschien o zo makkelijk. Ik kom er echt niet uit.

Ik bespeur hier een zekere mate van onethische logica.


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op vrijdag 05 april 2002 17:59 schreef Bolk het volgende:
[..]
Ik heb het systeem zo gebouwd dat er per user maar 1 sessid mogelijk is. het is dus onmogelijk dat een user meerdere sessies heeft in de db.
Dus als ze ergens anders van inloggen, hebben ze geen last visit meer?
Het enige probleem is nu hoe ik die lastvisit kan koppelen. Tis misschien o zo makkelijk. Ik kom er echt niet uit.
je zult twee velden ervoor nodig hebben.

LastVisit, LastActivity.

Als de last activity langer dan 15 minuten geleden is zet je de last visit op die last activity, en update je de lastactivity.

Alle topics nieuwer dan de last visit geef je een ander kleurtje.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Bolk
  • Registratie: Februari 2001
  • Niet online

Bolk

Change the equation.

Topicstarter
Op vrijdag 05 april 2002 18:38 schreef dusty het volgende:

[..]

Dus als ze ergens anders van inloggen, hebben ze geen last visit meer?
[..]

je zult twee velden ervoor nodig hebben.

LastVisit, LastActivity.

Als de last activity langer dan 15 minuten geleden is zet je de last visit op die last activity, en update je de lastactivity.

Alle topics nieuwer dan de last visit geef je een ander kleurtje.
Tuurlijk wel. Als ze vanaf ergens anders inloggen dan zoek ik naar de bestaande sessie als die er is :)

Ik snap je bedoeling met lastactivity. Maar zodra ik eraan probeer te werken gaat het fout. Ik zit echt een end te kloten met al die if's

Ik bespeur hier een zekere mate van onethische logica.


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op vrijdag 05 april 2002 18:45 schreef Bolk het volgende:
[..]
Tuurlijk wel. Als ze vanaf ergens anders inloggen dan zoek ik naar de bestaande sessie als die er is :)
Dus je geeft zelf al aan dat de tijden afangt van de gebruiker, de sessie hangt ook van de gebruiker af, dus om dat op te lossen hang jij de laaste activiteit aan de sessie omdat die toch bij de gebruiker hoort :?
Ik snap je bedoeling met lastactivity. Maar zodra ik eraan probeer te werken gaat het fout. Ik zit echt een end te kloten met al die if's
proberen we het in pseudo code.
code:
1
2
3
4
5
6
7
8
9
10
11
12
$nu = de tijd nu.
$nu15minder = $nu maar dan 15 minuten eerder :+
haal $lastactivity uit database.
als $lastactivity voor $nu15minder is dan 
> plaats $lastactivity in database op lastvisit veld.
zet $lastactivity gelijk aan $nu
plaats $lastactivity terug in database
haal $lastvisit uit database.
haal alle topic titels met laatste reactie tijd uit database.
for lusje voor alle titels
> is tijd van topic van voor $lastvisit plaats "oud" icoon anders plaats "nieuw icoon"
einde for lusje.

Ik tel totaal 2 ifjes.. hoeveel heb je er zelf ?

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Bolk
  • Registratie: Februari 2001
  • Niet online

Bolk

Change the equation.

Topicstarter
Op vrijdag 05 april 2002 19:56 schreef dusty het volgende:

[..]

Dus je geeft zelf al aan dat de tijden afangt van de gebruiker, de sessie hangt ook van de gebruiker af, dus om dat op te lossen hang jij de laaste activiteit aan de sessie omdat die toch bij de gebruiker hoort :?
[..]

proberen we het in pseudo code.
code:
1
2
3
4
5
6
7
8
9
10
11
12
$nu = de tijd nu.
$nu15minder = $nu maar dan 15 minuten eerder :+
haal $lastactivity uit database.
als $lastactivity voor $nu15minder is dan 
> plaats $lastactivity in database op lastvisit veld.
zet $lastactivity gelijk aan $nu
plaats $lastactivity terug in database
haal $lastvisit uit database.
haal alle topic titels met laatste reactie tijd uit database.
for lusje voor alle titels
> is tijd van topic van voor $lastvisit plaats "oud" icoon anders plaats "nieuw icoon"
einde for lusje.

Ik tel totaal 2 ifjes.. hoeveel heb je er zelf ?
Ah, het begint nu duidelijk te worden :) Thnx

Ik neem aan dat ik iedere keer lastactivity moet updaten :?

Doordat de lastvisit in de db komt heb je dus altijd en overal je lastvisit :) Ik kan evt login hier neerpoten.

Ik bespeur hier een zekere mate van onethische logica.


  • Bolk
  • Registratie: Februari 2001
  • Niet online

Bolk

Change the equation.

Topicstarter
Dusty, bedankt, het werkt. De fout die ik maakte was het door het in 1 php file te proppen, maar het moest dus in meerdere files.

Dit is de code die ik gebruikt heb:
PHP:
1
<?if(isset($u)){    $late = time()-$inactivitytime;    $lfetch = mysql_fetch_array(mysql_query("SELECT lastactivity FROM session WHERE uid='$u'"));    if($lfetch[lastactivity] < $late)    {        mysql_query("UPDATE session SET lastvisit='$lfetch[lastactivity]' WHERE uid='$u'");    }    $now = time();    $lastvisitfetch = mysql_fetch_array(mysql_query("SELECT lastvisit FROM session WHERE uid='$u'"));    $lastvisit = $lastvisitfetch[lastvisit];    mysql_query("UPDATE session SET lastactivity='$now' WHERE uid='$u'");} else {    $lastvisit = time()-3600;}?>

Dit werkt dus prima op een paar kleine dingetjes na :)

Ik bespeur hier een zekere mate van onethische logica.

Pagina: 1