Zarządzanie użytkownikami w PHP – wprowadzenie
Każda aplikacja internetowa, która oferuje personalizowane treści lub usługi, wymaga systemu zarządzania użytkownikami. System ten obejmuje proces rejestracji użytkowników, logowania, autoryzacji oraz utrzymania sesji. W tej lekcji dowiesz się, jak stworzyć kompletny system zarządzania użytkownikami w PHP z wykorzystaniem bazy danych MySQL. Zaimplementujemy rejestrację, logowanie, przechowywanie haseł w bezpieczny sposób, a także zarządzanie sesjami i autoryzacją.
Tworzenie bazy danych użytkowników
Na początku musimy stworzyć odpowiednią tabelę w bazie danych, która będzie przechowywać informacje o użytkownikach, takie jak ich nazwa użytkownika, hasło oraz e-mail. Do tego celu użyjemy narzędzia phpMyAdmin lub wykonamy zapytanie SQL w MySQL.
CREATE TABLE uzytkownicy ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(30) NOT NULL UNIQUE, email VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, data_rejestracji TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
Ta tabela będzie przechowywać dane użytkowników:
- id – unikalny identyfikator każdego użytkownika,
- username – nazwa użytkownika (unikatowa),
- email – adres e-mail (unikatowy),
- password – zaszyfrowane hasło użytkownika,
- data_rejestracji – data i czas rejestracji użytkownika.
Rejestracja użytkownika
Proces rejestracji użytkownika wymaga pobrania nazwy użytkownika, adresu e-mail i hasła, a następnie zapisania tych danych w bazie. Kluczowe jest, aby hasło było odpowiednio zaszyfrowane, zanim zostanie zapisane w bazie.
1. Formularz rejestracyjny
Formularz rejestracyjny HTML, który umożliwi użytkownikowi wprowadzenie swoich danych:
<form action="register.php" method="post"> Nazwa użytkownika: <input type="text" name="username" required><br> E-mail: <input type="email" name="email" required><br> Hasło: <input type="password" name="password" required><br> <input type="submit" value="Zarejestruj"> </form>
2. Obsługa rejestracji w PHP
Poniższy kod PHP w pliku register.php obsługuje proces rejestracji użytkownika:
<?php
// Połączenie z bazą danych
$conn = mysqli_connect("localhost", "root", "", "moja_baza");
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = mysqli_real_escape_string($conn, $_POST['username']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$password = mysqli_real_escape_string($conn, $_POST['password']);
// Sprawdzanie, czy nazwa użytkownika lub e-mail już istnieje
$sql = "SELECT id FROM uzytkownicy WHERE username='$username' OR email='$email'";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
echo "Nazwa użytkownika lub e-mail są już zajęte.";
} else {
// Szyfrowanie hasła
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
// Wstawianie nowego użytkownika do bazy
$sql = "INSERT INTO uzytkownicy (username, email, password) VALUES ('$username', '$email', '$hashed_password')";
if (mysqli_query($conn, $sql)) {
echo "Rejestracja przebiegła pomyślnie!";
} else {
echo "Błąd podczas rejestracji: " . mysqli_error($conn);
}
}
}
mysqli_close($conn);
?>Wyjaśnienie:
password_hash(): Funkcja ta służy do szyfrowania hasła. Używamy algorytmu bcrypt, który jest bezpieczny i automatycznie generuje losowy „salt”.mysqli_real_escape_string(): Zapobiega SQL Injection poprzez oczyszczanie danych wejściowych.
Logowanie użytkownika
Proces logowania wymaga porównania danych wprowadzonych przez użytkownika z danymi w bazie danych, a następnie utworzenia sesji dla zalogowanego użytkownika.
1. Formularz logowania
Formularz HTML do logowania:
<form action="login.php" method="post"> Nazwa użytkownika: <input type="text" name="username" required><br> Hasło: <input type="password" name="password" required><br> <input type="submit" value="Zaloguj"> </form>
2. Obsługa logowania w PHP
Kod PHP w pliku login.php, który obsługuje logowanie użytkownika:
<?php
session_start();
$conn = mysqli_connect("localhost", "root", "", "moja_baza");
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = mysqli_real_escape_string($conn, $_POST['password']);
// Wyszukiwanie użytkownika w bazie
$sql = "SELECT id, username, password FROM uzytkownicy WHERE username='$username'";
$result = mysqli_query($conn, $sql);
$user = mysqli_fetch_assoc($result);
if ($user) {
// Sprawdzanie poprawności hasła
if (password_verify($password, $user['password'])) {
// Zapisanie danych użytkownika w sesji
$_SESSION['username'] = $user['username'];
$_SESSION['userid'] = $user['id'];
echo "Zalogowano pomyślnie!";
} else {
echo "Niepoprawne hasło.";
}
} else {
echo "Nie znaleziono takiego użytkownika.";
}
}
mysqli_close($conn);
?>Wyjaśnienie:
password_verify(): Sprawdza, czy hasło wprowadzone przez użytkownika odpowiada zaszyfrowanemu hasłu w bazie danych.$_SESSION: Używana do przechowywania danych o zalogowanym użytkowniku.
Autoryzacja i sesje
Autoryzacja polega na kontrolowaniu dostępu do określonych części serwisu. Zalogowani użytkownicy mają dostęp do pewnych zasobów, a niezalogowani nie.
1. Sprawdzanie, czy użytkownik jest zalogowany
Na każdej stronie, która wymaga autoryzacji, możemy sprawdzić, czy użytkownik jest zalogowany za pomocą sesji:
<?php
session_start();
if (!isset($_SESSION['username'])) {
echo "Musisz być zalogowany, aby uzyskać dostęp do tej strony.";
exit;
}
echo "Witaj, " . $_SESSION['username'] . "!";
?>2. Wylogowanie użytkownika
Aby wylogować użytkownika i zakończyć jego sesję, możemy użyć poniższego kodu:
<?php session_start(); session_unset(); // Usuwa wszystkie zmienne sesji session_destroy(); // Zakończenie sesji echo "Zostałeś wylogowany."; ?>
Bezpieczne przechowywanie haseł
Bezpieczeństwo danych użytkowników, w tym haseł, jest kluczowe. Oto zasady bezpiecznego przechowywania haseł:
- Nie przechowuj haseł w postaci tekstowej – zawsze szyfruj hasła za pomocą funkcji takich jak
password_hash(). - Używaj
password_hash()ipassword_verify()– PHP automatycznie dodaje „salt” (losowy ciąg znaków) do hasła, co czyni je bardziej bezpiecznym. - Nigdy nie odsłaniaj haseł użytkowników – w przypadku naruszenia bezpieczeństwa lepiej, aby hasła były zaszyfrowane i trudne do złamania.
Autoryzacja na różnych poziomach dostępu
Możesz również stworzyć system autoryzacji, który różnicuje uprawnienia użytkowników na różne poziomy. Na przykład, użytkownicy z uprawnieniami administratora mają dostęp do panelu administracyjnego, a inni użytkownicy mają ograniczone prawa.
1. Dodanie kolumny „role” do tabeli użytkowników
ALTER TABLE uzytkownicy ADD role ENUM('user', 'admin') DEFAULT 'user';2. Sprawdzanie roli użytkownika przed dostępem do zasobów
<?php
session_start();
if ($_SESSION['role'] != 'admin') {
echo "Brak uprawnień do tej sekcji.";
exit;
}
echo "Witaj, administratorze!";
?>Podsumowanie
W tej lekcji stworzyliśmy kompletny system zarządzania użytkownikami w PHP, obejmujący rejestrację, logowanie, sesje oraz autoryzację. Omówiliśmy również, jak bezpiecznie przechowywać hasła i jak zarządzać poziomami dostępu w aplikacji. Tego rodzaju system jest podstawą każdej nowoczesnej aplikacji internetowej, która wymaga personalizacji i ochrony danych użytkowników.
Gratulacje! Ukończyłeś lekcję 11.
Przejdź teraz do lekcji 12 >> Wzorce projektowe w PHP – wprowadzenie do wzorca MVC
Spis Treści - darmowy kurs PHP
Wprowadzenie: Instalacja środowiska PHP
Lekcja 1: Podstawy składni PHP
Lekcja 2: Funkcje i instrukcje warunkowe w PHP
Lekcja 3: Pętle w PHP
Lekcja 4: Tablice w PHP
Lekcja 5: Dodatkowe podstawy funkcji w PHP
Lekcja 6: Praca z formularzami HTML w PHP
Lekcja 7: Obsługa plików w PHP
Lekcja 8: Sesje i ciasteczka w PHP
Lekcja 9: Podstawy operacji na bazach danych MySQL z PHP
Lekcja 10: Prepared Statements w PHP i bezpieczeństwo aplikacji
Lekcja 11: Zarządzanie użytkownikami – rejestracja, logowanie i autoryzacja w PHP
Lekcja 12: Wzorce projektowe w PHP – wprowadzenie do wzorca MVC
Lekcja 13: Zaawansowane techniki pracy z bazami danych w PHP
Lekcja 14: Testowanie jednostkowe w PHP z PHPUnit
Lekcja 15: Tworzenie i korzystanie z API RESTful w PHP
Lekcja 16: Obsługa plików JSON i XML w PHP
Dodatki
- Spis najważniejszych funkcji PHP
Jeśli chciałbyś być poinformowany o następnych kursach to zapisz się do naszego newslettera:
