Gå til innhold

[LØST]Online script hjelp


Anbefalte innlegg

Videoannonse
Annonse

Du legger til hver ip som er innom i en tabell, sammen med siste timestamp brukeren var innom.

Altså, kun hver ip én gang for så å oppdatere timestamp hver gang noen trykker på en ting.

 

Når du skal finne ut hvor mange personer som er online tar du nåværende timestamp + timestamp for 5 - 10 min siden og sjekker hvor mange og hvem som er innenfor dette området.

 

Kodingen får du gjøre selv ;) (Om ikke noen andre gidder da :) )

Lenke til kommentar
Gjest Slettet+142

Da er det vel å gjøre som googen90 sier?

Pass da også på at den tabellen han snakker om har en inkrementerende integer id..

Da trenger du bare legge inn et felt i bruker-tabellen din som forbinder ip-id'en med brukeren.

 

 

 

`brukere`:

-id INT(n) not null auto_increment primary key

- ...

- ...

- ip_id INT(n) null

----------

`iper`

- id INT(n) not null auto_increment primary key

- ip VARCHAR(15) NOT NULL

- ts TIMESTAMP null DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

 

 

Lenke til kommentar

så d blir noe sånt her:

 

<?php

 

$sql = ("select * from brukere WHERE id = '$id'")

$time = $row->timestamp;

$naatid = $row->naatid;

 

$online = $time + $naatid;

 

noe sånt? men vet ikke hvordan jeg skal kode resten..

hva som skal stå i if..

Lenke til kommentar

Klikk for å se/fjerne innholdet nedenfor
så d blir noe sånt her:

 

<?php

 

$sql = ("select * from brukere WHERE id = '$id'")

$time = $row->timestamp;

$naatid = $row->naatid;

 

$online = $time + $naatid;

 

noe sånt? men vet ikke hvordan jeg skal kode resten..

hva som skal stå i if..

9271657[/snapback]

 

Det ser ikke ut som en veldig god løsning. Ville nok ha gjordt noe slikt

PHP
<?php

// hvor mange minuter siden siste bruker aktivitet = online

$minutt=10;

 

//feltet siste = DATETIME

//TIMESTAMPADD krever mysql 5.0+

$sql="SELECT bruker FROM online_bruker_tab 

WHERE DATE_FORMAT(siste,'%Y%m%d%H%i') >= DATE_FORMAT(TIMESTAMPADD(MINUTE,-".$minutt.",now()),'%Y%m%d%H%i')";

 

$res=mysql_query($sql);

echo "<div>Online brukere: <ul>";

 

while ($row=mysql_fetch_row($result))

  echo "<li>".$row[0]."</li>";

 

echo "</ul></div>";

?>

Endret av crowly
Lenke til kommentar

Du kan jo sette standard verdi til CURRENT_TIMESTAMP og Attributes til ON UPDATE CURRENT_TIMESTAMP, da får feltet automatisk verdi og du trenger ikke sette inn noe. Dette fikses enkelt i phpmyadmin.

 

Du kan vel bare bruke now() funksjonen i update/insert

UPATE tabell
SET siste = NOW()
WHERE bruker= ... ;

INSERT INTO tabell (bruker,siste)
VALUES ('Crowly',NOW());

Lenke til kommentar
Gjest Slettet+142

Hva med det?

 

if(isset($_SESSION['username')){
$sql = "update brukere set ts = now() where bruker='". mysql_real_escape_string($bruker) ."'" }

# også:

$sql2 = "select bruker, TIME(ts) as ts FROM brukere WHERE bruker='mariyo'";
$q2 = mysql_query($sql2);
$fetch = mysql_fetch_assoc($q2);
$ts = $fetch["ts"];
$bruker = $fetch["bruker"];
if($ts >= ( time()-(60*10) )) { echo "Online"; } // 10 = antall minutter
else echo "offline";

?

Lenke til kommentar

Klikk for å se/fjerne innholdet nedenfor
kom på en ting nu..

 

if(isset($_SESSION['username')){

$sql = update set online = 1..... }

 

også:

 

if($online == 1) { echo "Online"; }

else echo "offline";

9272639[/snapback]

Jeg tror du gjør ting unødvendig komplisert for deg selv. Har ikke lagd en slik funksjon selv, men har lest en del poster om temaet. De fleste angriper problemet med å lagre ett tidspunkt når bruker logger inn, og oppdaterer dette hver gang en bruker gjør noe. Dette blir lagret i en tabell, f.eks som ett felt i brukernavn tabellen. Ved da å bruke sql settningen som jeg postet over, med nødvendige modifikasjoner til ditt behov, og lister du resultatene fra den så vil du få en liste over alle brukere som er innlogget og har gjordt noe i løpet av de siste X minutter.

 

Hvis det ikke er slik du vil ha det, så må du komme med flere detaljer i forhold til hvordan du ønsker at det skal fungere.

Endret av crowly
Lenke til kommentar
Gjest Slettet+142

ehm.. hvis du vil logge ut brukeren etter å ha vært online i 5 min kan du det, ja.

 

Ellers blir det når 5min == time() - time(sistehandling)..

UPDATE brukere SET loggetinn = 0 WHERE UNIX_TIMESTAMP() > (UNIX_TIMESTAMP(sistehandling)+60*5)

elns..

 

Edit; "Litt" feil i SQL

Endret av Slettet+142
Lenke til kommentar
ehm.. hvis du vil logge ut brukeren etter å ha vært online i 5 min kan du det, ja.

 

Ellers blir det når 5min == time() - time(sistehandling)..

UPDATE brukere SET loggetinn = 0 WHERE TIME(NOW()) > (TIME(sistehandling)+60*5)

elns..

9273804[/snapback]

 

vil la php gjøre jobben :p

$loggut = $time() - $sistebehandling;

 

if($loggut == 5) {

include("loggut.php");

}

 

men hvordan får jeg scriptet til å kjøre automatisk?

Lenke til kommentar
Gjest Slettet+142

ok. $time() er ikke en funksjon.. time() er en funksjon.. :p

 

$loggut = (time() - $sistebehandling) / 60;

if($loggut > 5){
include("loggut.php");
}

 

Hva mener du med at skriptet skal kjøre automatisk?

Lenke til kommentar
ok. $time() er ikke en funksjon.. time() er en funksjon.. :p

 

$loggut = (time() - $sistebehandling) / 60;

if($loggut > 5){
include("loggut.php");
}

 

Hva mener du med at skriptet skal kjøre automatisk?

9273873[/snapback]

 

altså med at når det har godt 5min.. så skal brukeren bli automatisk logget ut.

Lenke til kommentar
Gjest Slettet+142

Han vil jo bli logget ut neste gang han gjør et trekk på hjemmesiden din da :)

 

Ellers kan du lage et skript som looper alle brukerne og logger ut de som har vært inaktive i mer enn 5 min, og sette skriptet som en cronjob.

Om du skulle gjøre det, bør du la MySQL gjøre jobben, ikke php..

 

UPDATE brukere SET online=0 WHERE ((UNIX_TIMESTAMP() - UNIX_TIMESTAMP(sistehandling)) / 60) > 5

 

 

Edit: la til SQL

Edit2: fikset sql

Endret av Slettet+142
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...