[MySQL][PHP] Jak sprawdzić czy istnieje podany użytkownik i jego hasło jest poprawne?

0x01 graphic

Chcesz sprawdzić, czy podany login i hasło odpowiadają użytkownikowi, który istnieje w bazie danychh.

0x01 graphic

Tworząc serwisy, gdzie wymagana jest autoryzacja, trzeba sprawdzić czy login i hasło użytkownika odpowiada informacjom zapisanym w bazie danych. Podczas logowania, skrypt musi sprawdzić, czy użytkownik istnieje i czy podane hasło zgadza się z zamieszczonym w bazie.

Napiszmy skrypt, który sprawdzi czy 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 konstrukcja tabeli w bazie danych o nazwie baza1 będzie następująca:

CREATE TABLE uzytkownicy (

login CHAR(30) NOT NULL PRIMARY KEY,

haslo CHAR(30) NOT NULL

);

Wystarczy nam tylko login i hasło, z tym, że pola nie mogą być puste (NOT NULL), a login powinien być polem unikalnym (zapewnia to PRIMARY KEY), aby nie było dwóch takich samych loginów w bazie.

Teraz zajmijmy się sprawdzeniem, czy podany login i hasło istnieją w tabeli...

<?

function autoryzacja($login, $haslo) {

$p=mysql_connect("localhost", "user", "password");

mysql_select_db("baza1",$p);

$wynik=mysql_query(

"SELECT * FROM uzytkownicy WHERE login='$login' AND haslo='$haslo'",$p);

if (mysql_num_rows($wynik)==1) {

mysql_close($p); return true;

} else {

mysql_close($p); return false;

}

}

$login="janek"; // pobrane z formularza na stronie

$haslo="12hygtr2"; // pobrane z formularza na stronie

if (autoryzacja($login,$haslo)) {

echo "autoryzacja przebiegła pomyślnie...";

// tutaj zawartość strony po autoryzacji

} else {

echo "login lub hasło podane błędnie...";

// tutaj strona, z prośbą 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 do niej login i hasło.

Funkcja łączy się z bazą danych i wykonuje zapytanie SQL, sprawdzając czy jest rekord zawierający podany login i hasło. Jeżeli tak, wtedy mysql_num_rows zwróci ilość pasujących rekordów, czyli liczbę 1 - bo tylko jeden rekord może mieć taki sam login i hasło.

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.