ΚΕΝΤΡΟ ΠΛΗ.ΝΕ.Τ. Ν. ΦΛΩΡΙΝΑΣ

Επεξεργασία Βάσεων Δεδομένων με την
CFML (ColdFusion Markup Language)

 

Καταχώρηση Δεδομένων σε μια Βάση Δεδομένων

Θα δούμε με ποιον τρόπο μπορούμε να καταχωρήσουμε δεδομένα σε μια βάση δεδομένων χρησιμοποιώντας τη γλώσσα προγραμματισμού CFML (ColdFusion Markup Language).

Θα χρειασθεί να έχουμε μια σελίδα φόρμας (form page) και μια σελίδα ενέργειας (action page). Η form page είναι η σελίδα όπου ο χρήστης θα καταχωρήσει τα δικά του δεδομένα και η action page είναι εκεί όπου η ColdFusion θα καταχωρήσει αυτά τα δεδομένα σε μια βάση δεδομένων (database) στον server.

Θα δούμε πρώτα την form page. Δημιουργούμε μια καινούργια σελίδα και την ονομάζουμε form.cfm. Μετά γράφουμε τον παρακάτω κώδικα :

<HTML>

<HEAD>

<TITLE> Αυτή είναι η σελίδα φόρμας (form page) </TITLE>

</HEAD>

<BODY>

<FORM ACTION="action.cfm" METHOD="post">

<input type="text" name="firstname" value=""> - Όνομα <BR>

<input type="text" name="lastname" value=""> - Επώνυμο <BR>

<input type="text" name="email" value=""> - e-mail <BR>

<textarea name="message" rows="7" cols="40"></textarea><BR>

<font size="1" face="verdana"> Επιπλέον Μήνυμα </font>

<input type="submit" name="Submit" value="">

</FORM>

</BODY>

</HTML>

Ο παραπάνω κώδικας δημιουργεί μια φόρμα που δίνει τη δυνατότητα σ’ έναν επισκέπτη να καταχωρήσει το επώνυμο, το όνομα, το e-mail και ένα σύντομο μήνυμά του για μας. Μπορούμε να την φανταστούμε σαν μια φόρμα επαφής (contact form), έτσι ώστε οι πελάτες μας να μπορούν να μας στείλουν ένα e-mail και να μας υποβάλλουν μια ερώτηση.

Όταν ο χρήστης κάνει κλικ στο πλήκτρο υποβολής (submit), θα κατευθυνθεί στη σελίδα action.cfm μαζί μ’ όλα τα στοιχεία που έχει καταχωρήσει. Η action.cfm είναι η σελίδα που θα χρησιμοποιήσει ο ColdFusion server για να επεξεργαστεί τα στοιχεία, να τα αποθηκεύσει σε μια δική του βάση δεδομένων και μετά να μας στείλει ένα αντίγραφο του e-mail με τα στοιχεία του επισκέπτη.

Δημιουργούμε μια καινούργια σελίδα και την ονομάζουμε action.cfm, η οποία θα αποτελείται από κανονικό κώδικα HTML καθώς και από κώδικα επεξεργασίας της ColdFusion.

Ο κώδικας της σελίδας είναι ο εξής :

<HTML>
<HEAD>

<CFOUTPUT>

<TITLE> Ευχαριστούμε #firstname# #lastname# για την υποβολή των στοιχείων σας!

</TITLE>

</CFOUTPUT>

</HEAD>

<BODY>

<!--- Πρώτα θα καταχωρήσουμε αυτά τα στοιχεία στη βάση δεδομένων για ασφάλεια --->

<CFINSERT DATASOURCE="YourDSN" TABLENAME="TableName"

FORMFIELDS="firstname, lastname, email, message">

<!--- Τώρα θα στείλουμε με e-mail ένα αντίγραφο της υποβολής σε μας --->

<CFMAIL FROM="#form.email#" TO="youremail@yourisp.com"

SUBJECT="Submission from website!"

SERVER="mail.yoursite.com"

PORT="25">

Έγινε μια υποβολή φόρμας στο site μας, με τα εξής στοιχεία :

Sender name : #form.firstname# #form.lastName#

Sender email : #form.email#

Sender IP : #REMOTE_ADDR#

Message : #Message#

Message Sent : #DateFormat(now(), 'mmmm dd, yyyy')#

#TimeFormat(Now(), 'hh:mm:ss tt')#

</CFMAIL>

<!--- Τώρα θα στείλουμε ένα e-mail σ’ αυτόν που υπέβαλε τη φόρμα, ευχαριστώντας τον για την υποβολή της --->

<CFMAIL FROM="youremail@yourisp.com" TO="#form.email#"

SUBJECT="Thank you for submitting our form!"

SERVER="mail.yoursite.com"

PORT="25">

Αγαπητέ/ή #form.firstname# #form.lastname#,

Ευχαριστούμε για την υποβολή της Contact Form. Σας στέλνουμε ένα αντίγραφο

από αυτά που υποβάλατε.

Ευχαριστούμε,

Όνομα-Επώνυμο

Εταιρεία

Submission Receipt :

====================================
Sender name : #form.firstname# #form.lastName#

Sender email : #form.email#

Sender IP : #REMOTE_ADDR#

Message : #Message#

Message Sent : #DateFormat(now(), 'mmmm dd, yyyy')#

#TimeFormat(Now(), 'hh:mm:ss tt')#

</CFMAIL>

<!--- Τώρα θα πρέπει να εμφανίσουμε κάτι στη σελίδα για να γνωρίζει ο χρήστης ότι η υποβολή που έκανε ήταν επιτυχής --->

<CFOUTPUT>

Ευχαριστούμε #form.firstname# #form.lastname#, έχουμε λάβει επιτυχώς

την αίτησή σας και την στείλαμε στο αντίστοιχο τμήμα. Ένα αντίγραφο από την

υποβολή της φόρμας στάλθηκε επίσης στην e-mail διεύθυνση που δώσατε.

<BR>

<BR>

Ευχαριστούμε,<BR>

Όνομα-Επώνυμο<BR>

Εταιρεία

</CFOUTPUT>

</BODY>
</HTML>

Θα εξηγήσουμε με λεπτομέρειες τι κάνει ο παραπάνω κώδικας. Πρώτα απ’ όλα, βλέπουμε ότι στο τμήμα επικεφαλίδας (heading section) της σελίδας, ακριβώς πριν και μετά από τα tags <title> και </title>, τοποθετήσαμε ένα tag <CFOUTPUT>, έτσι ώστε να μπορεί να δει ο χρήστης το όνομά του στον τίτλο της σελίδας.

