slippern Skrevet 11. august 2007 Del Skrevet 11. august 2007 (endret) Skal lage et online script nå. som viser om en bruker er online. men hvordan? har tenk på timestamp eller noe sånt.. Endret 14. august 2007 av slippern Lenke til kommentar
The_Lozer Skrevet 11. august 2007 Del Skrevet 11. august 2007 Skal du bruke mySql eller flatfiler? Lenke til kommentar
nree Skrevet 11. august 2007 Del Skrevet 11. august 2007 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
slippern Skrevet 12. august 2007 Forfatter Del Skrevet 12. august 2007 bruker sql. skal også finne ut hvilken bruker som er online.. Lenke til kommentar
Gjest Slettet+142 Skrevet 13. august 2007 Del Skrevet 13. august 2007 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
slippern Skrevet 13. august 2007 Forfatter Del Skrevet 13. august 2007 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
Crowly Skrevet 13. august 2007 Del Skrevet 13. august 2007 (endret) 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 13. august 2007 av crowly Lenke til kommentar
slippern Skrevet 13. august 2007 Forfatter Del Skrevet 13. august 2007 Hvordan bruker jeg timestamp? tok og satt feltet til og være timestamp. men ingenting blir skrevet til det.. :/ står bare 0000-00-00 00:00:00 som er standar.. bruker date("j-n-Y H:i:s"); Lenke til kommentar
Crowly Skrevet 13. august 2007 Del Skrevet 13. august 2007 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
slippern Skrevet 13. august 2007 Forfatter Del Skrevet 13. august 2007 kom på en ting nu.. if(isset($_SESSION['username')){ $sql = update set online = 1..... } også: if($online == 1) { echo "Online"; } else echo "offline"; Lenke til kommentar
Gjest Slettet+142 Skrevet 13. august 2007 Del Skrevet 13. august 2007 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
slippern Skrevet 13. august 2007 Forfatter Del Skrevet 13. august 2007 det går ikke helt.. må finne på noe annet liganes:P pga session er min sessin.. hmm.. Lenke til kommentar
Crowly Skrevet 13. august 2007 Del Skrevet 13. august 2007 (endret) 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 13. august 2007 av crowly Lenke til kommentar
slippern Skrevet 13. august 2007 Forfatter Del Skrevet 13. august 2007 Har fått scriptet mitt til og fungere.. men kan jeg ta: $brukeren skal logge ut visst ikke han ikke har trykt på noe innen 5min = $nårbrukerloggetinn - $sistehandling Hvordan blir da spørringen? Lenke til kommentar
Gjest Slettet+142 Skrevet 13. august 2007 Del Skrevet 13. august 2007 (endret) 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 13. august 2007 av Slettet+142 Lenke til kommentar
slippern Skrevet 13. august 2007 Forfatter Del Skrevet 13. august 2007 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 $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 Skrevet 13. august 2007 Del Skrevet 13. august 2007 ok. $time() er ikke en funksjon.. time() er en funksjon.. $loggut = (time() - $sistebehandling) / 60; if($loggut > 5){ include("loggut.php"); } Hva mener du med at skriptet skal kjøre automatisk? Lenke til kommentar
slippern Skrevet 13. august 2007 Forfatter Del Skrevet 13. august 2007 ok. $time() er ikke en funksjon.. time() er en funksjon.. $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 Skrevet 13. august 2007 Del Skrevet 13. august 2007 (endret) 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 13. august 2007 av Slettet+142 Lenke til kommentar
slippern Skrevet 13. august 2007 Forfatter Del Skrevet 13. august 2007 hvor trenger jeg å legge det scriptet der? på alle sidene som har isset(session username) ? Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå