Avatar billede -kick- Nybegynder
22. december 2004 - 01:17 Der er 69 kommentarer og
1 løsning

Vise online brugere på chatten.

Hejsa, jeg har en login.php hvor man logger ind.
Når man logger ind opdatere jeg i mysql online til "ja"
og når man logger ud sætter jeg online til "nej"

Hvordan ungår jeg at brugerne kan blive online hele tiden?

De kan bare lade være med at trykke "logud" jo?

Hvordan?
Avatar billede iss Novice
22. december 2004 - 01:18 #1
Sætte en form for forced logout, dvs har der ikke været kontakt til dem i f.eks 10min så er de logget ud.

Og fik du ikke svar før?
Avatar billede -kick- Nybegynder
22. december 2004 - 01:20 #2
Nej fik ikke svar før.

kan du ikke skrive lidt kode, osv.

er ikke så god til php :]
Avatar billede iss Novice
22. december 2004 - 01:31 #3
Det er faktisk mere SQL.

Når en bruger er på kan du lave en "UPDATE user SET time = ".time()." WHERE user = '".$user."'"

Og så kave en "UPDATE user SET online = 'offline' WHERE time+".$ttl." < ".time()
Avatar billede -kick- Nybegynder
22. december 2004 - 02:14 #4
Hvad er $tll ? er det den tid jeg skal skrive?

Og, hvordan kan du vide at brugeren ER aktiv?
Avatar billede iss Novice
22. december 2004 - 02:19 #5
$ttl er tiden i sekunder for hvor længe en bruger må være inaktiv før han/hun bliver logget af.

Er bruger er aktiv når han henter en side.... og hvis du har auto refresh, så er det vel når han skriver på chatten...
Avatar billede -kick- Nybegynder
22. december 2004 - 02:34 #6
Vil den også gøre det, selvom vinduet er lukket ned?
Avatar billede iss Novice
22. december 2004 - 02:37 #7
Lige så snart en henter siden vil de inaktive brugere blive logget af.
Avatar billede -kick- Nybegynder
22. december 2004 - 02:41 #8
Nice.
Læg svar.
Avatar billede -kick- Nybegynder
22. december 2004 - 02:41 #9
Hvor mange sekunder er 30 min?
Avatar billede -kick- Nybegynder
22. december 2004 - 02:42 #10
hvilket felt skal "time" være i databasen, skal det være INT eller varchar, eller?
Avatar billede iss Novice
22. december 2004 - 02:45 #11
30 min * 60 sekunder/min = 1800 sekunder

Og den skal være int. int 11 burde være nok.
Avatar billede -kick- Nybegynder
22. december 2004 - 02:46 #12
det vil sige:
$tll = 1800;
UPDATE user SET online = 'offline' WHERE time+".$ttl." < ".time()
Avatar billede -kick- Nybegynder
22. december 2004 - 02:47 #13
<?php
include("db.php");
$tll = 1800;
mysql_query("UPDATE naturechat_brugere SET time = ".time()." WHERE brugernavn='$_SESSION[brugernavn]'");

