[MySQL][PHP] Jak sprawdzić czy istnieje podany użytkownik i jego hasło jest poprawne?
Chcesz sprawdzić, czy podany login i hasło odpowiadają użytkownikowi, który istnieje w bazie danychh.
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.