class UserManager {
function loginForm() {
?>
<form action="index.php" method="post">
<table>
<tr>
<td><label for="login">login:</label></td>
<td><input type="text" name="login" id="login"></td>
<td><label for="passwdInput">hasło:</label></td>
<td><input type="password" name="passwd" id="passwdInput"/></td>
<td><input type="submit" value="Zaloguj" name="zaloguj" /></td>
</tr>
</table>
</form>
<?php
}
function login($db) {
//funkcja sprawdza poprawność logowania
//wynik - id użytkownika zalogowanego lub -1
$args = [
'login' => FILTER_SANITIZE_MAGIC_QUOTES,
'passwd' => FILTER_SANITIZE_MAGIC_QUOTES
];
//przefiltruj dane z GET (lub z POST) zgodnie z ustawionymi w $args filtrami:
$dane = filter_input_array(INPUT_POST, $args);
//sprawdź czy użytkownik o loginie istnieje w tabeli users
//i czy podane hasło jest poprawne
$login = $dane["login"];
$passwd = $dane["passwd"];
$userId = $db->selectUser($login, $passwd, "users");
echo $userId;
if ($userId >= 0) { //Poprawne dane
session_start();
$date = new DateTime();
$current_date = $date->format('Y-m-d H:i:s');
$sqlDelete="delete from logged_in_users where userId=$userId";
$db->delete($sqlDelete);
$sqlInsert="insert into logged_in_users values('session_id()','$userId','$current_date')";
$db->insert($sqlInsert);
//rozpocznij sesję zalogowanego użytkownika
//usuń wszystkie wpisy historyczne dla użytkownika o $userId
//ustaw datę - format("Y-m-d H:i:s");
//pobierz id sesji i dodaj wpis do tabeli logged_in_users
}
return $userId;
}
function logout($db) {
//pobierz id bieżącej sesji (pamiętaj o session_start()
//usuń sesję (łącznie z ciasteczkiem sesyjnym)
//usuń wpis z id bieżącej sesji z tabeli logged_in_users
session_start();
$sessionId=session_id();
$_SESSION=array();
if (filter_input( INPUT_COOKIE,session_name() )) {
setcookie(session_name(), '', time() - 42000, '/');
}
session_destroy();
$sqlDelete="delete from logged_in_users where sessionId=$sessionId";
$db->delete($sqlDelete);
}
function getLoggedInUser($db, $sessionId) {
//wynik $userId - znaleziono wpis z id sesji w tabeli logged_in_users
//wynik -1 - nie ma wpisu dla tego id sesji w tabeli logged_in_users
$sqlExist="select count(*) from logged_in_users where session_id=$sessionId";
if(($db->exist($sqlExist))>0)
{
return 1;
}
return -1;
}
}
class baza {
private $mysqli;//uchwyt do BD
function __construct($serwer,$user,$pass,$baza) {
$this->mysqli = new mysqli($serwer,$user,$pass,$baza);
/*sprawdź połączenie*/
if($this->mysqli->connect_errno){
printf("Nie udało się połączenie z serwerem:%s\n,",
$this->mysqli->connect_error); exit();
}
/*zmień kodowanie na utf8 */
if($this->mysqli->set_charset("utf8")){
//udało się zmienić kodowanie
}
}//koniec funkcji konstruktora
function __destruct() {
$this->mysqli->close();
}
public function select($sql, $pola) {
//parametr $sql – łańcuch zapytania select
//parametr $pola - tablica z nazwami pol w bazie
//Wynik funkcji – kod HTML tabeli z rekordami (String)
$tresc = "";
if ($result = $this->mysqli->query($sql)) {
$ilepol = count($pola); //ile pól
$ile = $result->num_rows; //ile wierszy
// pętla po wyniku zapytania $results
$tresc.="<table><tbody>";
while ($row = $result->fetch_object()) {
$tresc.="<tr>";
for ($i = 0; $i < $ilepol; $i++) {
$p = $pola[$i];
$tresc.="<td>" . $row->$p . "</td>";
}
$tresc.="</tr>";
}
$tresc.="</table></tbody>";
$result->close(); /* zwolnij pamięć */
}
return $tresc;
}
public function insert($sql) {
// pobrać dane z formularza i utworzyć zapytanie
if ($this->mysqli->query($sql)) {
return true;
} else
return false;
}
public function delete($sql) {
if ($this->mysqli->query($sql)) {
return true;
} else
return false;
}
public function exist($sql) {
if ($this->mysqli->query($sql)) {
return true;
} else
return false;
}
public function selectUser($login, $passwd, $tabela) {
//parametry $login, $passwd , $tabela – nazwa tabeli z użytkownikami
//wynik – id użytkownika lub -1 jeśli dane logowania nie są poprawne
$id = -1;//gdy brak takiego uzytkownika
$sql = "SELECT * FROM $tabela WHERE userName='$login'";
if ($result = $this->mysqli->query($sql)) {
$ile = $result->num_rows;
if ($ile == 1) {
$row = $result->fetch_object(); //pobierz rekord z użytkownikiem
$hash = $row->passwd; //pobierz zahaszowane hasło użytkownika
//sprawdź czy pobrane hasło pasuje do tego z tabeli bazy danych:
if (password_verify($passwd, $hash))
$id = $row->id; //jeśli hasła się zgadzają - pobierz id użytkownika
else{
$id=0;//jeśli jest użytkownik ale błędne hasło
}
}
}
return $id; //id zalogowanego użytkownika(>0) lub -1
}
} //koniec klasy Baza
?>