Gestione degli utenti in PHP. Inserimento, modifica, cancellazione e ricerca da MySQL

In questo articolo, spiegheremo come creare un programma in PHP che si collega ad un database MySQL e gestisce gli utenti attraverso l’inserimento di nuovi utenti, la modifica e la cancellazione degli utenti presenti nel database. Il programma effettuerà anche delle ricerche per trovare gli utenti utilizzando diversi criteri di ricerca.

INDICE

Questo tutorial in PHP ti fornirà le nozioni necessarie per creare un programma di gestione degli utenti personalizzato che ti permetterà di gestire gli utenti in modo efficiente e sicuro. Ti permetterà di gestire la registrazione di nuovi utenti, modificare e cancellare gli utenti esistenti e trovare gli utenti del tuo sito web o applicazione in base a diversi criteri di ricerca.

Inoltre, imparerai a utilizzare funzioni e query per la gestione dei dati in un database MySQL e a creare un’interfaccia utente intuitiva per la gestione degli utenti.

Gestione utenti in PHP

Vedremo insieme la creazione di un programma PHP per la gestione degli utenti con MySQL attraverso i passi per creare un programma personalizzato per gestire gli utenti del tuo sito web. La gestione degli utenti è una parte cruciale di qualsiasi sistema che richiede l’autenticazione ed il controllo degli utenti.

In questo articolo, ti mostrerò come creare una connessione al tuo database MySQL, utilizzando PHP, e come utilizzare query SQL per inserire, modificare e cancellare gli utenti nel tuo database. Inoltre, ti mostrerò come creare un sistema di ricerca avanzato per trovare gli utenti in base a diversi criteri di ricerca.

Il primo passo per creare il tuo programma di gestione degli utenti è quello di creare una connessione al database MySQL. PHP offre diverse funzioni per la gestione delle connessioni al database, come mysqli_connect() o PDO. Vedremo come utilizzare queste funzioni per creare una connessione alla banca dati e come gestire eventuali errori che potrebbero verificarsi durante la connessione.

Una volta creata la connessione al database, il prossimo passo è quello di creare un form per la registrazione di nuovi utenti. Utilizzeremo metodi come GET o POST per raccogliere i dati dell’utente, utilizzeremo poi le query SQL per inserire i dati dell’utente raccolti dal form nella tabella degli utenti del database.

In seguito, creeremo una pagina per la modifica e la cancellazione degli utenti esistenti. Utilizzeremo query SQL per recuperare i dati dell’utente dal database e visualizzarli in un form modificabile. Utilizzeremo successivamente query SQL per eseguire le modifiche e la cancellazione degli utenti nel database.

Infine, creeremo una pagina di ricerca degli utenti, che utilizzerà SQL con criteri di ricerca specifici per trovare e visualizzare gli utenti corrispondenti.

Il sistema di gestione degli utenti che creeremo in questo tutorial sarà sicuro, scalabile e facile da utilizzare, garantendo un’esperienza utente ottimale. Non aspettare più, inizia a creare il tuo programma di gestione degli utenti con PHP e MySQL adesso!

Creazione della banca dati in MySql

La creazione di una banca dati MySQL e di una tabella degli utenti è un passo fondamentale nella creazione del tuo programma di gestione degli utenti in PHP. La struttura della tabella degli utenti è cruciale per garantire che i dati degli utenti siano organizzati in modo efficiente e sicuro.

La struttura della tabella degli utenti presentata nell’esempio utilizza la seguente sintassi SQL:

CREATE TABLE IF NOT EXISTS `utenti` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`nome` varchar(60) DEFAULT NULL,
`cognome` varchar(60) DEFAULT NULL,
`codicefiscale` varchar(60) DEFAULT NULL,
`username` varchar(50) DEFAULT NULL,
`password` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Commentiamo insieme il codice scritto sopra partendo dalla prima riga che utilizza la clausola CREATE TABLE per creare una nuova tabella chiamata “utenti”. La clausola IF NOT EXISTS assicura che non venga creata una nuova tabella se già esiste una tabella con lo stesso nome.

La prima colonna, “id”, è una chiave primaria e utilizza il tipo di dati int(10) unsigned con l’opzione AUTO_INCREMENT, questo significa che ad ogni nuova riga inserita nel database verrà assegnato automaticamente un nuovo valore unico.

