Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 21 di 56
  • livello intermedio
Indice lezioni

Dettaglio, modifica ed eliminazione dei dati

Completiamo la nostra applicazione CRUD con PHP e MySQLi implementando le funzionalità per la visualizzazione dei dati nel dettaglio, il loro aggiornamento e la loro eliminazione.
Completiamo la nostra applicazione CRUD con PHP e MySQLi implementando le funzionalità per la visualizzazione dei dati nel dettaglio, il loro aggiornamento e la loro eliminazione.
Link copiato negli appunti

Visualizzazione del dettaglio

Nelle lezioni precedenti abbiamo creato una funzione che restituisce la lista dei record e una funzione, o meglio due, per inserire i record nel database. Ora procediamo con la visualizzazione dei dettagli di ciascun record usando il primo link di ogni riga. Passiamo due variabili: l'azione uguale a dettaglio per lo switch, il secondo, e la variabile $id relativa al record da modificare.

L'id sarà recuperato all'inizio della pagina e sanificato, il secondo switch chiamerà invece la funzione dettaglio():

function dettaglio() {
	global $id, $mysqli;
	$sql="SELECT * FROM utenti WHERE id=?";
	$result = $mysqli->prepare($sql);
	$result->bind_param('i', $id);
	$row = $result->fetch_array(MYSQLI_ASSOC);
	$out='
Nome: '.$row['nome'].'
';
	$out.='
Cognome: '.$row['cognome'].'
';
	$out.='
Email: '.$row['email'].'
';
	return($out);
	}

Abbiamo quindi: query parametriche con bin dell'id e tipo di dato integer, esecuzione della query, fetch_array() per usare l'array associativo e creazione dell'output HTML.

Modifica dei dati

Per quanto riguarda la modifica ricicleremo buona parte del lavoro fatto per l'INSERT. Per iniziare, considerando che il modulo è il medesimo, l'unico problema da affrontare è il popolamento del form, ma con la stessa strategia usata nella funzione dettaglio() per prelevare i dati le modifiche saranno minime:

function form() {
	global $id, $mysqli;
	$sql="SELECT * FROM utenti WHERE id=?";
	$result = $mysqli->prepare($sql);
	$result->bind_param('i', $id);
	$row = $result->fetch_array(MYSQLI_ASSOC);
	$out='';
	$out.='<form name="info" action="?" method="post">';
	$out.='<input type="hidden" id="id" name="id" value="'.$id.'">';
	$out.='<input type="hidden" id="azione" name="azione" value="salva">';
	$out.='<label for="nome">Nome</label><br><input type="text" id="nome" name="nome" value="'.$row['nome'].'"><br />';
	$out.='<label for="cognome">Cognome</label><br><input type="text" id="cognome" name="cognome" value="'.$row['cognome'].'"><br />';
	$out.='<label for="email">Email</label><br><input type="email" id="email" name="email" value="'.$row['email'].'"><br />';
	$out.='<input type="submit" class="btn btn-success" value="Salva">';
	$out.='</form>';
	return($out);
	}

In questo caso abbiamo una query per estrarre tutti i dati di un record identificato dalla chiave primaria e bind del parametro con controllo del tipo.

Con il secondo passaggio viene modificato ciascun campo di input stampando nel value il dato estratto dal database. A questo punto il nostro form è valorizzato. Ovviamente in caso di INSERT nessun record soddisfa la clausola WHERE della query e i campi restano vuoti.

Da notare anche la valorizzazione dell'id come campo di input hidden.

Inviamo il form, rientriamo nella funzione salva() dato che l'azione è la medesima dell'INSERT, abbiamo già la lettura dei dati inviati dal form e non resta che aggiungere la query di UPDATE nel caso in cui l'id sia diverso da zero.

function salva() {
	global $id, $mysqli;
	$nome = $_REQUEST["nome"];
	$cognome = $_REQUEST["cognome"];
	$email = $_REQUEST["email"];
	if($id==0){
		$sql = 'INSERT INTO utenti(nome, cognome, email) VALUES(?, ?, ?)';
		$result = $mysqli->prepare($sql);
		$result->bind_param('sss', $nome, $cognome, $email);
		$result->execute();
		}
	else{
		$sql = 'UPDATE utenti SET nome=?, cognome=?, email=? WHERE id=? LIMIT 1  ';
		$result = $mysqli->prepare($sql);
		$result->bind_param('sssi', $nome, $cognome, $email, $id);
		$result->execute();
		}
	}

Per sicurezza mettiamo anche il LIMIT ad 1 anche se è implicito dovendo lavorare sulla chiave primaria.

Eliminazione dei dati

L'ultima operazione riguarda l'eliminazione: partendo dalla lista clicco su "elimina", quindi il primo switch chiamerà la funzione elimina(); connessione e id saranno già valorizzati e quindi verrà eseguita la query di cancellazione con il prepare, il bind del parametro id e la clausola LIMIT per evitare di cancellare più di un record:

function elimina() {
	global $id, $mysqli;
	$sql='DELETE FROM utenti WHERE id=? LIMIT 1  ';
	$result = $mysqli->prepare($sql);
	$result->bind_param('i', $id);
	$result->execute();
	}

A questo punto, terminata l'esecuzione della funzione elimina(), $azione verrà valorizzata come lista e verrà mostrata la lista completa dei record presenti nel database.

Ti consigliamo anche