[PHP] Jak sprawdzić w pliku tekstowym czy istnieje podany użytkownik i czy jego hasło jest poprawne?
Chcesz sprawdzić, czy podany login i hasło odpowiadają użytkownikowi, który istnieje zapisany w pliku tekstowym.
Tworząc serwisy, gdzie wymagana jest autoryzacja, a nie ma możliwości aby skorzystać z bazy danych, dobrym rozwiązaniem jest zapisanie użytkownika i jego hasła w pliku tekstowym. Podczas logowania, skrypt może sprawdzić, czy użytkownik istnieje i czy podane hasło zgadza się z zamieszczonym w pliku. Oczywiście sam plik musi być umieszczony w katalogu, do którego nikt nie powinien mieć dostępu przez strony WWW.
Napiszmy skrypt, który sprawdzi czy w pliku istnieje podany użytkownik i czy jego hasło jest poprawne. Jeżeli użytkownik istnieje i hasło jest poprawne, będziemy mogli dokonać autoryzacji i np. wpuścić użytkownika do serwisu.
Niech loginy i hasła będą zapisane w pliku tekstowym w następujący sposób:
janek|pskjuytdg76
michal|22h876dd
piotr|frhaslo23
itd...
Teraz zajmijmy się sprawdzeniem, czy podany login i hasło istnieją...
<?
function autoryzacja($login, $haslo) {
$plik= file("hasla.txt");
foreach($plik as $linijka) {
$dane = explode("|",$linijka);
if ((trim($login)==trim($dane[0]))and(trim($haslo)==trim($dane[1])))
return true;
}
return false;
}
$login="michal"; //pobrane z formularza na stronie
$haslo="22h876dd"; //pobrane z formularza na stronie
if (autoryzacja($login,$haslo)) {
echo "autoryzacja przebiegła pomyślnie...";
// tutaj zawartosc strony po autoryzacji
} else {
echo "login lub hasło podane błędnie...";
// tutaj strona, z prosba o ponowne zalogowanie
}
?>
Zmienne $login oraz $haslo przechowują wartości wpisane przez użytkownika i pobrane np. przez formularz na stronie. Mając te wartości wywołujemy funkcję autoryzacja() przekazując login i hasło.
Funkcja pobiera z pliku poszczególne linijki, rozbija je na pola oddzielone znakiem "|" i sprawdza, czy istnieje login i hasło o podanych parametrach. Jeżeli znajdzie w pliku podany login i hasło, zwraca wartość true (prawda), jeżeli nie znajdzie, zwraca wartość false (nieprawda). Funkcja trim() oczyszcza wyrazy z białych znaków (spacji i znaków końca linii).
Na podstawie tego, co zwróci funkcja autoryzacja(), można już w warunku if określić czy następiła autoryzacja i podany login oraz hasło istnieją. Jeżeli tak, wystarczy dołączyć lub wykonać dalszą część skryptu przeznaczoną dla użytkowników zalogowanych, jeżeli nie pozostaje poinformować o błędzie i np. zaproponować wypełnienie formularza ponownie lub skontaktowanie się z administratorem serwisu aby przydzielił hasło i login.
Dopisywanie loginów i haseł do pliku tekstowego też można zautomatyzować i wykonywać przy wypełnieniu jakiegoś formularza autoryzacyjnego. Jeżeli sprawdzanie hasła i loginu następuje na wielu stronach, a plik z hasłami jest duży (ponad 1000 linii), może się okazać, że taki sposób nie będzie wydajny.
Wtedy pozostaje skorzystanie z jakiejś bazy danych (MySQL, Postgres) lub pokombinowanie np. z cookies, które mogą mieć ustawianą odpowiednią wartość podczas pierwszej autoryzacji i wtedy dalsze szukanie w pliku z hasłami stanie się zbędne bo wystarczy sprawdzić zawartość cookies.