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.

Se vuoi aggiornamenti su Development inserisci la tua email nel box qui sotto:

Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.

Ti consigliamo anche