Rejestracja użytkownika — PHP + MySQL

Ćwiczenie łączy formularz HTML, walidację po stronie klienta i prostą obsługę rejestracji w bazie danych.

Cel ćwiczenia

  • obsługa formularza metodą POST w PHP;
  • walidacja danych (front‑end + back‑end);
  • hashowanie haseł przy użyciu password_hash();
  • sprawdzanie, czy email jest już w bazie;
  • dodawanie nowego użytkownika do tabeli users.
Poziom: INF.03 / technik informatyk
Technologie: HTML, JS, PHP, MySQL

1. Formularz rejestracji

Po wysłaniu formularza dane trafią do pliku process.php, który:

  • sprawdzi poprawność danych po stronie serwera;
  • połączy się z bazą MySQL i sprawdzi, czy email już istnieje;
  • w razie poprawnych danych zapisze nowego użytkownika z zahashowanym hasłem;
  • wyświetli odpowiedni komunikat (sukces / błąd).

2. Przykładowe rozwiązanie — plik process.php

<?php // Dane połączenia z bazą — dostosuj do swojego środowiska $host = "localhost"; $user = "root"; $pass = ""; $db = "database"; $conn = new mysqli($host, $user, $pass, $db); if ($conn->connect_error) { die("Błąd połączenia z bazą: " . $conn->connect_error); } // Pobranie danych z formularza (podstawowe oczyszczanie) $username = trim($_POST["username"] ?? ""); $email = trim($_POST["email"] ?? ""); $password = $_POST["password"] ?? ""; // Prosta walidacja po stronie serwera $errors = []; if (strlen($username) < 3) { $errors[] = "Nazwa użytkownika musi mieć co najmniej 3 znaki."; } if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $errors[] = "Podano nieprawidłowy adres e-mail."; } if (strlen($password) < 6) { $errors[] = "Hasło musi mieć co najmniej 6 znaków."; } // Jeśli są błędy — wyświetlamy je i kończymy skrypt if (!empty($errors)) { foreach ($errors as $e) { echo "<p style='color:#ff7777'>$e</p>"; } echo "<p><a href='register.html'>Powrót do formularza</a></p>"; exit; } // Sprawdzenie, czy email już istnieje (prepared statement) $sql = "SELECT id FROM users WHERE email = ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("s", $email); $stmt->execute(); $stmt->store_result(); if ($stmt->num_rows > 0) { echo "<p style='color:#ff7777'>Podany e-mail jest już zarejestrowany.</p>"; echo "<p><a href='register.html'>Powrót do formularza</a></p>"; $stmt->close(); $conn->close(); exit; } $stmt->close(); // Hashowanie hasła $hash = password_hash($password, PASSWORD_DEFAULT); // Dodawanie nowego użytkownika $insertSql = "INSERT INTO users (username, email, password) VALUES (?, ?, ?)"; $insert = $conn->prepare($insertSql); $insert->bind_param("sss", $username, $email, $hash); if ($insert->execute()) { echo "<p style='color:#00ff99'>Rejestracja zakończona sukcesem!</p>"; } else { echo "<p style='color:#ff7777'>Błąd podczas rejestracji: " . $conn->error . "</p>"; } $insert->close(); $conn->close(); ?>