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!
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