Πρέπει να έχουμε υπόψη μας ότι ο,τιδήποτε υπάρχει ανάμεσα στα tags <CFOUTPUT> με τον χαρακτήρα # γύρω του, θα επεξεργαστεί και θα επιστραφεί μια τιμή, δηλ. σ’ αυτήν την περίπτωση το όνομα και το επώνυμο του χρήστη.

Το επόμενο που μας ενδιαφέρει είναι το tag <CFINSERT>, το οποίο είναι ένα εσωτερικό tag επεξεργασίας της ColdFusion που μας δίνει τη δυνατότητα να εισάγουμε δεδομένα σε μια βάση δεδομένων πολύ πιο εύκολα και γρήγορα σε σχέση με τον παραδοσιακό τρόπος της χρήσης του tag <CFQUERY>. Αυτό το tag χρειάζεται τον ορισμό μερικών τιμών για να μπορέσει να λειτουργήσει σωστά. Αυτές είναι οι εξής :

Το επόμενο που κάναμε ήταν ότι χρησιμοποιήσαμε το tag <CFMAIL>, το οποίο λέει στην ColdFusion ότι θέλουμε να στείλουμε ένα μήνυμα e-mail από το site μας. Αυτό το tag χρειάζεται μερικές τιμές, οι οποίες είναι οι εξής :

Μερικές συναρτήσεις που χρησιμοποιήσαμε μέσα στη φόρμα είναι οι εξής :

Το τελευταίο tag που χρησιμοποιήσαμε είναι το <CFOUTPUT>. Είναι το tag που χρησιμοποιεί η ColdFusion για να επεξεργαστεί τις τιμές. Χωρίς αυτό το tag, το πεδίο #form.firstname# δεν θα τύχει επεξεργασίας και θα εμφανισθεί έτσι σαν #form.firstname# αντί για "bob".

Έχουμε δημιουργήσει με επιτυχία μια φόρμα υποβολής (submit form) η οποία εισάγει δεδομένα σε μια βάση δεδομένων και μετά στέλνει ένα e-mail σε μας και τον επισκέπτη μας ταυτόχρονα.

 

Δημιουργία ενός Hit Counter

Σήμερα, η ύπαρξη ενός μετρητή επισκέψεων (hit counter) σ’ ένα website είναι βασική, για να μπορούμε να βρίσκουμε πόσοι επισκέπτες ήρθαν στο site μας, ποιοι είναι αυτοί και αν είναι δυνατό και από πού ήρθαν. Με την ColdFusion είναι εύκολο να δημιουργήσουμε έναν απλό hit counter, χρησιμοποιώντας μια βάση δεδομένων για να αποθηκεύσουμε την τρέχουσα μέτρηση.

Το πρώτο μας παράδειγμα παρακολουθεί (καταγράφει, tracks) μόνο πόσες φορές έχει επισκεφθεί ή αναεωθεί μια σελίδα. Αν και αυτός ο μετρητής δεν θα μας δώσει λεπτομερή στατιστικά στοιχεία, μπορούμε εύκολα να τροποποιήσουμε τον πίνακά μας για να συμπεριλάβουμε στήλες για την παρακολούθηση (καταγραφή, tracking) στοιχείων όπως η ΙΡ διεύθυνση του επισκέπτη, το είδος του φυλλομετρητή και η σελίδα αναφοράς (referring page). Θα τα δούμε αυτά αργότερα.

 

Δημιουργία Πινάκων στην ColdFusion

Θα χρειασθούμε κατ’ αρχάς έναν πίνακα (table) στη βάση δεδομένων μας για να αποθηκεύσουμε τον αριθμό των επισκέψεων (hits). Θα δούμε πώς μπορούμε να δημιουργήσουμε έναν πίνακα χρησιμοποιώντας ColdFusion και κώδικα SQL. Αυτός ο πίνακας μπορεί να δημιουργηθεί ακόμη κι όταν δεν έχουμε απευθείας πρόσβαση στη βάση δεδομένων μας.

Ο συγκεκριμένος πίνακας hit_counter αποθηκεύει τον αριθμό των hits που έχει λάβει μια ιστοσελίδα (web page) σ’ ένα πεδίο ακεραίου με όνομα hit_count, για να μπορούμε να παρακολουθούμε έτσι τον αριθμό των επισκέψεων στην ιστοσελίδα μας.

Μπορούμε να στείλουμε με FTP το παρακάτω παράδειγμα δημιουργίας πίνακα στον web server και να το εκτελέσουμε γράφοντας το όνομα του αρχείου στον φυλλομετρητή (browser). Στη συγκεκριμένη περίπτωση, το αρχείο ονομάζεται createcounter.cfm. Αν η εντολή CFQUERY δημιουργήσει με επιτυχία τον πίνακα, θα δούμε το μήνυμα "Table Created!" στο παράθυρο του φυλλομετρητή.

Syntax - createcounter.cfm

<html>

<head>

<title> My Counter </title>

</head>
<body>

<cfquery datasource="YOUR_DATASOURCE" name="create">

create table hit_counter (hit_count int null)

</cfquery>

Table Created!

</body>

</html>

Μπορούμε και να διαγράψουμε πίνακες στην SQL με την εντολή DROP TABLE.

Syntax - DropCounter.cfm

<html>

<head>

<title> My Counter </title>

</head>

<body>

<cfquery datasource="YOUR_DATASOURCE" name="create">

drop table hit_counter

</cfquery>

Table Dropped!

</body>

</html>

Η Listing 2 παρακάτω δείχνει πώς μπορούμε να ενημερώσουμε (update) και να εμφανίσουμε τα αποτελέσματα του μετρητή (counter) σε μια συγκεκριμένη ιστοσελίδα. Στη γραμμή A ελέγχουμε για να διαπιστώσουμε πόσα hits υπάρχουν στη βάση δεδομένων. Ακολουθείται από μερικά ερωτήματα CFIF τα οποία ελέγχουν τον αριθμό και ενημερώνουν το πεδίο hit count στη βάση δεδομένων κάθε φορά που επισκέπεται ή  ανανεώνεται η ιστοσελίδα.

Στη γραμμή B ελέγχουμε για να διαπιστώσουμε αν υπάρχει ένας αριθμός στη βάση δεδομένων, δηλ. τουλάχιστον 1. Όταν δημιουργήσαμε τον πίνακα παραπάνω δεν εισάγαμε έναν αριθμό στη βάση δεδομένων. Ο παρακάτω κώδικας είναι χρήσιμος για να καλύψουμε και την περίπτωση που δεν υπάρχει κάποια εγγραφή στον μετρητή (counter).

Αν δεν το κάνουμε αυτό, η μεταβλητή hit_count θα είναι null και όχι 0, κάτι που θα προκαλέσει ένα λάθος (error) όταν θα προσπαθήσουμε να την χρησιμοποιήσουμε στις γραμμές C και D. Χρησιμοποιώντας το query CreateHit, ο hit counter θα ξεκινήσει με την τιμή 1 αν είναι εντελώς καινούργιος.

Η γραμμή C εμφανίζει τον πραγματικό αριθμό των hits στην ιστοσελίδα. Και η γραμμή D θα αυξήσει τον τρέχοντα αριθμό των hits στη βάση δεδομένων κατά 1 για κάθε καινούργιο επισκέπτη της ιστοσελίδας.

Listing 2

Τοποθετούμε τον παρακάτω κώδικα σε μια ιστοσελίδα για να εμφανισθεί ο μετρητής (counter) :

A.   <cfquery name="GetHits" datasource="YOUR_DATASOURCE">

SELECT hit_count FROM hit_counter

</cfquery>

B.   <CFIF GetHits.recordcount is 0>

          <cfquery name="CreateHit" datasource="YOUR_DATASOURCE">

INSERT hit_count( hit_count) VALUES (1)

</cfquery>

Hits : 0

C.   <cfelse>

Hits : <CFOUTPUT query="GetHits">#hit_count#</cfoutput>

</cfif>

D.   <cfquery name="updateHits" datasource="YOUR_DATASOURCE">

UPDATE hit_count SET hit_count = hit_count + 1

</cfquery>

Η χρήση αυτού του απλού hit counter αποτελεί μια καλή αρχή αλλά μπορούμε να τροποποιήσουμε τον παραπάνω κώδικα και να προσθέσουμε περισσότερες πληροφορίες για τους επισκέπτες της βάσης δεδομένων μας.

 

Σύνθετος Μετρητής και Παρακολούθηση του Χρήστη

Ακολουθεί ο κώδικας για έναν πιο σύνθετο μετρητή (complex counter). Σ’ αυτήν την περίπτωση, θέλουμε να αποθηκεύσουμε την κάθε επίσκεψη στη σελίδα (page hit) αλλά και να παρακολουθούμε (track) τους επισκέπτες μεμονωμένα. Αυτός ο κώδικας τοποθετείται συνήθως στο αρχείο application.cfm file ή σ’ ένα header.cfm include αρχείο.

Listing 3

A. Αναγνώριση του χρήστη από το cookie :

<CFIF isdefined("Cookie.user_id")>

<CFSET user_id=trim(Cookie.user_id)>

<CFELSE>

<CFSET user_id="">

</CFIF>


B. Λήψη των πληροφοριών της σελίδας (page referrer information) :

<CFSET address = cgi.remote_addr>

<CFSET host = cgi.remote_host>

<CFSET referer = cgi.http_referer>

<CFSET agent = cgi.http_user_agent>

<CFSET page = cgi.script_name>

<CFIF NOT Len(host)>

<CFSET host = "unknown">

</CFIF>

<CFIF NOT LEN(referer)>

<CFSET referer = "unknown">

</CFIF>

Για να μπορούμε να παρακολουθούμε τους επισκέπτες, χρησιμοποιούμε ένα cookie που καλείται user_id. Ο κώδικας στο μέρος Α παραπάνω ελέγχει για να διαπιστώσει αν υπάρχει το cookie και αντιγράφει το ID σε μια μεταβλητή σελίδας (page variable) που καλείται user_id. Αλλιώς, θέτουμε εξ ορισμού το user_id ίσο με "", έτσι ώστε να μην συναντήσουμε αργότερα στον κώδικα λάθη με μη ορισμένες μεταβλητές.

Μετά, στο μέρος Β, ορίζουμε τις μεταβλητές σελίδας για την ΙΡ διεύθυνση του χρήστη, το όνομα του μηχανήματος κ.ά., χρησιμοποιώντας τις στάνταρτ CGI μεταβλητές της ColdFusion. Ακολουθεί μια λίστα μερικών απ’ αυτές τις μεταβλητές.

CGI Μεταβλητή

Νόημα

Παράδειγμα

Remote_addr

IP διεύθυνση του χρήστη

123.23.45.78

Remote_host

Όνομα του μηχανήματος του χρήστη

user147.mycomp.com

http_referer

Σύνδεσμος (link)

Αυτή η σελίδα προήλθε από

http://www.teratech.com/press.cfm

http_user_agent

Είδος του φυλλομετρητή του χρήστη

Mozilla/4.7 [en] (WinNT; U)

Script_name

Όνομα του αρχείου CFM που εκτελείται

/press/CFConfAndByteBack.CFM

Εκτός από το user id, δίνουμε σε πολλούς από τους χρήστες μας μια μεταβλητή με όνομα custno η οποία μπορεί να μεταβιβασθεί σ’ ένα URL από ένα e-mail που δημιουργείται από την ColdFusion ή μέσω μιας μεταβλητής συνόδου (session variable). Στη δεύτερη περίπτωση, δίνουμε προκαθορισμένη τιμή στη μεταβλητή σελίδας custno από τη μεταβλητή συνόδου στο μέρος C.

Listing 3 (συνεχίζεται)

C. Track any customer by session :

<CFIF not isdefined("custno")>

<CFIF isdefined("session.custno")>

<cfset custno = session.custno>

</cfif>

</cfif>


D. Αν ο χρήστης δεν έχει βρεθεί εδώ νωρίτερα, δημιουργούμε ένα ID και ένα cookie γι’ αυτόν :

<CFIF NOT LEN(user_id)>

<CFQUERY NAME="CreateUser" DATASOURCE="webserver">

insert into ClientInfo (RemoteAddress, RemoteHost,

Referer, UserAgent, page) values ('#address#', '#host#',

'#referer#', '#agent#', '#page#')

</CFQUERY>

 

<CFQUERY NAME="MakeCookie" DATASOURCE="webserver">

SELECT max(id) as high from clientinfo

</CFQUERY>

 

<CFOUTPUT QUERY="MakeCookie">

<CFSET cook = high>

<CFSET user_id = high>

</CFOUTPUT>

 

<CFCOOKIE NAME="user_id" VALUE="#cook#"

EXPIRES="never">

<CFELSE>

Μετά, στο D, αρχίζουμε να δημιουργούμε τις εγγραφές (tracking records). Για τους καινούργιους χρήστες δημιουργούμε μια εγγραφή ClientInfo και ένα cookie βασισμένα στο ID χρησιμοποιώντας το tag <CFCOOKIE>.

Για τους υπάρχοντες χρήστες προσθέτουμε μια καινούργια εγγραφή στον πίνακα ClientTrack για το δικό τους userid (μέρος E). Μ’ αυτόν τον τρόπο μπορούμε να παρακολουθούμε την κάθε σελίδα που επισκέπεται ένας συγκεκριμένος χρήστης.

Listing 3 (συνεχίζεται)

E. Προσθήκη εγγραφής παρακολούθησης για υπάρχοντα χρήστη :

