Sistema di Login e Registrazione in PHP e MySQL

Informatica4,44 KB

Questo documento descrive un semplice sistema di autenticazione composto da una pagina di login, una pagina di registrazione e due script PHP che elaborano i dati e interrogano il database MySQL.

1. Pagina di login (index.html)

La pagina principale mostra il titolo della pagina di login. Il contenuto è composto principalmente da spazi vuoti e tag <br>, che andrebbero eliminati per una corretta impaginazione.

2. Form di login (inserisciLogin.php)

Lo script genera il form HTML con i campi username e password. Il campo password utilizza type='password', così da non mostrare in chiaro la password digitata.

echo "<HTML><BODY>";
echo "<FORM action='login.php' method='post'>";
echo "Username: <input type='text' name='user' size='10'> <br> <br>";
echo "Password: <input type='password' name='pass' size='10'> <br> <br>";
echo "<INPUT type='submit' value='Login'> ";
echo "<INPUT type='reset' value='Reset'> <br>";
echo "</FORM>";
echo "</BODY></HTML>";

3. Form di registrazione (inserimento.php)

Il form raccoglie cognome, nome, username e password e invia i dati a eseguiRegistrazione.php.

echo "<HTML><BODY>";
echo "<FORM action='eseguiRegistrazione.php' method='post'>";
echo "Cognome: <input type='text' name='cognome'> <br><br>";
echo "Nome: <input type='text' name='nome'> <br><br>";
echo "Username: <input type='text' name='user'> <br><br>";
echo "Password: <input type='password' name='pass'> <br><br>";
echo "<INPUT type='submit' value='Registrati'>";
echo "</FORM>";
echo "</BODY></HTML>";

4. Elaborazione della registrazione (eseguiRegistrazione.php)

Lo script si connette al database, legge i dati inviati tramite $_POST e inserisce il nuovo utente nella tabella utenti.

Correzione importante: i nomi delle colonne non devono essere racchiusi tra apici singoli, perché la query SQL risulterebbe non valida.

$connection = new mysqli("localhost", "root", "", "nome_del_tuo_database");

$user = $_POST['user'];
$pass = $_POST['pass'];
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];

$query = "INSERT INTO utenti (cognome, nome, user, pass) VALUES ('$cognome', '$nome', '$user', '$pass')";
$result = $connection->query($query);

if($result) {
    echo "Inserimento corretto <br>";
    echo "<a href='index.html'>Torna alla home</a>";
} else {
    echo "Errore durante la registrazione: " . $connection->error;
}

$connection->close();

5. Elaborazione del login (login.php)

Lo script verifica le credenziali interrogando la tabella utenti. Se viene trovata almeno una riga, l'utente è autenticato e viene mostrato un messaggio di benvenuto.

Correzioni applicate:

  • Uso di AND al posto di && nella query SQL, sintassi standard e più sicura.
  • Controllo diretto $result->num_rows > 0 al posto della doppia negazione !$result->num_rows != 0.
  • Aggiunta l'istruzione fetch_assoc() per estrarre la riga dell'utente prima di leggere $row['nome'].
$connection = new mysqli("localhost", "root", "", "nome_del_tuo_database");

$user = $_POST['user'];
$pass = $_POST['pass'];

$query = "SELECT * FROM utenti WHERE user='$user' AND pass='$pass'";
$result = $connection->query($query);

if($result->num_rows > 0)
{
    $row = $result->fetch_assoc();
    echo "Benvenuto " . $row['nome'] . " " . $row['cognome'] . "<br><br>";
}
else
{
    echo "Credenziali errate, riprova.";
}

$result->free();
$connection->close();

Note di sicurezza

Il codice presenta una vulnerabilità di SQL Injection, perché i dati di $_POST vengono inseriti direttamente nella query. Inoltre le password sono salvate in chiaro. Per un utilizzo reale è consigliato usare prepared statements ($connection->prepare()) e l'hashing delle password con password_hash() e password_verify().

Scarica

PDF Word HTML