Tworzymy niesamowicie prosty system rejestracji w PHP i MySQL. Budowanie niezwykle prostego systemu rejestracji PHP i MySQL Niepłatna rejestracja użytkownika php indeksu

Tworzymy niesamowicie prosty system rejestracji w PHP i MySQL. Budowanie niezwykle prostego systemu rejestracji PHP i MySQL Niepłatna rejestracja użytkownika php indeksu

21.11.2021

Jeśli chcesz udostępnić jedną z sekcji swojej witryny ograniczonemu, ale nieokreślonemu kręgowi osób, najłatwiej to zrobić, rejestrując i autoryzując użytkowników. Istnieje wiele sposobów uwierzytelniania użytkowników. Można używać zarówno narzędzi serwera WWW, jak i narzędzi języka programowania. Porozmawiamy o przypadku, w którym używane są sesje PHP.

Zapewne chciałbyś zobaczyć bardziej nowoczesny sposób tworzenia takiego kształtu. Wciąż mam kompletną, nowoczesną i aktualną prezentację, ale widać, że formularz opinii można zbudować przy użyciu technik obiektowych w PHP.

Najpierw omówmy wszystkie kroki, które podejmiemy dalej. Czego w ogóle potrzebujemy? Potrzebujemy skryptu, który zarejestruje użytkownika, autoryzuje użytkownika, przekieruje go gdzieś po autoryzacji. Będziemy też musieli stworzyć stronę, która będzie chroniona przed dostępem nieautoryzowanych użytkowników. W celu rejestracji i autoryzacji będziemy musieli utworzyć formularze HTML. Będziemy przechowywać informacje o zarejestrowanych użytkownikach w bazie danych. Oznacza to, że nadal potrzebujemy skryptu do połączenia z DBMS. Cała nasza praca będzie wykonywana przez funkcje, które sami napiszemy. Funkcje te zapiszemy w osobnym pliku.

Potrzebujemy więc następujących plików:

  • połączenie z DBMS;
  • funkcje niestandardowe;
  • upoważnienie;
  • rejestracja;
  • strona chroniona;
  • skrypt zamykający użytkownika;
  • skrypt sprawdzający status autoryzacji użytkownika;
  • arkusz stylów dla najprostszego projektu naszych stron.

Wszystko to byłoby bezcelowe, jeśli nie masz odpowiedniej tabeli w swojej bazie danych. Uruchom swoje narzędzie do zarządzania DBMS (PhpMyAdmin lub wiersz poleceń, w zależności od tego, co jest wygodniejsze) i uruchom w nim następujące zapytanie:

