Datuve :: Cik lietotāji šobrīd ir manā lapā?

Datuve

Mana Datuve

Reģistrācija | Noteikumi | Paroles atjaunošana



Forums

Ieskaties


Raksti

Lietotāji online

Lietotāji online: 40

Reģistrētie lietotāji online: 0

Viesi online: 40

Datuve.lv video
Top.LV

Cik lietotāji šobrīd ir manā lapā?

Ievietoja: Salvis @ 2005.08.20 00:12  

Šis PHP un mySQL skripts parāda cik lietotāji pašriez ir tavā lapā. Tas ir jāievieto ikvienā lapā, kurā vēlies lai parādītos lietotāju skaits. Sadalīsim šo kodu divās daļās. Pirmā daļa ir mySQL pārziņa, bet otrā, protams, ka PHP pārziņa. Tev nav nepieciešamas PHP zināšanas. Es, protams, ieteiktu lai tev būtu novietne kur piedāvā gan PHP, gan mySQL un web administrēšanai iesaku izmantot PhpMyAdmin :)

Tu ielogojies savā PhpMyAdmin un izveido jaunu datubāzi, kas saucas "lietotaji". Tagad ievietosim trīs laukus tavā datubāzē ko sauksim par laiks, ip, un fails. Tagad caur PhpMyAdmin lapu datubāzē „lietotaji” ievietosim šādu kodu:


CREATE TABLE apmekletaji (
Laiks int(15) DEFAULT '0' NOT NULL,
ip varchar(40) NOT NULL,
fails varchar(100) NOT NULL,
PRIMARY KEY (laiks),
KEY ip (ip),
KEY fails (fails)
);


Datubāze tagad ir kārtībā, ķeramies pie PHP koda. Tas nav īpaši liels tādēļ ceru, ka varēsi izsekot līdzi visam. Tātad par to, kas tiks darīts īstā Latviešu mēlē:
1. Padosim serverim informāciju.
2. Noteiksim laiku.
3. Informāciju par apmeklētāju ieliksim mySQL datubāzē, ja notiks kļūda, izvadīsim kļūdu.
4. Gandrīz tas pats, kas iepriekš, tikai dzēšam apmeklētāju no datubāzes kad tas pamet lapu.
5. Saņemam rezultātus.
6. Parādam rezultātus.
Beidzot, lūk, arī PHP kods:


//ievadam ļoti svarīgu informāciju
$serveris = "localhost"; //servera adrese vai IP adrese kur atrodas datubāze
$db_liet = "lietotajvards";
$db_pase = "parole";
$datubaze = "lietotaji"; // Datubāzes nosaukums, ar kuru notiks darbs
$beigts = 300; //Pēc cik ilga laika secinām, ka lietotājs vairs nav lapā, šajā gadījumā 300 sekundes – 5 minūtes

//nosākam laiku
$laiks = time();
$taimauts = $laiks-$beigts;

//pieslēdzamies datubāzei
mysql_connect($serveris, $db_liet, $db_pase);

//ievietojam datus
$ievietojam = mysql_db_query($datubaze,
"INSERT INTO apmekletaji VALUES
('$laiks','$REMOTE_ADDR','$PHP_SELF')");
if(!($ievietojam)) {
print "Apmeklētāju ievade izgāzusies > ";
}


//Dzēšam ierakstus kad apmeklētāji pazūd
$dzesam = mysql_db_query($datubaze,
"DELETE FROM apmekletaji WHERE laiks<$taimauts");
if(!($dzesam)) {
print "Apmeklētāju dzēšana izgāzusies > ";
}

//ķeram rezultātus
$rezultats = mysql_db_query($datubāze,
"SELECT DISTINCT ip FROM apmekletaji
WHERE fails='$PHP_SELF'");
if(!($rezultats)) {
print "Apmeklētāju parādīšanas kļūda > ";
}

//rindu skaits = apmeklētāju skaits šobrīd lapā
$lietotaji = mysql_num_rows($rezultats);


//Rādām rezultātus
mysql_close();
if($lietotaji == 1) {
print("Es redzu $lietotaji čāpstinātāju lapā!\n");
} else {
print("Es redzu $lietotaji čāpstinātājus lapā!\n");
}
?>


Nebija pārāk sarežģīti? Tā nu tas ir. Viss ģeniālais ir vienkāršs. Ceru, ka šis kādam palīdzēs.

Saistītie raksti

Komentāri

#1 xxx @ 2005.08.20 09:21

Un ja lietotājs sēž ilgāk par 300s, anyway no saraksta tiek izmests....

#2 Atombumba @ 2005.08.20 10:05

Izcili, gaidam vēl:)))

#3 justus> @ 2005.08.20 11:04

psc

piekriitu Kirilam
:omg:

#4 bubu @ 2005.08.20 11:16

omg arī no manis.
Un vispār paviršs skripts - mysql_num_rows() funkcija strādā ļoti neefektīvāk kā MySQL funkcija COUNT(*)
Lapā vienā laikā nevar ienāk vairāk kā viens lietotājs, jo laiks kolonna ir ar unikālām vērtībām - tiks uzskaitīts tikai viens lietotājs.
mysql_db_query() ir novecojusi funkcija, tā vietā pat manuālis iesaka lietot mysql_select_db() un mysql_query()

#5 bubu @ 2005.08.20 12:37

Ā vēlviens bugs - ja lietotājs ieklikšķina tai pat lapā otru reizi to 300sek laikā, tad viņš tiek uzskaitīts divas reizes!

Arti, iemācies atšķirt kritiku no diršanas.

#6 artis @ 2005.08.20 12:41

Manuprāt:
3, 6, 8 komentārs- kritika.
1, 5 komentārs- jēla *iršana, bez pamatojuma.
Varbūt kļūdos. Lai tā būtu. Un es atbalstu kritiku- tādai ir jābūt, lai būtu "līmenis" un kvalitāte. Bet stulbai trīsburtu kombināciju mētāšanai es gan neredzu jēgu. Tas tikai mans viedoklis. peace :)

#7 Kāds @ 2005.08.20 13:25

artis: piemēram es, izlasot šo rakstu, tikai smagi nopūtos. Protams, ir prieks, ka kāds cenšas paizglītot citus, bet .. tik zemā līmēnī =/ .. aj.

Katrā gadījumā - neapgrūtināju sevi ar komentāra iepostēšanu. Un ja arī to darītu, tad, visticamāk, būtu pārāk slinks, lai gari un sīki skaidrotu Salvja kļūdas (kā to čakli izdarīja bubu) ..

#8 Bytec WWW @ 2005.08.20 15:14

Viss ir čikeniekā! Šo skriptu tikai nedaudz jāpielabo un varēs lietot! Pamatdoma taču ir pareiza!

#9 bubu @ 2005.08.20 17:45

oollee: iesācēji nekad neiedziļināsies tajā kodā (nu varbūt ar ārkārtīgi retiem izņēmumiem). Bet gan paņems tīrā veidā copy&paste uztaisīs. Un ja kautkas neies kā gribētos, tad tāpat forumā to pašu vien teiks, lai kāds uzraksta kā vajag.

#10 wraith @ 2005.08.20 18:13

mysql_num_rows izmantošana, lai saskaitītu ierakstus utml dīvainības īstenībā ir ĻOTI biežas kļūdas, kas ir redzētas pat šķietami pieredzējušu izstrādātāju kodā :(
Problēma ir, ka ja iesācējs redz ŠĀDU kodu, paskatās, ka tas darbojas (vismaz kaut cik) tad, nedod die's, var nodomāt "bet cilvēks, kas to rakstīja tak zināja, ko dara un tātad tā ir jādara". Tā arī rodas cilvēki, kas raksta šķībi daudzus gadus un domā ka ir ūberkoderi :(

#11 kukuz @ 2005.08.20 18:30

scripts ir ok

[ PHILIPS755 ObigoInternetBrowser/2.0 ]

#12 justus> @ 2005.08.20 21:03

varu piebilst
veel par outputu
piem sheit :


print "Apmeklētāju parādīšanas kļūda > ";

vai labaak nebuutu lietot echo
un tekstu likt single qoutes , lai parserim lieki nav jaateeree laiks  jaameklee mainiigie, kur nemaz tie nav.

#13 Jancis @ 2005.08.20 21:09

shito pashu lasiiju tavaa blogaa. vareni esi pastraadaajis. ilgi kodeeji?

#14 bux @ 2005.08.20 21:49

Un vēl

strlen(time()) < 11 && strlen($ip)<=15

#15 wraith @ 2005.08.20 21:55

echo tiešām ir par kripatu ātrāks un single quotes arī nenāktu par ļaunu - nedaudz, bet tomēr ātrāk būs.
Bet nu ko tur daudz runāt - katram ir savs "stils" un es nešaubos, ka arī manējā atrodamas dažnedažādas nepilnības. Tas vēl nav tas trakākais - mysql_num_rows izmantošana šajā gadījumā ir nopietnāka problēma, kas tērē DAUDZ vairāk laika un resursu.

#16 wraith @ 2005.08.20 22:02

mors, gribētos jau piekrist, bet ņēmot vērā puisīša vecumu, iespējams, ka ar gadiem tomēr sanāks kaut kas jēdzīgs, ja vien:
1) konkrētais subjekts nezaudēs vēlēšanos kaut ko vispār darīt ārēju apstākļu (piem. riktīgas apdiršanas) rezultātā
2) konkrētais subjekts nezaudēs spēju kaut ko vispār darīt ārēju apstākļu (piem. sastapšanās ar kādu "piečakarētu" klientu aci-pret-aci) rezultātā
3) nāks kāds radījums ar spējām, līdzīgām kā dieviem, un izlabos nepilnības konkrētā subjekta raksturā, tādas kā: tieksmi izcelties par katru cenu, vēlmi iedzīvoties, neuzmanību, un, galu galā, to būtisko procentu stulbuma, kuru uzrāda konkrētais subjekts.