<CFQUERY NAME="TrackUser" DATASOURCE="webserver">

insert into ClientTrack (Id, RemoteAddress, RemoteHost, Referer, UserAgent, page, custno)

values ('#user_id#', '#address#', '#host#', '#referer#', '#agent#', '#page#',

<CFIF isdefined("custno")>

'#custno#'

<cfelse>

''

</cfif>

</CFQUERY>

</CFIF>

Τέλος, στα μέρη F, G και H, ορίζουμε τη μεταβλητή συνόδου custno και ενημερώνουμε τη βάση δεδομένων ClientInfo με την custno.

Listing 3 (συνεχίζεται)

F. Αν η μεταβλητή custno μεταβιβάσθηκε μέσω ενός URL (από e-mail για παράδειγμα), την αποθηκεύουμε στη βάση δεδομένων του χρήστη :

<CFIF isdefined("custno")>

<CFQUERY NAME="UpdateUser"

DATASOURCE="webserver">

update ClientInfo

<CFIF isdefined("custno")>

set custno ='#custno#',

<cfelse>

set custno =custno,

</cfif>

where ID = #user_id#

</CFQUERY>

<CFIF isdefined("custno")>

<cfset session.custno = custno>

</cfif>

<cfelse>

G. Αλλιώς, προσπαθούμε να ορίσουμε τον αριθμό custno από μια προηγούμενη επίσκεψη :

<CFQUERY NAME="GetUser" DATASOURCE="webserver">

SELECT custno, id

FROM ClientInfo

where ID = #user_id#

</CFQUERY>

H. Ορίζουμε τη μεταβλητή συνόδου για χρήση από άλλες σελίδες :

<CFIF GetUser.custno is not "">

<cfset session.custno = GetUser.custno>

</cfif>

</cfif>

 

Δημιουργία Σελίδας Επαφής (Contact Page)

Θα ελέγξουμε τώρα για να διαπιστώσουμε αν κάποιος έχει ήδη συμπληρώσει τη φόρμα. Αν ναι, τότε ένα κρυμμένο πεδίο με όνομα Process θα έχει την τιμή 1 και η φόρμα θα αρχίσει να επεξεργάζεται.

Αν το πεδίο process έχει την τιμή 1 (One), κάνουμε τα εξής :

<CFIF IsDefined("process")>

<!--- Στέλνουμε το μήνυμα σε μας όταν ο χρήστης το στείλει στο
site μας --->

<CFMAIL to="webmaster@yoursite.com" from="#ContactEmail#"

Subject="Contact From YourSite.Com"

SERVER="mail.cfm-resources.net"

port="25">
#ContactMessage#

Message By : #ContactName# - #ContactEmail#

==========================

</CFMAIL>
<!--- Στέλνουμε ένα μήνυμα στον χρήστη ευχαριστώντας τον και υπενθυμίζοντάς του τι έχει γράψει --->

<CFMAIL to="#ContactEmail#" from="From Email"

Subject="The Subject!"

SERVER="mail.cfm-resources.net"

port="25">

Ευχαριστούμε για το μήνυμά σας. Θα έρθουμε σύντομα σε επαφή μαζί σας.

Όνομα-Επώνυμο – Webmaster

Webmaster@Yoursite.Com

Γράψατε :

#ContactMessage#

Μήνυμα από τον : #ContactName# - #ContactEmail#

==========================
</CFMAIL>
Ευχαριστούμε για το μήνυμά σας!

Αν το Process δεν είναι ορισμένο, θα εμφανίσουμε τη φόρμα :

<CFELSE>

<cfform action="contact.cfm" method="post">

<input type="hidden" name="Process" Value="1">

<table align="center" border="0" width="100%">

<tr>

<td width="40%" valign="top" align="right">Name:&nbsp; </td>

<td width="60%"><cfinput type="text" name="ContactName"

size="20" required="yes" message="Please Enter Your Name!">

</td>

</tr>

<tr>

<td width="40%" valign="top" align="right">Email:&nbsp; </td>

<td width="60%"><cfinput type="text" name="ContactEmail"

size="20" required="yes" message="Please Enter Your Email

Address!"> </td>

</tr>

<tr>

<td width="40%" valign="top" align="right">Message:&nbsp; </td>

<td width="60%"><textarea rows="4" name="ContactMessage"

cols="20"></textarea></td>

</tr>
<tr>

<td width="40%" valign="top" align="right"></td>

<td width="60%"><input type="submit" value="Submit Contact

Form">

</td>

</tr>

</table>

</cfform>

</CFIF>

Αυτή είναι η σελίδα επαφής (contact page) της ColdFusion.

 

Ανάκτηση Εγγραφών από μια Βάση Δεδομένων

Θα δούμε τώρα πώς μπορούμε να ρωτήσουμε (query) μια βάση δεδομένων και να εμφανίσουμε το αποτέλεσμα στο site μας. Όταν θέλουμε να ανακτήσουμε και να εμφανίσουμε εγγραφές (records) από μια βάση δεδομένων, η ColdFusion αποτελεί τον πιο εύκολο και γρήγορο τρόπο για να το πετύχουμε.

Θα δούμε πώς μπορούμε να ρωτήσουμε (query) μια βάση δεδομένων με το tag <CFQUERY> και μετά να εμφανίσουμε τις εγγραφές με το tag <CFOUTPUT>. Το πρώτο μας βήμα θα είναι να κάνουμε ένα ερώτημα στη βάση δεδομένων για όλες τις εγγραφές που περιέχει.

<!--- Εμφάνιση Όλων των Εγγραφών ενός Πίνακα μιας Βάσης Δεδομένων --->

<CFQUERY NAME="GetRecords" DATASOURCE="YourDSN">

SELECT *

FROM TableName

ORDER BY FieldName

</CFQUERY>

<CFOUTPUT QUERY="GetRecords">

#GetRecords.CurrentRow#)  #FieldName# - #FieldDescription#<BR>

</CFOUTPUT>

Ο παραπάνω κώδικας θα κάνει ένα ερώτημα στη βάση δεδομένων για όλες τις εγγραφές που υπάρχουν στον πίνακα TableName και θα τις εμφανίσει στη σελίδα. Γράψαμε τα ονόματα των πεδίων του πίνακα και τα περιβάλλαμε με τους χαρακτήρες #. Τα σύμβολα # λένε στην ColdFusion να εμφανίσει την αντίστοιχη τιμή όταν βρίσκονται μέσα σ’ ένα tag <CFOUTPUT>.

Χρησιμοποιήσαμε επίσης και τον εξής κώδικα :

#GetRecords.CurrentRow#

ο οποίος λέει στον server της ColdFusion ότι θέλουμε να εμφανίσουμε τον αριθμό της τρέχουσας εγγραφής ώστε να εμφανισθούν τα αποτελέσματα ως εξής :


1) Pablo - This is User Number 1