mysql_query("UPDATE naturechat_brugere SET online = 'nej' WHERE time+".$ttl." < ".time()");
?>
Avatar billede iss Novice
22. december 2004 - 02:48 #14
Jep, du kunne evt også lave online til en char(1) som så er 1 når folk er online og 0 når de er offline.....
Avatar billede -kick- Nybegynder
22. december 2004 - 02:50 #15
Vil dette virke:

<?php
include("db.php");
$tll = 1800;
mysql_query("UPDATE naturechat_brugere SET time = ".time()." WHERE brugernavn='$_SESSION[brugernavn]'");

mysql_query("UPDATE naturechat_brugere SET online = 'nej', rum='', felt='-19999', lfelt='-12121212' tfelt='-12121212 WHERE time+".$ttl." < ".time() WHERE brugernavn='$_SESSION[brugernavn]'");
?>
Avatar billede -kick- Nybegynder
22. december 2004 - 02:51 #16
mangler lige en "," mellem lfelt og tfelt.
Avatar billede iss Novice
22. december 2004 - 02:54 #17
Det ser fint nok ud, ja.
Avatar billede -kick- Nybegynder
22. december 2004 - 02:55 #18
altså..

<?php
include("db.php");
$tll = 1800;
mysql_query("UPDATE naturechat_brugere SET time = ".time()." WHERE brugernavn='$_SESSION[brugernavn]'");

mysql_query("UPDATE naturechat_brugere SET online = 'nej', rum='', felt='-19999', lfelt='-12121212', tfelt='-12121212' WHERE time+".$ttl." < ".time() WHERE brugernavn='$_SESSION[brugernavn]'");
?>
Avatar billede -kick- Nybegynder
22. december 2004 - 02:56 #19
Parse error: parse error, unexpected T_STRING in /usr/home/web/web31797/Naturechat/chat/start.php on line 18

Linje 18:
mysql_query("UPDATE naturechat_brugere SET online = 'nej', rum='', felt='-19999', lfelt='-12121212', tfelt='-12121212' WHERE time+".$ttl." < ".time() WHERE brugernavn='$_SESSION[brugernavn]'");
Avatar billede iss Novice
22. december 2004 - 03:00 #20
time()."
Avatar billede -kick- Nybegynder
22. december 2004 - 03:19 #21
Parse error: parse error, unexpected '\"' in /usr/home/web/web31797/Naturechat/chat/start.php on line 18
Avatar billede -kick- Nybegynder
22. december 2004 - 03:20 #22
HVORFOR ikke bare:

$time = time();

mysql_query("UPDATE naturechat_brugere SET online = 'nej', rum='', felt='-19999', lfelt='-12121212', tfelt='-12121212' WHERE time+$ttl < $time WHERE brugernavn='$_SESSION[brugernavn]'");
Avatar billede iss Novice
22. december 2004 - 03:22 #23
Det er det samme.... det andet er måske bare det pænere....
Avatar billede -kick- Nybegynder
22. december 2004 - 03:27 #24
Og nu virker det :)
- Læg svar aligevel :)
Avatar billede iss Novice
22. december 2004 - 03:30 #25
Well.... selvfølgelig virker det....
Avatar billede iss Novice
22. december 2004 - 03:32 #26
Dog ville jeg snætte den der ttl en del ned hvis din chat f.eks refresher hvert 10. sekund, så ville jeg nok sætte ttl til f.eks 60.
Avatar billede -kick- Nybegynder
22. december 2004 - 04:07 #27
"Well.... selvfølgelig virker det...."

- Dog ikke, den logger ikke ud, da jeg skulle teste, satte $tll til 100

der skete intet.
Avatar billede iss Novice
22. december 2004 - 04:13 #28
Nu var det vel ikke den samme bruger du brugte vel? Altså var logget på med den bruger du tedtede med?
Avatar billede Slettet bruger
22. december 2004 - 12:57 #29
kan man ikke ellers bruge en onOnload og onUnload.. eller hvad det nu hedder i js :P
Avatar billede iss Novice
22. december 2004 - 12:59 #30
Du kan aldrig være sikker på JS, f.eks vil det ikke virke med mig, som efter jeg altid har JS slået fra.
Avatar billede Slettet bruger
22. december 2004 - 13:02 #31
ok, men det har de fleste jo ikke :P
Avatar billede iss Novice
22. december 2004 - 13:04 #32
En er jo nok til at ødelægge det.
Avatar billede Slettet bruger
22. december 2004 - 13:12 #33
ja, den anden metode er vel også bedst
Avatar billede -kick- Nybegynder
22. december 2004 - 15:29 #34
ISS->
Jeg fik på med min egen bruger.
og satte php script'et i chat.php hvor man klikker rundt.

satte $tll til 100
og ventede en halv time, der skete ikke noget.
Avatar billede iss Novice
22. december 2004 - 15:53 #35
Du skal gå på med en ANDEN bruger.
Avatar billede olebole Juniormester
22. december 2004 - 16:09 #36
<ole>

En script-chat med JS slået fra? ... not in your wettest dreams  ;o)

-kick- >> Du kan i rimelig grad stole på JavaScript til dette formål - da chatten jo overhovedet ikke virker uden  :)

/mvh
</bole>
Avatar billede iss Novice
22. december 2004 - 16:15 #37
olebole -> Du taler vist som du har forstand.
Avatar billede olebole Juniormester
22. december 2004 - 16:29 #38
Ja, og den plejer at være temmelig god  :)

Hvis du læser, hvad jeg skriver, kan du også se det: "...til dette formål...". Der er intet sikkerhedsmæssigt i dette her - det er udelukkende et spørgsmål om at give brugerne en - som oftest temmelig ligegyldig - oplysning. Altså er der ingen fare ved at overlade det til JS.

Noget andet er ting som at validere bruger-input. Der må man _aldrig_ belave sig på JS. Hvis man blot skal checke, om en bruger logger af - for at vise det til de andre - har jeg dog vanskeligt ved at se det forkerte i det.

