Próbowałem z tego coś zrobić ale nie dałem rady.
Wymyśliłem rozwiązanie takie:
Jeśli uzytkownik zaloguje się to zmieni rekord 'zalogowani' na 1, a jeśli niezalogowany to na 0. Pobierze cyfry wtedy i doda je. Oddzielny skrypt będzie obsługiwał automatyczne wylogowanie uzytkownika przez Cron-a.
W bazie mam taką tabelę:
CREATE TABLE IF NOT EXISTS `uzytkownicy` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`imie` varchar(20) NOT NULL,
`nazwisko` varchar(20) NOT NULL,
`login` varchar(20) NOT NULL,
`haslo` varchar(32) NOT NULL,
`email` varchar(70) NOT NULL,
`aktywny` tinyint(1) NOT NULL,
`zalogowany` tinyint(1) NOT NULL,
`admin` tinyint(1) NOT NULL DEFAULT '0',
`utworzone` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;
Do logowania uzywam takiej funkcji:
function zaloguj($login, $haslo){
include('config.php');
//nawiązanie połączenia z bazą danych
$baza = new PDO('mysql:host='.$host.';dbname='.$baza,$dbUzytkownik, $dbHaslo);
$baza -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$baza->query('set names utf8');
$sql = "select id, login, admin, imie, nazwisko from uzytkownicy where (login like :uzytkownik or email like :mail) and haslo like :haslo and aktywny = 1";
$logowanieStmt = $baza->prepare($sql);
$logowanieStmt -> bindValue(':uzytkownik', $login, PDO::PARAM_STR);
$logowanieStmt -> bindValue(':mail', $login, PDO::PARAM_STR);
$logowanieStmt -> bindValue(':haslo', md5($haslo), PDO
::PARAM_STR);
$logowanieStmt->execute();
$uzytkownik = $logowanieStmt->fetch();
if($logowanieStmt->rowCount() > 0){
$_SESSION['uzytkownik'] = $uzytkownik['login'];
$_SESSION['id'] = $uzytkownik['id'];
$_SESSION['imie'] = $uzytkownik['imie'];
$_SESSION['nazwisko'] = $uzytkownik['nazwisko'];
if($uzytkownik['admin']) $_SESSION['admin'] = 1;
return 'ok';
}
else{
//sprawdzenie czy uzytkownik aktywował swoje konto
$count = $baza->query('select aktywny from uzytkownicy where login like \''.$login.'\'');
if($count->rowCount() > 0){
$count = $count->fetchAll(PDO::FETCH_ASSOC);
if($count[0]['aktywny'] == 0) {
$_SESSION['bladLog'] = "Twoje konto nie jest jeszcze aktywne, aktywuj konto aby móc się zalogować";
return 'rejestracja';
}
else{
$_SESSION['bladLog'] = 'Nieprawidłowa nazwa użytkownika bądź hasło';
return 'err';
}
}
else {
$_SESSION['bladLog'] = 'Nieprawidłowa nazwa użytkownika bądź hasło';
return 'err';
}
}
}
Plik główny z logowaniem
<?php if(!isset($_SESSION['id'])) : ?>
// Panel logowania
<?php else: ?>
// Jeśli poprawnie zalogowany
<?php endif; ?>
Pomoże mi to ktoś napisać?