2) Tito - This is User Number 2

3) Laly - This is User Number 3

Μ’ αυτόν τον τρόπο μπορούμε εύκολα και γρήγορα να αρχίσουμε να χρησιμοποιούμε την ColdFusion για να πετύχουμε την αλληλεπίδραση μιας βάσης δεδομένων με τις ιστοσελίδες.

 

Χρήση μιας Βάσης Δεδομένων

Κάποιος μπορεί να ρωτήσει το εξής : "τι μπορούμε να κάνουμε ώστε να εργάζεται για μας η βάση δεδομένων και όχι η ColdFusion;". Το να αφήσουμε τη βάση δεδομένων να κάνει τη δουλειά αποτελεί την καλύτερη πρακτική στο web development. Υπάρχουν αρκετοί τρόποι για να κάνουμε μια βάση δεδομένων να εργάζεται για μας, δηλ. να πούμε στη βάση δεδομένων να εισάγει τιμές, να δημιουργήσει πίνακες κ.ά.

Σ’ αυτό το παράδειγμα θα χρησιμοποιήσουμε μια βάση δεδομένων της Access για να εισάγεται αυτόματα η τρέχουσα ημερομηνία και ώρα όταν δημιουργείται μια καινούργια εγγραφή. Στην ColdFusion για να εισάγουμε την ημερομηνία πρέπει να χρησιμοποιήσουμε την εξής εντολή :

#CREATEODBCDateTime#

αλλά το να αφήσουμε τη βάση δεδομένων να κάνει αυτή τη δουλειά είναι πολύ πιο γρήγορο και πιο αξιόπιστο.

Θα χρειασθούμε ένα πεδίο τύπου ημερομηνίας/ώρας (date/time) στον πίνακά μας, με όνομα π.χ. PostDateTime.

Μετά θα πρέπει να πούμε σ’ αυτό το πεδίο να τοποθετεί αυτόματα την τρέχουσα ημερομηνία/ώρα όταν εισάγεται μια καινούργια εγγραφή στη βάση δεδομένων. Για να το πετύχουμε αυτό, πρέπει να καταχωρήσουμε την τιμή Now() στην ιδιότητα Default Value (προκαθορισμένη τιμή) του πεδίου.

Έτσι, κι αν ακόμη δεν καταχωρήσουμε μια τιμή στο πεδίο Name, το πεδίο ημερομηνίας ενημερώνεται αυτόματα. Αν κλείσουμε και ξανανοίξουμε τον πίνακα, η ημερομηνία θα αλλάξει σύμφωνα με την τρέχουσα ημερομηνία. Έτσι, όταν εισάγεται μια εγγραφή, κρατάει αυτήν την ημερομηνία και μπορούμε συνεπώς να την χρησιμοποιήσουμε για να την εμφανίσουμε στη σελίδα μας με τις συναρτήσεις DateFormat και TimeFormat.

Αυτός είναι ένας απλός τρόπος για να κάνει η βάση δεδομένων τη δουλειά για μας αντί να αναγκάζουμε την ColdFusion να κάνει επιπλέον δουλειά για να επιτύχουμε το ίδιο αποτέλεσμα.

 

Δημιουργία ενός ColdFusion Counter

Το πρώτο πράγμα που θα χρειαστούμε για να δημιουργήσουμε έναν μετρητή (counter) στην ColdFusion είναι μια βάση δεδομένων με όνομα counter.mdb ή απλά να δημιουργήσουμε τον παρακάτω πίνακα σε μια ήδη υπάρχουσα βάση δεδομένων. Ο πίνακας θα είναι ως εξής :

TableName : Counter

CounterID – AutoNumber (Primary key)

TotalCount – Number

Αφού έχουμε λοιπόν δημιουργήσει τον πίνακα, μπορούμε να προχωρήσουμε στα απαραίτητα βήματα για να μπορέσει να δουλέψει ο μετρητής. Το πρώτο που θα πρέπει να κάνουμε είναι να τροποποιήσουμε τη σελίδα application.cfm στον λογαριασμό μας (account).

Αν δεν έχουμε μια σελίδα με όνομα application.cfm στον λογαριασμό μας, απλά δημιουργούμε μια και γράφουμε τον παρακάτω κώδικα. Θα συμπεριλάβουμε ένα αρχείο (file) το οποίο θα είναι ο μετρητής (counter).

Ακολουθεί ο κώδικας που θα πρέπει να υπάρχει στη σελίδα application.cfm :

<CFINCLUDE TEMPLATE="counter.cfm">

Το επόμενο βήμα θα είναι να δημιουργήσουμε ένα αρχείο με όνομα counter.cfm, που θα αποτελεί τον μετρητή (counter), και που θα παρακολουθεί (καταγράφει) τους επισκέπτες του web site μας. Η σελίδα counter.cfm θα κάνει τα εξής :

Το πρώτο πράγμα που θα κάνει είναι να ψάξει για ένα cookie με όνομα counter. Αν το cookie υπάρχει, ο μετρητής δεν θα προσθέσει μια τιμή στη βάση δεδομένων. Ο κώδικας θα είναι ως εξής :

<CFIF ParameterExists(cookie.counter)>

<!--- Δεν κάνει τίποτα -->

<CFELSE>

<!--- Προσθέτει 1 στον Counter και ορίζει ένα Cookie το οποίο θα

εντοπισθεί αργότερα και έτσι το "Δεν κάνει τίποτα" παραπάνω θα

δουλέψει και δεν θα μεταβιβασθούν άλλες τιμές --->

<!--- Διαβάζουμε την τρέχουσα τιμή του Counter στη βάση δεδομένων --->

<CFQUERY NAME="GetCounterValue"

DATASOURCE="YourDSN">

SELECT  * FROM Counter

</CFQUERY>

<!--- Προσθέτουμε 1 στην τιμή που διαβάσαμε παραπάνω --->

<CFSET NewValue = #GetCounterValue.TotalCount# + 1>

<!--- Τώρα προσθέτουμε αυτήν την τιμή στη βάση δεδομένων για να φανεί ο νέος επισκέπτης --->

<CFQUERY NAME="UpdateCounter"

DATASOURCE="YourDSN">

UPDATE Counter

    SET TotalCount = #NewValue#

        WHERE CounterID = #GetCounterValue.CountID#

</CFQUERY>

<!--- Τώρα θα ορίσουμε το Cookie έτσι ώστε αυτός ο επισκέπτης να μην μετρηθεί δύο φορές --->

<CFCOOKIE NAME="Counter" Value="True">

</CFIF>