På den anden side ... hvis du flyder over med ubrugt forstand, skal du da være velkommen til at tage mig i skole  :)
Avatar billede iss Novice
22. december 2004 - 16:34 #39
Fakta er du kommer med den mest ubruglige påstand:
"En script-chat med JS slået fra? ... not in your wettest dreams  ;o)"
Det er direkte forkert på alle planer. Hvis jeg skal modbevise det for dig kan jeg ansættes til 310,-/time og det tager ikke mere end en time at lave.
Avatar billede olebole Juniormester
22. december 2004 - 16:49 #40
iss >> Da ikke, hvis den skal være en fjerdedel af din drøm om en timeløn værd  :)

Du kan lave noget, der klikker og 'blinker' ved opdatering - men du kan da ikke lave noget, der afspejler den kvalitet, man normalt ville forvente af en bare nogenlunde kompetent koder.
'Script-chats', der kører uden JS, er jo noget enhver PHP-newbie med bare 10 timer bag sig, prøver at lave ... men det er jo ikke noget, en koder med et minimum af respekt for sig selv - eller sit håndværk - vil betegne som en chat.

Derudover ved jeg positivt, at -kick-'s chat netop bygger på JS
Avatar billede iss Novice
22. december 2004 - 16:51 #41
Så er det stadig løgn du skriver.

EOD.
Avatar billede olebole Juniormester
22. december 2004 - 17:04 #42
"løgn" ....?!??!!! Få dig noget sex og et par gode julegaver - så kan det være, du kommer i humør til at kommunikere med folk uden at kaste om dig med den slags indædte, mavesure og uforskammede beskyldninger.

Havd din opfordring til ansættelse angår, så kan du - mod at betale 500 i timen - _måske_ få lov at arbejde for mig. Men så kræver det ved Gud også, at du arbejder hjemmefra ... og bor _langt_ væk!
Avatar billede -kick- Nybegynder
22. december 2004 - 17:24 #43
Ehm, vil ikke være søde at svarer på mit spg istedet for at skændes?
Avatar billede -kick- Nybegynder
22. december 2004 - 17:25 #44
Olebole ->
<SCRIPT>
<!--
window.onunload=new Function("window.open('logud.php','','status=no,width=999,height=999')");
//-->
</SCRIPT>

Den bruger jeg nu.

Men aligevel kan man stadig snyde dig udenfor.
Avatar billede -kick- Nybegynder
22. december 2004 - 17:28 #45
ISS ->
Er på med 2 brugere, det virker stadig ikke.
Avatar billede iss Novice
22. december 2004 - 17:31 #46
Så har du lavet en SQL fejl, udskriv dine fejl, så vil du se det.
Avatar billede -kick- Nybegynder
22. december 2004 - 17:52 #47
Aaaah!

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 '< 1103734304 WHERE brugernavn='kick'' at line 1


kode:

<?php
include("db.php");
$tll = 10;
mysql_query("UPDATE naturechat_brugere SET time = ".time()." WHERE brugernavn='$_SESSION[brugernavn]'") or die(mysql_error());
$time = time();

mysql_query("UPDATE naturechat_brugere SET online = 'nej', rum='', felt='-19999', lfelt='-12121212', tfelt='-12121212' WHERE time+$ttl < $time WHERE brugernavn='$_SESSION[brugernavn]'") or die(mysql_error());
?>

En der vil hjælpe?
Avatar billede iss Novice
22. december 2004 - 18:00 #48
WHERE nummer to skal være AND ikke WHERE.
Avatar billede -kick- Nybegynder
22. december 2004 - 18:05 #49
Nåeh ja :)
Avatar billede iss Novice
22. december 2004 - 18:06 #50
Eller faktisk, kan se du har "opfundet" en del på det jeg skav til dig.... du skal bare SLETTE alt efter WHERE nummer inklusiv WHERE.
Avatar billede -kick- Nybegynder
22. december 2004 - 18:06 #51
nu siger den..

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 '< 1103735177 AND brugernavn='kick'' at line 1
Avatar billede iss Novice
22. december 2004 - 18:10 #52
Se hvad jeg skrev... det skulle væk.
Avatar billede iss Novice
22. december 2004 - 18:12 #53
Og bestem dig lige til om du vil kalde det ttl eller tll (ttl er nok det bedste, for time to live)
Avatar billede -kick- Nybegynder
22. december 2004 - 18:40 #54
mysql_query("UPDATE naturechat_brugere SET online = 'nej', rum='', felt='-19999', lfelt='-12121212', tfelt='-12121212' WHERE time+$ttl < $time") or die(mysql_error());


den siger:
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 '< 1103737177' at line 1
Avatar billede iss Novice
22. december 2004 - 18:50 #55
Rename time til tid eller sæt ` omkring dem, dvs erstat time med `time` eller tid.
Avatar billede -kick- Nybegynder
22. december 2004 - 19:27 #56
Har sat det ` udenom, men siger:

