PHP - MySQL Login: A Beginner's Guide

Ciao a tutti, aspiranti sviluppatori web! Oggi ci imbarcheremo in un viaggio emozionante nel mondo di PHP e MySQL per creare un sistema di login semplice ma potente. Come qualcuno che ha insegnato queste cose per anni, posso dirti che padroneggiare questa abilità è come aprire una porta segreta nel mondo dello sviluppo web. Allora, mettiamo le mani al lavoro e tuffiamoci!

PHP - MySQL Login

Understanding the Big Picture

Prima di iniziare a programmare, prendiamo un momento per capire cosa stiamo cercando di ottenere. Immagina di costruire una casetta sull'albero. Hai bisogno di una fondazione solida, mura, un tetto e un modo per entrare e uscire. Il nostro sistema di login PHP-MySQL è simile:

  • Config.php: Questa è la nostra fondazione, che ci connette al database.
  • Login.php: Pensalo come la porta della nostra casetta sull'albero.
  • Session.php: Questo tiene traccia di chi è dentro la casetta.
  • Welcome.php: L'interno accogliente dove gli utenti autorizzati si rilassano.
  • Logout.php: Il cartello di uscita, che indica agli utenti la via d'uscita.

Ora, costruiamo ogni parte passo per passo!

Config.php: Laying the Foundation

Questo file è come il segno di riconoscimento segreto tra PHP e MySQL. È dove conserviamo i dettagli della nostra connessione al database.

<?php
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'login_demo');

$conn = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);

if($conn === false){
die("ERRORE: Impossibile connettersi. " . mysqli_connect_error());
}
?>

Ecco una spiegazione:

  • Stiamo usando define() per impostare costanti per i dettagli del nostro database.
  • mysqli_connect() stabilisce la connessione al nostro database MySQL.
  • Se la connessione fallisce, usiamo die() per interrompere l'esecuzione e mostrare un messaggio di errore.

Consiglio professionale: Non condividere mai le tue credenziali di database reali! Questo esempio utilizza valori predefiniti, ma in un progetto reale, trattieni queste informazioni segrete!

Login.php: The Gatekeeper

Qui avviene la magia. Gli utenti inseriscono le loro credenziali e noi controlliamo se sono autorizzati a entrare.

<?php
session_start();
require_once "config.php";

if($_SERVER["REQUEST_METHOD"] == "POST"){
$username = trim($_POST["username"]);
$password = trim($_POST["password"]);

$sql = "SELECT id, username, password FROM users WHERE username = ?";

if($stmt = mysqli_prepare($conn, $sql)){
mysqli_stmt_bind_param($stmt, "s", $param_username);
$param_username = $username;

if(mysqli_stmt_execute($stmt)){
mysqli_stmt_store_result($stmt);

if(mysqli_stmt_num_rows($stmt) == 1){
mysqli_stmt_bind_result($stmt, $id, $username, $hashed_password);
if(mysqli_stmt_fetch($stmt)){
if(password_verify($password, $hashed_password)){
session_start();
$_SESSION["loggedin"] = true;
$_SESSION["id"] = $id;
$_SESSION["username"] = $username;
header("location: welcome.php");
} else{
$login_err = "Username o password non validi.";
}
}
} else{
$login_err = "Username o password non validi.";
}
} else{
echo "Oops! Qualcosa è andato storto. Prova di nuovo più tardi.";
}
mysqli_stmt_close($stmt);
}
mysqli_close($conn);
}
?>

<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h2>Login</h2>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div>
<label>Username</label>
<input type="text" name="username" required>
</div>
<div>
<label>Password</label>
<input type="password" name="password" required>
</div>
<div>
<input type="submit" value="Login">
</div>
</form>
</body>
</html>

Wow, c'è molto da digerire! Ecco una spiegazione:

  • Iniziamo la sessione e includiamo il nostro file config.
  • Controlliamo se il modulo è stato inviato utilizzando POST.
  • Usiamo dichiarazioni preparate per prevenire l'iniezione SQL (una vulnerabilità di sicurezza comune).
  • Verifichiamo la password utilizzando password_verify() (sempre crittografare le password nei progetti reali!).
  • Se il login ha successo, impostiamo le variabili di sessione e reindirizziamo a welcome.php.
  • Abbiamo anche un modulo HTML semplice per gli utenti inserire le loro credenziali.

Ricorda, nelle applicazioni reali, vorresti aggiungere più misure di sicurezza e gestione degli errori!

Session.php: The Bouncer

Questo file controlla se un utente è logged in. Se no, lo rimanda alla pagina di login.

<?php
session_start();

if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
header("location: login.php");
exit;
}
?>

Semplice e diretto! Questo codice:

  • Inizia la sessione.
  • Controlla se l'utente è logged in.
  • Se no, lo reindirizza alla pagina di login.

Welcome.php: The VIP Area

Questo è dove gli utenti finiscono dopo aver effettuato il login con successo.

<?php
require_once "session.php";
?>

<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<title>Welcome</title>
</head>
<body>
<h1>Ciao, <b><?php echo htmlspecialchars($_SESSION["username"]); ?></b>. Benvenuto sul nostro sito.</h1>
<p>
<a href="logout.php">Disconnettiti</a>
</p>
</body>
</html>

Ecco cosa sta succedendo:

  • Includiamo session.php per assicurarci che solo gli utenti logged in possano accedere a questa pagina.
  • Mostriamo un messaggio di benvenuto personalizzato utilizzando il nome utente memorizzato nella sessione.
  • Forniamo un link per disconnettersi.

Logout.php: The Exit

Infine, abbiamo bisogno di un modo per gli utenti di disconnettersi in modo sicuro.

<?php
session_start();
$_SESSION = array();
session_destroy();
header("location: login.php");
exit;
?>

Questo script:

  • Inizia la sessione.
  • Annulla tutte le variabili di sessione.
  • Distrugge la sessione.
  • Reindirizza l'utente alla pagina di login.

Putting It All Together

Ora che abbiamo costruito tutti i pezzi, riassumiamo come funzionano insieme:

File Scopo Funzioni Chiave
Config.php Connessione al database mysqli_connect()
Login.php Autenticazione utente mysqli_prepare(), password_verify()
Session.php Gestione della sessione session_start(), $_SESSION controlli
Welcome.php Pagina utente autorizzata Mostra contenuti personalizzati
Logout.php Fine della sessione utente session_destroy()

Ecco fatto! Hai appena costruito un sistema di login PHP-MySQL di base. Ricorda, questo è solo l'inizio. Negli applicativi reali, vorresti aggiungere più funzionalità come:

  • Funzionalità di ripristino della password
  • Opzione "Ricordami"
  • Gestione degli errori più robusta
  • Misure di sicurezza avanzate

Continua a esercitarti, rimani curioso, e prima di sapere, sarai in grado di costruire applicazioni web complesse con facilità. Buon codice, futuri maghi del web!

Credits: Image by storyset