|
[ mixmashine @ 01.08.2007. 12:58 ] @
| Pozdrav svima. Da odmah predjem na stvar:
Koristim Mysql za bazu korisnika i sesiju za login.
U tabeli korisnici nalaze se sve informacije o korisniku, bitna polja su ( korisnicko ime - korime), (poslednji login - poslednji_login), (login - login).
Kako bih prikazao ko se trenutno nalazi na sajtu od registrovanih korisnika koristim update baze gde, kada se korisnik uloguje, polje login ima vrednost "1", inace je default vrednost "0".
Code: mysql_query("UPDATE korisnici SET login=1 WHERE korime='$korime'");
Kada korisnik klikne na logout, polje login se vraca na vrednost "0", ali problem se javlja kada se browser zatvori tada korisnik ostaje ulogovan, tj polje login ostaje "1".
Nasao sam neko resenje ovde na forumu, neko je imao isti problem, ali nikako da uspem da napravim to,evo posle 3 dana pokusavanja nisam uspeo da dodjem do rezultata, jednostavno ne mogu da napisem u php-u to sto sam zamislio u glavi, pretpostavljam da veliki je problem sto sam ja to verovatno pogresno zamislio. Funkciju time() ne razumem bas najbolje, tj kako da iz time() vratim "H.m.s"
Nadam se da sam detaljno i jasno objasnio moj problem, pa ako bi neko mogao da mi pomogne oko ovoga. Unapred hvala svima! |
[ dakipro @ 01.08.2007. 13:13 ] @
Pa bila je ne tako davno tema bas o ovom problemu. http://www.elitesecurity.org/t255524-0
mislim da je tu dosta stvari objasnjeno. a za funkciju time, otvori manual, to ti je najlakse...
[ mixmashine @ 01.08.2007. 14:14 ] @
Citao sam manual, citao sam srodne teme ovoj, ali i dalje mi nije jasno. Palo mi je napamet ovo sa sesijama i bazom ali ne ne pada mi napamet kako to da odradim. Znam da iskusniji, tj majstori ovog zanata nemaju vremena da se bakcu sa ovim pocetnickim problemima, pa ako moze neko ko ima malo vremena. Nalazim da je problem sto ne razumem neke stvari koliko god da citam manual. Potrebna mi je ideja sa objasnjenjem, potreban mi je kod za to. Naravno ne trazim da mi neko napise i ja to kao iskopiram i to da radi, ne, hocu sam, ako bi neko mogao da me uputi sa nekim prakticnim primerom pa cu se za ostalo snaci.
Vidim da ima dosta ljudi koji kazu " e treba mi skripta za to i to , jel moze neko da napise " nisam ja od tih ljudi, hocu sam, al sam zapeo... Stvarno ne mogu da nadjem resenje, Hvala Vam.
[ dakipro @ 01.08.2007. 14:27 ] @
ajde da se ne ponavljamo, evo konkretan Sinisin post (hatebreeder)
http://www.elitesecurity.org/t255524-0#1538036
Da li ti odgovara ovo sto je on napisao u postu?
mozes i da nastavis na tamosnjoj temi, da se ne bi ponavljali 
[ 1r0nM4n @ 01.08.2007. 14:59 ] @
Citat: kako da iz time() vratim "H.m.s"
Code: <?php
$time = time()-3600*5;
echo "Vreme pre 5 sati je bilo:".date(("H.i.s"), $time);
?>
I "m" je mesec a ne minut.
http://www.php.net/manual/en/function.date.php
p0z
[ Nemanja Avramović @ 01.08.2007. 19:14 ] @
Ljudi, dokle da prepisujemo manual na ovaj forum?
Ovo za formatiranje datuma/vremena iz timestamp-a mora da zna svako ako hoće bilo šta da uspe da radi u PHP-u. Daj uozbiljite se malo...
[ mixmashine @ 01.08.2007. 20:18 ] @
Moja je greska bila sto sam napisao m kao minut, izvinjavam se.Ovo mi je pomoglo da resim neke stvari. Hvala 1r0nM4n-u na objasnjenju.
Ja sam izgleda malo glup i slabije kapiram, pa zato jos uvek nisam resio kako da napravim kombinaciju PHP-MySQL da izloguje korisnika koji nije aktivan duze od 5-10 min, tj da mu stavi polje login="0". :(
[Ovu poruku je menjao mixmashine dana 01.08.2007. u 21:32 GMT+1]
[ glavince @ 01.08.2007. 21:49 ] @
Ma nisi glup, vecina clanova ovog furuma na pocetku svoje karijere su se susreli sa ovim problemom.
Najbolje bi bilo da kreiras jos jednu tabelu recimo users_online. U tu tabelu najneophodnije su sledece kolone:
id, session_id, zadnaja_akcija, user.
E sad logika je sledeca.
Kada se neko pojavi na sajt, bilo da se radi o registrovanom korisniku ili obicnom posetitelju, uzimas id sesije "session_id()" . Prvo proveravas dali u tabeli users_online postoji taj sesson_id. Ako ne postoji upisujes u tabelu
session_id -> session_id(), zadnja_akcija -> time() i user . Ako je user registrovan korisnik upisi id korisnika ako nije mozes da postavis 0. Tako ces znati ko je na sajtu.
Ako session_id() postoji u bazi onda samo pravis update na "zadnja_akcija -> time()"
E sada je ono sto ti nije jasno. Treba da definiras neki vremenski interval prema kome ces znati dali je korisnik trenutno na tvom sajtu ili nije. To moze da bude interval od 30 minuta t.e. 1800 sec.
Sve sto treba da napravis je to da proveris i da izbrises sve redove iz tabele users_online gde je zadnja_akcija < time()-1800
[ mixmashine @ 01.08.2007. 22:17 ] @
Sta da kazem sem SVAKA CAST. Pa upravo to mi je trebalo, ta logika i takvo objasnjenje.... Stvarno ti svaka cast, javicu da li sam uspeo.
Hvala puno na ovom odgovoru.
Pozdrav.
[ mixmashine @ 02.08.2007. 23:25 ] @
Pozdrav,
odradio sam sledece: ( session_start() mi se nalazi u config.php kao i ostali podaci za bazu )
Code: include "config.php";
$sessionID = session_id();
$sad = time();
$postoji = @mysql_query("SELECT * FROM kor_online WHERE sessionID=$sessionID ");
$not_null = @mysql_num_rows($postoji);
//Provera da li je korisnik/posetilac na sajtu
if ( $not_null != 0 ) {
mysql_query("UPDATE kor_online SET zadnja_akcija=$sad WHERE sessionID=$sessionID ");
}
else { //Ako je korisnik nov, upisi u bazu
mysql_query("INSERT INTO kor_online (sessionID, zadnja_akcija)
VALUES ('$sessionID','$sad')");
} //Kraj provere korisnika i upisa u bazu
$minuti = 5;
$sekunde = $minuti*60;
$proslo = $sad-$sekunde;
mysql_query("DELETE * FROM kor_online WHERE zadnja_akcija < $proslo");
Ljudi, meni ovo ne radi :( Sve sto radi jeste da kada god odem na sajt, on puni bazu sa istim sessionID -om i menja time() i nista vise.
Prijavljivao mi je gresku kada radim mysql_num_rows bez @ znaka ne znam zasto, resenje da stavim to @ sam nasao ovde na forumu mada ne znam sta znaci i koja je razlika izmedju @ i bez @.
Upravo sam probao i sa $not_null = count($postoji)-1; opet isto.
Nisam do sada naisao na ovakvu situaciju i problem pa molim za pomoc, Hvala.
[Ovu poruku je menjao mixmashine dana 03.08.2007. u 00:55 GMT+1]
[Ovu poruku je menjao mixmashine dana 03.08.2007. u 01:00 GMT+1]
[ centaur @ 02.08.2007. 23:54 ] @
Ajd sad polako.
prvo:
Kada stavis @ ispred neke funkcije, nece ti ispisivati gresku ukoliko do nje dodje.To znaci da si gresku sakrio od samog sebe :)
drugo:
Kada u upitu koristis varijablu tipa string (a session_id jeste string), moras je staviti pod ' (polunavodnik).
Znaci probaj da napises upit ovako:
Code:
$postoji = @mysql_query("SELECT * FROM kor_online WHERE sessionID = '$sessionID'");
To naravno primeni kod svih upita.
I jedan tip za kraj:
Ne moras da selektujes sva polja u bazi kada te interesuje da li postoji odredjeno polje..
Tebe interesuje da li to polje postoji ili ne (mislim na session_id).
Sa count() bi to bilo mnogo optimizovanije.
npr:
Code:
$postoji = @mysql_query("SELECT count(*) FROM kor_online WHERE sessionID = '$sessionID'");
[ mixmashine @ 03.08.2007. 00:34 ] @
Upravo sam hteo da napisem to :) Primetio sam da je greska jer nisam stavio pod navodnike ovako, '$sessionID'.
Ali dobro da si mi objasnio zasto se koriste jer sam mislio da sam pogresio prilikom kucanja.
Uporedjivao sam kod sa jednim slicnim gde mi cita koliko ima komentara za odredjenu vest i tamo nisam koristio navodnike samo sam upisivao $lalal i to je radilo.
Primetio sam da i kada sam izmenio, tj stavio pod navodnike $sessionID nije htelo da radi, ne znam iz kog razloga, ali kada sam umesto $sessionID=session_id(); stavio $sesija=session_id() da je proradilo. Ne znam da li to ima neke veze..... Pomislio sam da slucajno nisam vec definisao $sessionID, ali nisam...
Sad mi je sve mnogo jasnije, hvala puno. Za sad misim da necu imati vise pitanja... A ako budes imao vremena objasni mi samo ovo gore sto sam napisao.
Hvala majstore jos jednom, puno si mi pomogao!
---Dopuna--
Sve radi kako treba!!! Hvala centaur-u, glavince-u i 1r0nM4n-u na velikoj pomoci, naucio sam dosta toga iz prethodnih postova.
[Ovu poruku je menjao mixmashine dana 03.08.2007. u 02:34 GMT+1]
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|