Editor  »  Guide  »  Guida Coldfusion Mx 

Modificare i record esistenti - I



Il principio di un sistema di aggiornamento dei record è lo stesso che abbiamo usato per l'inserimento: bisogna creare un modulo e scrivere il codice CFML per fare l'aggiornamento della tabella del database.

1. Crea un nuovo file aggiornamento.cfm e salvalo nella cartella del sito, dopo aver inserito i due <cfinclude> per l'intestazione e il piede della pagina:

<!--- aggiornamento.cfm: permette di aggiornare gli album --->

<cfinclude template="header.cfm">

<cfinclude template="footer.cfm">

Il modulo di aggiornamento, ovviamente, deve avere i campi già compilati con i valori attualmente presenti nel database. A questo file dovrà essere passato il valore univoco (id) dell'album che vogliamo aggiornare. Questo valore possiamo passarlo via URL come abbiamo fatto nell'index.cfm, per creare il link alla pagina di dettaglio.

2. Aggiungi nella pagina dettaglio.cfm un link a aggiornamento.cfm, che passi via URL l'ID dell'album visualizzato. Possiamo aggiungere il link prima dell'inclusione del footer.cfm

<!--- dettaglio.cfm: mostra il dettaglio dell'album --->

<!--- Esegue una query al datasource "discoteca" chiamata "getdettaglio" --->
<cfquery datasource="discoteca" name="getdettaglio">
     SELECT *
     FROM ALBUM
     WHERE ID_ALBUM = #URL.id#
</cfquery>

<cfoutput query="getdettaglio">
.........
</cfoutput>

<p>
<cfoutput>
<!--- Link alla pagina di aggiornamento dell'album --->
     <a href="aggiornamento.cfm?id=#getdettaglio.ID_ALBUM#">Modifica questo album</a>
</cfoutput>
</p>

<!--- Include il piede delle pagine --->
<cfinclude template="footer.cfm">

Come puoi notare, abbiamo inserito il link fuori da <cfoutput query="getdettaglio">...</cfoutput>. Per questo motivo, per poter creare il link con il valore preso dalla query "getdettaglio" hai bisogno di un altro <cfoutput>. Quando il record estratto dalla query è uno solo, come in questo caso, possiamo evitare di inserire l'attributo "query" nel <cfoutput>. Quando vogliamo richiamare un campo del recordset dobbiamo però specificare da quale query esso proviene. Per questo motivo, abbiamo dato alla variabile "ID_ALBUM" lo scope "getdettaglio" (analogamente avevamo fatto nel file index.cfm con la variabile RecordCount).

3. Nella pagina aggiornamento.cfm creiamo la query che interroghi la tabella ALBUM - filtrando i record in base all'id proveniente dall'URL:

<!--- aggiornamento.cfm: permette di aggiornare gli album --->

<cfquery name="getAlbum" datasource="discoteca">
     SELECT * FROM ALBUM
     WHERE ID_ALBUM = #url.id#
</cfquery>

<cfinclude template="header.cfm">

<cfinclude template="footer.cfm">

4. ora possiamo aggiungere il <cfform> già compilato con i dati provenienti dalla query GetAlbum. Possiamo utilizzare lo stesso che abbiamo scritto per il file inserimento.cfm, aggiungendo il campo "value" per ciascun campo del modulo. Ovviamente, per poter visualizzare il contenuto dei campi del recordset dobbiamo inserire questi all'interno di un <cfoutput>:

<!--- aggiornamento.cfm: permette di aggiornare gli album --->

<cfquery name="getAlbum" datasource="discoteca">
     SELECT * FROM ALBUM
     WHERE ID_ALBUM = #url.id#
</cfquery>

<cfinclude template="header.cfm">

<p class="titolo">Aggiornamento dell'album</p>

<cfoutput>

<cfform action="aggiornamento.cfm" enctype="multipart/form-data">

     <table>
          <tr>
          <td>
               <p>Titolo: </p>
          </td>
          <td>
               <cfinput name="ALBUM_TITOLO" type="text" size="30" maxlength="150" required="yes" message="Inserisci un titolo per questo album." value="#getAlbum.ALBUM_TITOLO#">
          </td>
          </tr>
          <tr>
          <td>
               <p>Autore: </p>
          </td>
          <td>
               <cfinput name="ALBUM_AUTORE" type="text" size="30" maxlength="150" required="yes" message="Inserisci un autore per questo album." value="#getAlbum.ALBUM_AUTORE#">
          </td>
          </tr>
          <tr>
          <td>
               <p>Etichetta: </p>
          </td>
          <td>
               <cfinput name="ALBUM_ETICH" type="text" size="30" maxlength="150" required="yes" message="Inserisci l'etichetta di questo album." value="#getAlbum.ALBUM_ETICH#">
          </td>
          </tr>
          <tr>
          <td valign="top">
               <p>Descrizione:</p>
          </td>
          <td>
               <textarea name="ALBUM_DESCR" cols="30" rows="5">#getAlbum.ALBUM_DESCR#</textarea>
          </td>
          </tr>
          <tr>
          <td>
               <p>Genere: </p>
          </td>
          <td>
               <cfinput name="ALBUM_GENERE" type="text" size="30" maxlength="150" required="yes" message="Inserisci il genere della musica di questo album." value="#getAlbum.ALBUM_GENERE#">
          </td>
          </tr>
          <tr>
          <td>
               <p>Immagine: </p>
          </td>
          <td>
               <input name="ALBUM_IMG" type="file" size="30">
          </td>
          </tr>
          <tr>
          <td></td>
          <td>
               <input type="submit" value="Aggiorna record">
          </td>
          </tr>
     </table>