Successivamente, abbiamo le colonne “nome”, “cognome” e “codicefiscale” che utilizzano un tipo di dati varchar(60) DEFAULT NULL, questo significa che possono contenere una stringa di testo di lunghezza massima di 60 caratteri e possono avere un valore nullo.

Abbiamo poi le colonne “username” e “password” che utilizzano anch’esse un tipo di dati varchar(50) DEFAULT NULL, ossia stringa di testo di lunghezza massima di 50 caratteri e possono avere un valore nullo.

Infine, la clausola PRIMARY KEY (id) indica che la colonna “id” è la chiave primaria della tabella e garantisce che ogni riga abbia un valore unico per questa colonna.

La clausola ENGINE=MyISAM indica che la tabella utilizzerà il motore di archiviazione MyISAM per il suo funzionamento e la clausola DEFAULT CHARSET=latin1 indica che la tabella utilizzerà il set di caratteri latin1 per la memorizzazione dei dati.

phpMyAdmin

Nell’articolo, primi passi con PHP abbiamo visto l’ambiente di sviluppo Xamp che offre sia il server web Apache che MySQL, avviati i moduli dal pannello di controllo si può accedere a phpMyAdmin ed inserire il codice visto sopra (nella voce SQL) per creare la banca dati necessaria a far funzionare lo script di gestione utenti.

La pagina principale del programma

La pagina principale del programma di gestione utenti offre una serie di opzioni per gestire gli utenti presenti nella banca dati. Tra queste opzioni c’è la possibilità di registrare un nuovo utente tramite il link “nuovo-utente.php“, modificare i dati di un utente esistente tramite il link “modifica-utente.php“, cancellare un utente dalla banca dati tramite il link “cancella-utente.php” e cercare un utente in base a diversi parametri tramite il link “ricerca-utente.php“.

Gestione utenti - Prima pagina

Tutte queste opzioni sono accessibili tramite i link presenti nella pagina principale del programma index.php.

<html>
	<head>
		<title>Gestione utenti</title>
	</head>
	<body>
		<h1>Gestione utenti</h1>
		<p><a href="nuovo-utente.php">Registrazione</a> (inserisce un nuovo utente)</p>
		<p><a href="modifica-utente.php">Modifica</a> (modifica i dati di un utente)</p>
		<p><a href="cancella-utente.php">Cancellazione</a> (cancella un utente presente nella banca dati)</p>
		<p><a href="ricerca-utente.php">Ricerca</a> (ricerca un utente in base a diversi parametri)</p>
	</body>
</html>

Inserimento di nuovi utenti

Il sistema di inserimento di nuovi utenti è composto da due pagine: la pagina “nuovo-utente.php” e “nuovo-utente-conferma.php”.

Gestione utenti: inserimento nuovo utente

La pagina “nuovo-utente.php” presenta un form per la registrazione di un nuovo utente in cui gli utenti possono inserire il proprio nome, cognome, codice fiscale, username e password.

Ecco il codice della pagina nuovo-utente.php:

<html>
	<head>
		<title>Nuovo utente</title>
	</head>
	<body>
		<?php include 'inc-menu.php'; ?>
		<h1>Registrazione utente</h1>
		<form action="nuovo-utente-conferma.php" method="POST">
			<p>
				<label>Nome</label>
				<input type="text" name="nome" value="" id="nome">
			</p>
			<p>
				<label>Cognome</label>
				<input type="text" name="cognome" value="" id="cognome">
			</p>
			<p>
				<label>Codice fiscale</label>
				<input type="text" name="codicefiscale" value="" id="codicefiscale">
			</p>
			<p>
				<label>username</label>
				<input type="text" name="username" value="" id="username">
			</p>
			<p>
				<label>password</label>
				<input type="text" name="password" value="" id="password">
			</p>
			<button type="submit">Invia i dati</button>
		</form>
	</body>
</html>

Il file inc-menu.php contiene un piccolo menu con i link alle operazioni di gestione utenti:

<p>
	<a href="index.php">Home</a> 
	- <a href="nuovo-utente.php">Registrazione</a> 
	- <a href="modifica-utente.php">Modifica</a> 
	- <a href="cancella-utente.php">Cancellazione</a> 
	- <a href="ricerca-utente.php">Ricerca</a>