#17 bubu @ 2005.08.21 01:22

Ei tu nost, Jancis, labi ka ko tādu uzgāji.
Un es bij iedomājies, ka taigers kaut drusku nācis pie prāta. Nu šito man nesaprast, kur tādi tīģerēni rodas!

#18 @ 2005.08.21 01:33

Manuprat tas ir pozitivi ka vismaz kadam nebija slinkums to uzrakstit latviesu mele

[ SonyEricssonT610/R601 Profile/MIDP-1.0 Configuration/CLDC-1.0 ]

#19 bubu @ 2005.08.21 01:44

Tad tā arī vajadzēja norādīt, ka tas ir tulkots no tādas un tādas vietas, kā arī norādīt oriģināllapu. Citādi pēc kā gan cita tas izskatās, kā pēc plaģiātisma (tb sveša darba uzdošanu par savu).

#20 e.T. @ 2005.08.21 09:12

Tiigeren, labak tu izstastitu kaa tu noshaareeji taas hosteetas web lapas dc++ ;) To vismaz buutu interesanti palasiit. :)

#21 KAC @ 2005.08.21 11:28

omfg... Smiekliigi!

#22 senso @ 2005.08.21 22:54

:D oho! :D

ritigi nopietnais koods... :) par to vien jau liecina tas, ka tiek uz PHP parpumpetas visas unikalo IP rindinjas, nevis vnk` count(IP)...

total disrespect...

#23 Smike @ 2005.08.22 12:58

ārprāc !  šādas kvalitātes kods te tiek publicēts kā koda paraugs ?  tipisks script kiddie garadarbs, kas, kā izrādās ir arī plaģiāts

#24 Smike @ 2005.08.22 13:02

Vienlaicīgo lietotāju skaitu var noteikt precīzi pēc atvērto  sesiju skaita.  Un tam nav vajadzīga datubāze.  Ja šīs lapas administrāciju tas interesē, tad es uzrakstītu  Java/JSP piemēru

#25 sd900xx @ 2005.08.22 18:27


Apdirsēji varētu netērēt laiku rakstotr komentārus, bet pavadīt to lietderīgāk, kļūstot par vēl lielākiem ekspertiem tīmekļa aplikāciju izstrādes jomā.

Neesmu praktiski saskāries ar MySQL un PHP, un Apache, bet tomēr atļaušos izteikt dažas piezīmes.

Skripts ir labs priekš iesākuma, tiesa rezultāti var būt diezgan neprecīzi.

Man ir aizdomas, palabojiet mani, ja es kļūdos, ka sesiju skaitu un dazādu citu lietderīgu infu labs www serveris uztur pats, šādiem mērķiem nav jāuztur sava datu bāze.
Iepriekšējā komentāra autors izskatās, ka zin kā to izdarīt.

Es nezinu kas tas par mysql_num_rows, bet es ieteiktu pieturēties pie SQL sintakses cik vien tas ir iespējams, uzskatiet to par labo toni. Vienīgais attaisnojums - ja tas palīdz veiktspējai.

Kritika par echo vai print lietojumu pie nestandarta kļūdas paziņojuma izvades ir nepamatota, jo šis paziņojums tiek izvadīts ārkārtīgi  reti.

#26 rumpels @ 2005.08.24 09:15

Es redzu 0 (NULL vai ' ') čāpstinātājus lapā!

#27 pms @ 2005.10.26 12:49

Es iztieku bez MySQL, online skaitiiklja datus glabāju failā. Varbūt nav moderni, bet ērti un vnk.

#28 kaska @ 2005.11.02 10:56

varbuut kaads var iemest linku kur palasiities par koda optimizaaciju, kuras komandas straadaa fiksaak par citaam nu tipa tavo.