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.