CREATE TABLE `users` (`id` int (11) NOT NULL AUTO_INCREMENT, `login` char (16) NOT NULL,` password` char (40) NOT NULL, `reg_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (` id`)) ENGINE = MyISAM DOMYŚLNY ZESTAW ZNAKÓW = utf8 AUTO_INCREMENT = 1;

Nazwę nasze pliki skryptów w ten sposób (wszystkie będą w tym samym katalogu):

  • baza danych.php;
  • funkcje.php;
  • login.php;
  • rejestracja.php;
  • index.php;
  • wyloguj.php;
  • checkAuth.php;
  • styl.css.

Jestem pewien, że cel każdego z nich jest dla ciebie jasny. Zacznijmy od skryptu połączenia DBMS. Widziałeś to wcześniej. Po prostu zapisz kod tego skryptu w pliku o nazwie database.php. Funkcje niestandardowe zadeklarujemy w pliku functions.php. Jak to wszystko będzie działać? Nieautoryzowany użytkownik próbuje uzyskać dostęp do chronionego dokumentu index.php, system sprawdza, czy użytkownik jest autoryzowany, jeśli użytkownik nie jest autoryzowany, zostaje przekierowany na stronę autoryzacji. Na stronie autoryzacji użytkownik powinien zobaczyć formularz autoryzacji. Zróbmy to.

Autoryzacja użytkownika

Zarejestruj się.

Teraz musimy nadać naszemu kształtowi określony wygląd. Jednocześnie określimy zasady dla pozostałych elementów. Mam zamiar przekazać Ci pełną zawartość arkusza stylów, wyprzedzając samego siebie.

/ * plik style.css * / .row (margin-bottom: 10px; width: 220px;) .row label (display: block; font-weight: bold;) .row input.text (font-size: 1.2em; padding: 2px 5px;) .to_reg (rozmiar czcionki: 0.9em;).instrukcja (rozmiar czcionki: 0.8em; kolor: #aaaaaa; margines lewy: 2px; kursor: domyślnie;) .error (kolor: czerwony; margines lewy: 3px;)

Jeśli wszystko jest zrobione poprawnie, powinieneś mieć w swojej przeglądarce:

Oczywiście nie mamy jeszcze jednego zarejestrowanego użytkownika, a żeby się zalogować, musisz się zarejestrować. Zróbmy formularz rejestracyjny.

Rejestracja Użytkownika

" />

Zapewne zauważyłeś, że w kodzie HTML znajdują się zmienne PHP. Są to zawartość atrybutów pól tekstowych w formularzach, zawartość kontenerów do wyświetlania błędów. Ale nie zainicjalizowaliśmy tych zmiennych. Zróbmy to.

Rejestracja Użytkownika

" />
Nazwa użytkownika może zawierać tylko znaki łacińskie, cyfry, symbole „_”, „-”, „.”. Długość nazwy użytkownika musi wynosić co najmniej 4 znaki i nie więcej niż 16 znaków
W haśle można używać tylko znaków łacińskich, cyfr, symboli „_”, „!”, „(”, „)”. Hasło musi mieć co najmniej 6 znaków i nie dłuższe niż 16 znaków
Powtórz poprzednio wprowadzone hasło

Nie ma określonego parametru w atrybucie działania znacznika formularza. W takim przypadku po przesłaniu danych formularza zostaną one przetworzone w tym samym skrypcie, z którego zostały przesłane. Więc musimy napisać kod, który przetwarza dane formularza. Ale najpierw omówmy algorytm ich przetwarzania.

Pola loginu i hasła muszą być niepuste. Następnie musisz sprawdzić login pod kątem zgodności z wymaganiami. Hasło musi również spełniać opisane wymagania, a powtórzone hasło musi mu odpowiadać, a ponadto muszą być identyczne. Jeżeli którykolwiek z tych warunków nie jest spełniony, należy przerwać przetwarzanie danych formularza, w tablicy komunikatów o błędach wpisać odpowiednie powiadomienie i wyświetlić je użytkownikowi. Dla wygody użytkownika zapiszemy wpisany przez niego login (o ile go wskazał), wpisując jego wartość do tablicy $fields.

Jeśli wszystko jest w porządku, w oknie przeglądarki, odwołując się do dokumentu registration.php, powinieneś zobaczyć coś takiego:

Załóżmy teraz, że użytkownik klika przycisk rejestracji bez wypełniania pól formularza. Według naszego algorytmu login i hasło nie mogą być puste. Jeśli ten warunek nie jest spełniony, rejestracja nie jest możliwa. Pamiętajmy, że przetwarzanie danych formularza odbywa się w aktualnym skrypcie. Oznacza to, że musimy zmienić jego kod, dodając odpowiednie sprawdzenia. Niezwłocznie określimy następujące kontrole. W przypadku wprowadzenia loginu i hasła należy sprawdzić ich zgodność z określonymi wymaganiami. Aby sprawdzić login i hasło, utworzymy niestandardowe funkcje w pliku functions.php.

/ ** * functions.php * Plik z niestandardowymi funkcjami * / // Dołącz plik z parametrami do połączenia z DBMS require_once ("database.php"); // Sprawdzenie funkcji nazwy użytkownika checkLogin ($ str) (// Zainicjuj zmienną z możliwym komunikatem o błędzie $ error = ""; // Jeśli nie ma ciągu logowania, zwróć komunikat o błędzie if (! $ Str) ($ error = " Nie wpisałeś nazwy użytkownika "; zwróć błąd $ ;) / ** * Sprawdź nazwę użytkownika za pomocą wyrażeń regularnych * Login musi mieć co najmniej 4, nie dłuższy niż 16 znaków * Musi zawierać znaki łacińskie, cyfry, * może być znakami "_", "-", "." * / $ wzorzec = "/^ [-_.az\d ](4,16)$/i"; $ wynik = preg_match ($ wzorzec, $ str) ; // Jeśli sprawdzenie się nie powiedzie, zwróć komunikat o błędzie if (! $ Wynik) ($ error = "Nieprawidłowe znaki w nazwie użytkownika lub nazwa użytkownika jest za krótka (długa)"; zwróć $ error;) // Jeśli wszystko jest w porządku , return true return true;) // Sprawdź funkcję hasła użytkownika checkPassword ($ str) (// Zainicjuj zmienną z możliwym komunikatem o błędzie $ error = ""; // Jeśli nie ma pojawi się napis z loginem, zwróć komunikat o błędzie if (! $ str) ($ error = "Nie wpisałeś hasła"; zwróć błąd $; ) / ** * Sprawdź hasło użytkownika za pomocą wyrażeń regularnych * Hasło nie może być krótsze niż 6, nie dłuższe niż 16 znaków * Musi zawierać znaki łacińskie, cyfry, * może zawierać znaki "_", "!", " ( ",") "* / $ wzorzec =" /^ [_!)(.az\d *(6,16)$/i "; $ wynik = preg_match ($ wzorzec, $ str); // Jeśli sprawdzenie nie powiodło się, zwróć komunikat o błędzie if (! $ wynik) ($ error = "Nieprawidłowe znaki w haśle użytkownika lub hasło jest za krótkie (długie)"; return $ error;) // Jeśli wszystko jest w porządku, zwróć true return true ; )

Teraz musimy zmodyfikować plik registration.php, aby korzystał z zadeklarowanych przez nas funkcji. Dodamy warunek do skryptu, aby sprawdzić, czy przycisk rejestracji jest kliknięty. W tym warunku rozpoczyna się sprawdzanie loginu i haseł. Jeśli którakolwiek z kontroli się nie powiedzie, ponownie renderujemy formularz i wyświetlamy komunikat o błędzie. Jeśli nie ma błędów, rejestrujemy użytkownika, nie wyświetlamy już formularza rejestracyjnego, informujemy użytkownika o udanej rejestracji, a korzystając z funkcji nagłówka () przekierowujemy go do formularza autoryzacji.

Pomyślnie zarejestrowałeś się w systemie. Zostaniesz teraz przekierowany na stronę logowania. Jeśli tak się nie stało, przejdź do niego za pomocą bezpośredniego linku.

"; header (" Odśwież: 5; URL = login.php ");) // W przeciwnym razie poinformuj użytkownika o błędzie else ($ błędy [" full_error "] = $ reg;)))?> Rejestracja Użytkownika
" />
Nazwa użytkownika może zawierać tylko znaki łacińskie, cyfry, symbole „_”, „-”, „.”. Długość nazwy użytkownika musi wynosić co najmniej 4 znaki i nie więcej niż 16 znaków
W haśle można używać tylko znaków łacińskich, cyfr, symboli „_”, „!”, „(”, „)”. Hasło musi mieć co najmniej 6 znaków i nie dłuższe niż 16 znaków
Powtórz poprzednio wprowadzone hasło

Powinieneś zauważyć kolejną nową funkcję w skrypcie - rejestrację (). I jeszcze tego nie ogłosiliśmy. Zróbmy to.

// Rejestracja funkcji rejestracji użytkownika ($ login, $ hasło) (// Zainicjuj zmienną z możliwym komunikatem o błędzie $ error = ""; // Jeśli nie ma ciągu logowania, zwróć komunikat o błędzie if (! $ Login) ($ error = "Nie określono logowania"; zwróć błąd $;) elseif (! $ hasło) ($ error = "Nie określono hasła"; return $ error;) // Sprawdź, czy użytkownik jest już zarejestrowany // Połącz się z DBMS connect() ; // Napisz zapytanie $ sql = "SELECT` id` FROM `users` WHERE` login` = "". $ Login. "" "; // Wykonaj zapytanie do bazy danych $ query = mysql_query ($ sql) lub die ( ""); // Sprawdź liczbę użytkowników z tym loginem, jeśli jest przynajmniej jeden, // zwróć komunikat o błędzie if (mysql_num_rows ($ query)> 0) ($ error = "Użytkownik o podanym loginie jest już zarejestrowany"; zwróć błąd $;) // Jeśli nie ma takiego użytkownika, zarejestruj go // Napisz zapytanie $ sql = "INSERT INTO` users` (`id`,` login `, `hasło`) WARTOŚCI (NULL," ". $ login." "," ". $ hasło. "") "; // Wykonaj zapytanie do bazy danych $ query = mysql_query ($ sql) lub die ("

Nie można dodać użytkownika: ". Mysql_error ().". Wystąpił błąd w wierszu „. __LINE__.”

"); // Nie zapomnij odłączyć się od DBMS mysql_close (); // Zwróć wartość true, wskazującą na pomyślną rejestrację użytkownika, return true;)

Jeśli wszystko jest w porządku, Twój użytkownik zostanie zarejestrowany. Możesz przetestować formularz. Spróbuj zarejestrować użytkowników z tymi samymi loginami. Po udanej rejestracji użytkownik zostanie przekierowany do formularza autoryzacji. Wcześniej po prostu utworzyliśmy znacznik, aby wyświetlić ten formularz. Ponieważ w jego atrybucie action nie ma określonego parametru, dane przesłane przez formularz będą przetwarzane w tym samym skrypcie. Musimy więc napisać kod do przetworzenia i dodać go do dokumentu login.php.

Autoryzacja użytkownika

;">

Jeśli nie jesteś zarejestrowany w systemie, zarejestruj się.

Zapewne zauważyłeś, że w skrypcie autoryzacji mamy inną nieznaną nam funkcję - autoryzację (). Funkcja ta powinna autoryzować użytkownika po sprawdzeniu, czy w bazie danych jest zarejestrowany użytkownik o tej samej nazwie użytkownika i haśle. Jeśli taki użytkownik nie zostanie znaleziony, autoryzacja zostanie przerwana, a na ekranie pojawi się komunikat o niepowodzeniu. Jeśli sprawdzenie się powiedzie, funkcja autoryzacji () uruchomi sesję i zapisze do niej wartości nazwy użytkownika i hasła, poinformuje skrypt o powodzeniu autoryzacji, a skrypt przekieruje użytkownika na stronę chronionego zasobu.

/ ** * Funkcja autoryzacji użytkownika. * Autoryzacja użytkowników u nas zostanie przeprowadzona * przy użyciu sesji PHP. * / autoryzacja funkcji ($ login, $ hasło) (// Zainicjuj zmienną z możliwym komunikatem o błędzie $ error = ""; // Jeśli nie ma linii logowania, zwróć komunikat o błędzie if (! $ login) ($ error = " Nie określono logowania "; zwróć $ błąd;) elseif (! $ Hasło) ($ błąd =" Nie określono hasła "; zwróć $ błąd;) // Sprawdź, czy użytkownik jest już zarejestrowany // Połącz z DBMS connect ( // Musimy sprawdzić, czy wśród zarejestrowanych jest taki użytkownik // Ułożenie zapytania $ sql = "SELECT` id` FROM `users` WHERE` login` = "". $ Login. "" AND `password` =" ". $ Hasło . "" "; // Wykonaj zapytanie $ query = mysql_query ($ sql) lub die ("

Nie można wykonać zapytania: ". Mysql_error ().". Wystąpił błąd w wierszu „. __LINE__.”

"); // Jeśli nie ma użytkownika z takimi danymi, zwróć komunikat o błędzie if (mysql_num_rows ($ zapytanie) == 0) ($ error =" Użytkownik z określonymi danymi nie jest zarejestrowany "; return $ error;) // Jeśli użytkownik istnieje , uruchom sesję session_start ();// I wpisz w nim nazwę użytkownika i hasło // W tym celu używamy tablicy superglobalnej $ _SESSION $ _SESSION ["login"] = $ login; $ _SESSION [" password"] = $ hasło; // Nie zapomnij zamknąć połączenia z bazą danych mysql_close (); // Zwróć true w przypadku komunikatu o pomyślnej autoryzacji użytkownika, return true;)

Gdy użytkownik wchodzi na chronioną stronę, należy sprawdzić poprawność jego danych autoryzacyjnych. Do tego potrzebujemy jeszcze jednej niestandardowej funkcji. Nazwijmy to checkAuth (). Jego zadaniem będzie porównanie danych autoryzacyjnych użytkownika z tymi, które znajdują się w naszej bazie danych. Jeśli dane się nie zgadzają, użytkownik zostanie przekierowany na stronę autoryzacji.

Funkcja checkAuth ($ login, $ hasło) (// Jeśli nie ma nazwy użytkownika lub hasła, zwróć false if (! $ Login ||! $ Password) return false; // Sprawdź, czy taki użytkownik jest zarejestrowany // Połącz się z DBMS connect (); // Utwórz ciąg zapytania $ sql = "SELECT` id` FROM `users` WHERE` login` = "". $ Login. "" AND `password` =" ". $ Password." "" ; // Wykonaj zapytanie $ query = mysql_query ($ sql) lub die ("

Nie można wykonać zapytania: ". Mysql_error ().". Wystąpił błąd w wierszu „. __LINE__.”

"); // Jeśli nie ma użytkownika z takimi danymi, zwróć false; if (mysql_num_rows ($ zapytanie) == 0) (return false;) // Nie zapomnij zamknąć połączenia z bazą danych mysql_close (); // Inaczej , zwróć prawdę, zwróć prawdę;)

Teraz, gdy użytkownik znajduje się na bezpiecznej stronie, musimy wywołać funkcję sprawdzania poprawności danych autoryzacyjnych. Skrypt call i check umieścimy w osobnym pliku checkAuth.php i połączymy go ze stronami, które zostaną zamknięte dla publicznego dostępu.

/ ** * Skrypt do sprawdzania autoryzacji użytkowników * / // Rozpocznij sesję, z której wydobędziemy login i hasło // zalogowanych użytkowników session_start (); // Dołącz plik z funkcjami niestandardowymi require_once ("functions.php"); / ** * Aby określić, czy użytkownik jest zalogowany, musimy * sprawdzić, czy w bazie danych znajdują się wpisy dotyczące jego loginu * i hasła. W tym celu wykorzystamy funkcję niestandardową * do sprawdzenia poprawności danych zalogowanego użytkownika. * Jeśli ta funkcja zwraca wartość false, oznacza to brak autoryzacji. * W przypadku braku autoryzacji po prostu przekierowujemy * użytkownika na stronę autoryzacji. * / // Jeśli sesja zawiera zarówno dane logowania, jak i hasła, // sprawdź je, // jeśli (isset ($ _ SESSION ["login"]) && $ _SESSION ["login"] && isset ($ _ SESSION ["hasło" ] ) && $ _SESSION ["hasło"]) (// Jeśli walidacja istniejących danych nie powiedzie się if (! CheckAuth ($ _ SESSION ["login"], $ _SESSION ["hasło"])) (// Przekieruj użytkownika do nagłówek strony autoryzacji ("location: login.php"); // zatrzymanie wykonania skryptu exit;)) // jeśli nie ma danych o loginie lub haśle użytkownika, // uważamy, że nie ma autoryzacji, przekieruj użytkownik // do strony autoryzacji else ( nagłówek ("location: login.php"); // Przerwij wyjście ze skryptu;)

Teraz utwórzmy kod dla naszej bezpiecznej strony. To będzie całkiem proste.

Autoryzacja i rejestracja użytkownika

Udana autoryzacja.

Masz dostęp do bezpiecznej strony. Możesz wylogować się z systemu.

Jak widać, w chronionym dokumencie umieszczamy tylko jeden plik - checkAuth.php. Wszystkie inne pliki są zawarte w innych skryptach. Dlatego nasz kod nie wygląda na kłopotliwe. Zorganizowaliśmy rejestrację i autoryzację użytkowników. Teraz musisz zezwolić użytkownikom na wylogowanie. W tym celu stworzymy skrypt w pliku logout.php.

/ ** * Skrypt wylogowania użytkownika. Ponieważ użytkownicy są * autoryzowani poprzez sesje, ich login i hasło są przechowywane * w tablicy $_SESSION supergloban. Aby wylogować się z systemu wystarczy zniszczyć wartości * tablicy $ _SESSION ["login"] i $ _SESSION ["hasło"], po czym * przekierowujemy użytkownika na stronę autoryzacji * / // Bądź pewny aby rozpocząć sesję session_start (); unset ($_SESSION ["login"]); unset ($_SESSION ["hasło"]); nagłówek ("lokalizacja: login.php");

Skrypt do rejestracji, autoryzacji i weryfikacji użytkowników jest gotowy. Możesz go używać w domu, uzupełniać, zmieniać według własnych potrzeb. Jeśli masz jakieś pytania, możesz je zadać w komentarzach. Wszystkie wymienione tutaj pliki możesz pobrać samodzielnie, spakowane do jednego archiwum.

PS Zdaję sobie sprawę, że lepiej pisać kod obiektowy, wiem, że nie warto przekazywać i przechowywać hasła w postaci zwykłego tekstu, że informacje wprowadzone do bazy należy wcześniej sprawdzić. Ja wiem. Nie będę o tym tutaj mówić.

Cześć! Teraz postaramy się zaimplementować najprostszą rejestrację w serwisie za pomocą PHP + MySQL. Aby to zrobić, na komputerze musi być zainstalowany Apache. Zasadę naszego skryptu przedstawiamy poniżej.

1. Zacznijmy od stworzenia tabliczki użytkowników w bazie danych... Będzie zawierać dane użytkownika (login i hasło). Przejdźmy do phpmyadmina (jeśli tworzysz bazę na swoim komputerze) http://localhost/phpmyadmin/). Utwórz stół użytkownicy, będzie miał 3 pola.

Tworzę go w bazie mysql, możesz utworzyć w innej bazie. Następnie ustaw wartości, jak na obrazku:

2. Wymagane jest połączenie z tą tabelą. Stwórzmy plik bd.php... Jego zawartość:

$db = mysql_connect ("Twój serwer MySQL", "zaloguj się do tego serwera", "hasło do tego serwera");
mysql_select_db ("nazwa bazy danych, z którą się łączymy", $db);
?>

W moim przypadku wygląda to tak:

$db = mysql_connect ("localhost", "user", "1234");
mysql_select_db („mysql”, $db);
?>

Ratujemy bd.php.
W porządku! W bazie danych mamy tabelę, połączenie z nią. Teraz możesz zacząć tworzyć stronę, na której użytkownicy będą zostawiać swoje dane.

3. Utwórz plik reg.php z zawartością (wszystkie komentarze w środku):



rejestracja


rejestracja
















4. Utwórz plik, który wprowadzi dane do bazy i zapisze użytkownika. save_user.php(komentarze w środku):



{
}
// jeśli jest wpisany login i hasło, to przetwarzamy je tak, aby nie działały tagi i skrypty, nigdy nie wiadomo, co ludzie mogą wpisać


// usuń dodatkowe spacje
$ login = przycinanie ($ login);
$ hasło = przyciąć ($ hasło);
// połącz się z bazą danych
// sprawdź, czy istnieje użytkownik o tym samym loginie
$ wynik = mysql_query ("SELECT id FROM users WHERE login =" $ login "", $ db);
if (! pusty ($ myrow ["id"])) (
exit („Przepraszamy, wprowadzona nazwa użytkownika jest już zarejestrowana. Proszę podać inną nazwę użytkownika.”);
}
// jeśli nie, to zapisz dane
$ wynik2 = mysql_query („WSTAW UŻYTKOWNIKÓW (login, hasło) WARTOŚCI („$ login ”, „$ hasło”))”);
// Sprawdź, czy są jakieś błędy
if ($ wynik2 == "PRAWDA")
{
echo "Zarejestrowałeś się pomyślnie! Możesz teraz wejść na stronę. Strona główna";
}
w przeciwnym razie (
echo "Błąd! Nie jesteś zarejestrowany.";
}
?>

5. Teraz nasi użytkownicy mogą się zarejestrować! Następnie musisz zrobić „drzwi”, aby wejść na stronę dla już zarejestrowanych użytkowników. index.php(komentarze w środku):

// cała procedura działa na sesjach. To w nim przechowywane są dane użytkownika podczas jego pobytu w serwisie. Bardzo ważne jest, aby uruchomić je na samym początku strony !!!
start_sesji ();
?>


Strona główna


Strona główna











Zarejestruj się teraz



// Sprawdź, czy zmienne login i identyfikator użytkownika są puste
if (pusty ($ _ SESSION ["login"]) lub pusty ($ _ SESSION ["id"]))
{
// Jeśli jest pusty, nie wyświetlamy linku
echo "Jesteś zalogowany jako gość
Ten link jest dostępny tylko dla zarejestrowanych użytkowników ”;
}
w przeciwnym razie
{

W pliku index.php wyświetlimy link, który będzie otwarty tylko dla zarejestrowanych użytkowników. O to właśnie chodzi w skrypcie - ograniczenie dostępu do jakichkolwiek danych.

6. Istnieje plik z weryfikacją wprowadzonej nazwy użytkownika i hasła. testreg.php (komentarze w środku):

session_start ();// cała procedura działa na sesjach. To w nim przechowywane są dane użytkownika podczas jego pobytu w serwisie. Bardzo ważne jest, aby uruchomić je na samym początku strony !!!
if (isset ($ _ POST ["login"])) ($ login = $ _POST ["login"]; if ($ login == "") (unset ($ login);)) // wprowadź wprowadzony login przez użytkownika do zmiennej $ login, jeśli jest pusta, to niszczymy zmienną
if (isset ($ _ POST ["hasło"])) ($ hasło = $ _ POST ["hasło"]; if ($ hasło == "") (unset ($ hasło);))
// wstaw hasło wprowadzone przez użytkownika do zmiennej $ password, jeśli jest puste, zniszcz zmienną
if (pusty ($login) lub pusty ($hasło)) // jeśli użytkownik nie podał loginu lub hasła to wystawiamy błąd i zatrzymujemy skrypt
{
exit („Nie wpisałeś wszystkich informacji, wróć i wypełnij wszystkie pola!”);
}
// jeśli jest wpisany login i hasło, to przetwarzamy je tak, aby nie działały tagi i skrypty, nigdy nie wiadomo, co ludzie mogą wpisać
$ login = stripslashes ($ login);
$ login = htmlspecialchars ($ login);
$ hasło = paski ukośne (hasło $);
$ hasło = htmlspecialchars ($ hasło);
// usuń dodatkowe spacje
$ login = przycinanie ($ login);
$ hasło = przyciąć ($ hasło);
// połącz się z bazą danych
include ("bd.php"); // plik bd.php musi znajdować się w tym samym folderze co wszyscy inni, jeśli nie, po prostu zmień ścieżkę

$ wynik = mysql_query ("SELECT * FROM users WHERE login =" $ login "", $ db); // pobranie z bazy danych wszystkich danych o użytkowniku z podanym loginem
$ myrow = mysql_fetch_array ($ wynik);
if (puste ($ myrow ["haslo"]))
{
// jeśli użytkownik z podanym loginem nie istnieje
}
w przeciwnym razie (
// jeśli istnieje, sprawdź hasła
if ($ myrow ["hasło"] == $ hasło) (
// jeśli hasła są zgodne, rozpoczynamy sesję dla użytkownika! Możesz mu pogratulować, wszedł!
$ _SESSION ["zaloguj"] = $ myrow ["zaloguj"];
$ _SESSION ["id"] = $ myrow ["id"]; // te dane są bardzo często używane, więc zalogowany użytkownik "nosi ze sobą"
echo "Pomyślnie wszedłeś na stronę! Strona główna";
}
w przeciwnym razie (
// jeśli hasła się nie zgadzają

Wyjdź („Przepraszamy, wprowadzony login lub hasło jest nieprawidłowe.”);
}
}
?>

Więc to wszystko! Lekcja może być nudna, ale bardzo przydatna. Tutaj pokazana jest tylko idea rejestracji, potem można ją ulepszyć: dodać ochronę, projekt, pola danych, wgrać awatary, wylogować się z konta (w tym celu wystarczy zniszczyć zmienne z sesji funkcją nieoprawny) itp. Powodzenia!

Sprawdziłem wszystko, działa poprawnie!

Proces tworzenia systemu rejestracji to sporo pracy. Musisz napisać kod, aby dwukrotnie sprawdzić poprawność adresów e-mail, wysłać e-maile potwierdzające, zaoferować możliwość odzyskiwania haseł, przechowywać hasła w bezpiecznym miejscu, sprawdzać poprawność formularzy wejściowych i wiele więcej. Nawet jeśli to wszystko zrobisz, użytkownicy będą niechętni do rejestracji, ponieważ nawet najmniejsza rejestracja wymaga ich aktywności.

W dzisiejszym samouczku opracujemy prosty system rejestracji, który nie będzie wymagał używania żadnych haseł! W efekcie otrzymamy system, który można łatwo zmodyfikować lub zintegrować z istniejącą stroną PHP. Jeśli jesteś zainteresowany, czytaj dalej.

PHP

Jesteśmy teraz gotowi do zajęcia się kodem PHP. Główną funkcjonalność systemu rejestracji zapewnia klasa Użytkownik, którą możesz zobaczyć poniżej. Klasa wykorzystuje (), która jest minimalistyczną biblioteką do pracy z bazami danych. Klasa User odpowiada za dostęp do baz danych, generowanie tokenów logowania i ich walidację. Przedstawia nam prosty interfejs, który można łatwo włączyć do systemu rejestracji w witrynach opartych na PHP.

Użytkownik.klasa.php

// Prywatna instancja ORM
prywatny $ orm;

/**
* Znajdź użytkownika za pomocą ciągu tokena. Tylko ważne tokeny są brane pod uwagę
* namysł. Token jest ważny przez 10 minut po wygenerowaniu.
* @param string $ token Token do wyszukania
* @powrót użytkownika
*/

Publiczna funkcja statyczna findByToken (token $) (

// znajdź go w bazie danych i upewnij się, że znacznik czasu jest poprawny


-> gdzie ("token", $ token)
-> where_raw ("token_validity> TERAZ ()")
-> znajdź_jeden ();

Jeśli (! $ Wynik) (
zwróć fałsz;
}

Zwróć nowego użytkownika (wynik $);
}

/**
* Zaloguj się lub zarejestruj użytkownika.
* @powrót użytkownika
*/

Publiczna funkcja statyczna loginOrRegister ($ e-mail) (

// Jeśli taki użytkownik już istnieje, zwróć go

Jeśli (Użytkownik :: istnieje ($ e-mail)) (
zwróć nowego Użytkownika ($ e-mail);
}

// W przeciwnym razie utwórz go i zwróć

Powrót Użytkownik :: utwórz ($ e-mail);
}

/**
* Utwórz nowego użytkownika i zapisz go w bazie danych
* @param string $ email Adres e-mail użytkownika
* @powrót użytkownika
*/

Utwórz prywatną funkcję statyczną ($ e-mail) (

// Zapisz nowego użytkownika do bazy danych i zwróć go

$ wynik = ORM :: for_table ("reg_users") -> utwórz ();
$ wynik-> e-mail = $ e-mail;
$ wynik-> zapisz ();

Zwróć nowego użytkownika (wynik $);
}

/**
* Sprawdź, czy taki użytkownik istnieje w bazie danych i zwróć wartość logiczną.
* @param string $ email Adres e-mail użytkownika
* @return boolean
*/

Istnieje publiczna funkcja statyczna (e-mail $) (

// Czy użytkownik istnieje w bazie danych?
$ wynik = ORM :: for_table ("reg_users")
-> gdzie ("e-mail", $ e-mail)
-> liczyć ();

Zwróć wynik $ == 1;
}

/**
* Utwórz nowy obiekt użytkownika
* @param $ param instancja ORM, id, e-mail lub null
* @powrót użytkownika
*/

Funkcja publiczna __construct ($ param = null) (

If ($ param wystąpienie ORM) (

// Przekazano instancję ORM
$ this-> orm = $ param;
}
else if (is_string ($ param)) (

// E-mail został przekazany
$ to->
-> gdzie ("e-mail", $ param)
-> znajdź_jeden ();
}
w przeciwnym razie (

If (is_numeric ($param)) (
// Identyfikator użytkownika został przekazany jako parametr
$ id = $ parametr;
}
else if (isset ($ _ SESSION ["loginid"])) (

// Nie przekazano identyfikatora użytkownika, spójrz na sesję
$id = $_SESSION ["loginid"];
}

$ this-> orm = ORM :: for_table ("reg_users")
-> gdzie ("id", $ id)
-> znajdź_jeden ();
}

/**
* Generuje nowy token logowania SHA1, zapisuje go do bazy danych i zwraca.
* @ciąg zwrotu
*/

Funkcja publiczna generateToken () (
// wygeneruj token dla zalogowanego użytkownika. Zapisz go w bazie danych.

$ token = sha1 ($ this-> email.time ().rand (0, 1000000));

// Zapisz token do bazy danych,
// i zaznacz go jako ważny tylko przez następne 10 minut

$ this-> orm-> set ("token", $ token);
$ this-> orm-> set_expr ("token_validity", "ADDTIME (TERAZ())," 0:10 ")");
$ this-> orm-> save ();

Zwróć token $;
}

/**
* Zaloguj tego użytkownika
* @zwrot nieważny
*/

Logowanie do funkcji publicznej () (

// Oznacz użytkownika jako zalogowanego
$ _SESSION ["loginid"] = $ this-> orm-> id;

// Zaktualizuj pole bazy danych last_login
$ this-> orm-> set_expr ("last_login", "TERAZ ()");
$ this-> orm-> save ();
}

/**
* Zniszcz sesję i wyloguj użytkownika.
* @zwrot nieważny
*/

Wylogowanie z funkcji publicznej () (
$_SESJA = tablica ();
nieustawiona ($_SESSION);
}

/**
* Sprawdź, czy użytkownik jest zalogowany.
* @return boolean
*/

Funkcja publiczna zalogowana () (
return isset ($ this-> orm-> id) && $ _SESSION ["loginid"] == $ this-> orm-> id;
}

/**
* Sprawdź, czy użytkownik jest administratorem
* @return boolean
*/

Funkcja publiczna toAdmin () (
return $ this-> rank() == "administrator";
}

/**
* Znajdź typ użytkownika. Może to być administrator lub zwykły.
* @ciąg zwrotu
*/

Pozycja publiczna () (
if ($ this-> orm-> rank == 1) (
zwróć "administrator";
}

Zwróć „zwykły”;
}

/**
* Magiczna metoda dostępu do elementów prywatnych
* Instancja $ orm jako właściwości obiektu użytkownika
* @param string $ klucz Nazwa właściwości, do której uzyskano dostęp
* @powrót mieszany
*/

Funkcja publiczna __get (klucz $) (
if (isset ($ this-> orm -> $ key)) (
return $ this-> orm -> $ key;
}

Zwróć null;
}
}
Tokeny są generowane za pomocą algorytmu i przechowywane w bazie danych. Używamy MySQL do ustawienia kolumny token_validity na 10 minut. Podczas walidacji tokena mówimy silnikowi, że potrzebujemy tokena, pole token_validity jeszcze nie wygasło. Tym samym ograniczamy czas, w którym token będzie ważny.

Zauważ, że używamy magicznej metody __get() na końcu dokumentu, aby uzyskać dostęp do właściwości obiektu użytkownika. Dzięki temu mamy dostęp do danych, które są przechowywane w bazie danych w postaci właściwości: $user->e-mail, $user->token. Na przykład zobaczmy, jak możemy użyć tej klasy w następującym fragmencie kodu:


Innym plikiem przechowującym niezbędną funkcjonalność jest functions.php. Mamy tam kilka funkcji pomocniczych, które pozwalają nam utrzymać resztę kodu w porządku.

Funkcje.php

Funkcja send_email ($ od, $ do, $ temat, $ wiadomość) (

// Funkcja pomocnicza do wysyłania e-maili

$ headers = "Wersja MIME: 1.0". "\ r \ n";
$ headers = "Content-type: text / plain; charset = utf-8". "\ r \ n";
$ nagłówki = "Od:". $ od. "\ r \ n";

Poczta zwrotna ($ do, $ temat, $ wiadomość, $ nagłówki);
}

funkcja get_page_url () (

// Znajdź adres URL pliku PHP

$ url = "http". (pusty ($ _ SERVER ["HTTPS"])? "": "s"). ": //". $ _ SERVER ["SERVER_NAME"];

Jeśli (isset ($ _ SERVER ["REQUEST_URI"]) && $ _SERVER ["REQUEST_URI"]! = "") (
$ url = $ _SERVER ["REQUEST_URI"];
}
w przeciwnym razie (
$ url = $ _SERVER ["PATH_INFO"];
}

Zwróć adres URL $;
}

funkcja rate_limit ($ ip, $ limit_godzina = 20, $ limit_10_min = 10) (

// Liczba prób logowania z ostatniej godziny przez ten adres IP

$ count_hour = ORM :: for_table ("reg_login_attempt")
->
-> where_raw ("ts> SUBTIME (TERAZ ()," 1:00 ")")
-> liczyć ();

// Liczba prób logowania w ciągu ostatnich 10 minut przez ten adres IP

$ count_10_min = ORM :: for_table ("reg_login_attempt")
-> gdzie („ip”, sprintf („% u”, ip2long ($ ip)))
-> where_raw ("ts> SUBTIME (TERAZ ()," 0:10 ")")
-> liczyć ();

Jeśli ($ licznik_godzina> $ limit_godzina || $ licznik_10_min> $ limit_10_min) (
wyrzuć nowy wyjątek („Zbyt wiele prób logowania!”);
}
}

funkcja rate_limit_tick ($ ip, $ e-mail) (

// Utwórz nowy rekord w tabeli prób logowania

$ login_attempt = ORM :: for_table ("reg_login_attempt") -> utwórz ();

$ login_attempt-> email = $ email;
$login_attempt-> ip = sprintf ("% u", ip2long ($ ip));

$ login_attempt-> zapisz ();
}

przekierowanie funkcji ($ url) (
nagłówek („Lokalizacja: $ url”);
Wyjście;
}
Funkcje rate_limit i rate_limit_tick pozwalają nam ograniczyć liczbę prób autoryzacji na określony czas. Próby autoryzacji są rejestrowane w bazie danych reg_login_attempt. Funkcje te są uruchamiane po przesłaniu formularza autoryzacyjnego, jak widać w poniższym fragmencie kodu.

Poniższy kod został zaczerpnięty z index.php i odpowiada za przesłanie formularza logowania. Zwraca odpowiedź JSON, która jest sterowana przez kod jQuery, który widzieliśmy w resources / js / script.js.

index.php

Jeśli (! Pusty ($ _ POST) && jest ustawiony ($ _ SERVER ["HTTP_X_REQUESTED_WITH"])) (

// Wypisz nagłówek JSON

Nagłówek („Typ treści: aplikacja / json”);

// Czy adres e-mail jest prawidłowy?

Jeśli (! Isset ($ _ POST ["email"]) ||! Filter_var ($ _ POST ["email"], FILTER_VALIDATE_EMAIL)) (
wrzuć nowy wyjątek („Proszę wprowadzić poprawny adres e-mail.”);
}

// Spowoduje to zgłoszenie wyjątku, jeśli osoba jest powyżej
// dozwolone limity prób logowania (więcej informacji znajdziesz w functions.php):
rate_limit ($_SERVER ["REMOTE_ADDR"]);

// Zapisz tę próbę logowania
rate_limit_tick ($ _ SERVER ["REMOTE_ADDR"], $ _POST ["e-mail"]);

// Wyślij wiadomość do użytkownika

$ wiadomość = "";
$ e-mail = $ _POST ["e-mail"];
$ subject = "Twój link do logowania";

Jeśli (! Użytkownik :: istnieje ($ e-mail)) (
$ subject = "Dziękujemy za rejestrację!";
$ message = "Dziękujemy za rejestrację na naszej stronie! \ n \ n";
}

// Spróbuj się zalogować lub zarejestrować osobę
$ użytkownik = Użytkownik :: loginOrRegister ($ _ POST ["email"]);

$ message. = "Możesz zalogować się z tego adresu URL: \ n";
$ message. = get_page_url (). "? tkn =". $ user-> generateToken (). "\ n \ n";

$ message. = "Link wygaśnie automatycznie po 10 minutach.";

$ wynik = send_email ($ fromEmail, $ _POST ["email"], $ temat, $ wiadomość);

Jeśli (! $ Wynik) (
wyrzuć nowy wyjątek ("Wystąpił błąd podczas wysyłania wiadomości e-mail. Spróbuj ponownie.");
}

Die (json_encode (tablica (
"message" => "Dziękujemy! Wysłaliśmy link do Twojej skrzynki odbiorczej. Sprawdź również swój folder ze spamem. ”
)));
}
}
połów (wyjątek $ e) (

Die (json_encode (tablica (
"błąd" => 1,
"wiadomość" => $ e-> getMessage ()
)));
}
Po pomyślnej autoryzacji lub rejestracji powyższy kod wysyła do osoby wiadomość e-mail z linkiem do autoryzacji. Token (token) jest udostępniany jako zmienna $_GET „tkn” ze względu na wygenerowany adres URL.

index.php

If (isset ($ _ GET ["tkn"])) (

// Czy to jest prawidłowy token logowania?
$ użytkownik = Użytkownik :: findByToken ($ _ GET ["tkn"]);

// Tak! Zaloguj się użytkownika i przekieruj na chronioną stronę.

$ użytkownik-> login ();
przekierowanie ("protected.php");
}

// Nieprawidłowy Token. Przekieruj z powrotem do formularza logowania.
przekierowanie ("index.php");
}
Uruchomienie $user->login() spowoduje utworzenie niezbędnych zmiennych sesji, dzięki czemu użytkownik pozostanie zalogowany przy kolejnych logowaniach.

Wylogowanie jest realizowane w przybliżeniu w ten sam sposób:

Index.php

If (isset ($ _ GET ["wyloguj"])) (

$ użytkownik = nowy użytkownik ();

Jeśli ($ użytkownik-> zalogowany ()) (
$ użytkownik-> wyloguj ();
}

Przekierowanie ("index.php");
}
Na końcu kodu ponownie przekierowujemy użytkownika do index.php, więc parametr ?Logout=1 w adresie URL jest wykluczony.

Nasz plik index.php również będzie wymagał ochrony - nie chcemy, aby już zalogowani użytkownicy widzieli formularz. W tym celu używamy metody $ user-> login():

Index.php

$ użytkownik = nowy użytkownik ();

if ($ użytkownik-> zalogowany ()) (
przekierowanie ("protected.php");
}
Na koniec zobaczmy, jak możesz chronić stronę w swojej witrynie i udostępniać ją tylko po autoryzacji:

chroniony.php

// Aby chronić dowolną stronę php w swojej witrynie, dołącz main.php
// i utwórz nowy obiekt użytkownika. To takie proste!

require_once "zawiera / main.php";

$ użytkownik = nowy użytkownik ();

if (! $ użytkownik-> zalogowany ()) (
przekierowanie ("index.php");
}
Po tym sprawdzeniu możesz być pewien, że użytkownik pomyślnie się zalogował. Będziesz mieć również dostęp do danych przechowywanych w bazie danych jako właściwości obiektu użytkownika $. Aby wyświetlić adres e-mail użytkownika i jego rangę, użyj następującego kodu:

Echo "Twój email:" $ Użytkownik-> email;
echo "Twoja pozycja:". $ user-> rank ();
Tutaj rank() jest metodą, ponieważ kolumna rank w bazie danych zwykle zawiera liczby (0 dla zwykłych użytkowników i 1 dla administratorów), a my musimy to wszystko przekonwertować na nazwy rang, co jest zaimplementowane tą metodą. Aby przekonwertować zwykłego użytkownika na administratora, po prostu edytuj rekord użytkownika w phpmyadmin (lub dowolnym innym programie bazodanowym). Jako administrator użytkownik nie będzie wyposażony w żadne specjalne funkcje. Sam masz prawo wybrać, jakie uprawnienia przyznać administratorom.

Gotowy!

Dzięki temu nasz prosty system rejestracji jest gotowy! Możesz go używać na istniejącej stronie PHP lub możesz go zaktualizować, aby dostosować go do własnych wymagań.

W tym samouczku przeprowadzę Cię przez cały proces tworzenia systemu rejestracji użytkownika, w którym użytkownicy mogą utworzyć konto, podając nazwę użytkownika, adres e-mail i hasło, login i wylogowanie za pomocą PHP i MySQL. Pokażę Ci również, jak sprawić, by niektóre strony były dostępne tylko dla zalogowanych użytkowników. Żaden inny niezalogowany użytkownik nie będzie mógł uzyskać dostępu do strony.

Jeśli wolisz film, możesz go obejrzeć na moim kanale YouTube

Pierwszą rzeczą, którą musimy zrobić, to skonfigurować naszą bazę danych.

Utwórz bazę danych o nazwie rejestracja... w rejestracja bazy danych, dodaj tabelę o nazwie użytkownicy... Tabela użytkowników zajmie następujące cztery pola.

  • nazwa użytkownika - varchar (100)
  • email - varchar (100)
  • hasło - varchar (100)

Możesz to stworzyć za pomocą klienta MySQL, takiego jak PHPMyAdmin.

Możesz też utworzyć go w monicie MySQL za pomocą następującego skryptu SQL:

CREATE TABLE `users` (`id` int (11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `username` varchar (100) NOT NULL,` email` varchar (100) NOT NULL, `password` varchar (100) NOT NULL) SILNIK = DOMYŚLNY ZESTAW ZNAKÓW InnoDB = latin1;

I to tyle z bazą danych.

Teraz utwórz folder o nazwie rejestracja w katalogu dostępnym dla naszego serwera. tj. utwórz folder wewnątrz htdocs (jeśli używasz serwera XAMPP) lub wewnątrz www(jeśli używasz serwera WAMPP).

Wewnątrz folderu rejestracja, utwórz następujące pliki:

Otwórz te pliki w wybranym przez siebie edytorze tekstu. Mój jest wzniosłym tekstem 3.

Rejestracja użytkownika

Otwórz plik register.php i wklej do niego następujący kod:

rejestr.php:

Zarejestrować

Jesteś już członkiem? Zaloguj się

Jak dotąd nic skomplikowanego, prawda?

Kilka rzeczy, na które warto zwrócić uwagę:

Po pierwsze, nasza forma „s akcja atrybut jest ustawiony na register.php. Oznacza to, że po kliknięciu przycisku przesyłania formularza wszystkie dane w formularzu zostaną przesłane na tę samą stronę (register.php). Część kodu, która otrzymuje te dane formularza, jest zapisana w pliku server.php i dlatego umieszczamy ją na samej górze pliku register.php.

Zauważ również, że dołączamy plik Errors.php do wyświetlania błędów formularzy. Wkrótce do tego dojdziemy.

Jak widać w sekcji head, łączymy się z plikiem style.css. Otwórz plik style.css i wklej do niego następujący kod CSS:

* (margines: 0px; padding: 0px;) body (rozmiar czcionki: 120%; tło: # F8F8FF;) .header (szerokość: 30%; margines: 50px auto 0px; kolor: biały; tło: # 5F9EA0; tekst -align: center; border: 1px solid # B0C4DE; border-bottom: none; border-radius: 10px 10px 0px 0px; padding: 20px;) form, .content (szerokość: 30%; margines: 0px auto; padding: 20px ; border: 1px solid # B0C4DE; background: white; border-radius: 0px 0px 10px 10px;) .input-group (margin: 10px 0px 10px 0px;) .input-group label (display: block; text-align: left ; margin: 3px;) .input-group input (wysokość: 30px; szerokość: 93%; padding: 5px 10px; font-size: 16px; border-radius: 5px; border: 1px solid gray;) .btn (padding: 10px; rozmiar czcionki: 15px; kolor: biały; tło: # 5F9EA0; border: brak; border-radius: 5px;) .error (szerokość: 92%; margines: 0px auto; padding: 10px; border: 1px solid # a94442; kolor: # a94442; tło: # f2dede; promień obramowania: 5px; wyrównanie tekstu: do lewej;) .success (kolor: # 3c7 63d; tło: # dff0d8; obramowanie: 1px solid #3c763d; margines-dolny: 20px; )

Teraz forma wygląda pięknie.

Napiszmy teraz kod, który będzie odbierał informacje przesłane z formularza i przechowuje (rejestruje) te informacje w bazie danych. Jak obiecaliśmy wcześniej, robimy to w pliku server.php.

Otwórz server.php i wklej do niego ten kod:

serwer.php

Sesje służą do śledzenia zalogowanych użytkowników, dlatego na górze pliku umieszczamy session_start().

Komentarze w kodzie właściwie wszystko wyjaśniają, ale tutaj podkreślę kilka rzeczy.

Instrukcja if określa, czy kliknięto przycisk reg_user w formularzu rejestracyjnym. Pamiętaj, że w naszym formularzu przycisk przesyłania ma atrybut nazwy ustawiony na reg_user i to jest to, do czego odwołujemy się w instrukcji if.

Wszystkie dane są pobierane z formularza i sprawdzane, czy użytkownik poprawnie wypełnił formularz. Hasła są również porównywane, aby upewnić się, że są zgodne.

Jeśli nie napotkano żadnych błędów, użytkownik jest zarejestrowany w użytkownicy tabeli w bazie danych z haszowanym hasłem. Zaszyfrowane hasło jest ze względów bezpieczeństwa. Gwarantuje, że nawet jeśli hakerowi uda się uzyskać dostęp do Twojej bazy danych, nie będzie mógł odczytać Twojego hasła.

Ale komunikaty o błędach nie są teraz wyświetlane, ponieważ nasz plik Errors.php jest nadal pusty. Aby wyświetlić błędy, wklej ten kod do pliku Errors.php.

0) : ?>

Gdy użytkownik jest zarejestrowany w bazie danych, jest natychmiast logowany i przekierowywany na stronę index.php.

I to już za rejestracja. Przyjrzyjmy się logowaniu użytkownika.

Zaloguj się użytkownik

Zalogowanie użytkownika jest jeszcze prostsze. Po prostu otwórz stronę logowania i umieść w niej ten kod:

System rejestracji PHP i MySQL

Zaloguj sie

Jeszcze nie jesteś członkiem? Zapisz się

Wszystko na tej stronie jest bardzo podobne do strony register.php.

Teraz kod, który loguje użytkownika, ma być zapisany w tym samym pliku server.php. Więc otwórz plik server.php i dodaj ten kod na końcu pliku:

// ... // LOGIN USER if (isset ($ _ POST ["login_user"])) ($ username = mysqli_real_escape_string ($ db, $ _POST ["username"]); $ password = mysqli_real_escape_string ($ db, $ _POST ["hasło"]); if (puste ($ nazwa użytkownika)) (array_push ($ błędy, "Nazwa użytkownika jest wymagana");) if (puste ($ hasło)) (array_push ($ błędy, "Hasło jest wymagane") ; ) if (liczba (błędy w $) == 0) (hasło w $ = md5 (hasło w $); $ query = "SELECT * FROM użytkownicy WHERE nazwa użytkownika =" nazwa użytkownika "AND hasło =" hasło ""; $ wyniki = mysqli_query ($ db, $ zapytanie); if (mysqli_num_rows ($ wyniki) == 1) ($ _SESSION ["nazwa użytkownika"] = $ nazwa użytkownika; $ _SESSION ["sukces"] = "Jesteś teraz zalogowany"; nagłówek ( " location: index.php ");) else (array_push ($ błędy," Błędna kombinacja nazwy użytkownika / hasła ");)))?>

Ponownie wszystko to polega na sprawdzeniu, czy użytkownik poprawnie wypełnił formularz, weryfikuje, czy jego poświadczenia pasują do rekordu z bazy danych i loguje je, jeśli tak. Po zalogowaniu użytkownik zostaje przekierowany do pliku index.php z komunikatem o powodzeniu.

Zobaczmy teraz, co dzieje się w pliku index.php. Otwórz go i wklej do niego następujący kod:

Dom

Strona główna

Witamy

Wyloguj

Pierwsza instrukcja if sprawdza, czy użytkownik jest już zalogowany. Jeśli nie są zalogowani, zostaną przekierowani na stronę logowania. Dlatego ta strona jest dostępna tylko dla zalogowanych użytkowników. Jeśli chcesz, aby jakakolwiek strona była dostępna tylko dla zalogowanych użytkowników, wystarczy umieścić tę instrukcję if na górze pliku.

Druga instrukcja if sprawdza, czy użytkownik kliknął przycisk wylogowania. Jeśli tak, system je wyloguje i przekieruje z powrotem na stronę logowania.

Teraz kontynuuj, dostosuj go do swoich potrzeb i zbuduj niesamowitą witrynę. Jeśli masz jakiekolwiek obawy lub cokolwiek, co musisz wyjaśnić, zostaw to w komentarzach poniżej, a pomoc nadejdzie.

Zawsze możesz wesprzeć udostępniając w mediach społecznościowych lub polecając mój blog znajomym i współpracownikom.

W tym artykule dowiesz się jak stworzyć formularz rejestracyjny i autoryzacyjny za pomocą HTML, JavaScript, PHP i MySql. Takie formularze są stosowane na prawie każdej stronie, niezależnie od jej rodzaju. Tworzone są zarówno dla forum, jak i sklepu internetowego, portali społecznościowych (takich jak np. Facebook, Twiter, Odnoklassniki) oraz wielu innych typów witryn.

Jeśli masz witrynę na swoim lokalnym komputerze, mam nadzieję, że już masz zainstalowany i uruchomiony lokalny serwer... Bez tego nic nie będzie działać.

Tworzenie tabeli w Bazie Danych

W celu wdrożenia rejestracji użytkowników potrzebujemy przede wszystkim Bazy Danych. Jeśli już to masz, to świetnie, w przeciwnym razie musisz to stworzyć. W tym artykule wyjaśnię szczegółowo, jak to zrobić.

I tak mamy Bazę Danych (w skrócie baza danych), teraz musimy stworzyć tabelę użytkownicy w którym dodamy naszych zarejestrowanych użytkowników.

W artykule wyjaśniłem również, jak utworzyć tabelę w bazie danych. Przed utworzeniem tabeli musimy określić, jakie pola będzie ona zawierać. Pola te będą odpowiadały polom z formularza rejestracyjnego.

Pomyśleliśmy więc, wyobraziliśmy sobie, jakie pola będzie miał nasz formularz i utworzymy tabelę użytkownicy z polami takimi jak:

  • NS- Identyfikator. Pole NS każda tabela z bazy danych powinna mieć.
  • Imię- Aby zapisać nazwę.
  • nazwisko- Za zapisywanie nazwisk.
  • e-mail- Aby zapisać adres pocztowy. Będziemy używać e-maila jako loginu, więc to pole musi być unikalne, czyli musi mieć UNIKALNY indeks.
  • stan_e-mail- Pole do wskazania, czy wiadomość jest potwierdzona, czy nie. Jeśli poczta zostanie potwierdzona, będzie miała wartość 1, w przeciwnym razie wartość 0.
  • hasło- Aby zapisać hasło.


Jeśli chcesz, aby Twój formularz rejestracyjny zawierał więcej pól, możesz je również dodać tutaj.

Wszystko, nasz stół użytkownicy gotowy. Przejdźmy do następnego kroku.

Połączenie z bazą danych

Stworzyliśmy bazę danych, teraz musimy się z nią połączyć. Połączymy się za pomocą rozszerzenia PHP MySQLi.

W folderze naszej witryny utwórz plik o nazwie dbconnect.php, a w nim piszemy następujący skrypt:

Błąd połączenia z bazą danych... Opis błędu: ".mysqli_connect_error ()."

"; exit ();) // Ustaw kodowanie połączenia $ mysqli-> set_charset (" utf8 "); // Dla wygody dodajmy tutaj zmienną, która będzie zawierała nazwę naszej strony $ address_site =" http: // testsite.local " ;?>

Ten plik dbconnect.php będą musiały być podłączone do form obsługi.

Zwróć uwagę na zmienną $ adres_witryny, tutaj podałem nazwę mojej strony testowej, nad którą będę pracował. Ty odpowiednio wskazujesz nazwę swojej witryny.

Struktura strony

Przyjrzyjmy się teraz strukturze HTML naszej witryny.

Przeniesiemy nagłówek i stopkę strony do osobnych plików, header.php oraz stopka.php... Zamieścimy je na wszystkich stronach. Mianowicie na głównej (plik index.php), na stronę z formularzem rejestracyjnym (plik formularz_rejestr.php) oraz do strony z formularzem autoryzacji (plik formularz_auth.php).

Blokuj za pomocą naszych linków, rejestracja oraz upoważnienie, dodaj do nagłówka witryny, aby były wyświetlane na wszystkich stronach. Jeden link wejdzie dalej strona formularza rejestracyjnego(plik formularz_rejestr.php) a drugi do strony z formularz autoryzacyjny(plik formularz_auth.php).

Zawartość pliku header.php:

Nazwa naszej strony

W rezultacie strona główna wygląda tak:


Oczywiście Twoja strona może mieć zupełnie inną strukturę, ale nie jest to dla nas teraz ważne. Najważniejsze jest to, że istnieją linki (przyciski) do rejestracji i autoryzacji.

Przejdźmy teraz do formularza rejestracyjnego. Jak już zrozumiałeś, mamy to w aktach formularz_rejestr.php.

Przejdź do bazy danych (w phpMyAdmin), otwórz strukturę tabeli użytkownicy i zobacz, jakich pól potrzebujemy. Oznacza to, że potrzebujemy pól do wpisania imienia i nazwiska, pola do wpisania adresu pocztowego (e-mail) oraz pola do wpisania hasła. A dla bezpieczeństwa dodamy pole do wpisania captcha.

Na serwerze w wyniku przetworzenia formularza rejestracyjnego mogą wystąpić różne błędy, przez które użytkownik nie będzie mógł się zarejestrować. Dlatego, aby użytkownik zrozumiał, dlaczego rejestracja się nie powiodła, konieczne jest wyświetlanie komunikatów o tych błędach.

Przed wyświetleniem formularza dodaj blok, aby wyświetlić komunikaty o błędach z sesji.

I jeszcze jedno, jeśli użytkownik jest już autoryzowany i w trosce o zainteresowanie wchodzi na stronę rejestracji bezpośrednio, pisząc w pasku adresu przeglądarki adres_strony / form_register.php, to w takim przypadku zamiast formularza rejestracyjnego wyświetlimy mu tytuł z informacją, że jest już zarejestrowany.

Ogólnie kod pliku formularz_rejestr.php mamy to tak:

Jesteś już zarejestrowany

W przeglądarce strona z formularzem rejestracyjnym wygląda tak:


Używając wymagany atrybut, wypełniliśmy wszystkie wymagane pola.

Zwróć uwagę na kod formularza rejestracyjnego, gdzie wyświetla się captcha:


Ścieżkę do pliku określiliśmy w wartości atrybutu src dla obrazu captcha.php który generuje ten captcha.

Spójrzmy na kod pliku captcha.php:

Kod jest dobrze skomentowany, więc skupię się tylko na jednym punkcie.

Wewnątrz funkcji obrazTtfText (), ścieżka do czcionki jest określona verdana.ttf... Aby captcha działała poprawnie, musimy utworzyć folder czcionki i umieść tam plik czcionki verdana.ttf... Możesz go znaleźć i pobrać z Internetu lub pobrać z archiwum z materiałami tego artykułu.

Skończyliśmy ze strukturą HTML, czas przejść dalej.

Sprawdzanie poprawności wiadomości e-mail za pomocą jQuery

Każdy formularz musi sprawdzać poprawność wprowadzonych danych, zarówno po stronie klienta (za pomocą JavaScript, jQuery), jak i po stronie serwera.

Musimy zwrócić szczególną uwagę na pole E-mail. Bardzo ważne jest, aby wprowadzony adres pocztowy był poprawny.

Dla tego pola wejściowego ustawiamy typ wiadomości e-mail (type = "email"), co nieco ostrzega nas przed nieprawidłowymi formatami. Ale to nie wystarczy, ponieważ za pomocą inspektora kodu, który udostępnia nam przeglądarka, możesz łatwo zmienić wartość atrybutu rodzaj z e-mail na tekst i tyle, nasz czek nie będzie już ważny.


W takim przypadku musimy przeprowadzić bardziej wiarygodną kontrolę. W tym celu wykorzystamy bibliotekę jQuery z JavaScript.

Aby podłączyć bibliotekę jQuery, w pliku header.php między tagami , przed tagiem zamykającym , dodaj ten wiersz:

Zaraz po tym wierszu dodaj kod sprawdzania poprawności adresu e-mail. Tutaj dodajemy kod do sprawdzenia długości wprowadzonego hasła. Jego długość musi wynosić co najmniej 6 znaków.

Za pomocą tego skryptu sprawdzamy poprawność wpisanego adresu e-mail. Jeśli użytkownik wprowadził niepoprawny adres e-mail, wyświetlamy mu błąd o tym i dezaktywujemy przycisk do przesłania formularza. Jeśli wszystko jest w porządku, usuwamy błąd i aktywujemy przycisk do przesłania formularza.

I tak kończymy walidację formularza po stronie klienta. Teraz możemy wysłać go na serwer, gdzie również dokonamy kilku sprawdzeń i dodamy dane do bazy danych.

Rejestracja Użytkownika

Przesyłamy formularz do przetworzenia do pliku rejestr.php, metodą POST. Nazwa tego pliku obsługi, określona w wartości atrybutu akcja... A metoda wysyłania jest określona w wartości atrybutu metoda.

Otwórz ten plik rejestr.php a pierwsze co musimy zrobić to napisać funkcję uruchamiającą sesję i połączyć utworzony wcześniej plik dbconnect.php(W tym pliku wykonaliśmy połączenie z bazą danych). A jednak od razu zadeklarujmy komórki komunikaty o_błędach oraz sukces_wiadomości w globalnej tablicy sesji. V komunikaty o_błędach będziemy rejestrować wszystkie komunikaty o błędach, które pojawią się podczas przetwarzania formularza i w sukces_wiadomości, będziemy nagrywać radosne wiadomości.

Przed kontynuowaniem musimy sprawdzić czy formularz w ogóle został złożony?... Atakujący może spojrzeć na wartość atrybutu akcja z formularza i dowiedz się, który plik przetwarza ten formularz. I może wpaść na pomysł, aby przejść bezpośrednio do tego pliku, wpisując następujący adres w pasku adresu przeglądarki: http: //arees_site/register.php

Dlatego musimy sprawdzić obecność komórki w globalnej tablicy POST, której nazwa odpowiada nazwie naszego przycisku „Zarejestruj” z formularza. W ten sposób sprawdzamy, czy przycisk „Zarejestruj” został kliknięty, czy nie.

Jeśli atakujący spróbuje przejść bezpośrednio do tego pliku, otrzyma komunikat o błędzie. Przypomnę, że zmienna $ address_site zawiera nazwę strony i została zadeklarowana w pliku dbconnect.php.

Błąd! strona główna.

"); } ?>

Wartość captcha w sesji została dodana podczas generowania, w pliku captcha.php... Dla przypomnienia pokażę ponownie ten fragment kodu z pliku. captcha.php, gdzie do sesji dodawana jest wartość captcha:

Przejdźmy teraz do samej weryfikacji. W pliku rejestr.php, wewnątrz bloku if, w którym sprawdzamy, czy został kliknięty przycisk „Zarejestruj”, czy raczej, gdzie podany jest komentarz „ // (1) Miejsce na kolejny fragment kodu"piszemy:

// Sprawdź wynikowy captcha // Przytnij spacje od początku i końca wiersza $ captcha = trim ($ _ POST ["captcha"]); if (isset ($ _ POST ["captcha"]) &&! empty ($ captcha)) (// Porównaj otrzymaną wartość z wartością z sesji. if (($ _ SESSION ["rand"]! = $ captcha ) && ($ _SESSION ["rand"]! = "")) (// Jeśli captcha nie jest poprawna, zwracamy użytkownikowi stronę rejestracji, a tam wyświetlamy komunikat o błędzie, że wprowadził niewłaściwą captcha $ error_message = "

Błąd! Wpisałeś niewłaściwą captcha

"; // Zapisz komunikat o błędzie w sesji. $ _SESSION [" error_messages "] = $ error_message; // Zwróć użytkownika do nagłówka strony rejestracji (" HTTP / 1.1 301 przeniesione na stałe "); nagłówek (" Lokalizacja: " $ Address_site . "/ form_register.php"); // Zatrzymaj skrypt exit();) // (2) Miejsce na następny fragment kodu) else (// Jeśli captcha nie jest przekazana lub jest pusta exit ( "

Błąd! Nie ma kodu weryfikacyjnego, czyli kodu captcha. Możesz przejść do strony głównej.

"); }

Następnie musimy przetworzyć odebrane dane z tablicy POST. Przede wszystkim musimy sprawdzić zawartość globalnej tablicy POST, czyli czy istnieją komórki, których nazwy odpowiadają nazwom pól wejściowych z naszego formularza.

Jeżeli komórka istnieje, to wycinamy spacje od początku i od końca wiersza z tej komórki, w przeciwnym razie przekierowujemy użytkownika z powrotem na stronę z formularzem rejestracyjnym.

Dalej, po przycięciu spacji, dodajemy do zmiennej linię i sprawdzamy, czy ta zmienna jest pusta, jeśli nie jest pusta, to śmiało, w przeciwnym razie przekierowujemy użytkownika z powrotem na stronę z formularzem rejestracyjnym.

Wklej ten kod w określonej lokalizacji ” // (2) Miejsce na kolejny fragment kodu".

/ * Sprawdź, czy globalna tablica $ _POST zawiera dane wysłane z formularza i umieść przesłane dane w zwykłych zmiennych * / If (isset ($ _ POST ["first_name"])) (// Utnij spacje od początku i od końca ciągu $ first_name = trim ($ _ POST ["first_name"]); // Sprawdź zmienną pod kątem pustki if (! empty ($ first_name)) (// Dla bezpieczeństwa przekonwertuj znaki specjalne na encje HTML $ first_name = htmlspecialchars ($ first_name, ENT_QUOTES) ;) else (// Zapisz komunikat o błędzie w sesji. $ _SESSION ["error_messages"]. = "

Wpisz swoje imię

Brak pola nazwy

"; // Powrót użytkownika do nagłówka strony rejestracji (" HTTP / 1.1 301 przeniesiony na stałe "); header (" Lokalizacja: ". $ Adres_witryny." / Form_register.php "); // Zatrzymanie wyjścia skryptu (); ) if ( isset ($ _ POST ["last_name"])) (// Przytnij spacje od początku i końca ciągu $ last_name = trim ($ _ POST ["last_name"]); if (! empty ($ last_name )) (// Ze względów bezpieczeństwa , przekonwertuj znaki specjalne na encje HTML $ last_name = htmlspecialchars ($ last_name, ENT_QUOTES);) else (// Zapisz komunikat o błędzie w sesji. $ _SESSION ["error_messages"]. = "

Wpisz swoje nazwisko

"; // Powrót użytkownika do nagłówka strony rejestracji (" HTTP / 1.1 301 przeniesiony na stałe "); header (" Lokalizacja: ". $ Adres_witryny." / Form_register.php "); // Zatrzymanie wyjścia skryptu (); )) else (// Zapisz komunikat o błędzie w sesji. $ _SESSION ["komunikaty_o_błędach"]. = "

Brak pola nazwiska

"; // Powrót użytkownika do nagłówka strony rejestracji (" HTTP / 1.1 301 przeniesiony na stałe "); header (" Lokalizacja: ". $ Adres_witryny." / Form_register.php "); // Zatrzymanie wyjścia skryptu (); ) if ( isset ($ _ POST ["email"])) (// Utnij spacje od początku i końca linii $ email = trim ($ _ POST ["email"]); if (! empty ($ email )) ($ email = htmlspecialchars ($ email, ENT_QUOTES); // (3) Miejsce kodu do sprawdzenia formatu adresu e-mail i jego unikalności) else (// Zapisz komunikat o błędzie do sesji. $ _SESSION [ "komunikaty o_błędach"]. = "

Wprowadź swój email

"; // Powrót użytkownika do nagłówka strony rejestracji (" HTTP / 1.1 301 przeniesiony na stałe "); header (" Lokalizacja: ". $ Adres_witryny." / Form_register.php "); // Zatrzymanie wyjścia skryptu (); )) else (// Zapisz komunikat o błędzie w sesji. $ _SESSION ["komunikaty_o_błędach"]. = "

"; // Powrót użytkownika do nagłówka strony rejestracji (" HTTP / 1.1 301 przeniesiony na stałe "); header (" Lokalizacja: ". $ Adres_witryny." / Form_register.php "); // Zatrzymanie wyjścia skryptu (); ) if ( isset ($ _ POST ["hasło"])) (// Utnij spacje od początku i końca ciągu $ hasło = trim ($ _ POST ["hasło"]); if (! puste ($ hasło )) ($ password = htmlspecialchars ($ password, ENT_QUOTES); // Zaszyfruj paprol $ password = md5 ($ password. "top_secret");) else (// Zapisz komunikat o błędzie w sesji. $ _SESSION ["error_messages "]. = "

Wprowadź hasło

"; // Powrót użytkownika do nagłówka strony rejestracji (" HTTP / 1.1 301 przeniesiony na stałe "); header (" Lokalizacja: ". $ Adres_witryny." / Form_register.php "); // Zatrzymanie wyjścia skryptu (); )) else (// Zapisz komunikat o błędzie w sesji. $ _SESSION ["komunikaty_o_błędach"]. = "

"; // Powrót użytkownika do nagłówka strony rejestracji (" HTTP / 1.1 301 przeniesiony na stałe "); header (" Lokalizacja: ". $ Adres_witryny." / Form_register.php "); // Zatrzymanie wyjścia skryptu (); ) // (4) Miejsce na kod dodawania użytkownika do bazy danych

Szczególne znaczenie ma pole e-mail... Musimy sprawdzić format otrzymanego adresu pocztowego i jego unikalność w bazie danych. To znaczy, czy jest już zarejestrowany użytkownik z tym samym adresem pocztowym?

W określonej lokalizacji ” // (3) Miejsce kodu do sprawdzenia formatu adresu pocztowego i jego unikalności"dodaj następujący kod:

// Sprawdź format otrzymanego adresu e-mail za pomocą wyrażenia regularnego $ reg_email = "/^**@(+(*+)*\.)++/i"; // Jeśli format otrzymanego adresu e-mail nie pasuje do wyrażenia regularnego if (! Preg_match ($ reg_email, $ email)) (// Zapisz komunikat o błędzie w sesji. $ _SESSION ["error_messages"]. = "

Wpisałeś nieprawidłowy adres e-mail

"; // Powrót użytkownika do nagłówka strony rejestracji (" HTTP / 1.1 301 przeniesiony na stałe "); header (" Lokalizacja: ". $ Adres_witryny." / Form_register.php "); // Zatrzymanie wyjścia skryptu (); ) // Sprawdzamy czy taki adres już istnieje w bazie $ Result_query = $ mysqli-> zapytanie ("SELECT` email` FROM `users` WHERE` email` = "". $ Email. "" "); // Jeśli liczba otrzymanych wierszy wynosi dokładnie jeden, więc użytkownik o tym adresie e-mail jest już zarejestrowany if ($ result_query-> num_rows == 1) (// Jeśli wynik nie jest fałszywy if (($ row = $ result_query -> fetch_assoc ())! = false) (// Zapisz komunikat o błędzie w sesji. $ _SESSION ["error_messages"]. = "

Użytkownik z tym adresem e-mail jest już zarejestrowany

"; // Powrót użytkownika do nagłówka strony rejestracji (" HTTP / 1.1 301 przeniesione na stałe "); header (" Lokalizacja: ". $ Adres_witryny." / Form_register.php ");) else (// Zapisz komunikat o błędzie do sesji $_SESSION ["komunikaty_o_błędach"]. = "

Błąd w zapytaniu do bazy danych

"; // Powrót użytkownika do nagłówka strony rejestracji (" HTTP / 1.1 301 przeniesiony na stałe "); header (" Lokalizacja: ". $ Adres_witryny." / Form_register.php ");) / * zamknij zaznaczenie * / $ wynik_zapytanie-> close ();// zatrzymanie wyjścia skryptu ();) / * zamknięcie zaznaczenia * / $ wynik_zapytania-> close ();

I tak skończyliśmy ze wszystkimi sprawami, czas dodać użytkownika do bazy. W określonej lokalizacji ” // (4) Miejsce na kod dodawania użytkownika do bazy"dodaj następujący kod:

// Żądanie dodania użytkownika do bazy danych $ result_query_insert = $ mysqli-> zapytanie ("INSERT INTO` users` (imię, nazwisko, e-mail, hasło) VALUES ("". $ First_name. "", "". $ Last_name . " "," ". $ e-mail." "," ". $ hasło." ")"); if (! $ result_query_insert) (// Zapisz komunikat o błędzie w sesji. $ _SESSION ["error_messages"]. = "

Nie udało się dodać użytkownika do żądania bazy danych

"; // Powrót użytkownika do nagłówka strony rejestracji (" HTTP / 1.1 301 przeniesiony na stałe "); header (" Lokalizacja: ". $ Adres_witryny." / Form_register.php "); // Zatrzymanie wyjścia skryptu (); ) else ( $ _SESSION ["success_messages"] = "

Rejestracja zakończona sukcesem!!!
Teraz możesz się zalogować, używając swojej nazwy użytkownika i hasła.

"; // Wyślij użytkownika do nagłówka strony autoryzacji (" HTTP / 1.1 301 przeniesione na stałe "); header (" Lokalizacja: ". $ Adres_witryny." / Form_auth.php ");) / * Uzupełnienie żądania * / $ result_query_insert-> close ();// Zamknij połączenie z bazą danych $ mysqli-> close ();

W przypadku wystąpienia błędu w żądaniu dodania użytkownika do bazy dodajemy do sesji komunikat o tym błędzie i zwracamy użytkownika na stronę rejestracji.

W przeciwnym razie, jeśli wszystko poszło dobrze, również dodajemy wiadomość do sesji, ale już przyjemniej, a mianowicie mówimy użytkownikowi, że rejestracja się powiodła. A my przekierowujemy go na stronę z formularzem autoryzacyjnym.

Skrypt do sprawdzania formatu adresu e-mail i długości hasła znajduje się w pliku header.php, więc będzie działać również na polach z tego formularza.

Sesja jest również uruchamiana w pliku header.php, więc w pliku formularz_auth.php nie musisz rozpoczynać sesji, bo dostaniemy błąd.


Jak już wspomniałem, działa tutaj również skrypt sprawdzający format adresu e-mail i długość hasła. Dlatego jeśli użytkownik wprowadzi błędny adres e-mail lub krótkie hasło, natychmiast otrzyma komunikat o błędzie. I przycisk wejść stanie się nieaktywny.

Po usunięciu błędów przycisk wejść stanie się aktywny i użytkownik będzie mógł przesłać formularz na serwer, na którym zostanie przetworzony.

Autoryzacja użytkownika

Do wartości atrybutu akcja handicap autoryzacyjny ma plik auth.php, oznacza to, że formularz zostanie przetworzony w tym pliku.

A więc otwórz plik auth.php i napisz kod do przetworzenia formularza autoryzacji. Pierwszą rzeczą do zrobienia jest rozpoczęcie sesji i podłączenie pliku dbconnect.php połączyć się z bazą danych.

// Zadeklaruj komórkę, aby dodać błędy, które mogą wystąpić podczas przetwarzania formularza. $_SESSION ["komunikaty o_błędach"] = ""; // Zadeklaruj komórkę do dodawania pomyślnych wiadomości $ _SESSION ["success_messages"] = "";

/ * Sprawdź, czy formularz został przesłany, czyli czy został kliknięty przycisk Zaloguj. Jeśli tak, to śmiało, jeśli nie, wyświetl użytkownikowi komunikat o błędzie z informacją, że przeszedł bezpośrednio na tę stronę. * / if (isset ($ _ POST ["btn_submit_auth"]) &&! pusty ($ _ POST ["btn_submit_auth"])) (// (1) Spacja na następny fragment kodu) else (exit ("

Błąd! Wszedłeś bezpośrednio na tę stronę, więc nie ma danych do przetworzenia. Możesz przejść do strony głównej.

"); }

// Sprawdź wynikowy captcha if (isset ($ _ POST ["captcha"])) (// Utnij spacje od początku i końca wiersza $ captcha = trim ($ _ POST ["captcha"]); if (! Empty ($ captcha )) (// Porównaj otrzymaną wartość z wartością z sesji. If (($ _ SESSION ["rand"]! = $ Captcha) && ($ _SESSION ["rand"]! = " ")) (// Jeśli captcha nie jest poprawna , zwracamy użytkownikowi stronę autoryzacji i tam wyświetlamy komunikat o błędzie, że wprowadził niepoprawny kod captcha. $ error_message = "

Błąd! Wpisałeś niewłaściwą captcha

"; // Zapisz komunikat o błędzie w sesji. $ _SESSION [" error_messages "] = $ error_message; // Zwróć użytkownika do nagłówka strony autoryzacji (" HTTP / 1.1 301 Moved Permanently "); header (" Location: " $ Address_site . "/ form_auth.php"); // Zatrzymaj wyjście ze skryptu ();)) else ($ error_message = "

Błąd! Pole do wpisania captcha nie może być puste.

"; // Zapisz komunikat o błędzie w sesji. $ _SESSION [" error_messages "] = $ error_message; // Zwróć użytkownika do nagłówka strony autoryzacji (" HTTP / 1.1 301 Moved Permanently "); header (" Location: " $ Address_site . "/ form_auth.php"); // Zatrzymanie wyjścia skryptu ();) // (2) Miejsce do przetwarzania adresu e-mail // (3) Miejsce do przetwarzania hasła // (4) Miejsce do wykonanie zapytania do bazy danych) else (// Jeśli nie przekazano captcha exit ("

Błąd! Brakuje kodu weryfikacyjnego, czyli kodu captcha. Możesz przejść do strony głównej.

"); }

Jeśli użytkownik poprawnie wpisał kod weryfikacyjny, kontynuuj, w przeciwnym razie zwracamy go na stronę autoryzacyjną.

Sprawdzanie adresu pocztowego

// Utnij spacje od początku i końca wiersza $ email = trim ($ _ POST ["email"]); if (isset ($ _ POST ["email"])) (if (! empty ($ email)) ($ email = htmlspecialchars ($ email, ENT_QUOTES); // Sprawdź format otrzymanego adresu e-mail za pomocą wyrażenia regularnego $ reg_email = " /^**@(+(*+)*\.)++/i "; // Jeśli format otrzymanego adresu e-mail nie pasuje do wyrażenia regularnego if (! preg_match ($ reg_email, $ email)) (// Zapisz w komunikacie o błędzie sesji. $ _SESSION ["error_messages"]. = "

Wpisałeś niepoprawny e-mail

"; // Powrót użytkownika do nagłówka strony autoryzacji (" HTTP / 1.1 301 przeniesiony na stałe "); header (" Lokalizacja: ". $ Adres_witryny." / Form_auth.php "); // Zatrzymanie wyjścia skryptu (); )) else (// Zapisz komunikat o błędzie w sesji. $ _SESSION ["komunikaty_o_błędach"]. = "

Pole do wpisania adresu pocztowego (e-mail) nie powinno być puste.

"; // Powrót użytkownika do nagłówka strony rejestracji (" HTTP / 1.1 301 przeniesiony na stałe "); header (" Lokalizacja: ". $ Adres_witryny." / Form_register.php "); // Zatrzymanie wyjścia skryptu (); )) else (// Zapisz komunikat o błędzie w sesji. $ _SESSION ["komunikaty_o_błędach"]. = "

Brak pola e-mail

"; // Powrót użytkownika do nagłówka strony autoryzacji (" HTTP / 1.1 301 przeniesiony na stałe "); header (" Lokalizacja: ". $ Adres_witryny." / Form_auth.php "); // Zatrzymanie wyjścia skryptu (); ) // (3) Przestrzeń do przetwarzania hasła

Jeśli użytkownik wpisał adres pocztowy w niepoprawnym formacie lub wartość pola adresu pocztowego jest pusta, to zwracamy go na stronę autoryzacyjną, gdzie wyświetlamy komunikat o tym.

Sprawdzanie hasła

Kolejnym polem do przetworzenia jest pole hasła. Do określonej lokalizacji ” // (3) Miejsce do przetwarzania hasła", piszemy:

If (isset ($ _ POST ["hasło"])) (// Utnij spacje od początku i końca ciągu $ hasło = trim ($ _ POST ["hasło"]); if (! Empty ($ hasło )) ($ password = htmlspecialchars ($ password, ENT_QUOTES); // Zaszyfruj hasło $ password = md5 ($ password. "top_secret");) else (// Zapisz komunikat o błędzie w sesji. $ _SESSION ["error_messages "]. = "

Wprowadź hasło

"; // Powrót użytkownika do nagłówka strony rejestracji (" HTTP / 1.1 301 przeniesiony na stałe "); header (" Lokalizacja: ". $ Adres_witryny." / Form_auth.php "); // Zatrzymanie wyjścia skryptu (); )) else (// Zapisz komunikat o błędzie w sesji. $ _SESSION ["komunikaty_o_błędach"]. = "

Nie ma pola do wpisania hasła

"; // Powrót użytkownika do nagłówka strony rejestracji (" HTTP / 1.1 301 przeniesiony na stałe "); header (" Lokalizacja: ". $ Adres_witryny." / Form_auth.php "); // Zatrzymanie wyjścia skryptu (); )

Tutaj za pomocą funkcji md5() szyfrujemy otrzymane hasło, ponieważ w bazie danych mamy hasła w postaci zaszyfrowanej. Dodatkowe tajne słowo w szyfrowaniu, w naszym przypadku” ściśle tajne„musi być tym, który został użyty podczas rejestracji użytkownika.

Teraz należy wykonać zapytanie do bazy danych na próbce użytkownika, którego adres pocztowy jest równy otrzymanemu adresowi pocztowemu, a hasło jest takie samo jak otrzymane hasło.

// Zapytanie w bazie danych dotyczące wyboru użytkownika. $ result_query_select = $ mysqli-> zapytanie ("SELECT * FROM` users` WHERE email = "". $ email. "" AND hasło = "". $ hasło. "" "); if (! $ result_query_select) (// Zapisz komunikat o błędzie w sesji. $ _SESSION ["error_messages"]. = "

Błąd żądania podczas pobierania użytkownika z bazy danych

"; // Powrót użytkownika do nagłówka strony rejestracji (" HTTP / 1.1 301 przeniesiony na stałe "); header (" Lokalizacja: ". $ Adres_witryny." / Form_auth.php "); // Zatrzymanie wyjścia skryptu (); ) else ( // Sprawdź, czy w bazie danych nie ma użytkownika z takimi danymi, a następnie wyświetl komunikat błędu if ($ result_query_select-> num_rows == 1) (// Jeśli wprowadzone dane zgadzają się z danymi z bazy, to zapisz login i hasło do tablicy sesji $ _SESSION ["email"] = $ e-mail; $ _SESSION ["hasło"] = $ hasło; // Powrót użytkownika do nagłówka strony głównej ("HTTP / 1.1 301 przeniesiony na stałe" nagłówek ("Location:". $ Address_site . "/ index.php");) else (// Zapisz komunikat o błędzie w sesji. $ _SESSION ["error_messages"]. = "

Nieprawidłowa nazwa użytkownika i/lub hasło

"; // Powrót użytkownika do nagłówka strony autoryzacji (" HTTP / 1.1 301 przeniesiony na stałe "); header (" Lokalizacja: ". $ Adres_witryny." / Form_auth.php "); // Zatrzymanie wyjścia skryptu (); ))

Wyloguj się ze strony

A ostatnią rzeczą, którą robimy, jest procedura opuszczenia terenu... W tej chwili nagłówek wyświetla linki do strony autoryzacyjnej i strony rejestracji.

W nagłówku witryny (plik header.php), korzystając z sesji sprawdzamy, czy użytkownik jest już zalogowany. Jeśli nie, to wyświetlamy link rejestracyjny i autoryzacyjny, w przeciwnym razie (jeśli jest autoryzowany) to zamiast linku rejestracyjnego i autoryzacyjnego wyświetlamy link Wyjście.

Zmodyfikowany fragment kodu z pliku header.php:

rejestracja

Wyjście

Kiedy klikniesz na link wyjścia ze strony, przejdziemy do pliku wyloguj.php, gdzie po prostu niszczymy komórki z adresem pocztowym i hasłem z sesji. Następnie wracamy z powrotem do strony, na której kliknął link wyjście.

Kod pliku wyloguj.php:

To wszystko. Teraz wiesz jak wdrażamy i przetwarzamy formularze rejestracyjne i autoryzacyjne, użytkownika w Twojej witrynie. Formularze te znajdują się na prawie każdej stronie, więc każdy programista powinien wiedzieć, jak je tworzyć.

Dowiedzieliśmy się również, jak walidować dane wejściowe, zarówno po stronie klienta (w przeglądarce za pomocą JavaScript, jQuery) jak i po stronie serwera (za pomocą języka PHP). Nauczyliśmy się też wdrożyć procedurę opuszczenia serwisu.

Wszystkie skrypty są przetestowane i działają. Możesz pobrać archiwum z plikami tej małej witryny pod tym linkiem.

W przyszłości napiszę artykuł, w którym opiszę. Planuję też napisać artykuł, w którym wyjaśnię (bez przeładowywania strony). Tak więc, aby być świadomym wydania nowych artykułów, możesz subskrybować moją stronę.

W razie jakichkolwiek pytań proszę o kontakt, a w przypadku zauważenia błędu w artykule proszę o informację.

Scenariusz lekcji (część 5):

  1. Utwórz strukturę HTML dla formularza logowania
  2. Przetwarzamy otrzymane dane
  3. Wyświetlamy powitanie użytkownika w nagłówku strony

Podobał Ci się artykuł?



© 2021 skypenguin.ru - Wskazówki dotyczące opieki nad zwierzętami