</p>

Gestione utenti - Utente inserito correttamente

Una volta che l’utente ha inserito tutti i dati richiesti e cliccato sul bottone “Invia i dati”, i dati vengono inviati alla pagina “nuovo-utente-conferma.php“.

<?php
	include 'inc-db-connection.php';
?>
<html>
	<head>
		<title>Registrazione utente</title>
	</head>
	<body>
		<?php include 'inc-menu.php'; ?>
		<h1>Registrazione utente</h1>
<?php		
	//Controlla i dati
	$errore = "";
	
	$nome = $_POST['nome'];
	$cognome = $_POST['cognome'];
	$codicefiscale = $_POST['codicefiscale'];
	$username = $_POST['username'];
	$password = $_POST['password'];
	if ($nome == "")
	{
		$errore = "Inserisci il nome.";
	}
	
	if ($cognome == "")
	{
		$errore = $errore . " Inserisci il cognome.";
	}
	
	if ($codicefiscale == "")
	{
		$errore = $errore . " Inserisci il codice fiscale.";
	}
	
	if ($username == "")
	{
		$errore = $errore . " Inserisci username.";
	}
	
	if ($password == "")
	{
		$errore = $errore . " Inserisci password.";
	}
	
	if ($errore == "")
	{
		//se non ci sono errori inserisci i dati nel DB
		$sql = "INSERT INTO utenti (nome, cognome, codicefiscale, username, password) VALUES ('$nome', '$cognome','$codicefiscale', '$username', '$password')";
		if (!mysqli_query($mysqli, $sql)) 
			die(printf("<H3>L'utente non può essere inserito: [%d] %s</H3>", mysqli_connect_errno(), mysqli_connect_error())); 
?>		
		<p>Inseriento avvenuto con successo</p>
		<h2>Dati inseriti</h2>
		<p><label>Nome</label> <?php echo $nome?></p>
		<p><label>Cognome</label> <?php echo $cognome?></p>
		<p><label>Codice fiscale</label> <?php echo $codicefiscale?></p>
		<p><label>Username</label> <?php echo $username?></p>
		<p><label>Password</label> <?php echo $password?></p>
<?php
	}
	else
	{
?>		
		<p><label>Errore</label> <?php echo $errore?></p>
<?php
	}
	
	//chiudo la connessione al db
	mysqli_close($mysqli);
?>
	</body>
</html>

Questa pagina include una connessione al database e utilizza le informazioni inviate dalla pagina precedente per creare un nuovo utente nella banca dati. Ecco il codice del file inc-db-connection.php.

<?php	
	$db = "db1";
	$db_host = "localhost";
	$db_user = "utente";
	$db_password = "utente";
	$mysqli = new mysqli($db_host, $db_user, $db_password, $db); 
	if ($mysqli->connect_errno) {
		die("connessione fallita: " . $mysqli->connect_error);
	}
?>

Modifica dei dati degli utenti

In questa parte dello script PHP ci occuperemo della modifica dei dati degli utenti. Il file inizia con il file di connessione al database. Successivamente include un file “inc-menu.php” per mostrare un menu. Viene quindi mostrato un elenco di tutti gli utenti presenti nel database con a lato un link “Modifica” per ogni utente, questo avviene attraverso un ciclo While ed una SELECT sui dati contenuti nella tabella utenti.

Lo script funziona bene quando il numero di utenti è basso, quando il numero cresce dobbiamo usare la paginazione che consiste nel suddividere i dati in gruppi più piccoli, chiamati pagine, per rendere più facile la navigazione e la visualizzazione. Per visualizzare ad esempio 20 utenti per pagina, è possibile utilizzare una query con l’elemento LIMIT per selezionare solo i primi 20 elementi della tabella e quindi utilizzare un offset per visualizzare la pagina successiva.

Gestione utenti: modifica utente

Ecco il codice della pagina modifica-utente.php.

<?php
	include 'inc-db-connection.php';
?>
<html>
	<head>
		<title>Registrazione utente</title>
	</head>
	<body>
		<?php include 'inc-menu.php'; ?>
		<h1>Modifica utente</h1>
		<p>Elenco di tutti gli utenti presenti nella banca dati</p>
