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

Dettaglio ed eliminazione record

Completiamo il nostro progetto implementando le funzioni per il dettaglio e l'eliminazione dei record in un CMS personalizzato basato su PHP e MySQL.
Completiamo il nostro progetto implementando le funzioni per il dettaglio e l'eliminazione dei record in un CMS personalizzato basato su PHP e MySQL.
Link copiato negli appunti

La funzione dettaglio

Il nostro CMS inizia a prendere forma: nella lista dei record, oltre al pulsante iniziale per inserire nuovi elementi, per ciascuna riga abbiamo un pulsante modifica e copia. Dobbiamo occuparci ancora della funzione per visualizzare il dettaglio di un singolo record.

Per la verità la maggior parte dei problemi sono stati già risolti, il meccanismo sarà identico a quello della creazione del form ma semplificato: non ci sarà bisogno di diversificare i campi di input, ma basterà stampare la coppia costituita dal campo label e dal valore assegnato per poi raccogliere tutto in una variabile $out che conterrà la stringa HTML da stampare.

Procediamo con la SELECT sulla tabella dei dati usando l'id passato in querystring, poi preleviamo la lista dei campi dalla tabella struttura:

$out = '';
$sql = 'SELECT * FROM '.$this->tipo.' WHERE id='.$this->id;
$stmt = $db->prepare($sql);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$sql = 'SELECT * FROM struttura WHERE tabella="'.$this->tipo.'" AND visibile="1" order by ordine';
$dati = $db->prepare($sql);
$dati->execute();
while($array = $dati->fetch(PDO::FETCH_ASSOC)){
..
}

Per ogni riga della tabella struttura che abbiamo deciso di rendere visibile andremo a chiamare il metodo creaText() che ci permetterà di creare l'HTML necessario passandogli il valore e l'etichetta da associare:

$out.=$this->creaText($row[$array['nome']],$array['label']);

La stampa della stringa HTML sarà una versione semplificata della creazione dei form:

public function creaText($valore,$label){
	$out='<div>';
	$out.='<label>'.$label.'</label>';
	$out.='<span>'.htmlentities(stripslashes($valore)).'</span>';
	$out.='</div>';
	return($out);
}

In questo modo riusciamo a costruire la scheda del contenuto che sarà abbastanza spartana, ma è possibile arricchire e personalizzare la presentazione aggiungendo altri parametri e stilizzazioni.

Eliminazione di un record

Anche l'operazione di eliminazione di un record in sé non pone grossi problemi, l'unico aspetto da tenere sotto controllo è quello di evitare le cancellazioni accidentali. Per ovviare a questo problema useremo una funzione Javascript tra il click sul bottone e l'invio della richiesta al server, questa funzione chiederà conferma dell'operazione e solo una volta accettato procederemo con l'eliminazione del record.

Per velocizzare la scrittura del codice useremo jQuery, libreria molto diffusa e di facile utilizzo. Partiamo dal link che sarà creato in questo modo:

<a class="elimina" data-id="'.$row[$key].'"><span class="glyphicon glyphicon-trash"></span></a>

La funzione Javascript sarà inclusa in un file js esterno in modo da poterla utilizzare in tutte le pagine.

$(document).ready(function(){
	$('.elimina').on('click',function(){
		var id=$(this).data('id');
		var scelta=window.confirm('Sei sicuro di voler eliminare il record?');
		if(scelta){location.href='?azione=elimina&id='+id;}
	})
});

In pratica agganciamo l'evento click sui tag con classe elimina, andiamo a leggere il valore dell'id stampato nell'attributo custom data-id e mostriamo una finestra di conferma. Se l'utente accetta verrà ricaricata la pagina con azione elimina e con l'id del record da eliminare.

Nella classe PHP abbiamo un metodo elimina() che va a cancellare il record. Le due variabili che entrano in gioco, il nome della tabella e il valore dell'id, li abbiamo come proprietà dell'oggetto e quindi le informazioni necessarie sono al completo.

public function elimina(){
	global $db;
	$sql = 'DELETE FROM '.$this->tipo.' WHERE id='.$this->id.' LIMIT 1';
	$stmt3 = $db->prepare($sql);
	$stmt3->execute();
	}

Questo metodo provvede all'eliminazione fisica del record dal database.

Conclusioni

Con quest'ultimo passaggio abbiamo completato le operazioni CRUD, create-read-update-delete, raggiungendo l'obiettivo di gestire i dati nelle tabelle del nostro database senza dover riscrivere codici tutto sommato molto simili. Creeremo un file per inizializzare la classe settando la proprietà tipo con il nome della tabella e popoleremo la tabella struttura con i dati relativi alla nuova tabella, l'unica convenzione richiesta è il campo chiave id, ma volendo con qualche riga di codice in più anche questa convenzione potrebbe essere eliminata.

Ti consigliamo anche