Per completare la gestione dell'elenco degli album, creiamo un'interfaccia per l'eliminazione dei record.
1. Salva un nuovo file elimina.cfm nella cartella del sito contenente la query per prendere l'elenco degli album, e i due <cfinclude> per l'interfaccia grafica.
<!--- elimina.cfm: permette di eliminare gli album --->
<cfquery name="getAlbum" datasource="discoteca">
SELECT ID_ALBUM, ALBUM_TITOLO, ALBUM_IMG FROM ALBUM
ORDER BY ALBUM_TITOLO
</cfquery>
<cfinclude template="header.cfm">
<cfinclude template="footer.cfm">
Abbiamo aggiunto un "ORDER BY" nella stringa in SQL per ritornare l'elenco degli album ordinati per titolo.
2. Inserisci un titolo per la pagina e, all'interno di un <cfform>, un <cfselect> che visualizzi un menu a discesca con gli album:
<!--- elimina.cfm: permette di eliminare gli album --->
<cfquery name="getAlbum" datasource="discoteca">
SELECT ID_ALBUM, ALBUM_TITOLO, ALBUM_IMG FROM ALBUM
ORDER BY ALBUM_TITOLO
</cfquery>
<cfinclude template="header.cfm">
<p class="titolo">Elimina un album</p>
<p>
<cfform action="elimina.cfm">
Seleziona l'album da eliminare:
<cfselect name="ID" size="1" query="getAlbum" value="ID_ALBUM" display="ALBUM_TITOLO">
</cfselect>
<br><br>
<input type="Submit" value="Elimina">
</cfform>
<cfinclude template="footer.cfm">
<cfselect> crea un <select> HTML con i tag <option> già compilati. L'attributo query="getAlbum" indica la query da cui devono essere presi i dati; l'attributo value="ID_ALBUM" specifica i valori di ciascun <option>; l'attributo display="ALBUM_TITOLO" compila le etichette di ciascuna voce del menu.
Se apri il file elimina.cfm dal browser ("http://localhost:8500/discoteca/elimina.cfm") vedrai che il codice HTML della pagina comprende un <select> con i campi generati dinamicamente da ColdFusion.
Naturalmente, se avessimo voluto creare il form senza utilizzare <cfform> e <cfselect> avremmo potuto scrivere:
<!--- elimina.cfm: permette di eliminare gli album --->
<cfquery name="getAlbum" datasource="discoteca">
SELECT ID_ALBUM, ALBUM_TITOLO, ALBUM_IMG FROM ALBUM
ORDER BY ALBUM_TITOLO
</cfquery>
<cfinclude template="header.cfm">
<p class="titolo">Elimina un album</p>
<p>
<form action="elimina.cfm" method="post">
Seleziona l'album da eliminare:
<select name="ID" size="1">
<cfoutput query="getAlbum">
<option value="#ID_ALBUM#">#ALBUM_TITOLO#</option>
</cfoutput>
</select>
<br><br>
<input type="Submit" value="Elimina">
</form>
<cfinclude template="footer.cfm">
inserendo, cioè, un <cfoutput> sulla query "getAlbum" per generare ogni singola <option> del tag <select>.
Il form punta alla pagina elimina.cfm. Come per le pagine di inserimento e di modifica, aggiungiamo un controllo all'inizio del file per verificare se è stato inviato il form, controllando cioè che sia definita la variabile "form.id" (corrispondente al nome del <cfselect>).
3. Aggiungi un <cfif> prima del <cfquery>:
<!--- elimina.cfm: permette di eliminare gli album --->
<cfif isDefined('form.ID')>
<!--- elimina il record dal database e il file dal server --->
</cfif>
<cfquery name="getAlbum" datasource="discoteca">
SELECT ID_ALBUM, ALBUM_TITOLO FROM ALBUM
ORDER BY ALBUM_TITOLO
</cfquery>
<cfinclude template="header.cfm">
<p class="titolo">Elimina un album</p>
<p> .......
Per poter eliminare il file dell'immagine dell'album, dobbiamo 1) prendere dal database il nome del file; 2) eliminare fisicamente il file con <cffile action="delete"> dopo aver verificato che il campo ALBUM_IMG non sia vuoto.
4. Crea una query che prenda il campo ALBUM_IMG dalla tabella ALBUM relativo al record con ID_ALBUM uguale a quello inviato dal form:
<!--- elimina.cfm: permette di eliminare gli album --->
<cfif isDefined('form.ID')>
<!--- Prende il nome del file immagine dal database --->
<cfquery name="getFileImg" datasource="discoteca">
SELECT ALBUM_IMG FROM ALBUM
WHERE ID_ALBUM = #form.ID#
</cfquery>
</cfif>
<cfquery name="getAlbum" datasource="discoteca">
SELECT ID_ALBUM, ALBUM_TITOLO FROM ALBUM
ORDER BY ALBUM_TITOLO
</cfquery>
<cfinclude template="header.cfm">
<p class="titolo">Elimina un album</p>
<p> ......
5. Se il campo non è vuoto, elimina l'immagine dal server:
<!--- elimina.cfm: permette di eliminare gli album --->
<cfif isDefined('form.ID')>
<!--- Prende il nome del file immagine dal database --->
<cfquery name="getFileImg" datasource="discoteca">
SELECT ALBUM_IMG FROM ALBUM
WHERE ID_ALBUM = #form.ID#
</cfquery>
<!--- Elimina il file dal server --->
<cfif getFileImg.ALBUM_IMG NEQ "">
<cffile action="delete" file="C:CFusionMXwwwrootdiscotecaalbum#getFileImg.ALBUM_IMG#">
</cfif>
</cfif>
<cfquery name="getAlbum" datasource="discoteca">
SELECT ID_ALBUM, ALBUM_TITOLO FROM ALBUM
ORDER BY ALBUM_TITOLO
</cfquery>
<cfinclude template="header.cfm">
<p class="titolo">Elimina un album</p>
<p> ......
6. Per eliminare il record dal database usiamo <cfquery> e il comando SQL "DELETE WHERE":
<!--- elimina.cfm: permette di eliminare gli album --->
<cfif isDefined('form.ID')>
<!--- Prende il nome del file immagine dal database --->
<cfquery name="getFileImg" datasource="discoteca">
SELECT ALBUM_IMG FROM ALBUM
WHERE ID_ALBUM = #form.ID#
</cfquery>
<!--- Elimina il file dal server --->
<cfif getFileImg.ALBUM_IMG NEQ "">
<cffile action="delete" file="C:CFusionMXwwwrootdiscotecaalbum#getFileImg.ALBUM_IMG#">
</cfif>
<!--- Elimina il record dal database --->
<cfquery name="delete" datasource="discoteca">
DELETE FROM ALBUM
WHERE ID_ALBUM = #form.ID#
</cfquery>
</cfif>
<cfquery name="getAlbum" datasource="discoteca">
SELECT ID_ALBUM, ALBUM_TITOLO FROM ALBUM
ORDER BY ALBUM_TITOLO
</cfquery>
<cfinclude template="header.cfm">
<p class="titolo">Elimina un album</p>
<p> ......
7. Definiamo ora una variabile che contenga un messaggio quando l'eliminazione è avvenuta, che visualizzeremo dopo l'intestazione:
<!--- elimina.cfm: permette di eliminare gli album --->
<cfif isDefined('form.ID')>
<!--- Prende il nome del file immagine dal database --->
<cfquery name="getFileImg" datasource="discoteca">
SELECT ALBUM_IMG FROM ALBUM
WHERE ID_ALBUM = #form.ID#
</cfquery>
<!--- Elimina il file dal server --->
<cfif getFileImg.ALBUM_IMG NEQ "">
<cffile action="delete" file="C:CFusionMXwwwrootdiscotecaalbum#getFileImg.ALBUM_IMG#">
</cfif>
<!--- Elimina il record dal database --->
<cfquery name="delete" datasource="discoteca">
DELETE FROM ALBUM
WHERE ID_ALBUM = #form.ID#
</cfquery>
<!--- Dichiarazione di una variabile per confermare l'eliminazione --->
<cfset eliminazioneOK = 'L''album è stato eliminato.'>
</cfif>
<cfquery name="getAlbum" datasource="discoteca">
SELECT ID_ALBUM, ALBUM_TITOLO FROM ALBUM
ORDER BY ALBUM_TITOLO
</cfquery>
<cfinclude template="header.cfm">
<cfif isDefined('eliminazioneOK')>
<cfoutput>#eliminazioneOK#</cfoutput>
</cfif>
<p class="titolo">Elimina un album</p>
<p> ......
Prova ora ad eliminare gli album collegandoti alla pagina "http://localhost:8500/discoteca/elimina.cfm". Se vuoi confrontare il tuo file elimina.cfm con quello che ho scritto io, puoi scaricarlo da qui.