<?php		
	//Elenco degli utenti
	$sql = "SELECT * FROM utenti order by cognome, nome";
	
	if ($elencoutenti = $mysqli->query($sql)) 
	{
		while ($row = $elencoutenti->fetch_assoc()) 
		{
?>				
			<p><?php echo $row["cognome"]?> <?php echo $row["nome"]?> <a href="modifica-utente-conferma.php?id=<?php echo $row["id"]?>">Modifica</a></p>
<?php
		}
	}
	//chiudo la connessione al db
	mysqli_close($mysqli);
?>
	</body>
</html>

Quando si clicca sul link modifica dell’utente, si visualizzano i dettagli con tutti i dati

Gestione utenti: dettagli utente

Nella pagina è incluso “inc-db-connection.php” per collegarsi al database. Viene quindi controllato se l’ID passato tramite GET è un intero, è viene memorizzato nella variabile $id.

Viene quindi creata una query SQL che seleziona tutti i campi della tabella “utenti” dove l’ID è uguale a quello passato nella URL. La query viene eseguita e i risultati vengono assegnati alle variabili $nome, $cognome, $codicefiscale, $username e $password.

Infine, viene generato un modulo HTML con campi di input precompilati con i valori recuperati dalla query e un pulsante per inviare i dati, alla fine dello script, viene chiusa la connessione al database.

di seguito il codice del file modifica-utente-conferma.php:

<?php
	include 'inc-db-connection.php';
	
	if(!is_int($_GET['id']))
	{
	
		$id = $_GET['id'];
		
		$nome = "";
		$cognome = "";
		$codicefiscale = "";
		$username = "";
		$password = "";
		
		$sql = "SELECT * FROM utenti WHERE id = $id";
		
		if ($elencoutenti = $mysqli->query($sql)) 
		{
			while ($row = $elencoutenti->fetch_assoc()) 
			{
				$nome = $row["nome"];
				$cognome = $row["cognome"];
				$codicefiscale = $row["codicefiscale"];
				$username = $row["username"];
				$password = $row["password"];
			}
		}
	}
		
?>
<html>
	<head>
		<title>Modifica utente</title>
	</head>
	<body>
		<?php include 'inc-menu.php'; ?>
		<h1>Modifica utente</h1>
		<form action="modifica-utente-execute.php" method="POST">
			<p>
				<label>Nome</label>
				<input type="text" name="nome" value="<?php echo $nome ?>" id="nome">
			</p>
			<p>
				<label>Cognome</label>
				<input type="text" name="cognome" value="<?php echo $cognome ?>" id="cognome">
			</p>
			<p>
				<label>Codice fiscale</label>
				<input type="text" name="codicefiscale" value="<?php echo $codicefiscale ?>" id="codicefiscale">
			</p>
			<p>
				<label>username</label>
				<input type="text" name="username" value="<?php echo $username ?>" id="username">
			</p>
			<p>
				<label>password</label>
				<input type="text" name="password" value="<?php echo $password ?>" id="password">
				
				<input type="hidden" id="id" name="id" value="<?php echo $id ?>" />
			</p>
						
			<button type="submit">Invia i dati</button>
		</form>
	</body>
</html>
<?php
	//chiudo la connessione al db
	mysqli_close($mysqli);
?>

Inviati i dati si arriva alla pagina modifica-utente-execute.php.

Gestione utenti: modifica dati avvenuta con successo

Dopo l’inclusione della connessione al database, viene quindi dichiarata una variabile $errore e vengono assegnati alle relative variabili, che ho indicato con lo stesso nome, il valore dei campi del form inviati dalla pagina modifica-utente-conferma.php.

Successivamente vengono effettuati i controlli sui valori assegnati , in caso di errore viene concatenato alla stringa $errore. Se non ci sono errori, viene creata una query SQL (UPDATE) per aggiornare i campi della tabella “utenti” con i valori recuperati dal form che successivamente vengono stampati con le relative modifiche.

In caso contrario viene visualizzato l’errore.

ecco il codice della pagina modifica-utente-execute.php.

