Witam,
Ostatnio pokusiłem się o napisanie klasy która tak jak na forum będzie wyświetlała Ostanią Akcję wykonaną przez użytkowników, oto kod:
<?
//+-----------------------------------------------------
//| lastAction v0.2
//+-----------------------------------------------------
//| Description: Klasa wyswietla ostatnie wykonane
//| akcje przez uzytkownikow w ciagu ostatnich x
//| minut.
//+-----------------------------------------------------
//| Instalacja
//+-----------------------------------------------------
//| CREATE TABLE `action` (
//| `sid` char(255) NOT NULL default '',
//| `action` char(255) default NULL,
//| `ip` char(255) default NULL,
//| `time` int(11) default NULL,
//| PRIMARY KEY (`sid`)
//| )
//| INSERT INTO `action` SET
//| `sid` = 'maxonline'
//+-----------------------------------------------------
//| author: strife <strifee(at)gmail(dot)com>
//+-----------------------------------------------------
class lastAction
{
var $activeTime;
function dbConnect( $host, $database, $user, $pass )
{
}
function execute( $action)
{
$this -> clearOld();
{
$uIp = $_SERVER['HTTP_X_FORWARDED_FOR'];
if (! $uIp)
{
$uIp = $_SERVER['REMOTE_ADDR'];
}
$q = mysql_query(\"SELECT * FROM action WHERE sid = '\" . $uSid . \"' \");
{
INTO action
SET sid = '\" . $uSid . \"',
ip = '\" . $uIp . \"',
time = \" . time() . \", action = '\" . $action . \"'
\");
}
else
{
SET ip = '\" . $uIp . \"',
time = \" . time() . \", action = '\" . $action . \"'
WHERE sid = '\" . $uSid . \"'
\");
}
}
}
function clearOld()
{
$p = time() - $this -> activeTime
;
FROM action
WHERE
time < \" . $p . \" AND sid <> 'maxonline'
\");
}
function online()
{
AS online
FROM action
WHERE sid <> 'maxonline'
\")
);
return $z['online'];
}
function maxonline()
{
FROM action
WHERE sid = 'maxonline'
\")
);
if ( $p )
{
$k = $this -> online();
if ( $k > $p['time'] )
{
SET
time = \" . $k . \", action = '\" . time() . \"'
WHERE sid = 'maxonline'
\");
FROM action
WHERE sid = 'maxonline'
\")
);
$result = array( $o['time'], (int
)$o['action'] );
return $this -> maxonline = $result;
}
else
{
FROM action
WHERE sid = 'maxonline'
\")
);
$result = array( $o['time'], (int
)$o['action'] );
return $this -> maxonline = $result;
}
}
}
function display()
{
FROM action
WHERE sid <> 'maxonline'
\");
{
$czas = date(\" H:i:s \", $resVar['time']); $data = date(\" d-m-Y \", $resVar['time']);
$res .= '<tr>
<td>' . $resVar['ip'] . '</td>
<td>' . $resVar['action'] . '</td>
<td>' . $czas . $data . '</td>
</tr>';
}
html, body{
margin: 0;
padding: 0;
font-family: Tahoma, Helvetica, sans-serif;
}
table td{
font-size: 11px;
background: #FAFAFA;
border: 1px solid black;
padding: 4px;
}
.head{
background: #EAEAEA;
font-weight: bold;
}
</style>
';
$str = '<table align=\"center\" cellpadding=\"0\" cellspacing=\"2\" width=600>
<tr>
<td class=\"head\">Adres IP</td>
<td class=\"head\">Co robi?</td>
<td class=\"head\">Czas</td>
</tr>
' . $res . '
</table>';
}
}
$z = new lastAction;
$z -> dbConnect( 'localhost', 'poligon', 'root', 'krasnal' );
$z -> activeTime = 30; // 30 sekund
$z -> execute( \"Cos tam robi na glownej stronie\" );
$z -> display();
?>
dbConnect - łączenie z bazą, host, baza, user i hasło.
activeTime - W sekundach podajemy użytkowników aktywnych przez ostatnie $x sekund.
execute - Tutaj ustawiamy jaka akcja została wykonana przez użytkownika, np. można to użyć w ten sposób:
<?php
switch ($_GET['action'])
{
case news:
$z -> execute('Oglada Newsy');
break;
case down:
$z -> execute('Oglada Download');
break;
default:
$z -> execute('Oglada glowna strone');
break;
}
?>
display - jest to przykładowa metoda obrazująca działanie skryptu.
online - zwraca ile jest użytkowników online na stronie.
maxonline - zwraca ile użytkowników było najwięcej na stronie.
Koniec. Chciałbym abyście, ocenili to i napisali co poprawić etc. Mam nadzieję że komuś sie to przyda. Pozdrawiam!
Aktualizacja 31.12.2005Poprawiłem trochę kod, dodałem metodę która pokazuje ile jest użytkowników online w ciągu ostatnich x sekund.
Jeśli ktoś będzie miał problem z przekopiowaniem kodu ze strony załączam też phps
http://dev.club.webhost.pl/source/lastAction.phpsAktualizacja 05.01.2006Cytat(http://blog.club.webhost.pl/lastaction-v02/)
Wprowadzone zostały dosyć istotne zmiany w stosunku do poprzedniej wersji, a mianowicie przy pustej sesji nie jest tworzony ani update'owany rekord.
Co więcej w klasie powstała nowa metoda, która pokazuje ile użytkowników najwięcej było online, pokazana jest data i liczba.
Efekty mojej pracy można zobaczyć
http://poligon.club.webhost.pl/lastAction/, natomiast nowe źródło nowej wersji skryptu można zobaczyć pod tym adresem:
http://dev.club.webhost.pl/source/lastAction-0-2.phpsPozdrawiam!