Αυτό θα προσθέσει αυτόματα το 1 στη βάση δεδομένων, μετά θα ορίσει ένα cookie στον υπολογιστή του επισκέπτη ο οποίος θα εντοπισθεί, συνεπώς δεν θα μετρήσει η επίσκεψη του χρήστη διπλά. Δεν καθορίσαμε μια λήξη (expiration) για το cookie και συνεπώς μόλις ο επισκέπτης φύγει από το website ή κλείσει τον φυλλομετρητή του, θα αφαιρεθεί το cookie. Έτσι, αν ο ίδιος χρήστης αποφασίσει να επισκεφθεί το website ξανά την επόμενη ημέρα, θα μετρήσει ξανά σαν μια νέα σύνοδος (session).

Αν χρησιμοποιήσουμε τον παραπάνω κώδικα, θα μπορούμε να παρακολουθούμε (track) τους χρήστες μας, αλλά οι επισκέπτες μας δεν θα γνωρίζουν πόσοι συνολικά έχουν επισκεφθεί το web site μας. Για να εμφανίσουμε αυτόν τον αριθμό, θα πρέπει να κάνουμε κάτι ακόμα. Προσθέτουμε απλά τον παρακάτω κώδικα στο τέλος της σελίδας counter.cfm.


<!--- Διαβάζουμε τους τελευταίους επισκέπτες, συνεπώς μπορούμε να

εμφανίσουμε πόσοι επισκέπτες έχει βρεθεί στο website μας --->

<CFQUERY NAME="GetLatestCount" DATASOURCE="YourDSN">

SELECT TotalCount FROM Counter

</CFQUERY>

<CFSET TotalVisitors = #GetLatestCount#>

Το παραπάνω ερώτημα (query) λαμβάνει τον τελευταίο αριθμό από τη βάση δεδομένων και εισάγει αυτήν την τιμή σε μια μεταβλητή με όνομα TotalVisitors. Θα πρέπει να εισάγουμε αυτόν τον κώδικα στο τέλος της σελίδας, μετά από την εντολή </cfif>.

Μπορούμε μετά να χρησιμοποιήσουμε αυτή τη μεταβλητή οπουδήποτε στο site για να εμφανίσουμε πόσα hits έχουν λάβει χώρα στο website μας. Γράφουμε συνεπώς το εξής :

<CFOUTPUT>

#TotalVisitors# χρήστες έχουν επισκεφθεί αυτήν την ιστοσελίδα.

</CFOUTPUT> 

 

Δημιουργία Πλήκτρων Προηγούμενο/Επόμενο

Θα δούμε τώρα πώς μπορούμε να προσθέσουμε ένα πλήκτρο προηγούμενο/επόμενο (previous/next button) στις ιστοσελίδες μας. Αυτό είναι χρήσιμο αν έχουμε μια βάση δεδομένων με πολλές εγγραφές και θέλουμε να εμφανίζουμε μερικές μόνο απ’ αυτές κάθε φορά.

Ακολουθεί ένα παράδειγμα :

Total Records Found: 300

Showing: 15-30 of 300

<<previous | next>>

Θα δούμε πώς μπορούμε να το πετύχουμε αυτό για το δικό μας web site. Το πρώτο πράγμα που θα πρέπει να κάνουμε είναι να ερωτήσουμε (query) τη βάση δεδομένων μας για να εμφανίσει όλες τις εγγραφές :


<CFQUERY NAME="GetAllRecords" DATASOURCE="YourDSN">

SELECT  *

    FROM TableName

        ORDER BY FieldID

</CFQUERY>

Το επόμενο βήμα θα είναι να ορίσουμε τις προκαθορισμένες τιμές (defaults) αν δεν υπάρχουν ήδη :

<!--- Ορισμός των προκαθορισμένων τιμών --->

<CFPARAM NAME="start" VALUE="1">

Τώρα θα ορίσουμε την τιμή για τα πλήκτρα προηγούμενο και επόμενο (previous and next button values) :

<!--- Ορισμός τιμών για τα πλήκτρα προηγούμενο και επόμενο --->

<CFSET previous = #start# - 15>

<CFSET next = #start# + 15>

Το επόμενο βήμα είναι να ορίσουμε την τιμή των εγγραφών που εμφανίζονται επί του παρόντος :

<CFSET FirstShown = #start#>

<CFSET LastShown = #next# - 1>

Μπορούμε τώρα να αρχίσουμε να εμφανίζουμε πληροφορίες, ως εξής:

<CFOUTPUT>

<FONT SIZE="2" FACE="Verdana">

Total Records Found : #GetAllRecords.RecordCount#<BR>

Showing : #FirstShown#-#LastShown#<BR>

</FONT>

<!--- Έλεγχος για να διαπιστώσουμε αν πράγματι υπάρχουν εγγραφές για να πάμε πίσω --->

<CFIF #previous# LT "1">

    &lt;&lt;&nbsp;Previous |

<CFELSE>

<A HREF="thispage.cfm?start=#previous#">&lt;&lt; Previous

</a> |

</CFIF>

<!--- Τώρα θα ελέγξουμε αν πράγματι υπάρχουν εγγραφές για να πάμε μπροστά --->

<CFIF #next# GT #GetAllRecords.RecordCount#>

Next >>

<CFELSE>

<A HREF="thispage.cfm?start=#next#">Next >></a>

</CFIF>

<BR>

</CFOUTPUT>

<!--- Τώρα θα εμφανίσουμε τις εγγραφές στον τελικό χρήστη (end user) --->

<CFOUTPUT QUERY="GetAllRecords" Startrow="#start#"

Maxrows="15">
#GetAllRecords.CurrentRow#) - #Name# - #Description#<BR>

</CFOUTPUT>

Ακολουθεί ολόκληρος ο κώδικας :


<!--- Λήψη όλων των εγγραφών από τη βάση δεδομένων --->

<CFQUERY NAME="GetAllRecords" DATASOURCE="YourDSN">

SELECT *

    FROM TableName

        ORDER BY FieldID

</CFQUERY>

<!--- Ορισμός των προκαθορισμένων τιμών --->

<CFPARAM NAME="start" DEFAULT="1">

<!--- Ορισμός τιμών για τα πλήκτρα προηγούμενο και επόμενο --->

<CFSET previous = #start# - 15>

<CFSET next = #start# + 15>

<!--- Ορισμός των τιμών για τις εγγραφές που εμφανίζονται --->

<CFSET FirstShown = #start#>

<CFSET LastShown = #next# - 1>

<!--- Εμφάνιση του μηνύματος στους χρήστες --->

<CFOUTPUT>

<FONT SIZE="2" FACE="Verdana">

Total Records Found : #GetAllRecords.RecordCount#<BR>

Showing : #FirstShown#-#LastShown#<BR>

</FONT>

<!--- Έλεγχος για να διαπιστώσουμε αν πράγματι υπάρχουν εγγραφές για να πάμε πίσω --->