<?php
	include 'inc-db-connection.php';
	
	$errore = "";
	
	$id = $_POST['id'];
	
	$nome = $_POST['nome'];
	$cognome = $_POST['cognome'];
	$codicefiscale = $_POST['codicefiscale'];
	$username = $_POST['username'];
	$password = $_POST['password'];
?>
<html>
	<head>
		<title>Modifica utente</title>
	</head>
	<body>
		<?php include 'inc-menu.php'; ?>
		<h1>Modifica utente</h1>
<?php		
	if ($nome == "")
	{
		$errore = "Inserisci il nome.";
	}
	
	if ($cognome == "")
	{
		$errore = $errore . " Inserisci il cognome.";
	}
	
	if ($errore == "")
	{
		//se non ci sono errori inserisci i dati nel DB
		$sql = "UPDATE utenti SET nome = '$nome', cognome = '$cognome', codicefiscale = '$codicefiscale', username = '$username', password = '$password' WHERE id = $id;";
		
		if (!mysqli_query($mysqli, $sql)) 
			die(printf("<H3>L'utente non può essere inserito: [%d] %s</H3>", mysqli_connect_errno(), mysqli_connect_error())); 
?>		
		<p>Inseriento avvenuto con successo</p>
		<h2>Dati modificati</h2>
		<p><label>Nome</label> <?php echo $nome?></p>
		<p><label>Cognome</label> <?php echo $cognome?></p>
		<p><label>Codice fiscale</label> <?php echo $codicefiscale?></p>
		<p><label>Username</label> <?php echo $username?></p>
		<p><label>Password</label> <?php echo $password?></p>
<?php
	}
	else
	{
?>		
		<p><label>Errore</label> <?php echo $errore?></p>
<?php
	}
	//chiudo la connessione al db
	mysqli_close($mysqli);
?>
	</body>
</html>

Cancellazione degli utenti

Siamo arrivati alla pagina di cancellazione degli utenti.

Gestione utenti: cancella utente

E’ presente sempre la funzione include per includere un file di connessione al database e come per la pagina di modifica utente vengono visualizzati gli utenti presenti nella banca dati. Eseguita la query i risultati vengono stampati in una lista di elementi con il cognome, nome e un link “Cancella” con l’id dell’utente come parametro.

Ecco di seguito il codice della pagina cancella-utente.php:

<?php
	include 'inc-db-connection.php';
?>
<html>
	<head>
		<title>Cancellazione utente</title>
	</head>
	<body>
		<?php include 'inc-menu.php'; ?>
		<h1>Cancellazione utente</h1>
		<p>Elenco di tutti gli utenti presenti nella banca dati</p>
<?php		
	//Elenco degli utenti
	$sql = "SELECT * FROM utenti order by cognome, nome";
	
	if ($elencoutenti = $mysqli->query($sql)) 
	{
		while ($row = $elencoutenti->fetch_assoc()) 
		{
?>				
			<p><?php echo $row["cognome"]?> <?php echo $row["nome"]?> <a href="cancella-utente-conferma.php?id=<?php echo $row["id"]?>">Cancella</a></p>
<?php
		}
	}
	//chiudo la connessione al db
	mysqli_close($mysqli);
?>
	</body>
</html>

La pagina cancella-utente-conferma.php cancella definitivamente l’utente dal DB.

Gestione utenti: cancellazione degli utenti dal DB

Collegato il database viene controllato se l’ID passato tramite GET è un numero intero, se non ci sono errori viene assegnato alla variabile $id. Viene creata una query per cancellare l’utente dalla tabella “utenti” attraverso la funzione “DELETE” dove l’ID è uguale a quello passato nella URL.

A questo punto viene generato un messaggio “L’utente è stato cancellato” per segnalare l’avvenuta eliminazione.

Il codice della pagina cancella-utente-conferma.php è il seguente:

<?php
	include 'inc-db-connection.php';
	
	if(!is_int($_GET['id']))
	{	
		$id = $_GET['id'];
		$sql = "DELETE FROM utenti WHERE id = $id";
		if (!mysqli_query($mysqli, $sql)) 
			die(printf("<H3>L'utente non può essere cancellato: [%d] %s</H3>", mysqli_connect_errno(), mysqli_connect_error())); 
	}
