Witam wszystkich w moim pierwszym artykule, dziś tematyką będzie skrypt PHP w ,którym sprawdzimy czy użytkownicy w serwisie są online.
Po pierwsze tworzymy w bazie danych:
CREATE TABLE `uzytkownicy` (
`login` varchar(25) character set utf8 collate utf8_polish_ci NOT NULL,
`haslo` varchar(250) character set utf8 collate utf8_polish_ci NOT NULL,
`czas` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP COMMENT 'Czas aktualny',
`czas_last` timestamp NOT NULL default '0000-00-00 00:00:00'
)
I potem w naszej tabeli.
INSERT INTO `uzytkownicy` (`login`, `haslo`, `czas`, `czas_last`) VALUES
('test', 'test', '2011-01-29 14:42:34', '2011-01-29 14:47:25'),
('robek', 'robek', '2011-01-29 14:42:34', '2011-01-30 14:41:26'),
('t1', 't1', '2011-01-29 14:47:27', '0000-00-00 00:00:00'),
('t2', 't2', '2011-01-29 14:47:32', '0000-00-00 00:00:00');
Czas w bazie to aktualny czas zaktualizowany wtedy kiedy ktoś wejdzie na naszą stronę a
czas_last jest aktualizowany dla użytkownika jeżeli jest zalogowany !
I teraz dodajemy czas_last o np 5 minut jeżeli użytkownik odświeży stronę !
Wyjaśniam tą komendę, dodaje ona czas do aktualnego !
DATE_ADD(NOW(), INTERVAL '0#0#5#0' DAY_SECOND)
macie: dni#godziny#minuty#sekundy
Nasz skrypt wyświetli tylko użytkowników z ostatnich 5 minut , możecie to zmienić wpisując dowolną liczbę minut,sekund.
Na potrzeby przykładu dodałem logowanie:
test/test , robek/robek , t1/t1 , t2/t2
wystarczy zmienić datę w czas_last np o 6 minut i powinien on się pojawić jako zalogowany.
Jeżeli czegoś nie wiecie to piszcie w komentarzach.
Listing
session_start();
function lacz_bd()
// host| uzytkownik bazy | haslo | nazwa bazy
{ $db = new mysqli('localhost', 'root', '', 'online');
if (! $db)
return false;
$db->autocommit(TRUE);
return $db;
}
$db = lacz_bd();
// ------------------------
$czasaktualny = $db->query("UPDATE uzytkownicy SET czas=Now()");
$uzytkownicy_online = $db->query("Select login,czas,czas_last From uzytkownicy Where czas_last>czas");
$online = $uzytkownicy_online->num_rows;
// ------------------------
$login = addslashes($_POST['login']);
$haslo = addslashes($_POST['haslo']);
if (!empty($login) and !empty($haslo)) {
$logowanie = "Select login,haslo from uzytkownicy WHERE login='$login' and haslo='$haslo' ";
$wynik = $db->query($logowanie);
$ile_znalezionych = $wynik->num_rows;
if($ile_znalezionych==1){
$_SESSION['zalogowany'] = $login;
} // do 2 ifa
} // do 1 ifa
// ------------------------
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">
<head>
<meta http-equiv="Content-type" content="application/xhtml+xml; charset=utf-8" />
<title> Sprawdzanie użytkowników online ! </title>
</head>
<body>
<?php if (!isset($_SESSION['zalogowany'])) { ?>
<form action="" method="POST">
<table border="1" >
<tr>
<td>Login:</td>
<td><input type="text" id="login" name="login" /></td>
</tr>
<tr>
<td>Hasło:</td>
<td><input type="password" id="haslo" name="haslo" /></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="Submit" id="submit" value="Zaloguj" />
</td>
</tr>
</table>
<?php } else {
$login = addslashes($_SESSION['zalogowany']); // dni#godziny#minuty#sekundy
$czaslast = $db->query("UPDATE uzytkownicy SET czas_last=DATE_ADD(NOW(), INTERVAL '0#0#5#0' DAY_SECOND) WHERE login='$login'");
?>
<a href="?wyloguj">Wyloguj</a>
<?php }
if (isset($_GET['wyloguj'])) {
$_SESSION = array();
session_destroy();
echo '<META HTTP-EQUIV="Refresh" CONTENT="0;URL=index.php">';
}
?>
<?php echo '<br/>Statystki z ostatnich 5 minut.<br/>';
echo 'Użytkowników zalogowanych: '.$online.'<br/>';
while($ludki = $uzytkownicy_online->fetch_array()) {
echo $ludki['login'].',';
}
?>
</body>
</html>