</cfform>

</cfoutput>

<cfinclude template="footer.cfm">

Non possiamo però mettere il valore di "ALBUM_IMG" nel campo per l'invio del file. Possiamo però visualizzare la vecchia immagine e fare in modo che se ne possa inserire una nuova.

5. Cambia perciò la riga della tabella con il campo <input name="ALBUM_IMG" type="file" size="30"> così:

........
     <tr>
          <td>
               <p>Nuova immagine: </p>
          </td>
          <td>
               <input name="ALBUM_IMG" type="file" size="30">
          </td>
     </tr>
     
<cfif getAlbum.ALBUM_IMG NEQ "">
     <tr>
          <td valign="top">
               <p>Vecchia immagine: </p>
          </td>
          <td>
               <img src="album/#getAlbum.ALBUM_IMG#">
          </td>
     </tr>
</cfif>

........

Poiché non sempre un album possiede un'immagine, abbiamo dovuto inserire il controllo con <cfif> prima di creare la riga per mostrare la "vecchia" immagine.

Nota che il <cfform>, tramite l'attributo "action", punta al file aggiornamento.cfm. Nello stesso file quindi inseriremo la logica per aggiornare il record. Per sapere però quale è il record da aggiornare, dobbiamo passare insieme al form anche l'ID dell'album. Questo valore non deve essere modificato, né abbiamo interesse che sia visualizzato nel modulo. Possiamo quindi utilizzare un campo <input type="hidden">.

6. Inserisci all'interno del <cfform> il campo hidden che contenga l'ID dell'album:

...........
<p class="titolo">Aggiornamento dell'album</p>


<cfoutput>

<cfform action="aggiornamento.cfm" enctype="multipart/form-data">
<input type="hidden" name="ID_ALBUM" value="#getAlbum.ID_ALBUM#">

     <table>
          <tr>
          <td> ...........

anche il nome di questo campo, come abbiamo fatto per gli altri, deve essere lo stesso del corrispondente nel database.

Sarà utile anche avere il nome del file immagine corrente.

7. Analogamente, inserisci un campo hidden nel form che contenga il vecchio nome del file. In questo caso non ci interessa che il nome del campo sia ALBUM_IMG, che tra l'altro è già assegnato al campo <input type="file">. Chiamiamolo ad esempio "vecchiaImmagine":

...........
<p class="titolo">Aggiornamento dell'album</p>


<cfoutput>

<cfform action="aggiornamento.cfm" enctype="multipart/form-data">
<input type="hidden" name="ID_ALBUM" value="#getAlbum.ID_ALBUM#">
<input type="hidden" name="vecchiaImmagine" value="#getAlbum.ALBUM_IMG#">

     <table>
          <tr>
          <td> ...........

A questo punto il form è completo. Salva i file che hai modificato e prova ad aprire il file aggiornamento.cfm tramite il link che abbiamo messo in fondo a ciascuna scheda dell'album. Nella prossima lezione vedremo come agire sul DataBase.

Ultimi articoli Editor

Adobe Edge, la prima animazione HTML5

Come creare una animazione HTML5 con Adobe Edge, esempio completo

Adobe Edge, l'interfaccia

Esaminiamo pannelli e menu del tool gratuito di Adobe per la...

Trasformazioni XSLT in Dreamweaver 8

Primo sguardo agli strumenti XML: trasformare un feed RSS

Layout senza tabelle con Dreamweaver 8

Esaminiamo gli strumenti CSS avanzati del software di Adobe/Macromedia

Il nuovo Dreamweaver 8

Panoramica delle principali novità dell'ultima release del popolare...

Altri articoli

Guide Editor

Guida WebMatrix

Entrare nel mondo dello sviluppo di applicazioni Web con Webmatrix,...

Guida Notepad++

Un editor testuale che funziona perfettamente anche come editor HTML...

Guida Aptana

Creare siti Web o applicazioni con Aptana, l'editor open source,...

Altre guide

Newsletter @Daily HTML.it

Ogni mattina, dal lunedì al venerdì, le novità pubblicate su tutti i siti tecnici del network HTML.it: articoli, guide, notizie dal Web, blog e molto altro.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Webmaster base

18 Giugno 2012 a Milano
Disponibilità: 6 Posti

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti

Corso Webmaster base

11 Giugno 2012 a Roma
Disponibilità: 7 Posti