?>
<html>
	<head>
		<title>Modifica utente</title>
	</head>
	<body>
		<?php include 'inc-menu.php'; ?>
		<h1>Cancellazione utente</h1>
		<p>L'utente è stato cancellato</p>
	</body>
</html>
<?php
	//chiudo la connessione al db
	mysqli_close($mysqli);
?>

Ricerca utenti

La pagina ricerca utente, permette di trovare gli utenti inseriti nel database che rispecchiano alcuni criteri.

Gestione utenti: ricerca di un utente

All’interno della pagina è inserito un form con un campo di input per inserire il termine di ricerca e un pulsante “Invia i dati” per inviare i dati al file “ricerca-utente-conferma.php” tramite il metodo POST.

La pagina non esegue codici php e non c’è connessione al database.

Ecco di seguito il codice della pagina ricerca-utente.php:

<html>
	<head>
		<title>Ricerca utente</title>
	</head>
	<body>
		<?php include 'inc-menu.php'; ?>
		<h1>Ricerca utente</h1>
		<p>Inserisci un termine di ricerca per individuare l'utente</p>
		<form action="ricerca-utente-conferma.php" method="POST">
			<p>
				<label>Termine di ricerca</label>
				<input type="text" name="key" value="" id="key">
			</p>
			<button type="submit">Invia i dati</button>
		</form>
	</body>
</html>

Passiamo ora al file ricerca-utente-conferma.php che effettua la ricerca all’interno del database.

Gestione utenti: ricerca utente

Viene inserito il file di connessione al database, viene assegnato alla variabile $key il valore del campo “key” inviato tramite il metodo POST dal form di ricerca nella pagina ricerca-utente.php.

Successivamente, attraverso la query di ricerca si selezionano gli elementi della tabella “utenti” dove il cognome o il nome è uguale al termine cercato. La query viene eseguita e i risultati vengono stampati in una lista di elementi con il cognome, nome e codice fiscale.

Alla fine dello script, viene chiusa la connessione al database.

Di seguito il codice PHP della pagina ricerca-utente-conferma.php:

<?php
	include 'inc-db-connection.php';
	
	$key = $_POST['key'];
?>
<html>
	<head>
		<title>Ricerca utente</title>
	</head>
	<body>
		<?php include 'inc-menu.php'; ?>
		<h1>Ricerca utente</h1>
		<p>Elenco di tutti gli utenti presenti nella banca dati che soddisfano i criteri di ricerca</p>
		<p>Termine ricercato: <?php echo $key ?></p>
<?php
	$sql = "SELECT * FROM utenti WHERE cognome like '$key' OR nome like '$key' order by cognome, nome";
	
	if ($elencoutenti = $mysqli->query($sql)) 
	{
		while ($row = $elencoutenti->fetch_assoc()) 
		{
?>				
			<p><?php echo $row["cognome"]?> <?php echo $row["nome"]?> - <?php echo $row["codicefiscale"]?> </p>
<?php
		}
	}
	//chiudo la connessione al db
	mysqli_close($mysqli);
?>
	</body>
</html>

Schema delle pagine

Di seguito lo schema delle pagine in formato grafico

Schema delle pagine

  • Index.php
    • nuovo-utente.php –> nuovo-utente-conferma.php
    • modifica-utente.php –> modifica-utente-conferma.php –> modifica-utente-execute.php
    • cancella-utente.php –> cancella-utente-conferma.php
    • ricerca-utente.php –> ricerca-utente-conferma.php

Considerazioni finali

In generale, l’intero programma di gestione degli utenti in PHP presenta alcune criticità che vanno risolte per rendere il sistema più robusto e sicuro. In primis, bisognerebbe implementare una gestione degli errori più precisa e completa, per evitare possibili problemi di sicurezza e rendere il sistema più stabile e affidabile.

Inoltre, sarebbe opportuno implementare delle funzionalità aggiuntive come ad esempio la gestione delle password, con la possibilità di recupero direttamente dalla email.

Va sottolineato che questo programma è solo un esempio di come gestire gli utenti in PHP e MySQL e che potrebbe essere migliorato e adattato alle esigenze specifiche di un progetto. Va quindi considerato come un punto di partenza da integrare e migliorare sotto diversi aspetti.

Segui Digital Teacher anche sui canali social

Youtube  Facebook  Instagram