<CFIF #previous# LT "1">

&lt;&lt;&nbsp;Previous |

<CFELSE>

<A HREF="thispage.cfm?start=#previous#">&lt;&lt; Previous

</a> |

</CFIF>

<!--- Τώρα θα ελέγξουμε αν πράγματι υπάρχουν εγγραφές για να πάμε μπροστά --->

<CFIF #next# GT #GetAllRecords.RecordCount#>

Next >>

<CFELSE>

<A HREF="thispage.cfm?start=#next#">Next >></a>

</CFIF>
<BR>

</CFOUTPUT>

<!--- Τώρα θα εμφανίσουμε τις εγγραφές στον τελικό χρήστη (end user) --->

<CFOUTPUT QUERY="GetAllRecords" Startrow="#start#"

Maxrows="15">

#GetAllRecords.CurrentRow#) - #Name# - #Description#<BR>

</CFOUTPUT>

 

Τα Cookies

Για να καταλάβουμε την έννοια των cookies, ας φανταστούμε μια φόρμα καταχώρησης που περιέχει ένα πλαίσιο ελέγχου Remember Me :

Αυτό αποτελεί ένα κλασσικό παράδειγμα για το γιατί θα θέλαμε να χρησιμοποιήσουμε τα cookies. Το πρώτο πράγμα που θα χρειασθούμε είναι μια σελίδα (φόρμα) καταχώρησης -login (form) page- ως εξής :

<!--- Έλεγχος για να διαπιστώσουμε αν υπάρχει ένα Cookie --->

<CFIF ParameterExists(Cookie.RememberMe)>

<!--- Εφόσον το Cookie δεν υπάρχει, θα πάρουμε τα δύο άλλα cookies που υπάρχουν και θα δημιουργήσουμε τιμές --->

<CFSET UserName = "#Cookie.UserName#">

<CFSET UserPass = "#Cookie.UserPass#">

<CFELSE>

<CFSET UserName = "">

<CFSET UserPass = "">

</CFIF>

<CFOUTPUT>

<form action="verify.cfm" method="post">

<table width="500" border="0" cellpadding="1" cellspacing="0">

<tr>

<td width="250" align="right"> UserName : </td>

<td width="250" align="left">

<input type="text" name="UserName" value="#UserName#"></td>

</tr>

<tr>

<td width="250" align="right"> Password : </td>

<td width="250" align="left">

<input type="Text" name="UserPass" Value="#UserPass#"></td>

</tr>

<tr>

<td width="250" align="right">

<!--- Εδώ θα ελέγξουμε αν το πλαίσιο ελέγχου remember me επιλέχθηκε την

τελευταία φορά και αν ναι, θα το αφήσουμε επιλεγμένο, αλλιώς θα το

εμφανίσουμε μη επιλεγμένο --->

<CFIF ParameterExists(Cookie.RememberMe)>

<input type="checkbox" checked name="RememberMe"

Value="Yes">

<CFELSE>

<input type="checkbox" name="RememberMe" Value="Yes">

</CFIF>

</td>

<td width="250" align="left"> Remember Me </td>

</tr>

<tr>

<td width="250" align="right"></td>

<td width="250" align="left">

<input type="submit" name="Process" Value="Log In"></td>

</tr>

</table>

</form>

</CFOUTPUT>

Αυτή ήταν η σελίδα της φόρμας (form page) που θα χρησιμοποιήσουν οι χρήστες για να κάνουν login στο site μας. Εμείς θα πρέπει μετά να ελέγξουμε αν ο χρήστης που κάνει login επέλεξε το Remember Me. Ας ρίξουμε τώρα μια ματιά στη σελίδα verify.cfm (action page).

Το πρώτο πράγμα που θα πρέπει να κάνουμε είναι να εκτελέσουμε ένα ερώτημα (query) για να διαπιστώσουμε αν υπάρχει ο χρήστης στη βάση δεδομένων μας. Αν υπάρχει, τότε θα ακολουθήσουμε την επεξεργασία σύμφωνα με το τι έχει επιλέξει ο χρήστης. Ας δούμε τον κώδικα :


<!--- Δημιουργία ενός
query για να διαπιστώσουμε αν υπάρχει ο χρήστης --->

<CFQUERY NAME="Verify" DATASOURCE="YourDSN">

SELECT   *

    FROM MembersTable

    WHERE UserName = '#UserName#' and UserPass = '#UserPass#'

</CFQUERY>

<!--- Τώρα θα δούμε αν βρέθηκαν κάποια ταιριάσματα --->

<CFIF Verify.Recordcount GTE "1">

<!--- Εντάξει, βρέθηκε αυτός ο χρήστης. Τώρα θα δούμε αν ο χρήστης επέλεξε το χαρακτηριστικό remember me --->

<CFIF RememberMe EQ "True">

<cfcookie name="UserName" value="#form.Username#" expires="NEVER">

<cfcookie name="UserPass" value="#form.UserPass#" expires="NEVER">

<cfcookie name="RememberMe" value="True" expires="NEVER">

<CFELSE>

<cfcookie name="UserName" value="#form.Username#" expires="NOW">

<cfcookie name="UserPass" value="#form.UserPass#" expires="NOW">

<cfcookie name="RememberMe" value="True" expires="NOW">

</CFIF>

<!--- Τώρα θα τον ενημερώσουμε ότι έκανε log in με επιτυχία --->

<BR><BR>

Συγχαρητήρια, βρέθηκε ο λογαριασμός σας (account)

<A HREF="linktomembersonlysection.cfm"> please continue </a>...

<CFELSE>

<!--- Δεν βρέθηκε κάποιος χρήστης, εμφάνιση μηνύματος λάθους --->

<BR><BR>

Λυπούμαστε, δεν μπόρεσε να βρεθεί ο λογαριασμός σας (account)

<a href="Javascript:history.go(-1)"> please try again </a>!

</CFIF>

Η action page ελέγχει αν βρέθηκε κάποιος χρήστης και αν έχει βρεθεί και ο χρήστης έχει επιλέξει το χαρακτηριστικό Remember Me, δημιουργεί τρία cookies που δεν τελειώνουν ποτέ (never expire), αλλιώς τελειώνει αυτά τα cookies έτσι ώστε την επόμενη φορά που ο χρήστης επανέρχεται στη σελίδα καταχώρησης (login page), δεν υπάρχει κανένα cookie και συνεπώς θα πρέπει να ξανακαταχωρήσει τις πληροφορίες.

Αυτός είναι ο τρόπος χρήσης των cookies για να μπορούν οι χρήστες να θυμούνται τις πληροφορίες που έχουν καταχωρήσει (log in information).

 

Ενημέρωση μιας Εγγραφής με την ColdFusion