ou have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '< 1103740022' at line 1
Avatar billede iss Novice
22. december 2004 - 19:30 #57
Lav lige en dump af din database struktur.
Avatar billede -kick- Nybegynder
22. december 2004 - 19:55 #58
CREATE TABLE `naturechat_brugere` (
  `id` int(4) NOT NULL auto_increment,
  `brugernavn` varchar(200) NOT NULL default '',
  `kodeord` varchar(200) NOT NULL default '',
  `rum` varchar(200) NOT NULL default '',
  `figur` varchar(200) NOT NULL default '',
  `navnfarve` varchar(200) NOT NULL default '',
  `lejlighed` varchar(200) NOT NULL default '',
  `onlinetid` varchar(200) NOT NULL default '',
  `nk` varchar(200) NOT NULL default '1',
  `icq` varchar(200) NOT NULL default '',
  `msn` varchar(200) NOT NULL default '',
  `email` varchar(200) NOT NULL default '',
  `fritekst` text NOT NULL,
  `alder` varchar(200) NOT NULL default '',
  `felt` varchar(200) NOT NULL default '',
  `tfelt` varchar(200) NOT NULL default '',
  `lfelt` varchar(200) NOT NULL default '',
  `bopal` varchar(200) NOT NULL default '',
  `irlnavn` varchar(200) NOT NULL default '',
  `online` varchar(200) NOT NULL default 'nej',
  `liv` int(5) NOT NULL default '50',
  `slaar` varchar(200) NOT NULL default '5',
  `vundet` varchar(200) NOT NULL default '',
  `time` int(11) NOT NULL default '0',
  UNIQUE KEY `id` (`id`)
) TYPE=MyISAM AUTO_INCREMENT=9 ;
Avatar billede iss Novice
22. december 2004 - 20:02 #59
Ved ikke hvad du laver forkert for det virker perfekt:
UPDATE naturechat_brugere SET
`online` = 'nej',
`rum` = '',
`felt` = '-19999',
`lfelt` = '-12121212',
`tfelt` = '-12121212'
WHERE
`time` + $ttl < $time
Avatar billede -kick- Nybegynder
22. december 2004 - 20:11 #60
<?php
include("db.php");
$tll = 10;
mysql_query("UPDATE naturechat_brugere SET time = ".time()." WHERE brugernavn='$_SESSION[brugernavn]'") or die(mysql_error());
$time = time();

mysql_query("UPDATE naturechat_brugere SET
`online` = 'nej',
`rum` = '',
`felt` = '-19999',
`lfelt` = '-12121212',
`tfelt` = '-12121212'
WHERE
`time` + $ttl < $time") or die(mysql_error());
?>
Avatar billede -kick- Nybegynder
22. december 2004 - 20:12 #61
Udskriver samme fejl.
Avatar billede iss Novice
22. december 2004 - 20:13 #62
Har du rettet den der $ttl/$tll fejl fra tidligere?
Avatar billede -kick- Nybegynder
22. december 2004 - 20:26 #63
Nej, men har nu. Tjekker lige om det virker
Avatar billede -kick- Nybegynder
22. december 2004 - 20:28 #64
Kan du ikke lave sådan at den lukker vinduet, efter $tll ?

altså sådan den
`online` = 'nej',
`rum` = '',
`felt` = '-19999',
`lfelt` = '-12121212',
`tfelt` = '-12121212'

+ lukker vinduet?
Avatar billede iss Novice
22. december 2004 - 20:33 #65
Lukke vinduet er JavaScript, det holder jeg mig fra.
Avatar billede -kick- Nybegynder
22. december 2004 - 20:37 #66
ja, men jeg har kode til scriptet, ville bare have php versionen, hvor den siger det.

Altså en if sætning vel?
if ($tll == "time()<$time"){

echo "luk vinduet";
}

eller sådan noget
Avatar billede iss Novice
22. december 2004 - 20:41 #67
Er slet ikke med hvad du vil.
Avatar billede -kick- Nybegynder
22. december 2004 - 20:44 #68
altså vi siger at hvis brugeren ikke har været online i 30 min, så skal felt blive til -1212 og lfelt til -1212 osv.

Kan man ikke lave sådan den OGSÅ skal lukke vinduet?

<script>window.top.close</script>
Avatar billede iss Novice
22. december 2004 - 20:48 #69
Nej, for så er brugeren jo netop aktiv hvis brugeren henter noget fra siden.
Avatar billede -kick- Nybegynder
22. december 2004 - 20:49 #70
nå ja ;)
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