Θα δούμε τώρα πώς μπορούμε να ενημερώσουμε (update) μια εγγραφή. Υπάρχουν δύο διαφορετικοί τρόποι για να ενημερώσουμε δεδομένα (update data) σε μια βάση δεδομένων. Ο τρόπος της SQL και ο τρόπος της ColdFusion.

Με την SQL έχουμε περισσότερο έλεγχο για το τι συμβαίνει, αλλά για τους αρχάριους η ColdFusion είναι ευκολότερη στην εκμάθηση και στη χρήση. Και οι δύο τρόποι είναι σωστοί και πολύ ισχυροί.

Το πρώτο πράγμα που θα δημιουργήσουμε είναι η σελίδα που θα χρησιμοποιήσουν οι χρήστες για να επεξεργαστούν (edit) το περιεχόμενό τους (content). Αυτή η σελίδα θα ονομάζεται edit.cfm και θα συνδεθεί σε μια βάση δεδομένων μέσω ενός ODBC με τη χρήση ενός tag <CFQUERY>.

Μετά θα μεταβιβάσουμε αυτές τις τιμές σε μια φόρμα που θα μπορεί να χρησιμοποιήσει ο χρήστης για να τροποποιήσει το περιεχόμενο της εγγραφής του. Αφότου υποβάλλει τη φόρμα στο edit.cfm θα φορτώσει τις τιμές σε μια σελίδα με όνομα action.cfm.

Ξεκινάμε με την πρώτη σελίδα (edit.cfm) :

<!--- Το πρώτο πράγμα που πρέπει να κάνουμε είναι να επιβεβαιώσουμε ότι ζητείται μια εγγραφή από το RecordID. Αν δεν έχει καθορισθεί κάποια, θα ορίσουμε μια --->

<CFPARAM NAME="RecordID" DEFAULT="1">

<!--- Σύνδεση με τη βάση δεδομένων --->

<CFQUERY NAME="GetInfo" DATASOURCE="MyDSN">

SELECT *

    FROM TableWithData

    WHERE RecordID = #RecordID#

</CFQUERY>

 

<!--- Τώρα θα γεμίσουμε τη φόρμα που θα χρησιμοποιήσει ο χρήστης για να τροποποιήσει το περιεχόμενο --->

<CFOUTPUT QUERY="GetInfo">

<FORM ACTION="action.cfm" METHOD="post">

<INPUT TYPE="Hidden" NAME="CustID" VALUE="#CustID#">

<TABLE WIDTH="550" BORDER="0" CELLPADDING="2"

CELLSPACING="0">

<TR>
<TD WIDTH="275" ALIGN="Right"> First Name : </TD>

<TD WIDTH="275" ALIGN="left">

<INPUT TYPE="Text" NAME="FirstName"

VALUE="#FirstName#"></TD>

</TR>

<TR>

<TD WIDTH="275" ALIGN="Right"> Last Name : </TD>

<TD WIDTH="275" ALIGN="left">

<INPUT TYPE="Text" NAME="LastName"

VALUE="#LastName#"></TD>

</TR>

<TR>

<TD WIDTH="275" ALIGN="Right"> Email :</TD>

<TD WIDTH="275" ALIGN="left">

<INPUT TYPE="Text" NAME="Email"

VALUE="#Email#"></TD>

</TR>

<TR>

<TD WIDTH="275" ALIGN="Right"> Age : </TD>

<TD WIDTH="275" ALIGN="left">

<INPUT TYPE="Text" NAME="Age" VALUE="#Age#"></TD>

</TR>

<TR>

<TD WIDTH="275" ALIGN="Right"></TD>

<TD WIDTH="275" ALIGN="left">

<INPUT TYPE="Submit" NAME="Process"

VALUE="Edit Record"></TD>

</TR>

</TABLE>

</FORM>

</CFOUTPUT>

Η παραπάνω σελίδα δημιουργεί μια απλή φόρμα, η οποία ζητάει από τον χρήστη να τροποποιήσει τα πεδία first name, last name, email address και age. Οι τιμές έχουν ήδη τοποθετηθεί από τη βάση δεδομένων και ο χρήστης χρειάζεται μόνο να τις αλλάξει.

Ένα σημαντικό σημείο είναι το : DATASOURCE="MyDSN". Αυτό είναι το όνομα της ODBC (DSN) σύνδεσης στη βάση δεδομένων, όπου απλά αντικαθιστούμε το MyDSN με το δικό μας DSN Name. Το TableWithData πρέπει να αντικασταθεί με το όνομα του πίνακα (table) στη βάση δεδομένων ο οποίος περιέχει τις πληροφορίες.

Ένα άλλο σημαντικό σημείο είναι το : <INPUT TYPE="Hidden" NAME="CustID" VALUE="#CustID#">, το οποίο δεν χρειάζεται να αλλαχθεί. Τοποθετείται εδώ για να μεταβιβασθεί η τιμή του πεδίου κλειδιού CustID, την οποία τιμή θα χρειασθούμε στην action page για να καθορίσουμε ποια εγγραφή θέλουμε να επεξεργαστούμε. Την μεταβιβάζουμε σαν ένα κρυμμένο πεδίο (hidden field), ώστε ο χρήστης που γεμίζει τη φόρμα να μην γνωρίζει ότι είναι εκεί.

Το επόμενο πράγμα που θα χρειασθούμε είναι η σελίδα action.cfm. Όπως είπαμε και νωρίτερα, υπάρχουν δύο τρόποι για να το κάνουμε αυτό, όπου ο τρόπος της ColdFusion είναι ο ευκολότερος. Αποτελείται από ένα απλό tag, το <CFUPDATE>.


<CFUPDATE DATASOURCE="MyDSN"

TABLENAME="TableWithData"

FORMFIELDS="Firstname, LastName, Email, Age">

Είναι ευκολότερο στη χρήση αλλά δεν μας δίνει πλήρη έλεγχο. Ο άλλος τρόπος για να ενημερώσουμε τα δεδομένα είναι η SQL, που είναι πιο πολύπλοκος, αλλά μας δίνει περισσότερο έλεγχο στα δεδομένα που καταχωρούνται. Ακολουθεί ένα παράδειγμα.


<CFQUERY NAME="Update" DATASOURCE="MyDSN">

UPDATE   TableWithData

SET  FirstName = '#FirstName#',

LastName = '#LastName#',

Email = '#Email#',

Age = #Age#

WHERE   CustID = #CustID#

</CFQUERY>

Αυτό λέει στον ColdFusion server να ενημερώσει (update) τις εγγραφές που καθορίζονται στον πίνακα (table) TableWithData όπου (where) το CustID είναι το ίδιο μ’ αυτό της φόρμας. 

 

back.gif (9867 bytes)

Επιστροφή