ColdFusion in 21 Tagen. Der einfache Einstieg ins Web-Publishing. Mit CD-R-ROM 3827260175, 978-3-8272-6017-8 [PDF]


129 92 9MB

German Pages 812

Report DMCA / Copyright

DOWNLOAD PDF FILE

Table of contents :
Cold Fusion......Page 2
Tag 1 ColdFusion – Einführung......Page 4
Tag 3 ColdFusion einrichten und eine Datenquelle definieren......Page 5
Tag 4 Aufbau einer Datenbank und Organisation der Daten......Page 6
Tag 6 Ihre erste Web-Applikation......Page 7
Tag 8 ColdFusion Studio......Page 8
Tag 9 Erweiterung Ihrer Applikationen mit Variablen und If- Then- Anweisungen......Page 9
Tag 12 Erweiterte Formulartechniken zur Verwaltung von Eingaben......Page 10
Tag 14 ColdFusion-Funktionen zur Datenbearbeitung......Page 11
Tag 15 Listen, Strukturen und Datenfelder......Page 12
Tag 16 Client- und Sitzungsverwaltung in ColdFusion......Page 13
Tag 18 Dateien und Verzeichnisse......Page 14
Tag 20 ColdFusion für E-Commerce-Applikationen......Page 15
Tag 21 Die Debugging-Werkzeuge von ColdFusion......Page 16
ColdFusion-Tags......Page 17
Stichwortverzeichnis......Page 20
Vorwort......Page 22
Nichtprogrammierende Web-Entwickler......Page 23
Überblick......Page 24
Konventionen in diesem Buch......Page 25
Woche 1......Page 26
Vorschau......Page 27
Tag 1: ColdFusion – Einführung......Page 28
Was ist ColdFusion?......Page 29
Ein Beispiel für eine ColdFusion-Applikation......Page 30
Fertig fürs Geschäft......Page 32
Schnittstellen zu Intranets......Page 33
Datensammlung......Page 34
Besser als CGI......Page 36
Dynamische Seiten erstellen......Page 37
Clients und Server......Page 41
Tag-Verarbeitung......Page 42
Zusammenfassung......Page 43
F&A......Page 44
Übungen......Page 45
Tag 2: Aufbau einer Cold-Fusion-Applikation......Page 46
Verbinden Sie Ihre Datenbank mit dem Web......Page 47
Tabellen......Page 48
Die Zeilen......Page 49
Kreuzverweise für Daten......Page 50
Die Datenquelle und ODBC......Page 51
Das ColdFusion-Template......Page 53
HTML-Markup......Page 54
Die Ausgabe......Page 55
Die Beziehung zwischen Abfrage und Ausgabe......Page 57
URL-Variablen zur Konkretisierung der Ausgaben......Page 59
Zusammenfassung......Page 62
F&A......Page 63
Antworten......Page 64
Antworten......Page 65
Tag 3: ColdFusion einrichten und eine Datenquelle definieren......Page 66
Kaufen oder nicht kaufen?......Page 67
Fragen, die Sie einem potentiellen ColdFusion-Provider stellen sollten......Page 68
Die Anzahl der unterstützten Datenquellen......Page 69
Aktualisierung der Datenquellen......Page 71
ColdFusion Server-Varianten......Page 72
Kompatibilität mit der Enterprise Edition......Page 73
Installation von ColdFusion Server auf Windows-Plattformen......Page 74
Installation von ColdFusion Server auf UNIX-basierten Plattformen......Page 75
Überprüfen des Server-Setups......Page 76
Der ColdFusion Administrator......Page 77
Server-Optionen......Page 78
Datenquellen – Optionen und Setup......Page 79
Beschreibung......Page 80
Datenbankdatei......Page 81
Eine Datenquelle überprüfen......Page 82
Erweiterungsseiten......Page 83
Den ColdFusion-Dienst aktivieren und deaktivieren......Page 84
Zusammenfassung......Page 85
F&A......Page 86
Antworten......Page 87
Übungen......Page 88
Tag 4: Aufbau einer Datenbank und Organisation der Daten......Page 90
Von ColdFusion unterstützte Datenbanksoftware......Page 91
ColdFusion als Schnittstelle zwischen Datenbank und Web......Page 92
ODBC......Page 93
Anlegen einer Datenzuordnung......Page 94
Einführung von Datenbeziehungen......Page 97
Entwurf der Datenbank......Page 98
Felder definieren......Page 100
Datentypen......Page 101
Die Bedeutung von Schlüsseln......Page 103
Datenbeziehungen einrichten......Page 104
Tabellenberechtigungen......Page 107
Das Eingabeformular......Page 109
Web-Eingaben......Page 110
Zusammenfassung......Page 111
F&A......Page 112
Quiz......Page 113
Übungen......Page 114
Tag 5: Finden Sie die Daten, die Sie brauchen: Abfragen und SQL – eine Einführung......Page 116
ColdFusion-Abfragen......Page 117
SELECT-Anweisung – Grundlagen......Page 118
Relationale Operatoren......Page 122
Logische Operatoren......Page 124
Die Operatoren IN und BETWEEN......Page 128
LIKE......Page 131
Sortieren und Auswerten von Abfrageergebnissen......Page 132
Ausgaben mit ORDER BY sortieren......Page 133
Duplikate mit DISTINCT erkennen......Page 135
Zusammenfassung......Page 136
Quiz......Page 137
Antworten......Page 138
Tag 6: Ihre erste Web-Applikation......Page 140
Definition einer Beispielapplikation......Page 141
Auswerten der Datenbank......Page 142
Ordner anlegen und freigeben......Page 144
Einrichten der Datenquelle......Page 145
Aufbau Ihres ersten Templates......Page 147
Die Abfrage......Page 149
Der Ausgabeabschnitt......Page 150
Der Fußbereichsabschnitt......Page 152
Anzeige des Index-Template......Page 153
Grundlegende Fehlersuche......Page 155
Die Abfrage......Page 156
Die Header- und Ausgabeabschnitte......Page 157
Anzeige des Details-Template......Page 159
F&A......Page 162
Antworten......Page 163
Übungen......Page 164
Tag 7: Datenbankinhalt mit ColdFusion ändern......Page 166
Definition einer Beispielapplikation......Page 167
Web-Formulare......Page 168
Ein Eingabeformular zum Einfügen von Daten anlegen......Page 171
Der Header......Page 173
Das Formular......Page 174
Testen des Template......Page 176
Anlegen der Einfüge-Aktionsseite......Page 178
Der Rumpf und der Fußbereich......Page 179
Die Bearbeitungsoberfläche anlegen......Page 181
Ein Formular zur Bearbeitung existierender Daten anlegen......Page 183
Die Abfrage......Page 184
Header- und Formularabschnitte......Page 185
Anlegen der Aktualisierungsseite......Page 188
Fehlersuche für Einfüge- und Aktualisierungsoperationen......Page 189
F&A......Page 190
Übungen......Page 191
Woche 2......Page 194
Vorschau......Page 195
Tag 8: ColdFusion Studio......Page 196
ColdFusion Studio – Einführung......Page 197
Studio installieren......Page 198
Bearbeiten......Page 199
Ressourcen-Komponenten......Page 201
Zugriff auf Remote-Server......Page 202
RDS-Server hinzufügen......Page 203
FTP-Server hinzufügen......Page 204
Anzeige von Dateien oder Datenquellen im Ressourcenbereich......Page 205
Die Arbeit mit dem Editor......Page 207
Bearbeitungsansicht......Page 208
Entwurfsansicht......Page 209
Tag-Vorschau......Page 210
Tag-Abschluß......Page 211
Der Tabellen-Assistent......Page 212
Der Frame-Assistent......Page 214
Der SQL-Editor......Page 215
Studio für Ihre Arbeit konfigurieren......Page 218
Hilfe- und Referenzfunktionen von Studio......Page 219
F&A......Page 220
Antworten......Page 221
Übungen......Page 222
Tag 9: Erweiterung Ihrer Applikationen mit Variablen und If-Then-Anweisungen......Page 224
Definieren einer Beispielapplikation......Page 225
Das -Tag......Page 226
Das -Tag......Page 229
Eine Applikation mit erstellen......Page 232
Die Seite für die Kennwortprüfung......Page 233
Die Abfrage......Page 235
Gültigkeitsbereiche für Variablen nutzen......Page 236
Der Zählmechanismus......Page 240
F&A......Page 246
Antworten......Page 247
Übungen......Page 248
Tag 10: Ausgaben mit Hilfe von Tabellen und Gruppen organisieren......Page 250
......Page 251
Ausgabetabellen mit anlegen......Page 252
im Textmodus......Page 253
im HTMLTABLE-Modus......Page 255
Ausgabetabellen mit dem -Tag von HTML erzeugen......Page 257
Daten gruppieren......Page 261
Ausgaben mit dem GROUP-Parameter anlegen......Page 262
Lange Seiten mit Hilfe von Index-Links organisieren......Page 265
Mit der SQL-Anweisung DISTINCT dynamische Index-Links erzeugen......Page 266
F&A......Page 270
Antworten......Page 271
Übungen......Page 272
Tag 11: Eingabeseiten mit grundlegenden -Tags verbessern......Page 274
Die Arbeitsweise von ......Page 275
in der Praxis......Page 278
Das -Tag......Page 279
Das -Tag......Page 284
Das -Tag......Page 285
Das -Tag......Page 289
F&A......Page 292
Antworten......Page 293
Übungen......Page 294
Tag 12: Erweiterte Formulartechniken zur Verwaltung von Eingaben......Page 296
Aktualisieren, Einfügen und Löschen mit SQL......Page 297
Die SQL-Anweisung INSERT......Page 299
Die SQL-Anweisung UPDATE......Page 301
Die SQL-Anweisung DELETE......Page 304
Mehrere Formularaktionen kombinieren......Page 306
......Page 312
......Page 316
......Page 318
......Page 320
Zusammenfassung......Page 322
F&A......Page 323
Übungen......Page 324
Tag 13: E-Mail......Page 326
Das -Tag......Page 327
in der Praxis......Page 329
Definition eines Standard-Mail-Servers in ColdFusion Administrator......Page 331
Abfragen für AutoRespond und Inhalte anlegen......Page 332
Anpassung Ihrer Nachricht mit Hilfe von HTML-Tags......Page 336
Anhänge senden......Page 338
Abfragen zum Senden von Mail an eine Liste......Page 339
Eingehende Mail mit entgegennehmen......Page 342
Mail mit löschen......Page 344
Zusammenfassung......Page 346
F&A......Page 347
Antworten......Page 348
Übungen......Page 349
Tag 14: ColdFusion-Funktionen zur Datenbearbeitung......Page 350
Funktionen......Page 351
Funktionseingabe......Page 355
Funktionen verschachteln......Page 356
DateFormat()......Page 357
NumberFormat()......Page 359
ParagraphFormat()......Page 360
TimeFormat()......Page 362
YesNoFormat()......Page 363
GetToken()......Page 364
LCase() und UCase()......Page 365
Len()......Page 366
Replace()......Page 367
Definition von Datums-/Zeitobjekten......Page 368
Verwendung von Datums-/Zeitobjekten......Page 370
F&A......Page 372
Antworten......Page 373
Übungen......Page 374
Woche 3......Page 376
Vorschau......Page 377
Tag 15: Listen, Strukturen und Datenfelder......Page 378
Listen in ColdFusion......Page 379
Eine Liste mit füllen......Page 381
Eine Liste mit und der Funktion ListAppend füllen......Page 382
Eine Liste mit einer Abfrage füllen......Page 383
Eine Liste mit den von einem Formular übergebenen Daten füllen......Page 384
Listenwerte mit lesen......Page 387
Strukturen in ColdFusion......Page 390
Strukturinhalte anzeigen......Page 391
Datenfelder in ColdFusion......Page 392
Datenfelder definieren und füllen......Page 393
Daten aus einem Datenfeld lesen......Page 395
Zusammenfassung......Page 397
F&A......Page 398
Übungen......Page 399
Tag 16: Client- und Sitzungsverwaltung in ColdFusion......Page 400
Die Basisstruktur, die ColdFusion für Web-Applikationen bereitstellt......Page 401
Application.cfm......Page 402
Werte in Application.cfm setzen......Page 403
Statuslosigkeit......Page 404
Daten in Cookies ablegen......Page 405
Die Client-Statusverwaltung......Page 406
Client-Statusverwaltung in der Praxis......Page 407
Reservierte Client-Variablen......Page 410
Client-Variablen auswerten und auflisten......Page 412
Gültigkeitsbereiche von Variablen......Page 413
Sitzungsvariablen......Page 414
Applikationsvariablen......Page 416
Cookies setzen......Page 417
Cookies lesen......Page 418
Sichere Cookies......Page 419
F&A......Page 420
Antworten......Page 421
Übungen......Page 422
Tag 17: Textsuchen mit Verity......Page 424
Verity – Grundlagen......Page 425
Verity-Sammlungen in ColdFusion Administrator definieren......Page 429
In ColdFusion Administrator einen Index für eine Sammlung erstellen......Page 430
Das Suchformular......Page 432
Die Ergebnisseite......Page 434
Definieren und Indizieren von Verity-Sammlungen mit CFML- Tags......Page 436
......Page 437
Abfragedaten in einen Index eintragen......Page 439
Anzeige von Datensätzen einer Datenbank als Suchergebnisse......Page 441
Zusammenfassung......Page 443
Quiz......Page 444
Übungen......Page 445
Tag 18: Dateien und Verzeichnisse......Page 446
ColdFusion und Dateien......Page 447
Mit Uploads akzeptieren......Page 450
-Attribute dynamisch zuweisen......Page 453
Mit Dateien verwalten und anlegen......Page 456
Dateien mit kopieren, umbenennen und löschen......Page 457
Die ACTION-Seite für das Kopieren......Page 459
Die ACTION-Seite für das Umbenennen......Page 461
Die ACTION-Seite zum Löschen......Page 462
Dateiobjektattribute anzeigen......Page 463
Die ACTION Read......Page 466
Die ACTIONs write und append......Page 467
......Page 469
Zusammenfassung......Page 470
Quiz......Page 471
Übungen......Page 472
Tag 19: Komplexe SQL-Techniken......Page 474
Spaltenaliase......Page 475
Aggregatfunktionen......Page 479
Tabellen-Joins......Page 483
SQL-Unterabfragen......Page 487
SQL-Ansichten......Page 490
Ansichten erstellen......Page 491
Auf Ansichten zugreifen......Page 493
Gespeicherte Prozeduren......Page 494
Zusammenfassung......Page 495
F&A......Page 496
Antworten......Page 497
Übungen......Page 498
Tag 20: ColdFusion für E-Commerce-Applikationen......Page 500
Vorgefertigte Commerce-Applikationen......Page 501
Planung einer E-Commerce-Site......Page 502
Aufbau eines Administrationsabschnitts......Page 503
Eine Anzeigeseite für Ihre Produkte......Page 510
Einen Einkaufswagen anlegen......Page 513
action IS add (Zeilen 15 bis 30)......Page 517
action IS clear (Zeilen 43 bis 51)......Page 519
Transaktionsseiten anlegen......Page 520
Sichere Web-Transaktionen......Page 523
E-Mail-Bestellung......Page 524
Unsichere Web-Transaktionen......Page 525
checkout_process.cfm......Page 526
checkout_complete.cfm......Page 528
F&A......Page 533
Quiz......Page 534
Übungen......Page 535
Tag 21: Die Debugging-Werkzeuge von ColdFusion......Page 536
Fehlerquellen identifizieren......Page 537
Host nicht gefunden......Page 538
Datei nicht gefunden......Page 539
URL-Syntaxfehler......Page 540
ColdFusion läuft nicht......Page 541
Fehlerhaft zugeordnete Tags......Page 543
Nicht erkannte Tag-Attribute......Page 544
Fehlerhafte Doppelkreuze oder Anführungszeichen......Page 545
Fehler bei der Auflösung von Parametern......Page 546
Datenquelle nicht gefunden......Page 548
Fehler in der SQL-Syntax oder -Logik......Page 549
Zu wenig Parameter......Page 550
Tabelle nicht gefunden......Page 551
Andere SQL-Fehler......Page 552
Die Debugging-Werkzeuge von ColdFusion......Page 553
Die Debugging-Funktionen von ColdFusion Administrator......Page 554
Debugging-Informationen für bestimmte Templates aktivieren......Page 555
Debugging-Ausgaben auf bestimmte Benutzer begrenzen......Page 556
Der Document Validator von ColdFusion Studio......Page 557
Zusammenfassung......Page 559
F&A......Page 560
Quiz......Page 561
Übungen......Page 562
Anhang......Page 564
ColdFusion-Tags......Page 566
Alphabetische Auflistung der ColdFusion-Tags......Page 567
ColdFusion-Formular-Tags......Page 570
Tags für die Erweiterungsfähigkeit......Page 571
Tags zur Variablenmanipulation......Page 572
SHOWERROR......Page 573
VSPACE......Page 575
paramn......Page 576
CFAPPLICATION......Page 577
SETDOMAINCOOKIES......Page 578
Server, Applikations- und Sitzungsvariablen......Page 579
DATACOLLECTION......Page 580
SECURITYCONTEXT......Page 581
THROWONFAILURE......Page 582
CFBREAK......Page 583
TIMEOUT......Page 584
PORT......Page 585
TEXT......Page 587
PATH......Page 589
LANGUAGE......Page 590
CFCONTENT......Page 591
RESET......Page 592
NAME......Page 593
DOMAIN......Page 594
ACTION......Page 596
NEWDIRECTORY......Page 597
TEMPLATE......Page 599
EXCEPTION......Page 600
ARGUMENTS als Datenfeld übergeben wird, wird es wie folgt verarbeitet:......Page 603
TIMEOUT......Page 604
METHOD......Page 605
CFFILE......Page 607
MODE......Page 610
ATTRIBUTES......Page 611
ATTRIBUTES......Page 614
ATTRIBUTES......Page 615
ATTRIBUTES......Page 616
FILE......Page 617
VARIABLE......Page 618
MODE......Page 619
ATTRIBUTES......Page 620
ADDNEWLINE......Page 621
CFFORM......Page 622
PASSTHROUGH......Page 623
CFFTP......Page 626
STOPONERROR......Page 628
PASSIVE......Page 629
TIMEOUT......Page 631
EXISTING......Page 632
PASSIVE......Page 633
Zeile......Page 634
CFGRID......Page 636
NAME......Page 637
BOLD......Page 638
ROWHEIGHT......Page 639
BGCOLOR......Page 640
DELETEBUTTON......Page 641
Aktion......Page 642
Auswahl......Page 643
CFGRIDCOLUMN......Page 645
HREFKEY......Page 646
HEADERFONTSIZE......Page 647
NUMBERFORMAT......Page 648
CFGRIDUPDATE......Page 650
DBNAME......Page 651
KEYONLY......Page 652
STATUSTEXT......Page 653
TEXT......Page 654
URL......Page 655
TEXTQUALIFIER......Page 656
THROWONERROR......Page 657
TIMEOUT......Page 658
TYPE......Page 661
FILE......Page 662
CFIF/CFELSEIF/CFELSE......Page 663
CFIMPERSONATE......Page 665
TYPE......Page 666
TEMPLATE......Page 667
COLLECTION......Page 668
BODY......Page 669
LANGUAGE......Page 670
CFINPUT......Page 671
VALIDATE......Page 672
PASSTHROUGH......Page 673
DBSERVER......Page 675
FORMFIELDS......Page 676
SERVER......Page 678
SCOPE......Page 679
DN......Page 680
certificate_name:......Page 681
SEPARATOR......Page 682
ADDTOKEN......Page 684
TIMEOUT......Page 685
TYPE......Page 686
CFLOOP......Page 692
STEP......Page 693
CONDITION......Page 694
ENDROW......Page 695
DELIMITERS......Page 697
CFMAIL......Page 699
QUERY......Page 700
TIMEOUT......Page 701
CFMAILPARAM......Page 702
VALUE......Page 703
NAME......Page 704
ATTRIBUTE_NAME......Page 705
CFOBJECT......Page 707
SERVER......Page 709
LOCALE......Page 711
NAME......Page 712
GROUP......Page 714
MAXROWS......Page 715
NAME......Page 716
DEFAULT......Page 717
ACTION......Page 719
GENERATEUNIQUFILENAMES......Page 720
SUPPRESSWHITESPACE......Page 723
CFSQLTYPE......Page 724
NULL......Page 725
CFPROCRESULT......Page 726
MAXROWS......Page 727
CFQUERY......Page 728
USERNAME......Page 729
CACHEDWITHIN......Page 730
DEBUG......Page 731
VALUE......Page 733
SEPARATOR......Page 734
CFREGISTRY......Page 737
SORT......Page 739
VARIABLE......Page 740
TYPE......Page 741
BRANCH......Page 742
CFREPORT......Page 743
FORMULA......Page 744
CFRETHROW......Page 745
CFSCHEDULE......Page 746
PATH......Page 747
PORT......Page 748
PROXYPORT......Page 749
CFSCRIPT......Page 750
COLLECTION......Page 751
LANGUAGE......Page 752
CFSELECT......Page 754
VALUE......Page 755
PASSTHROUGH......Page 756
CFSERVLET......Page 757
JRunHome/......Page 758
CFSERVLETPARAM......Page 759
call by reference.......Page 760
CFSET......Page 762
CATCHEXCEPTIONSBYPATTERN......Page 764
CFSILENT......Page 765
CFSLIDER......Page 766
SCALE......Page 767
ALIGN......Page 768
NOTSUPPORTED......Page 769
BLOCKFACTOR......Page 771
RETURNCODE......Page 772
CFSWITCH – CFCASE – CFDEFAULTCASE......Page 773
DELIMITERS......Page 774
COLHEADERS......Page 776
STARTROW......Page 777
CFTEXTINPUT......Page 778
ONERROR......Page 779
ALIGN......Page 780
NOTSUPPORTED......Page 781
typ"......Page 782
EXTENDEDINFO......Page 783
ISOLATION......Page 785
CFTREE......Page 787
COMPLETEPATH......Page 788
VSPACE......Page 789
NOTSUPPORTED......Page 790
CFTREEITEM......Page 792
IMG......Page 793
EXPAND......Page 794
CFTRY – CFCATCH......Page 796
Benutzerdefinierter_Typ......Page 797
CFUPDATE......Page 800
TABLEOWNER......Page 801
FORMFIELDS......Page 802
CFWDDX......Page 803
USETIMEZONEINFO......Page 804
C......Page 806
E......Page 808
I......Page 809
P......Page 810
T......Page 811
Z......Page 812
Papiere empfehlen

ColdFusion in 21 Tagen. Der einfache Einstieg ins Web-Publishing. Mit CD-R-ROM
 3827260175, 978-3-8272-6017-8 [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

Ch Cha Mo C harles M ohnike Über bersetzung: Ju dit ith JJud ud udi ith Mu Muhr

ColdFusion De Der Eiinstieg D er ei einfache E ins Web-Publishing E-Commerce-Anwendungen und Datenbanken Testversion auf der Buch-CD

Markt + Technik Verlag

Die Deutsche Bibliothek – CIP-Einheitsaufnahme Ein Titeldatensatz für diese Publikation ist bei Der Deutschen Bibliothek erhältlich.

Die Informationen in diesem Produkt werden ohne Rücksicht auf einen eventuellen Patentschutz veröffentlicht. Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt. Bei der Zusammenstellung von Texten und Abbildungen wurde mit größter Sorgfalt vorgegangen. Trotzdem können Fehler nicht vollständig ausgeschlossen werden. Verlag, Herausgeber und Autoren können für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung übernehmen. Für Verbesserungsvorschläge und Hinweise auf Fehler sind Verlag und Herausgeber dankbar. Autorisierte Übersetzung der amerikanischen Originalausgabe: Teach Yourself ColdFusion in 21 Days © 2000 by SAMS Publishing Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien. Die gewerbliche Nutzung der in diesem Produkt gezeigten Modelle und Arbeiten ist nicht zulässig. Fast alle Hardware- und Software-Bezeichnungen, die in diesem Buch erwähnt werden, sind gleichzeitig auch eingetragene Warenzeichen oder sollten als solche betrachtet werden. Umwelthinweis: Dieses Buch wurde auf chlorfrei gebleichtem Papier gedruckt. Die Einschrumpffolie – zum Schutz vor Verschmutzung – ist aus umweltverträglichem und recyclingfähigem PE-Material.

10 9 8 7 6 5 4 3 2 1 05 04 03 02 01

ISBN 3-8272-6017-5 © 2001 by Markt&Technik Verlag, ein Imprint der Pearson Education Deutschland GmbH. Martin-Kollar-Straße 10–12, D–81829 München/Germany Alle Rechte vorbehalten Übersetzung: Judith Muhr, Drachselsried Fachlektorat: Dr. Walter Fink, Fink & Partner Media Services GmbH, München Lektorat: Melanie Kasberger, [email protected] Herstellung: Claudia Bäurle, [email protected] Einbandgestaltung: Heinz H. Rauner, Gmund Satz: reemers publishing services gmbh, Krefeld, (www.reemers.de) Druck und Verarbeitung: Kösel, Kempten (www.koeselbuch.de) Printed in Germany

Inhaltsverzeichnis Vorwort. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Wer sollte dieses Buch lesen? . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Nichtprogrammierende Web-Entwickler. . . . . . . . . . . . . . . . . 24 Web-Programmierer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Alle anderen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Überblick. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Konventionen in diesem Buch . . . . . . . . . . . . . . . . . . . . . . . . . 26

Woche 1 – Vorschau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Tag 1

ColdFusion – Einführung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 1.1 1.2 1.3 1.4 1.5

1.6 1.7

1.8 1.9

Was ist ColdFusion? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Ein Beispiel für eine ColdFusion-Applikation . . . . . . . . . . . . . 31 Wozu sollte ich ColdFusion einsetzen? . . . . . . . . . . . . . . . . . . 33 Datenbankgestützte Sites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Fertig fürs Geschäft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Datensammlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Besser als CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Benutzerdefinierte Applikationen. . . . . . . . . . . . . . . . . . . . . . . 38 Dynamische Seiten erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Clients und Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 ColdFusion innerhalb der Client/Server-Beziehung . . . . . . . . 43 Tag-Verarbeitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Verbindung mit Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . . 44 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

5

Inhaltsverzeichnis

Tag 2

Aufbau einer ColdFusion-Applikation . . . . . . . . . . . . . . . . . . . . . . 47 2.1 Verbinden Sie Ihre Datenbank mit dem Web . . . . . . . . . . . . . 48 Tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Die Felder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Die Zeilen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Der Schlüssel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Kreuzverweise für Daten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 2.2 Die Datenquelle und ODBC . . . . . . . . . . . . . . . . . . . . . . . . . . 52 2.3 Das ColdFusion-Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Die Abfrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 HTML-Markup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Die Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 2.4 Die Beziehung zwischen Abfrage und Ausgabe. . . . . . . . . . . . 58 URL-Variablen zur Konkretisierung der Ausgaben . . . . . . . . . 60 2.5 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 2.6 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 2.7 Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

Tag 3

ColdFusion einrichten und eine Datenquelle definieren . . . . . . . 67 3.1 Kaufen oder nicht kaufen? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 3.2 Fragen, die Sie einem potentiellen ColdFusion-Provid er stellen sollten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 ColdFusion-Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Die Anzahl der unterstützten Datenquellen . . . . . . . . . . . . . . 70 Aktualisierung der Datenquellen . . . . . . . . . . . . . . . . . . . . . . . 72 Wo werden Ihre Datenbanken abgelegt? . . . . . . . . . . . . . . . . . 73 3.3 ColdFusion Server-Varianten . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Kompatibilität mit der Professional Edition . . . . . . . . . . . . . . . 74 Kompatibilität mit der Enterprise Edition . . . . . . . . . . . . . . . . 74 3.4 Installation von ColdFusion Server auf Windows-Plattformen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 3.5 Installation von ColdFusion Server auf UNIX-basierten Plattformen . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 3.6 Überprüfen des Server-Setups. . . . . . . . . . . . . . . . . . . . . . . . . . 77 3.7 Der ColdFusion Administrator . . . . . . . . . . . . . . . . . . . . . . . . . 78 Server-Optionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

6

Inhaltsverzeichnis

3.8

3.9

3.10 3.11 3.12

Tag 4

Datenquellen – Optionen und Setup . . . . . . . . . . . . . . . . . . . . 80 Datenquellenname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 ODBC-Treiber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Beschreibung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Datenbankdatei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Eine Datenquelle überprüfen. . . . . . . . . . . . . . . . . . . . . . . . . . 83 Protokollierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Automatisierte Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Erweiterungsseiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Weitere Optionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Den ColdFusion-Dienst aktivieren und deaktivieren . . . . . . . 85 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

Aufbau einer Datenbank und Organisation der Daten . . . . . . . . . 91 4.1 Von ColdFusion unterstützte Datenbanksoftware . . . . . . . . . . 92 4.2 ColdFusion als Schnittstelle zwischen Datenbank und Web . 93 ODBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 4.3 Anlegen einer Datenzuordnung . . . . . . . . . . . . . . . . . . . . . . . . 95 4.4 Einführung von Datenbeziehungen. . . . . . . . . . . . . . . . . . . . . 98 4.5 Entwurf der Datenbank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Felder definieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Die Bedeutung von Schlüsseln. . . . . . . . . . . . . . . . . . . . . . . . 104 4.6 Datenbeziehungen einrichten . . . . . . . . . . . . . . . . . . . . . . . . 105 4.7 Tabellen- und Datenbanksicherheit . . . . . . . . . . . . . . . . . . . . 108 Tabellenberechtigungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 4.8 Daten in eine Datenbank schreiben . . . . . . . . . . . . . . . . . . . . 110 Das Eingabeformular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Daten importieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Web-Eingaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 4.9 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 4.10 Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

7

Inhaltsverzeichnis

Tag 5

Finden Sie die Daten, die Sie brauchen: Abfragen und SQL – eine Einführung . . . . . . . . . . . . . . . . . . . . . 117 5.1 5.2 5.3

5.4

5.5 5.6

Tag 6

8

ColdFusion-Abfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 SELECT-Anweisung – Grundlagen . . . . . . . . . . . . . . . . . . . . 119 Konkretisierung einer SELECT-Anweisung durch Bedingungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Relationale Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Logische Operatoren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Die Operatoren IN und BETWEEN . . . . . . . . . . . . . . . . . . . 129 LIKE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Sortieren und Auswerten von Abfrageergebnissen . . . . . . . . . 133 Ausgaben mit ORDER BY sortieren. . . . . . . . . . . . . . . . . . . . 134 Duplikate mit DISTINCT erkennen . . . . . . . . . . . . . . . . . . . 136 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

Ihre erste Web-Applikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 6.1 Definition einer Beispielapplikation . . . . . . . . . . . . . . . . . . . . 142 Auswerten der Datenbank. . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 6.2 Ordner anlegen und freigeben . . . . . . . . . . . . . . . . . . . . . . . . 145 6.3 Einrichten der Datenquelle . . . . . . . . . . . . . . . . . . . . . . . . . . 146 6.4 Aufbau Ihrers ersten Templates. . . . . . . . . . . . . . . . . . . . . . . . 148 Die Abfrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Der Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Der Ausgabeabschnitt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Der Fußbereichsabschnitt. . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 6.5 Anzeige des Index-Template . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Grundlegende Fehlersuche . . . . . . . . . . . . . . . . . . . . . . . . . . 156 6.6 Aufbau der zweiten Template-Seite . . . . . . . . . . . . . . . . . . . . 157 Die Abfrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Die Header- und Ausgabeabschnitte . . . . . . . . . . . . . . . . . . . 158 Der Fußbereich. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 6.7 Anzeige des Details-Template . . . . . . . . . . . . . . . . . . . . . . . . . 160 6.8 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

Inhaltsverzeichnis

6.9

Tag 7

Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

Datenbankinhalt mit ColdFusion ändern . . . . . . . . . . . . . . . . . . 167 7.1 7.2 7.3 7.4

7.5

7.6 7.7

7.8 7.9 7.10 7.11

Definition einer Beispielapplikation . . . . . . . . . . . . . . . . . . . . 168 und . . . . . . . . . . . . . . . . . . . 169 Web-Formulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Ein Eingabeformular zum Einfügen von Daten anlegen . . . 172 Die Abfrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Der Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Das Formular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Testen des Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Anlegen der Einfüge-Aktionsseite . . . . . . . . . . . . . . . . . . . . . . 179 Das Einfügen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 Der Rumpf und der Fußbereich. . . . . . . . . . . . . . . . . . . . . . . 180 Die Bearbeitungsoberfläche anlegen . . . . . . . . . . . . . . . . . . . 182 Ein Formular zur Bearbeitung existierender Daten anlegen . 184 Die Abfrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Header- und Formularabschnitte . . . . . . . . . . . . . . . . . . . . . . 186 Anlegen der Aktualisierungsseite . . . . . . . . . . . . . . . . . . . . . . 189 Fehlersuche für Einfüge- und Aktualisierungsoperationen . . 190 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

Woche 2 – Vorschau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Tag 8

ColdFusion Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 8.1 8.2 8.3

ColdFusion Studio – Einführung . . . . . . . . . . . . . . . . . . . . . . 198 Studio installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 Komponenten von Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Bearbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Ressourcen-Komponenten . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

9

Inhaltsverzeichnis

8.4

8.5

8.6

8.7 8.8 8.9 8.10

Tag 9

Erweiterung Ihrer Applikationen mit Variablen und If-Then-Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 9.1 9.2 9.3 9.4 9.5

9.6 9.7 9.8

10

Zugriff auf Remote-Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Definieren eines lokalen oder Remote-Servers . . . . . . . . . . . 204 Anzeige von Dateien oder Datenquellen im Ressourcenbereich. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 Die Arbeit mit dem Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Bearbeitungsansicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Browser-Ansicht. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Entwurfsansicht. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Die Hilfestellung von Studio . . . . . . . . . . . . . . . . . . . . . . . . . 211 Tag-Werkzeuge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Der Tabellen-Assistent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Der Frame-Assistent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Der SQL-Editor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Studio für Ihre Arbeit konfigurieren . . . . . . . . . . . . . . . . . . . . 219 Hilfe- und Referenzfunktionen von Studio . . . . . . . . . . . . . . 220 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

Definieren einer Beispielapplikation . . . . . . . . . . . . . . . . . . . 226 Das -Tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Das -Tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Eine Applikation mit erstellen . . . . . . . . . . . . . . . . . 233 Die Seite für die Kennwortprüfung . . . . . . . . . . . . . . . . . . . . 234 Die Einfügeseite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 Die Abfrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 Gültigkeitsbereiche für Variablen nutzen . . . . . . . . . . . . . . . 237 Variablen mit definieren. . . . . . . . . . . . . . . . . . . . 241 Der Zählmechanismus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

Inhaltsverzeichnis

Tag 10

Ausgaben mit Hilfe von Tabellen und Gruppen organisieren . . . 251 10.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 10.2 Ausgabetabellen mit anlegen . . . . . . . . . . . . . 253 im Textmodus . . . . . . . . . . . . . . . . . . . . . . . . . 254 im HTMLTABLE-Modus . . . . . . . . . . . . . . . 256 10.3 Ausgabetabellen mit dem

-Tag von HTML erzeugen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 10.4 Daten gruppieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 10.5 Ausgaben mit dem GROUP-Parameter anlegen . . . . . . . . . . 263 10.6 Lange Seiten mit Hilfe von Index-Links organisieren . . . . . . 266 10.7 Mit der SQL-Anweisung DISTINCT dynamische Index-Links erzeugen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 10.8 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 10.9 Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

Tag 11

Eingabeseiten mit grundlegenden -Tags verbessern . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8

Tag 12

Die Arbeitsweise von . . . . . . . . . . . . . . . . . . . . 276 in der Praxis . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Das -Tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 Das -Tag . . . . . . . . . . . . . . . . . . . . . . . . . 285 Das -Tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 Das -Tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

Erweiterte Formulartechniken zur Verwaltung von Eingaben . . . 297 12.1 Aktualisieren, Einfügen und Löschen mit SQL. . . . . . . . . . . 298 Die SQL-Anweisung INSERT . . . . . . . . . . . . . . . . . . . . . . . . 300 Die SQL-Anweisung UPDATE . . . . . . . . . . . . . . . . . . . . . . . 302 Die SQL-Anweisung DELETE . . . . . . . . . . . . . . . . . . . . . . . 305

11

Inhaltsverzeichnis

12.2 12.3

12.4 12.5 12.6 12.7

Mehrere Formularaktionen kombinieren. . . . . . . . . . . . . . . . 307 und . . . . . . . . . . . . . . . . . . 313 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

Tag 13

E-Mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 13.1 Das -Tag. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 13.2 in der Praxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 13.3 Definition eines Standard-Mail-Servers in ColdFusion Administrator. . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 13.4 Abfragen für AutoRespond und Inhalte anlegen . . . . . . . . . . 333 Anpassung Ihrer Nachricht mit Hilfe von HTML-Tags. . . . . 337 Anhänge senden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 13.5 Abfragen zum Senden von Mail an eine Liste . . . . . . . . . . . . 340 13.6 Eingehende Mail mit entgegennehmen . . . . . . . 343 13.7 Mail mit löschen . . . . . . . . . . . . . . . . . . . . . . . . . 345 13.8 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 13.9 Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350

Tag 14

ColdFusion-Funktionen zur Datenbearbeitung . . . . . . . . . . . . . 351 14.1 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 14.2 Allgemeine Regeln für Funktionen . . . . . . . . . . . . . . . . . . . . 356 Funktionseingabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 Funktionsnamen ohne Berücksichtung der Groß-/Kleinschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 Funktionsbegrenzungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 Funktionen verschachteln . . . . . . . . . . . . . . . . . . . . . . . . . . . 357

12

Inhaltsverzeichnis

14.3

14.4

14.5

14.6 14.7

Anzeige- und Formatfunktionen . . . . . . . . . . . . . . . . . . . . . . . 358 DateFormat(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 DecimalFormat() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 DollarFormat() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 NumberFormat(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 ParagraphFormat() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 TimeFormat() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 YesNoFormat() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 Zeichenkettenfunktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 Find() und FindNoCase() . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 GetToken() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 Insert() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 LCase() und UCase() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 Len() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 LTrim() und RTrim() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 RepeatString() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 Replace() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 Datums- und Zeitfunktionen . . . . . . . . . . . . . . . . . . . . . . . . . 369 Definition von Datums-/Zeitobjekten . . . . . . . . . . . . . . . . . . 369 Verwendung von Datums-/Zeitobjekten . . . . . . . . . . . . . . . . 371 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

Woche 3 – Vorschau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 Tag 15

Listen, Strukturen und Datenfelder . . . . . . . . . . . . . . . . . . . . . . . 379 15.1 15.2

15.3 15.4

Listen in ColdFusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 Listen in ColdFusion anlegen . . . . . . . . . . . . . . . . . . . . . . . . 382 Eine Liste mit füllen . . . . . . . . . . . . . . . . . . . . . . 382 Eine Liste mit und der Funktion ListAppend füllen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 Eine Liste mit einer Abfrage füllen . . . . . . . . . . . . . . . . . . . . 384 Eine Liste mit den von einem Formular übergebenen Daten füllen . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Listenwerte mit lesen . . . . . . . . . . . . . . . . . . . . 388 Strukturen in ColdFusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 Strukturinhalte anzeigen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

13

Inhaltsverzeichnis

15.5 15.6 15.7 15.8 15.9

Tag 16

14

Datenfelder in ColdFusion . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 Datenfelder definieren und füllen . . . . . . . . . . . . . . . . . . . . . 394 Daten aus einem Datenfeld lesen. . . . . . . . . . . . . . . . . . . . . . 396 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400

Client- und Sitzungsverwaltung in ColdFusion . . . . . . . . . . . . . . 401 16.1 Die Basisstruktur, die ColdFusion für Web-Applikationen bereitstellt . . . . . . . . . . . . . . . . . . . . . . . . 402 16.2 Application.cfm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 16.3 Werte in Application.cfm setzen . . . . . . . . . . . . . . . . . . . . . . . 404 Statuslosigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 Verfolgen der IP-Adressen von Benutzern . . . . . . . . . . . . . . . 406 Daten in URLs übergeben . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 Daten in Cookies ablegen. . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 16.4 Die Client-Statusverwaltung. . . . . . . . . . . . . . . . . . . . . . . . . . 407 Client-Statusverwaltung in der Praxis. . . . . . . . . . . . . . . . . . . 408 Reservierte Client-Variablen. . . . . . . . . . . . . . . . . . . . . . . . . . 411 Client-Variablen auswerten und auflisten . . . . . . . . . . . . . . . 413 16.5 Gültigkeitsbereiche von Variablen . . . . . . . . . . . . . . . . . . . . . 414 16.6 Sitzungsvariablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 16.7 Applikationsvariablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 16.8 Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 Cookies setzen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 Cookies lesen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 Cookies entfernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420 Sichere Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420 16.9 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 16.10 Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423

Inhaltsverzeichnis

Tag 17

Tag 18

Textsuchen mit Verity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 17.1 Verity – Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426 17.2 Verity-Sammlungen in ColdFusion Administrator definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430 In ColdFusion Administrator einen Index für eine Sammlung erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431 17.3 Verity-Sammlungen durchsuchen . . . . . . . . . . . . . . . . . . . . . 433 Das Suchformular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 Die Ergebnisseite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 17.4 Definieren und Indizieren von Verity-Sammlungen mit CFML-Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438 17.5 Datenbanken in Verity-Sammlungen integrieren . . . . . . . . . 440 Abfragedaten in einen Index eintragen. . . . . . . . . . . . . . . . . . 440 Anzeige von Datensätzen einer Datenbank als Suchergebnisse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442 17.6 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 17.7 Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 17.8 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 Dateien und Verzeichnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 18.1 18.2 18.3 18.4 18.5

18.6 18.7

18.8

ColdFusion und Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 Mit Uploads akzeptieren. . . . . . . . . . . . . . . . . . . 451 -Attribute dynamisch zuweisen . . . . . . . . . . . . . . 454 Mit Dateien verwalten und anlegen . . . . . . . . . . 457 Dateien mit kopieren, umbenennen und löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 Die ACTION-Seite für das Kopieren . . . . . . . . . . . . . . . . . . . 460 Die ACTION-Seite für das Umbenennen . . . . . . . . . . . . . . . 462 Die ACTION-Seite zum Löschen . . . . . . . . . . . . . . . . . . . . . 463 Dateiobjektattribute anzeigen. . . . . . . . . . . . . . . . . . . . . . . . . 464 Mit lesen und schreiben . . . . . . . . . . . . . . . . . . . 467 Die ACTION Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 Die ACTIONs write und append . . . . . . . . . . . . . . . . . . . . . . 468 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470

15

Inhaltsverzeichnis

18.9 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 18.10 Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 Tag 19

Komplexe SQL-Techniken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 19.1 19.2 19.3 19.4 19.5

19.6 19.7 19.8

Tag 20

16

Spaltenaliase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476 Aggregatfunktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 Tabellen-Joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 SQL-Unterabfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 SQL-Ansichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 Ansichten erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 Auf Ansichten zugreifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494 Gespeicherte Prozeduren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 Worskhop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499

ColdFusion für E-Commerce-Applikationen . . . . . . . . . . . . . . . . 501 20.1 Vorgefertigte Commerce-Applikationen . . . . . . . . . . . . . . . . . 502 20.2 Planung einer E-Commerce-Site . . . . . . . . . . . . . . . . . . . . . . 503 20.3 Aufbau eines Administrationsabschnitts . . . . . . . . . . . . . . . . . 504 20.4 Einen Katalog anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 Eine Anzeigeseite für Ihre Produkte. . . . . . . . . . . . . . . . . . . . 511 Einen Einkaufswagen anlegen . . . . . . . . . . . . . . . . . . . . . . . . 514 20.5 Transaktionsseiten anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 20.6 E-Commerce-Transaktionstypen . . . . . . . . . . . . . . . . . . . . . . 524 Sichere Web-Transaktionen . . . . . . . . . . . . . . . . . . . . . . . . . . 524 E-Mail-Bestellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525 Druck-und-Fax-Formulare . . . . . . . . . . . . . . . . . . . . . . . . . . . 526 Aufträge per Anruf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526 Unsichere Web-Transaktionen . . . . . . . . . . . . . . . . . . . . . . . . 526 20.7 Fertigstellen Ihrer Kaufhaus-Applikation . . . . . . . . . . . . . . . . 527 checkout_process.cfm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527 checkout_complete.cfm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529

Inhaltsverzeichnis

20.8 20.9

Tag 21

Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534 Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536

Die Debugging-Werkzeuge von ColdFusion . . . . . . . . . . . . . . . . 537 21.1 21.2

21.3

21.4

21.5

21.6 21.7 21.8 21.9

Fehlerquellen identifizieren . . . . . . . . . . . . . . . . . . . . . . . . . . 538 Fehlermeldungen Ihres Web-Servers . . . . . . . . . . . . . . . . . . . 539 Host nicht gefunden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539 404 Datei nicht gefunden . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540 URL-Syntaxfehler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 ColdFusion läuft nicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542 Fehlermeldungen von ColdFusion. . . . . . . . . . . . . . . . . . . . . 544 Fehlerhaft zugeordnete Tags . . . . . . . . . . . . . . . . . . . . . . . . . 544 Nicht erkannte Tag-Attribute . . . . . . . . . . . . . . . . . . . . . . . . . 545 Fehlerhafte Doppelkreuze oder Anführungszeichen. . . . . . . 546 Fehler bei der Auflösung von Parametern . . . . . . . . . . . . . . . 547 Fehlermeldungen von Ihrem ODBC-Treiber . . . . . . . . . . . . 549 Datenquelle nicht gefunden. . . . . . . . . . . . . . . . . . . . . . . . . . 549 Fehler in der SQL-Syntax oder -Logik . . . . . . . . . . . . . . . . . . 550 Andere SQL-Fehler. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553 Die Debugging-Werkzeuge von ColdFusion . . . . . . . . . . . . . 554 Die Debugging-Funktionen von ColdFusion Administrator . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 Debugging-Informationen für bestimmte Templates aktivieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556 Debugging-Ausgaben auf bestimmte Benutzer begrenzen . . 557 Der Document Validator von ColdFusion Studio . . . . . . . . . 558 Protokolldateien in ColdFusion . . . . . . . . . . . . . . . . . . . . . . . 560 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560 Workshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 F&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562 Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563

17

Inhaltsverzeichnis

A. Auf der Buch-CD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565 B. ColdFusion-Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 B.1 B.2 B.3 B.4 B.5 B.6 B.7 B.8 B.9 B.10 B.11 B.12 B.13 B.14 B.15 B.16 B.17 B.18 B.19 B.20 B.21 B.22 B.23 B.24 B.25 B.26 B.27

Alphabetische Auflistung der ColdFusion-Tags . . . . . . . . . . . 568 Neue Tags in ColdFusion 4.5 . . . . . . . . . . . . . . . . . . . . . . . . . 571 ColdFusion-Formular-Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . 571 Tags zur Datenbankbearbeitung . . . . . . . . . . . . . . . . . . . . . . . 572 Tags zur Datenausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572 Tags zur Ausnahmeverarbeitung . . . . . . . . . . . . . . . . . . . . . . . 572 Tags für die Erweiterungsfähigkeit . . . . . . . . . . . . . . . . . . . . . 572 Tags zur Dateiverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 Tags zur Flußsteuerung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 Internetprotokoll-Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 Java Servlet und Java Object-Tags. . . . . . . . . . . . . . . . . . . . . . 573 Tags zur Variablenmanipulation . . . . . . . . . . . . . . . . . . . . . . . 573 Tags für Web-Applikationsumgebungen . . . . . . . . . . . . . . . . . 574 Verschiedene Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574 CFABORT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574 CFAPPLET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576 CFAPPLICATION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578 CFASSOCIATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581 CFAUTHENTICATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582 CFBREAK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584 CFCACHE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585 CFCOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588 CFCOLLECTION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590 CFCONTENT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592 CFCOOKIE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594 CFDIRECTORY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597 CFERROR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600 CFERROR-Fehlervariablen . . . . . . . . . . . . . . . . . . . . . . . . . . 602 B.28 CFEXECUTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604 B.29 CFEXIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606 B.30 CFFILE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608 CFFILE ACTION="Upload". . . . . . . . . . . . . . . . . . . . . . . . . 610 Ergebnisse eines Datei-Uploads auswerten . . . . . . . . . . . . . . 612

18

Inhaltsverzeichnis

B.31

B.32

B.33

B.34

B.35 B.36 B.37 B.38 B.39 B.40 B.41 B.42 B.43 B.44 B.45 B.46 B.47 B.48

CFFILE ACTION="Move" . . . . . . . . . . . . . . . . . . . . . . . . . . 614 CFFILE ACTION="Rename" . . . . . . . . . . . . . . . . . . . . . . . . 616 CFFILE ACTION="Copy" . . . . . . . . . . . . . . . . . . . . . . . . . . 617 CFFILE ACTION="Delete" . . . . . . . . . . . . . . . . . . . . . . . . . 618 CFFILE ACTION="Read" . . . . . . . . . . . . . . . . . . . . . . . . . . 618 CFFILE ACTION="ReadBinary" . . . . . . . . . . . . . . . . . . . . . 619 CFFILE ACTION="Write" . . . . . . . . . . . . . . . . . . . . . . . . . . 620 CFFILE ACTION="Append" . . . . . . . . . . . . . . . . . . . . . . . . 622 CFFORM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623 Verwendung von HTML FORM-Tags in einem CFFORM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625 CFFTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627 Verbindungen mit CFFTP einrichten . . . . . . . . . . . . . . . . . . 628 Datei- und Verzeichnisoperationen mit CFFTP . . . . . . . . . . 631 Die Variable CFFTP.ReturnValue . . . . . . . . . . . . . . . . . . . . 635 Auf die Spalten eines Abfrageobjekts zugreifen . . . . . . . . . . . 635 Verbindungen zwischenspeichern . . . . . . . . . . . . . . . . . . . . . 636 CFGRID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637 Auswahlmodus und Formularvariablen . . . . . . . . . . . . . . . . . 643 SELECTMODE="Edit" . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643 Verwendung des HREF-Attributs . . . . . . . . . . . . . . . . . . . . . . 644 CFGRIDCOLUMN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646 NUMBERFORMAT-Maskenzeichen . . . . . . . . . . . . . . . . . . 649 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650 CFGRIDROW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651 CFGRIDUPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651 CFHEADER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654 CFHTMLHEAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655 CFHTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656 CFHTTPPARAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662 CFIF/CFELSEIF/CFELSE . . . . . . . . . . . . . . . . . . . . . . . . . . 664 CFIMPERSONATE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666 CFINCLUDE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668 CFINDEX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669 CFINPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672 CFINSERT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676 CFLDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679 CFLOCATION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685

19

Inhaltsverzeichnis

B.49 CFLOCK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686 B.50 CFLOOP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693 Index-Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693 Bedingungsschleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695 Schleife über eine Abfrage . . . . . . . . . . . . . . . . . . . . . . . . . . . 696 Schleife über eine Liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697 Schleife über eine COM-Sammlung oder Struktur . . . . . . . 699 B.51 CFMAIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700 B.52 CFMAILPARAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703 B.53 CFMODULE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705 B.54 CFOBJECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708 CFOBJECT-Themen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708 CFOBJECT TYPE-Attribute . . . . . . . . . . . . . . . . . . . . . . . . . 709 CFOBJECT Type="COM" . . . . . . . . . . . . . . . . . . . . . . . . . . 709 CFOBJECT Type="CORBA" . . . . . . . . . . . . . . . . . . . . . . . . 711 CFOBJECT Type="JAVA". . . . . . . . . . . . . . . . . . . . . . . . . . . 713 B.55 CFOUTPUT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715 B.56 CFPARAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717 B.57 CFPOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720 CFPOP-Abfragevariablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721 Nachrichtenkopf und Textspalten . . . . . . . . . . . . . . . . . . . . . 722 B.58 CFPROCESSINGDIRECTIVE . . . . . . . . . . . . . . . . . . . . . . 724 B.59 CFPROCPARAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725 B.60 CFPROCRESULT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727 B.61 CFQUERY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729 B.62 CFQUERYPARAM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734 B.63 CFREGISTRY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738 CFREGISTRY ACTION-Attribute . . . . . . . . . . . . . . . . . . . . 739 CFREGISTRY ACTION="GetAll" . . . . . . . . . . . . . . . . . . . . 739 CFREGISTRY ACTION="Get" . . . . . . . . . . . . . . . . . . . . . . 741 CFREGISTRY ACTION="Set". . . . . . . . . . . . . . . . . . . . . . . 742 CFREGISTRY ACTION="Delete" . . . . . . . . . . . . . . . . . . . . 743 B.64 CFREPORT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744 B.65 CFRETHROW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746 B.66 CFSCHEDULE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747 B.67 CFSCRIPT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751 B.68 CFSEARCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752 B.69 CFSELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755

20

Inhaltsverzeichnis

B.70 CFSERVLET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758 B.71 CFSERVLETPARAM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760 B.72 CFSET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763 Datenfelder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763 Dynamische Variablennamen . . . . . . . . . . . . . . . . . . . . . . . . 763 COM-Objekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763 B.73 CFSETTING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765 B.74 CFSILENT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766 B.75 CFSLIDER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767 B.76 CFSTOREDPROC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772 B.77 CFSWITCH – CFCASE – CFDEFAULTCASE . . . . . . . . . 774 B.78 CFTABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777 B.79 CFTEXTINPUT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779 B.80 CFTHROW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783 B.81 CFTRANSACTION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786 B.82 CFTREE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788 B.83 CFTREEITEM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793 B.84 CFTRY – CFCATCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797 B.85 CFUPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 801 B.86 CFWDDX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804 Stichwortverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807

21

Vorwort Internet und Intranet betonen zwei Forderungen an die Entwicklung von Anwendungen: die Entwicklungszeiten müssen immer kürzer werden, und die Serverplattform muss an meist rasant steigende Nutzerzahlen anpassbar sein, ohne an der Anwendung selbst viel zu verändern. ColdFusion trägt beiden Forderungen Rechnung und zählt heute zu den beliebtesten Applikationsserver- und Entwicklungsprodukten weltweit. Der Zusammenschluß der beiden Unternehmen Allaire und Macromedia im Januar 2001 bündelt in Zukunft die besten Oberflächen- und Anwendungsentwicklungstools mit stabilen und leistungsfähigen Anwendungsservern. Die einfach verständliche, aber sehr mächtige Programmierumgebung erlaubt einerseits Menschen ohne Informatik-Diplom das effiziente Erstellen von Anwendungen, bietet jedoch auch dem Profi enorm zeitsparende Hilfen und Lösungen komplexer Teilaufgaben, sei es Mail, LDAP, XML oder Volltextsuche. Charles Mohnike, dem Autor des Buchs war es wichtig, den teilweise trockenen Stoff durch seine Beispiele aufzulockern und vor allem auch die Grundlagen einer SQL-Datenbank verständlich zu machen, auf der die meisten ColdFusion-Webapplikationen ja aufsetzen. Die Übersetzerin Judith Muhr hat mit viel Geschick, noch mehr Einfühlungsvermögen, v.a. aber mit hoher Präzision die Aussagen des Autors gut verständlich und technisch korrekt wiedergegeben. Das Team der Fink & Partner Media Services GmbH übernahm das Fachlektorat. Unser Unternehmen besitzt langjährige Erfahrungen im Einsatz von ColdFusion für verschiedene Anwendungen bei anspruchsvollen Kunden. Zusammen mit Dr. Walter Fink (ehemaliger Technischer Direktor des PC-Herstellers Compaq in Deutschland) stehen wir für die fachliche Richtigkeit dieses Lehrbuchs gerade. Das vorliegende Buch ist eines der ersten ColdFusion-Bücher in deutscher Sprache und sollte dadurch die Verbreitung dieses Fachwissens entsprechend erleichtern.

Fink & Partner Media Services GmbH, technisches Lektorat

23

Einleitung Wer sollte dieses Buch lesen? Als Autor dieses Buchs beantworte ich diese Frage natürlich gerne mit »Jeder sollte es lesen!«, weil ich schließlich Geld damit verdiene und Sie von meinem Wissen profitieren können. Dennoch sollte ich den Kreis etwas eingrenzen: 쐽

Sie sollten über grundlegendes Wissen über die Entwicklung von Web-Seiten mit HTML-Code und einem Texteditor verfügen.



Sie sollten wissen, wie man Dateien beispielsweise über ein FTP-Programm an einen Server überträgt.



Und natürlich brauchen Sie einen Computer.

Dieses Buch wird Ihnen am meisten bringen, wenn Sie zu einer der folgenden Gruppen gehören.

Nichtprogrammierende Web-Entwickler Angenommen, Sie haben schon ein paar Sites mit Hilfe von Standard-HTML entwickelt und kennen sich mit dem -Tag schon besser aus als mit Ihrem Handy. Sie sind sich Ihrer selbst ganz sicher, aber eines Tages erhalten Sie einen Anruf von einem Kunden oder von Ihrem Chef, der gerade aus einem Meeting kommt und eine nummerierte Liste derjenigen Dinge durchgibt, die auf der Web-Site des Unternehmens bereitgestellt werden sollen. Man wünscht eine Web-basierte E-Mail-Funktion, eine Anmeldefunktion, ein Gästebuch, benutzerdefinierbare Seiten sowie die Möglichkeit, täglich neuen Inhalt zu präsentieren. Und – ja genau – das Ganze sollte möglichst gestern fertig sein. Jetzt gibt es mehrere Möglichkeiten. Sie können die ganze Programmiererei einfach an den Nagel hängen und wieder Ihre Stelle beim Supermarkt annehmen. Sie können Ihren Freund anrufen, von dem Sie wissen, dass er programmieren kann, und ihm ein chinesisches Essen für ein paar Stunden Beratung anbieten. Oder Sie können sich hinsetzen und alles so machen, wie der Kunde es wünscht – die Zeit ist knapp! Wenn Sie keine Erfahrung in C oder Perl mitbringen, müssen Sie zunächst das Web nach vorgefertigten Programmen durchsuchen, die alle angeforderten Funktionen bieten. Außerdem müssen Sie diese Programme installieren, konfigurieren und Ihren Aufgabenstellungen anpassen. Und wenn Sie je eine Fehlersuche in den Freeware-Programmen anderer Leute vorgenommen haben, dann wissen Sie, dass das alles nicht ganz einfach sein wird.

24

Überblick

Es gibt jedoch eine bessere Methode, mit der Sie sich viel Kopfzerbrechen ersparen und die Lösung rechtzeitig anbieten können. Sie können ColdFusion auf dem Web-Server des Unternehmens installieren und dieses Buch kaufen (herzlichen Dank!), um all die gewünschten Funktionen zu realisieren, und zwar ohne auch nur ein Wort C schreiben oder ein Perl-Modul installieren zu müssen. In nur 21 Tagen werden Sie der Held Ihrer Stadt und der Stolz Ihrer Eltern.

Web-Programmierer Falls Sie Programmierwissen mitbringen, werden Sie feststellen, dass ColdFusion auch mit den bereits von Ihnen entwickelten Web-Werkzeugen kombiniert werden kann, und dass es Ihnen hilft, Ihren Sites neue Funktionen hinzuzufügen – und zwar in einem Bruchteil der Zeit, die Sie bisher dafür aufgewendet haben. Und mit der ganzen Programmiererfahrung, die Sie bereits besitzen, können Sie die Dinge im Buch, die Ihnen bereits vertraut sind, überspringen, wie beispielsweise Variablen oder If-Anweisungen.

Alle anderen Und selbst wenn Sie nicht vom Web-Design kommen, haben Sie vielleicht ein kleines Projekt, das Sie unbedingt im Web veröffentlichen wollen. Vielleicht haben Sie unzählige Informationen über Hummel-Figuren oder über die aufregenden Sperrstundenbestimmungen Ihrer Stadt gesammelt und wollen diese der Welt jetzt endlich zur Verfügung stellen – wobei Sie aber keinesfalls Ihre ganze Freizeit darauf aufwenden wollen, eine Programmiersprache zu lernen.

Überblick Die ersten sieben Kapitel stellen Ihnen ColdFusion vor und erklären, wie man damit WebApplikationen entwickelt, die sehr viel mehr können, als mit Standard-HTML-Code möglich ist. Sie erfahren, wie man ColdFusion Server installiert, wie mit Hilfe von SQL Datensätze ausgewählt und im Web angezeigt werden, und wie mit Formularen der Inhalt Ihrer Web-Datenbanken geändert wird. Nach der ersten Woche besitzen Sie ausreichend viel Wissen, um einfache aber funktionale ColdFusion-gestützte Seiten zu entwickeln, die aussehen, als ob Sie wirklich hart daran gearbeitet hätten, während Sie in Wirklichkeit nur ein paar Stunden brauchten, um die Template-Seiten anzufertigen. Woche 2 stellt ColdFusion Studio vor, die optionale Entwicklungsapplikation, die Ihnen hilft, Template-Seiten zu erstellen. Außerdem lernen Sie Werkzeuge wie beispielsweise Variablen und Funktionen kennen, die Ihnen ermöglichen, Web-Sites zu erstellen, die

25

Einleitung

auch andere Dinge können, als nur gut auszusehen. Sie lernen, den Applikationsfluss mit Hilfe von if-Anweisungen zu steuern und mit ColdFusion E-Mails zu senden und zu empfangen. In den Kapiteln von Woche 3 schließlich erfahren Sie, wie Sie mit Hilfe von ColdFusion das meiste aus Ihrer Programmierung machen. Sie werden zeitsparende Instrumente kennen lernen, wie beispielsweise komplexe Variablentypen und SQL-Prozeduren sowie die Verity-Freitextsuchmaschine von ColdFusion. Sie werden lernen, wie die dem Web innewohnende Statuslosigkeit mit Hilf von Client- und Sitzungsvariablen überwunden werden kann. In den letzten Kapiteln erfahren Sie, wie mit ColdFusion E-Commerce-Applikationen entwickelt werden und ein Debugging für Template-Seiten durchgeführt wird.

Konventionen in diesem Buch Dieses Buch verwendet die folgenden Satzkonventionen: 쐽

Menünamen werden durch Kommas von Menüoptionen getrennt. DATEI, ÖFFNEN beispielsweise bedeutet »wählen Sie die Option ÖFFNEN aus dem DATEI-Menü«. Außerdem werden sie in Kapitälchen dargestellt.



Neue Begriffe werden mit dem Symbol NEUER BEGRIFF gekennzeichnet und erscheinen im Text kursiv.



Begriffe, die sich im Text auf Code beziehen, erscheinen in Courier.



Platzhalter im Code erscheinen in Courier kursiv.



Falls eine Zeile zu lang für die Seite ist, wird sie mit einem Fortsetzungszeichen gekennzeichnet und in der nächsten Zeile fortgesetzt. Sie können diese Codezeile ohne Umbruch in Ihren Editor eingeben.

Spezielle Symbole ergänzen den Text: Hinweise erklären interessante oder wichtige Aspekte, die Ihnen helfen, Konzepte und Techniken zu verstehen. Hier finden sie auch Informationen, die Ihnen für die Praxis sehr nützlich sein können, beispielsweise Abkürzungen, die eine Aufgabe einfacher oder schneller machen. Warnungen bieten Informationen zu Leistungsbeeinträchtigungen oder gefährlichen Fehlern. Lesen Sie diese Abschnitte sorgfältig durch!

26

Ta g 1 Ta g 2 Ta g 3 Ta g 4 Ta g 5

Ta g 6 Ta g 7

Ta g 8 Ta g 9 Ta g 1 0 Ta g 1 1 Ta g 1 2 Ta g 1 3 Ta g 1 4

ColdFusion – Einführung Aufbau einer ColdFusion-Applikation ColdFusion einrichten und eine Datenquelle definieren Aufbau einer Datenbank und Organisation der Daten Finden Sie die Daten, die Sie brauchen: Abfragen und SQL – eine Einführung Ihre erste Web-Applikation Datenbankinhalt mit ColdFusion ändern ColdFusion Studio Erweiterung Ihrer Applikationen mit Variablen und If-ThenAnweisungen Ausgaben mit Hilfe von Tabellen und Gruppen organisieren Eingabeseiten mit grundlegenden -Tags verbessern Erweiterte Formulartechniken zur Verwaltung von Eingaben E-Mail ColdFusion-Funktionen zur Datenbearbeitung

Tag 15 Listen, Strukturen und Datenfelder Tag 16 Client- und Sitzungsverwaltung in ColdFusion Tag 17 Textsuchen mit Verity Tag 18 Dateien und Verzeichnisse Tag 19 Komplexe SQL-Techniken Tag 20 ColdFusion für E-CommerceApplikationen Tag 21 Die Debugging-Werkzeuge von ColdFusion

29 47 67 91

W O C H E

117 141 167 197 225 251 275

W O C H E

297 327 351 379 401 425 447 475 501 537

WOCHE 1 – VORSCSHAU

W O C H E

Woche 1 – Vorschau Woche 1 verschafft Ihnen einen Überblick über ColdFusion. In sieben Kapiteln erfahren Sie, worum es sich bei ColdFusion handelt, was damit möglich oder nicht möglich ist, und wie Sie es als Web-Entwickler einsetzen können. Wenn Sie noch nicht genau wissen, ob ColdFusion für Sie eine sinnvolle Lösung darstellt, sollten die folgenden Kapitel für Sie eine gute Entscheidungshilfe darstellen. Falls Sie die Software bereits besitzen und mit der Entwicklung anfangen möchten, verschafft Ihnen diese Woche die Grundlagen, die Sie für das Erstellen der Template-Seiten brauchen, aus denen sich ColdFusion-Applikationen zusammensetzen. Weil ColdFusion eng mit Web-Server und Datenbanken zusammenarbeiten, brauchen Sie nicht nur über das Programm Informationen. Diese Woche stellt Ihnen alle Konzepte vor, die Sie kennen sollten, unter anderem: L

Kapitel 1 stellt ColdFusion vor, erzählt aus seiner Geschichte und zeigt einige Beispiele für seine Verwendung in der Web-Entwicklung.

L

Kapitel 2 demonstriert eine grundlegende ColdFusion-Applikation. Es beschreibt, wie ColdFusion mit Ihrem Web-Server und Ihren Datenbanken zusammenarbeitet und zeigt Ihnen, was hinter den Kulissen passiert.

L

Kapitel 3 führt Sie durch die Einrichtung von ColdFusion Server und bringt Ihnen das Konzept der Datenquelle näher.

L

Kapitel 4 beschäftigt sich mit Datenbanken. Hier erfahren Sie, wie sie funktionieren und wie Sie eine Datenbank anlegen, die effizient mit ColdFusion zusammenarbeitet.

L

Kapitel 5 stellt SQL (Structured Query Language) vor, die Sprache, in der ColdFusion mit Ihrer Datenbank kommuniziert.

L

Kapitel 6 enthält ein schrittweise erklärtes Beispiel für die Entwicklung einer vollständigen ColdFusion-Applikation, von der Definition einer Datenquelle bis zum Aufbau von Template-Seiten, die Ihre Benutzer im Web sehen.

L

Kapitel 7 baut Ihre Fähigkeiten weiter aus und zeigt Ihnen, wie mit ColdFusion der Inhalt einer Datenbank geändert werden kann.

ColdFusion – Einführung

1

ColdFusion – Einführung

Wir beginnen mit einer Tatsache, die die nächsten 21 Kapitel rechtfertigt und Ihnen das Lernen versüßen soll: ColdFusion wird Ihnen helfen, Zeit zu sparen. Wie andere Werkzeuge für die Web-Entwicklung und Applikations-Server wurde es von ganz normalen Menschen geschaffen, die es leid waren, ihr Leben vor dem Computer zu verbringen, und die ihre Projekte schnell in die Welt hinaus bringen wollten. Die 21 Tage, die Sie hier investieren, werden sich in Form von Zeit auszahlen – Zeit, die Sie vorher damit verbringen mussten, statische HTML-Dokumente zu codieren oder langweilige Textpassagen zu formatieren. In Kapitel 1 geht es um die folgenden Dinge: 쐽

Ein erster Blick auf Allaire's ColdFusion.



Sie erfahren, was die Aussagen der Computerfachleute bedeuten und werden auf diese Weise herausfinden, ob es sich um das richtige Werkzeug für Ihre Projekte handelt.



Sie lernen die Theorie für das Anlegen dynamischer Seiten kennen.



Sie erfahren, was eine Client/Server-Beziehung ist – wodurch diese ganze High TechZauberei erst möglich wird.

1.1

Was ist ColdFusion?

ColdFusion wurde 1995 von zwei Computerfreaks erschaffen, den Brüdern Jeremy und J.J. Allaire. Jeremy, der wirtschaftlich Orientierte von beiden, verfasste Artikel, die er regelmäßig im Web bereitstellte. Er wandte sich irgendwann an seinen programmierenden Bruder J.J. und bat ihn, ihm bei der Entwicklung einer einfachen Applikation zu helfen, die das Ganze beschleunigen sollte. Als das Projekt fertiggestellt war, erkannten die beiden, wie genial ihre Entwicklung war und die Allaire Corporation wurde ins Leben gerufen. Heute gibt es ColdFusion bereits in der vierten Version und die beiden Brüder tragen gute Anzüge und fahren dicke Autos. Die offizielle Beschreibung von ColdFusion spricht von einem Web-Applikations-Server, aber abhängig davon, wie Sie es einsetzen, kann es für Sie auch ein Werkzeug zur Seitenentwicklung, ein Datenbank-Server oder einfach Ihr Fahrschein zu einem besseren Leben sein. Das Herz des Programms ist eine Schnittstelle zwischen Datenbank und Web. Diese Schnittstelle erlaubt es Ihnen, eine existierende Datenbankdatei über das Web zu bedienen, wobei einzelne Datensätze präsentiert werden können, ohne dass für jeden davon neue HTML-Dateien erzeugt werden müssen.

30

Ein Beispiel für eine ColdFusion-Applikation

1.2

Ein Beispiel für eine ColdFusion-Applikation

Wir wollen das Konzept anhand eines Beispiels verdeutlichen. Ich verwalte in einem handelsüblichen Datenbankprogramm, Microsoft Access, eine Datenbank mit den Ehemännern von Elizabeth Taylor, wie in Abbildung 1.1 gezeigt. Abbildung 1.1: Eine Tabelle aus einer Beispieldatenbank in Microsoft Access, die Daten über die Männer in Elizabeth Taylor's Leben enthält.

Ein Feld ist ein Element in einer Datenbank, das Informationen ihrem Typ nach ordnet. Wenn ich eine Datenbank anlege, die beispielsweise Namen, Berufsbezeichnungen, Augenfarbe, Haarfarbe und Vermögen aufnehmen soll, definiere ich für jeden dieser Typen ein Feld. Nehmen wir weiterhin an, ich halte es für lebensnotwendig, diese Informationen auch der übrigen Welt zur Verfügung zu stellen. Will man diese Dinge im Internet bereitstellen, würde man sich jetzt normalerweise hinsetzen, den Texteditor starten und HTML-Dokumente codieren, nämlich insgesamt sieben – oder acht, wenn man berücksichtigt, dass sie mit Richard Burton zweimal verheiratet war. Aber eigentlich ist es Zeitverschwendung, sieben oder acht Web-Seiten mit je demselben Informationstyp völlig neu anzulegen. Statt dessen verwende ich ColdFusion und lege die Seiten dynamisch an. Eine Seite wird als dynamisch angelegt bezeichnet, wenn sie erst dann aufgebaut wird, wenn sie vom Browser des Benutzers angefordert wird. Im Gegensatz zu den dynamischen Seiten stehen die statischen Seiten, die guten alten HTML-Dokumente, die unmittelbar physisch auf einem Server abgelegt sind. Ich lade die Datenbank über meinen Service Provider (der natürlich ColdFusion unterstützt) in das Internet und richte sie als Datenquelle ein (mehr über Datenquellen erfahren Sie in Kapitel 3). Anschließend lege ich eine einzelne Template-Datei (eine Schablone) an, mit deren Hilfe die Informationen bereitgestellt werden.

31

ColdFusion – Einführung

Eine ColdFusion-Template-Datei – in der deutschsprachigen Version von ColdFusion als Anwendungsseite bezeichnet – ist eine Web-Seite, die Text enthält, ebenso wie Code, der ColdFusion anweist, bestimmte Aktionen auszuführen. Templates haben die Dateinamenerweiterung .CFM. Wenn jemand über das Internet auf meine Template-Datei zugreift und den Datensatz für den wenig bekannten Larry Fortensky anfordert, erhält er eine Anzeige wie in Abbildung 1.2 dargestellt.

Abbildung 1.2: Ausgabe, die ColdFusion für den Datensatz »Larry Fortensky« erzeugt.

Sieht aus wie eine ganz normale Web-Seite, oder? Und dieser Aspekt ist ganz wichtig – ColdFusion ist für den Endbenutzer transparent, außer dass statt der Standard-Dateinamenerweiterung .HTML die Dateinamenerweiterung .CFM angezeigt wird. Weil es sich hier um eine Backend-Applikation handelt, erkennt der durchschnittliche Surfer also nicht einmal, dass Sie sie benutzen. Er wird glauben, Sie hätten Stunden damit verbracht, Seiten genau für ihn zu erstellen – und das ist nicht unbedingt schlecht. Eine Backend-Applikation ist eine Applikation, die im Hintergrund ausgeführt wird und für den Web-Surfer transparent ist. Es gibt verschiedene BackendApplikationen, die Web-Inhalt bereitstellen, Daten über die Besucher einer Site sammeln oder komplexe Funktionen steuern, wie beispielsweise Chat-Rooms, Nachrichtenforen usw.

32

Wozu sollte ich ColdFusion einsetzen?

1.3

Wozu sollte ich ColdFusion einsetzen?

Hoffentlich geht Ihnen jetzt ein Licht auf – wenn Sie nämlich erkannt haben, wie praktisch dieses Werkzeug für Ihre Projekte sein kann. Für den Fall, dass es bei Ihnen noch nicht klingelt, werde ich in den nächsten Absätzen ein paar Gründe dafür aufführen, warum Sie ColdFusion als Werkzeug für Ihre Applikationsentwicklung einsetzen sollten.

1.4

Datenbankgestützte Sites

ColdFusion bietet Ihnen die Möglichkeit, den Inhalt Ihrer Web-Site zum Teil oder vollständig aus einer Datenbank bereitzustellen. Vielleicht erkennen Sie jetzt noch nicht, wie praktisch diese Lösung ist, aber stellen Sie sich vor, Sie arbeiten mit anderen zusammen, die HTML nicht so gut beherrschen wie Sie selbst. Ohne ColdFusion würde jede Inhaltsänderung bedeuten, dass jemand eine neue HTML-Seite codieren muss, und dass das wahrscheinlich Sie sind, Sie vielleicht gerade etwas Wichtigeres zu tun hätten. Mit ColdFusion kann Web-Inhalt von jedem geändert oder aktualisiert werden, der weiß, wie man ein Eingabeformular und die Eingabetaste bedient. Das bedeutet, jeder in der Firma, auch derjenige ohne Datenbankerfahrung, kann seine Web-Projekte aktualisieren, ohne dass Sie selbst tätig werden müssen und in der Zwischenzeit vielleicht andere, wichtigere Dinge versäumen. Darüber hinaus bieten datenbankgestüzte Sites die Möglichkeit, sehr viel Material im Internet bereitzustellen, wozu Sie nur eine einzige Template-Datei erstellen müssen. Betrachten Sie beispielsweise meine Liz-Datenbank. Sie ist jetzt noch relativ klein, aber vielleicht umfasst sie irgendwann mehrere Hundert oder sogar Tausende von Ehemännern, und dann habe ich mit meiner Template-Datei schon eine fertige Lösung – ich kann sie alle berücksichtigen, und ich habe eine gigantische Web-Site, die den Eindruck verschafft, als hätte ich Stunden damit verbracht, die einzelnen Seiten zu codieren. Datenbankgestützte Sites bieten außerdem interessante Möglichkeiten, Ihre Besucher zu verwalten. Wenn sich die Benutzer Ihrer Site beispielsweise mit Namen und Kennwort anmelden müssen, können Sie die Datenbank im Hintergrund nutzen, um ihre Vorlieben zu beobachten, indem Sie protokollieren, welche Seiten sie besuchen. Das zugrunde liegende Konzept wird in Kapitel 7 genauer beschrieben.

Fertig fürs Geschäft Viele Unternehmen lieben Datenbanken, und diese Unternehmen werden auch ColdFusion lieben. Der Grund dafür ist offensichtlich: Viele Unternehmen verwalten ihre Produkte oder Dienstleistungen in Datenbanken. Mit ColdFusion ist es ganz einfach, bereits

33

ColdFusion – Einführung

existierende Datenbanken zu vollfunktionalen Web-Sites zu machen. Zeigen Sie mir ein Unternehmen mit einem umfangreichen Katalog, und ich zeige Ihnen als Web-Entwickler eine schnelle Methode, eine vollfunktionale Web-Site daraus zu machen, die Ihren Kunden vor Freude frohlocken lässt.

Web-Präsentation in Echtzeit Viele Unternehmen können ColdFusion direkt für ihre aktiven Datenbanken einsetzen. Das bedeutet, sobald jemand im Lager ein Produkt als verkauft kennzeichnet, reflektieren die Seiten der Web-Site diese Bestandsänderung. Größtenteils können die Unternehmen dazu die Datenbanken, Tabellenkalkulationen oder Textverarbeitungen weiter verwenden, die sie immer schon verwendet haben, und auch genauso, wie sie sie immer schon verwendet haben. Stellen Sie sich nur den Jubel vor, wenn Sie in ein Unternehmen kommen und dem Besitzer mitteilen, dass Sie den gesamten Betrieb in Echtzeit online bringen können – ohne dass auch nur eine Mark dafür ausgegeben werden müsste, die Angestellten entsprechend zu schulen.

Schnittstellen zu Intranets Aufgrund der Natur ihrer Produkte oder Dienstleistungen brauchen einige Unternehmen keine extensive Präsenz im Internet, aber das bedeutet nicht, dass Sie als ColdFusion-Entwickler nichts für diese Unternehmen tun könnten. Zahlreiche Unternehmen verwenden ColdFusion als Intranet-Werkzeug. Ein Intranet ist ein internes Netzwerk, das den externen Web-Benutzern in der Regel nicht zur Verfügung steht. Intranets werden innerhalb von Unternehmen für die Angestellten bereitgestellt, die damit Informationen austauschen, die Unternehmensdatenbank verwalten und die wichtige Kommunikation aufrecht erhalten, wie beispielsweise »Hey Alfons in der Entwicklung: Wie war’s gestern Abend?«. Viele Unternehmen haben erkannt, dass die Verwendung Web-ähnlicher Oberflächen zur Bedienung der Intranets neuen Angestellten hilft, sich schnell und einfach daran zu gewöhnen. Viele bringen zumindest Erfahrung mit einem Web-Browser mit, so dass die Unternehmen durch die Darstellung ihrer Daten im Intranet in Form von Web-Seiten vermeiden, dass sich die neuen Angestellten an mehrere neue Applikationen gewöhnen müssen. ColdFusion ist ideal dafür geeignet, diese Web-basierten Oberflächen nachzubilden, und seine Datenbankfunktionen sind in Intranets genauso wertvoll wie im Internet.

34

Datensammlung

Sicherheit im Unternehmen Die Sicherheit ihrer Sites ist im allgemeinen ein großes Anliegen aller Unternehmen, egal ob gegenüber internen Mitarbeitern oder Eindringlingen von außen, die versuchen, Firmengeheimnisse zu erschleichen. ColdFusion unterstützt verschiedene Sicherheitsmaßnahmen, die in das Programm eingebaut sind, und die dafür sorgen, dass selbst unerfahrene ColdFusion-Entwickler sich nicht darum sorgen müssen, ob sie Sicherheitslücken auf ihren Sites erzeugen, die Hackern Tür und Tor öffnen.

E-Commerce ColdFusion ist E-Commerce-fähig. Zahlreiche eingebaute Werkzeuge und Methoden machen es ganz einfach, Sites für sichere Online-Transaktionen anzulegen. Weitere Informationen darüber finden Sie in Kapitel 20. Hier soll nur kurz darauf hingewiesen werden. Wir haben also ein Werkzeug, das Ihnen erlaubt, ganz schnell eine riesige Datenbank, in der Produkte oder Dienstleistungen verwaltet werden, zu bedienen, und gleichzeitig die Möglichkeit bietet, das alles dem Kunden ganz einfach online anzubieten. Läuten die Glocken jetzt bei Ihnen?

1.5

Datensammlung

Es geht jedoch nicht nur um Unternehmen. ColdFusion wird auch von öffentlichen Institutionen eingesetzt, um ihre riesigen Datenmengen im Internet bereitzustellen. Es wird von Vereinen genutzt, um alle möglichen Listen zu verwalten, und von ganz gewöhnlichen Menschen wie Ihnen und mir, die einfach nur unsere Datenbank mit den Aufzeichnungen über die Bundesligaergebnisse der letzten 20 Jahre der breiten Allgemeinheit zur Verfügung stellen wollen. Und ColdFusion bietet nicht nur die Möglichkeit, Dokumente im Web bereitzustellen. Es beinhaltet darüber hinaus ein praktisches Werkzeug, CFINSERT, das ich in Kapitel 7 noch genauer erklären werde. Diese Funktion allein eröffnet uns völlig neue Benutzerwelten, weil es uns erlaubt, Benutzereingaben aus dem Web entgegenzunehmen, entweder über Standard-HTML-Formulare oder andere Methoden, und diese Eingaben automatisch in eine Datenbank auf Ihrem Server zu übernehmen. Ein Formular ist eine Web-Seite, die Eingaben vom Benutzer entgegennimmt. Wenn Sie beispielsweise ein Schlüsselwort in das Textfeld einer Suchmaschine eingeben und auf ABSENDEN klicken, verwenden Sie ein Formular.

35

ColdFusion – Einführung

Angenommen, Sie sind Mitglied eines der oben erwähnten Vereine und wollen eine Datenbank aller Selbsthilfegruppen für durchschnittliche Benutzer führen, die sich zu ihrer Sucht bekennen, »COPS« im Fernsehen zu sehen. Mit Hilfe von ColdFusion können Sie ein Eingabeformular im Web platzieren, mit Eingabefeldern für den Namen der Gruppe, den Treffpunkt, die Zeit usw., wie in Abbildung 1.3 gezeigt.

Abbildung 1.3: Eine Web-Eingabeseite, die mit ColdFusion entwickelt wurde – was der Benutzer jedoch nicht sieht.

Immer wenn ein Benutzer das Formular ausfüllt und sendet, wird ein neuer Datensatz in Ihrer Datenbank angelegt. Es bleibt Ihnen überlassen, was Sie mit diesen Daten machen. Sie könnten sie wie zuvor beschrieben im Web bereitstellen, aber auch eine Mailing-Liste daraus anlegen, um Formbriefe an alle diese »COPS«-Seher auf der ganzen Welt zu senden. Genauso kann ColdFusion praktisch für all diejenigen sein, die gerne ihre Interessen mit der gesamten Welt teilen. Beispielsweise bin ich begeisterter Fan der Mambo-Musik aus den 50er Jahren, aber ich habe nicht ausreichend viel Zeit, für jede meiner unzähligen Mambo-LPs eine Web-Seite zu codieren. Gäbe es nicht Zeitsparprogramme wie ColdFusion, würde die Welt nie an meinem umfassenden Wissen über den Mambo teilhaben und wäre damit ein ganzes Stück ärmer.

36

Datensammlung

Besser als CGI Für die nicht Eingeweihten: CGI-Skripte sind Werkzeuge, die Web-Entwickler nutzen, um beispielsweise Eingabedaten aus Formularen entgegenzunehmen, E-Mail zu senden und Suchen innerhalb von Sites durchzuführen. Diese Skripte sind im wesentlichen kleine Programme, die in Sprachen wie Perl oder C geschrieben werden, und die auf dem Web-Server ausgeführt werden. Sie erweitern die Möglichkeiten einer Web-Seite ganz wesentlich, weil sie dem Server erlauben, auch noch andere Dinge auszuführen, als einfach nur Web-Seiten bereitzustellen. CGI steht für Common Gateway Interface, das ist ein Befehlssatz, den alle WebServer-Standardpakete verstehen.

ColdFusion kann alles, was ein CGI-Skript auch kann, Sie brauchen also nicht zu erschrecken, wenn ich Perl und C erwähne. Wenn Sie bereits wissen, was alles mit CGI möglich ist, werden Sie feststellen können, dass ColdFusion diese und andere Funktionen erweitert. Es unterstützt komplexe Mail- und Suchmethoden (die in Kapitel 13 und 17 noch genauer besprochen werden), ohne dass Sie sich mit Skripting beschäftigen müssen. Außerdem werden Dinge wie beispielsweise Umgebungsvariablen ganz elegant verarbeitet und if-then-Entscheidungen werden innerhalb weniger Codezeilen ausgewertet. Umgebungsvariablen sind Variablen, die in CGI-Skripte verwendet werden, um beispielsweise die aktuelle Zeit, das Datum, Seitentreffer usw. zu bestimmen.

Wenn Sie sich mit Programmiersprachen auskennen, werden Sie gerne hören, dass ColdFusion sich nahtlos an Ihre existierenden CGI-Skripte anschließt und Sie nicht alle Skripte austauschen müssen, die Sie in den letzten Jahren im Schweiße Ihres Angesichts erstellt haben. ColdFusion wirft außerdem ein geringeres Sicherheitsrisiko auf als CGI. Wenn Sie je eine CGI-Applikation geschrieben haben, kennen Sie die Routinen, die Sie vor arglistigen Benutzereingaben schützen sollen. Selbst ein einfaches CGI-Skript für die Verarbeitung von Mail kann mögliche Sicherheitslücken öffnen. Ohne spezielle Sicherheitsvorkehrungen wird vielleicht irgendwann der Bundeskanzler in einer Mail bedroht, die auf den Server Ihres Kunden zurückverfolgt werden kann. ColdFusion unterstützt Sicherheitsmaßnahmen für den Server, so dass Sie sich darum nicht mehr sorgen müssen.

37

ColdFusion – Einführung

Benutzerdefinierte Applikationen Fortgeschrittene ColdFusion-Programmierer verwenden das Werkzeug auch, um benutzerdefinierte Web-Applikationen zu erstellen, beispielsweise Chat-Rooms, Nachrichtenforen oder Warenkörbe. Diese Applikationen bieten nicht selten Vorteile gegenüber den standardmäßigen CGI-Varianten, weil sie erlauben, im Hintergrund eine Datenbank dafür einzusetzen. Chatter können ihre E-Mail in einem Datenbankfeld aufzeichnen, Warenkörbe können Tabellen darüber führen, wer was kauft usw. Viele erfahrene Programmierer stellen ihre bereits codierten ColdFusion-Applikationen öffentlich zur Verfügung, entweder kostenlos oder gegen geringe Gebühr. Ein durchschnittlicher ColdFusion-Benutzer kann damit eine vorgefertigte Applikation auf seiner Web-Seite einsetzen, ohne das Rad neu erfinden zu müssen, und seinen Kunden dennoch zu zeigen, dass er weiß, um was es geht. Allaire bietet auf seiner Web-Site www.allaire.com Hunderte vorgefertigter ColdFusion-Applikationen an, die einen guten Ausgangspunkt für neue CF-User bilden. Sie lernen anhand dieser Applikationen, wie andere Programmierer ColdFusion einsetzen und können besser abschätzen, was mit dem Programm möglich ist. Das bedeutet natürlich nicht, dass Sie einfach ein paar vorgefertigte ColdFusion-Applikationen kaufen und das restliche Buch ignorieren sollen. Sie brauchen ein gewisses Maß an ColdFusion-Theorie, um die Applikationen so anpassen zu können, dass sie die Bedürfnisse Ihrer Sites am besten erfüllen.

Dynamische Seiten erstellen Die eigentliche Stärke von ColdFusion besteht darin, dass damit dynamische Web-Seiten angelegt werden können. Wie in diesem Kapitel bereits definiert, wird der Begriff »dynamisch« hier nicht als Attribut des Inhalts genutzt (das bleibt Ihnen überlassen), sondern hat damit zu tun, wie die Seite von Ihrem Server auf den Bildschirm des Benutzers gelangt. Das Gegenteil einer dynamischen Seite ist eine statische Seite, oder ein ganz normales HTML-Dokument, das auf Ihrem Web-Server abgelegt ist, und das angezeigt wird, wenn jemand den entsprechenden URL in seinen Browser eingibt. Dynamische Seiten dagegen werden vom Server bei Bedarf erzeugt. Sie existieren möglicherweise nur unvollständig auf einem Server, bis ein Benutzer sie anfordert; erst zu diesem Zeitpunkt werden sie zusammengesetzt und an den Browser geschickt. Betrachten wir noch einmal das Beispiel mit den Ehemännern von Liz. Die TemplateDatei, die ich angelegt habe, um die einzelnen Datensätze anzuzeigen, ist keine vollständige HTML-Seite. Sie kann bereits HTML-Elemente enthalten, wie beispielsweise Kopf-

38

Datensammlung

und Fußzeilen, aber die eigentlichen Daten über Larry Fortensky, seine Haartracht oder seine Truckerkarriere fehlen zu diesem Zeitpunkt noch. Larry's Daten werden der Seite erst hinzugefügt, wenn der Benutzer über seinen Browser eine Anforderung an den WebServer schickt. Auf der Seite des Benutzers unterscheidet sich eine dynamisch erstellte Seite durch nichts von einer statischen Seite. Dynamisch erstellte Seiten haben außerdem noch weitere Attribute. Sie können Code enthalten, der kontextabhängige Entscheidungen trifft, beispielsweise ob ein Benutzer mit dem Netscape Communicator oder mit dem Internet Explorer arbeitet, um dann für den jeweiligen Browser optimierte Seiten anzuzeigen. Betrachten wir ein einfaches Beispiel für das Erstellen einer dynamischen Seite in der Praxis. Meine Liz-Web-Site enthält Kopf- und Fußbereiche (Header und Footer), die immer gleich bleiben, wie in Abbildung 1.4 gezeigt.

Abbildung 1.4: Eine Seite meiner Beispiel-Web-Site zeigt die Verwendung von Kopf- und Fußbereich.

Kopf- und Fußbereich (Header und Footer) werden von Web-Designern benutzt, um die Dinge oben auf der Seite (wie beispielsweise eine Navigationsleiste oder verschiedene Icons) und unten auf der Seite (wie beispielsweise Informationen über die Site, rechtliche Hinweise usw.) zu organisieren. In Abbildung 1.5 sehen Sie denselben Kopf- und Fußbereich wie in Abbildung 1.4, aber einen anderen Rumpf.

39

ColdFusion – Einführung

Beachten Sie, dass beide Seiten oben denselben Text anzeigen, und unten auf der Seite dieselben Links. Nur der Rumpf ändert sich zwischen der Anzeige verschiedener Seiten. Wenn Sie noch keine Erfahrung im Web-Design besitzen, denken Sie vielleicht, dass für jeden Kopf- und Fußbereich der einzelnen Seiten alles manuell codiert werden muss. Wenn Sie sich in der Web-Szene bereits auskennen, sind Sie vielleicht schon ein bisschen klüger und sparen Zeit. Sie könnten eine Schablonenseite mit einem Kopf- und einem Fußbereich anlegen, nacheinander den Rumpftext für die einzelnen Seiten einfügen, und die Seite jedes Mal als neue Datei abspeichern.

Abbildung 1.5: Eine weitere Seite meiner Site, mit demselben Kopfund Fußbereich wie in Abbildung 1.4 gezeigt.

Sie sind jedoch noch klüger. Statt die Informationen für Kopf- und Fußbereich auf jeder Seite der Site einzufügen, erzeugen Sie die Seiten dynamisch und überlassen ColdFusion die Arbeit. Mit Hilfe einer Standardtextverarbeitung wie beispielsweise Windows Notepad lege ich zwei einfache Dateien an – zuerst header.html: Listing 1.1: Die Datei header.html

Charles extrem wichtige Daten, die er der Welt unbedingt zur Verfügung stellen muss
Hier finden Sie die Antworten auf Fragen, die Sie sich nie zu stellen wagten

40

Datensammlung



In Listing 1.2 sehen Sie footer.html mit dem Code, der die Links anlegt: Listing 1.2: Die Datei footer.html

LIZ TAYLOR'S EHEMÄNNER | DAS LEBEN VON BOXCAR WILLIE
MICHAEL BOLTON'S HAARGESCHICHTE | DIE BESTEN RASTHÄUSER AM HIGHWAY NO. 1

Und jetzt kann ich noch die Magie dynamisch erstellter Seiten nutzen, um automatisch Kopf- und Fußbereiche in die Seiten einzufügen, sobald sie von einem Benutzer angefordert werden. Das mache ich mit einem praktischen ColdFusion-Tag, . Wie Sie in Kapitel 2 erfahren werden, verhalten sich ColdFusion-Tags ganz ähnlich wie HTML-Tags, stellen aber eine wesentliche Erweiterung des normalen HTML dar. Jetzt könnte ich Text einfügen wie in Listing 1.3 gezeigt, um die Seiten für meine Site zu erzeugen. Listing 1.3: Beispieltext für die Seiten

Hier steht irgendwelcher Rumpftext



41

ColdFusion – Einführung

Fordert ein Benutzer diese Seite an, lädt ColdFusion die Dateien header.html und footer.html und fügt sie in die Seite ein. Der Benutzer sieht nur die dynamische Ausgabe, wie in Abbildung 1.4 gezeigt. Einer der vielen Vorteile bei dieser Vorgehensweise ist, dass man bei einer späteren Änderung eines Links oder einer Grafik die entsprechende Datei für Kopf- oder Fußbereich nur einmal geändert werden muss – die Aktualisierung gilt automatisch sofort für die gesamte Site. Dynamische Seiten können auch genutzt werden, um Berechnungen mit Variablen vorzunehmen, wie beispielsweise die Gesamtsumme für einen Auftrag und die entsprechende Mehrwertsteuer. Damit hauchen Sie Ihren Web-Seiten Leben ein, und Ihnen werden sicher bald weitere Verwendungszwecke für dynamische Seiten einfallen.

1.6

Clients und Server

Um ColdFusion und seine Methode zur Anzeige Ihrer Seiten wirklich zu verstehen, müssen Sie die grundlegenden Konzepte des Web-Dienstes kennen. Wir beginnen mit dem Server – das kann ein beliebiger Computer sein, der mit dem Internet verbunden ist. PC, Mac, Silicon Graphics – der Typ ist egal, Hauptsache, er ist mit dem Internet verbunden und es läuft Software darauf, die die Anzeige von Web-Seiten erlaubt. Der Server ist – in einer perfekten Welt – immer online und wartet nur darauf, dass eine Client-Maschine eine Anforderung schickt. Der Client ist der Computer des Benutzers, der bei diesem zu Hause oder im Büro steht, und von dem aus er surft. Der Client formuliert seine Anforderung in Form von URLs (Uniform Resource Locators), die angeben, welcher Server angesprochen werden soll, und welche Datei dort gesucht wird. Ohne zu sehr in technische Details zu Paketen und TCP/IP-Netzwerken zu gehen, soll hier gesagt werden, dass der URL, nachdem er vom Client angefordert wurde, auf magische Weise zum entsprechenden Server gelangt. Eine Liste, auf welchen Servern ColdFusion installiert werden kann, wird in Kapitel 3 bereitgestellt. Erhält der Server eine Anforderung von einem Client, führt er die von dem Client gewünschte Aktion aus. Größtenteils fordert der Client eine HTML-Seite oder eine Bilddatei an, so dass die Aufgabe für den Server ganz einfach ist – er sendet die angeforderte Datei an den Client zurück. Und jetzt passen Sie auf, denn nun kommt das Schlüsselkonzept: Manchmal ist die Client-Anforderung zwar ein URL, aber der Server wird darin aufgefordert, eine Aktion auszuführen, und die entsprechenden Ergebnisse an den Browser des Benutzers zurückzugeben. Das ist die Grundlage der bereits erwähnten CGI-Skripte und gleichzeitig das Schlüsselelement, das das Wunder der dynamisch erstellten Seiten möglich macht.

42

ColdFusion innerhalb der Client/Server-Beziehung

Wenn ein Client ein ColdFusion-Template oder ein CGI-Skript anfordert, führt der Server eine Aktion aus – abhängig von der Anforderung könnte er beispielsweise eine Datenbank durchsuchen, bestimmte Zahlen vergleichen oder ein kurzes Programm ausführen. Die Ausgabe, also die Ergebnisse der Aktion, werden in Form eines HTML-Dokuments an den Client zurückgegeben. Dem Client ist es egal, was hinter den Kulissen passiert; er ist nur an der HTML-Ausgabe interessiert.

1.7

ColdFusion innerhalb der Client/ServerBeziehung

Innerhalb der Client/Server-Beziehung befindet sich ColdFusion auf dem Server-Computer und wird neben der Web-Server-Software ausgeführt. Es wartet darauf, dass ein Client einen URL anfordert, der die Dateinamenerweiterung .CFM aufweist, d.h. eine ColdFusion Template-Datei, wie beispielsweise: http://www.blahblah.com/stuff.cfm

Damit beginnt es seine Arbeit. Es übernimmt vorübergehend die Kontrolle auf dem WebServer, macht das, was in der Template-Datei angefordert wurde, und gibt das Ergebnis an den Web-Server zurück, der das Ganze dem Client überreicht.

Tag-Verarbeitung Wenn Sie ein ColdFusion-Template in einem Texteditor öffnen, werden Sie viele bekannte HTML-Markups entdecken, wie beispielsweise , oder Tags zur Textformatierung, beispielsweise (kursiv) oder (fett). Außerdem gibt es dort aber auch weniger bekannte Tags wie , und das zuvor erwähnte . Dabei handelt es sich um CFML (ColdFusion Markup Language). Diese Tags sind den HTML-Tags ganz ähnlich, werden aber nur von ColdFusion erkannt und bedingen, dass neben Ihrem Web-Server auch der ColdFusion Application Server läuft, damit sie irgend etwas Sinnvolles bewirken, außer Fehlermeldungen auf Ihrer Seite anzuzeigen. Die meisten ColdFusion-Tags verwenden öffnende und schließende Spitzmarken, ähnlich den HTML-Tags. Um beispielsweise einen Abschnitt mit Hilfe von HTML-Tags fett auszuzeichnen, geben Sie vor dem entsprechenden Text an, und dahinter ein , um den Fettdruck wieder aufzuheben. ColdFusion verwendet dieselben Zeichen, um den Anfang und das Ende eines Tags zu kennzeichnen, wie beispielsweise und .

43

ColdFusion – Einführung

Wenn ein ColdFusion-Server eine Template- oder .CFM-Datei verarbeitet, sucht er zuerst nach CFML-Tags. Sie können ColdFusion anweisen, eine Datenbank zu durchsuchen, Informationen auszugeben oder eine Datei zurückzugeben (wie im bereits vorgestellten Beispiel).

Verbindung mit Datenbanken Nachdem ein ColdFusion-Server die Tags auf einer Seite ausgewertet hat, führt er die in den CFML-Tags enthaltenen Befehle aus. Eine der gebräuchlichsten Anforderungen ist eine Datenbanksuche. Um effizient suchen zu können, muss ColdFusion die Datenbank auf den Zugriff vorbereiten, bevor Anforderungen eintreffen. Wenn das Programm bei jedem Eintreffen einer Anforderung die Datenbankdatei öffnen, die Datensätze durchsuchen und die Datei wieder schließen muss, wäre das Ganze hoffnungslos ineffizient und es wäre nicht möglich, mehrere gleichzeitig eingehende Anforderungen zu bedienen. ColdFusion umgeht dieses Problem, indem es fordert, dass Sie Ihre Datenbank als ODBCQuelle (Open Database Connectivity) einrichten. Eine ODBC-Quelle richtet eine DatenPipeline von und zu der Datenbank ein und bereitet sie damit auf den Zugriff durch ColdFusion vor. Nachdem eine Datenbank via ODBC mit ColdFusion verbunden ist, können die Entwickler eine spezielle Befehlsmenge einsetzen, SQL (Structured Query Language), um mit der Datenbank zu kommunizieren. SQL-Befehle können genutzt werden, um eine Datenbank zu durchsuchen, die darin enthaltenen Informationen abzuändern oder sogar neue Datenbanken anzulegen. In den Kapiteln 3 bis 5 wird es um SQL, Datenquellen (DSNs) und ODBC gehen. Hier sollten Sie nur zur Kenntnis nehmen, dass es diese Dinge gibt, und zu welchem grundlegenden Konzept sie beitragen.

1.8

Zusammenfassung

Zwei Jungs, die bei der Web-Codierung Zeit sparen wollten, um Sinnvolleres tun zu können, haben ColdFusion erfunden. Beschaffen Sie sich die Software und lernen Sie, sie in Ihren eigenen Web-Projekten einzusetzen, dann sparen Sie sich viele Stunden Codierarbeit und können noch bei Tageslicht aus dem Büro nach Hause gehen. Das Herz des Programms ist eine Schnittstelle zwischen Datenbank und Web – eine Methode, Web-Benutzern Datenbankinformationen bereitzustellen. ColdFusion kann

44

Workshop

Datenbanken mit Tausenden von Datensätzen unter Verwendung einer einzigen Template-Datei (Schablonendatei) als separate Web-Seiten bereitstellen. Außerdem ist es in der Lage, Eingaben zu verarbeiten, so dass die Web-Benutzer eine Datenbank auch ändern können. ColdFusion Server ist ein ideales Werkzeug für Unternehmen und Organisationen, weil es erlaubt, sehr große Sites innerhalb kürzester Zeit zu erstellen. Es bietet eingebaute Sicherheit für diejenigen, die Daten selektiv bereitstellen, sowie Kommerz-Werkzeuge für diejenigen, die Produkte oder Dienstleistungen online anbieten wollen.

1.9

Workshop

F&A F

Wo finde ich weitere Informationen über ColdFusion, bevor ich es kaufe? A

F

Kann ColdFusion für alle Datenbanktypen eingesetzt werden? A

F

Auf der Web-Site von Allaire (http://www.allaire.com/) finden Sie umfangreiche Informationen über mit ColdFusion kompatible Web-Software. Eine 30 Tage lang gültige Demo-Version zum Ausprobieren finden Sie auf der beiliegenden BuchCD und – Sie können auch dieses Buch zu Ende zu lesen. Ja, fast. Aber es gibt immer wieder Anwender mit völlig exotischen Datenbanken. Deshalb sollten Sie auf der Web-Site nachsehen, welche Dateiformate aktuell unterstützt werden. Weitere Informationen über Datenbanken finden Sie in den Kapiteln 4 und 5.

Was ist mit der Skalierbarkeit? Ich habe eine riesige Produktdatenbank und eine WebSite, auf die täglich tausend Mal zugegriffen wird. A

Skalierbarkeit ist eines der wichtigsten Verkaufsargumente von ColdFusion. Es kann ohne weitere Anpassung alles verarbeiten, von einer einfachen Fan-Site bis hin zu einer riesigen Datenbank auf einem schwer beschäftigten Server. In Kapitel 3 werden Sie erfahren, dass ColdFusion auch Optionen beinhaltet, seine Leistung den Fähigkeiten Ihres Servers anzupassen.

45

ColdFusion – Einführung

Quiz 1. Was ist die wichtigste Aufgabe von ColdFusion? Nennen Sie zwei gute Gründe, die für die Verwendung des Programms sprechen. 2. Wie arbeitet ColdFusion mit CGI-Skripten zusammen? 3. Wie werden Seiten dynamisch erstellt? 4. Wie gelangt eine ColdFusion-gesteuerte Web-Seite von einem Server zu einem Client?

Antworten 1. ColdFusion's wichtigste Aufgabe ist es, aus Datenbankinformationen dynamisch Seiten zu erstellen. 2. Manchmal kann ColdFusion existierende CGI-Skripte ersetzen und um Funktionen ergänzen, die in CGI schwierig (oder aufwendig) zu realisieren wären. Wenn Sie Ihre existierenden Skripte nicht ersetzen wollen, kann ColdFusion auch problemlos neben CGI ausgeführt werden, und Sie können CGI-Skripte von ColdFusion-Templates aus aufrufen, so wie es auf Standard-HTML-Seiten möglich ist. 3. Das dynamische Erstellen von Seiten ist der Prozess, Web-Seiten bei Bedarf zu erstellen, nämlich wenn der Benutzer sie über seinen Browser anfordert. Das Gegenteil einer dynamischen Seite ist eine statische Seite, eine Standard-HTML-Seite, die als fertige Seite auf einem Server abgelegt ist. 4. Wenn der Browser eines Benutzers (der Client) eine Web-Seite anfordert, die die ColdFusion-Dateinamenerweiterung (.CFM) aufweist, wird diese Anfrage sofort zur Verarbeitung an ColdFusion weitergeleitet. ColdFusion durchsucht das Template, stellt fest, welche Aktionen angefordert wurden (Datenbankanfrage usw.), und gibt den resultierenden HTML-Code an den Server weiter, der ihn wiederum an den Benutzer zurückgibt.

Übungen 1. Sehen Sie sich die Web-Site von Allaire an und lesen Sie den FAQ-Abschnitt (Frequently Asked Questions) zu ColdFusion 4. 2. Probieren Sie auf der Web-Site von Allaire ein paar Links zu anderen ColdFusiongesteuerten Seiten aus. Achten Sie darauf, wie andere Entwickler ColdFusion in ihren Entwürfen verwenden, und vergleichen Sie dies mit Ihren eigenen Aufgabenstellungen.

46

Aufbau einer ColdFusion-Applikation

2

Aufbau einer ColdFusion-Applikation

In Kapitel 1 habe ich Ihnen einen ersten Blick auf eine ColdFusion-Applikation präsentiert. Sie haben eine Datenbank kennen gelernt, in der die Ehemänner von Liz Taylor verwaltet werden. Ich habe Ihnen gezeigt, wie die Datensätze mit Hilfe einer ColdFusionTemplate-Datei im Web angezeigt werden können. Solche Applikationen verwenden eines der wichtigsten Funktionsmerkmale von ColdFusion – das Durchsuchen einer Datenbank nach Informationen und ihre Darstellung auf einer Web-Seite. In diesem Kapitel werden Sie die drei wichtigsten Komponenten solcher ColdFusion-Applikationen und ihre Funktionsweisen kennen lernen. Hier geht es um folgendes: 쐽

Die Datenbankdatei.



Die ColdFusion-Datenquelle.



Das Template (eine »Schablone« oder Anwendungsseite).



Abfrage- und Ausgabeelemente.



Die Beziehung zwischen Abfragen und Ausgaben.

2.1

Verbinden Sie Ihre Datenbank mit dem Web

Obwohl ColdFusion viele Funktionen bietet, die unabhängig von Datenbanken arbeiten, wird es größtenteils von Entwicklern eingesetzt, die ihre Datenbanken in das Web integrieren wollen. Für die meisten ColdFusion-Applikationen ist Ihre Datenbank das Schlüsselelement. Sie enthält die Informationen, die Sie oder Ihr Kunde im Web bereitstellen wollen – Namen, Daten, Preise usw. Diese Informationen liegen in einem Format vor, das für Computer einfach zu verwalten ist, das für die Augen der meisten Menschen jedoch nicht optimal aufbereitet ist. (Es gibt zwar Menschen auf unserem Planeten, die es lieben, Datenbanken zu lesen, aber durch unsere Gebete und Ihre finanzielle Unterstützung wird die Wissenschaft sicher irgendwann Abhilfe finden.) Die wichtigste Aufgabe von ColdFusion ist es, die Datenmengen auf einer oder mehreren Seiten so darzustellen, dass der durchschnittliche Surfer sie versteht, wenn er auf Ihre Web-Site gelangt ist. Wenn Sie Glück haben, kann er Ihre wertvollen Daten sogar lesen. Auch dies passiert alles hinter den Kulissen, die Benutzer zu Hause sehen also nur Standard-HTML-Seiten und müssen nicht wissen, dass Sie mit Datenbanken arbeiten, statt jede Seite von Hand zu erstellen. Verraten Sie es ihnen nicht! In Kapitel 4 werden Datenbanken detailliert besprochen. Hier folgt nur eine kurze Einführung für Neulinge. Eine Datenbank ist eine Datei, die in Programmen wie Microsoft Access, Oracle, FoxPro, FileMaker Pro usw. angelegt wird. Jede dieser Applikationen hat ganz bestimmte Funktionen, aber im wesentlichen tun sie alle dasselbe. Sie legen alle Ihre

48

Verbinden Sie Ihre Datenbank mit dem Web

wertvollen Eingabedaten in einer Datei ab, wobei die einzelnen Datenabschnitte (z.B. ein Name, ein Preis, eine Adresse) mit den anderen Datenabschnitten in irgendeiner Beziehung stehen und auf einen einfachen Zugriff ausgelegt sind. Die Datenbankorganisation macht es sowohl dem Benutzer leichter, als auch anderen Programmen, die auf die Daten zugreifen. Wenn Sie beispielsweise eine Adresse zu einem bestimmten Namen herausfinden wollen, öffnen Sie einfach eine Datenbank, suchen die Tabelle mit den Namen und Adressen, durchsuchen sie nach dem betreffenden Namen und schreiben sich die zugehörige Adresse auf. Wie Sie in späteren Abschnitten noch erfahren werden, verwenden ColdFusion und andere Programme für die Arbeit mit Datenbanken eine ähnliche Methode für die Informationssuche, beispielsweise die Sprache SQL. Jetzt werden wir schnell ein paar Begriffe für diejenigen definieren, die noch keine Erfahrung mit Datenbanken mitbringen. Weitere Erklärungen zu diesen Begriffsdefinitionen finden Sie in Kapitel 4.

Tabellen Die wichtigsten Elemente jeder Datenbankdatei sind die Tabellen, eine Sammlung aller Daten, die ihrer Bedeutung nach gruppiert werden. Betrachten Sie das Beispiel in Abbildung 2.1.

Abbildung 2.1: Beispiel für eine Tabelle in Microsoft Access

Ich habe mit Microsoft Access eine Beispieldatenbank erstellt. In dieser Datenbankdatei habe ich eine Tabelle mit einem Katalog schlechter Elvis-Filme angelegt – mit je einer Bewertung nach ihrem Schrecklichkeitsgrad. In derselben Datenbankdatei kann ich weitere Tabellen anlegen, die beispielsweise Informationen über Elvis' schlechteste Songs aufnehmen, seine Outfits oder was auch immer. Hier konzentriere ich mich auf eine Tabelle mit den Filmen und werde einige der darin bereitgestellten Elemente genauer betrachten.

49

Aufbau einer ColdFusion-Applikation

Die Felder Die Filmtabelle enthält drei spaltenartige Felder für die von mir aufgezeichneten Informationskategorien: Titel, Jahr und Bewertung (title, year und rating). Ich habe die Namen für diese Felder danach gewählt, welche Informationstypen ich dort ablegen will. Im Datenbankjargon spricht man von Feldnamen. In Abbildung 2.1 sehen Sie die Feldnamen oben horizontal fettgedruckt über der Tabelle. Nachdem ich Feldnamen definiert habe, kann ich die eigentlichen Daten, also die relevanten Informationen in die einzelnen Felder eingeben. Bei der Eingabe der Daten für die einzelnen Filme erzeuge ich automatisch Zeilen in der Datenbank.

Die Zeilen Die Untermenge der Daten für jeden dieser wunderbaren Elvis-Streifen bildet je eine Zeile, also einen Datensatz in der Tabelle. Betrachten Sie noch einmal Abbildung 2.1. Die Information für den Film Speedway mit Titel, Jahr und Bewertung stellt eine Zeile dar. Um die Beziehung der Daten innerhalb eines Datensatzes oder einer Zeile zu verstehen, stellen Sie sich ein Objekt vor, von dem Sie wahrscheinlich noch nie in einem Computerbuch gehört haben – eine Karteikarte. Angenommen, Sie haben einen Plastikkasten voll mit Dateikarten; dieser Kasten entspricht meiner Tabelle. Auf jeder Karte ist die Information zu einem Film festgehalten; die einzelnen Karten entsprechen also den Datensätzen. Wie die Schachtel mit den Karteikarten kann ich auch meine Elvis-Einträge nach den verschiedensten Themen (Feldern) und mit den unterschiedlichsten Methoden sortieren. Ich kann sie alphabetisch nach dem Film anordnen, in der Reihenfolge, in der ich die Datensätze angelegt habe, oder chronologisch nach dem Datum des Films. Aber mit dem Computer ist es sehr viel einfacher, eine Datenbank zu sortieren, als manuell einen Karteikasten. Ihre Datenbank-Software hat sicher eigene Methoden, Datensätze in einer Tabelle zu sortieren. Durch das Sortieren der Reihenfolge, in der Datensätze angezeigt werden, können Sie Namen alphabetisch anordnen, Datumswerte chronologisch ordnen usw. Weitere Informationen finden Sie in der Dokumentation zu Ihrer Software. Datenbanken können ein paar wenige Zeilen umfassen, wie die hier gezeigte, aber auch scheinbar unendlich viele, wie beispielsweise bei Kaufhäusern mit einem sehr umfangreichen Produktangebot. Wie Sie in späteren Kapiteln erfahren werden, ist es ColdFusion egal, wie viele Zeilen Ihre Tabelle enthält.

50

Verbinden Sie Ihre Datenbank mit dem Web

Der Schlüssel Beachten Sie, dass jede Zeile der Beispieltabelle am linken Rand eine Nummer enthält, nämlich unter der Überschrift »ID«. Microsoft Access gibt diese Nummer (AutoWert) automatisch vor, als sogenannten Schlüssel, während die Datensätze eingegeben werden. Ein Schlüssel ist ein Bezeichner (meistens eine Nummer), die eine bestimmte Zeile der Tabelle eindeutig anspricht. Diese eindeutige Nummer macht es später einfach, auf einzelne Zeilen zuzugreifen. Weitere Informationen über Schlüssel erhalten Sie in Kapitel 4.

Kreuzverweise für Daten Jeder Datenabschnitt in meiner Tabelle enthält zwei Referenzpunkte. Es gibt eine zugehörige Zeile und ein zugehöriges Feld. Angenommen, ich will das Jahr nachschlagen, in dem Speedway erschien. Dazu verwende ich Programme wie etwa ColdFusion, um meine Tabelle nach der Zeile mit dem Eintrag Speedway zu durchsuchen, und dann die Daten für das Jahresfeld in dieser Zeile auszulesen. Dies ist ein einfaches Beispiel für eine Datenbeziehung. Datenbeziehungen sind Methoden zur Gruppierung von Daten nach allgemeinen Kriterien, beispielsweise die Gruppierung eines Namens mit einer entsprechenden Adresse oder die Gruppierung einer Adresse mit anderen Adressen. Diese Datenbeziehungen werden mit der Zeit immer komplexer, wie auch die zwischenmenschlichen Beziehungen. Datenbeziehungen stellen den Vorteil der Verwendung von Datenbanken gegenüber FlatFiles (flachen Dateien) oder reinen Textdokumenten dar, die einfach alle Ihre Daten in einer Liste aufzeichnen, in der keine Beziehungen zwischen den Datenabschnitten erkennbar sind. Das Ermitteln von Daten aus Datenbanken ist sehr viel effizienter als aus einfachem Text, weil Datenbanken ein eigenes Katalogisierungssystem aufweisen. Für jeden Dateneintrag gibt es eine exakte Referenz mit Datensatznummer und Feld – ähnlich wie eine Bibliothek ihre Bücher einordnet. Es ist weniger zeitaufwendig, einen Bibliothekar anzuweisen: »gehe in Gang 5 Regal 6 und bringe mir das Buch ’Die Maus und das Motorrad’«, als ihm zu sagen »Es beginnt irgendwie mit M und handelt von einer Ratte mit einem halben Tischtennisball auf dem Kopf. Es ist irgendwo in diesem Gebäude – suche einfach, bis du es findest«. Weil die Bibliothek ihre Bücher in Regalen und Gängen aufbewahrt, statt auf einem einzigen großen Haufen, ist es ganz einfach für den Bibliothekar, genau das Buch zu finden, das

51

Aufbau einer ColdFusion-Applikation

ich suche. Außerdem hat der Bibliothekar die Bücher irgendwann nach Thema, Titel oder Autor sortiert, wodurch der gesamte Prozess noch viel effizienter wird. Wenn Sie das verstanden haben, haben Sie das grundlegende Konzept bei der Verwendung von Datenbanken verstanden.

2.2

Die Datenquelle und ODBC

Nachdem wir eine Datenbank angelegt und mit lebenswichtigen Informationen gefüllt haben, sind wir nur noch ein paar wenige Schritte davon entfernt, diese Daten im Web bereitzustellen. Die nächste Aufgabe ist, Ihre Datenbank mit ColdFusion zu »verknüpfen«. Diese Verknüpfung wird auch als Datenquelle oder DSN bezeichnet. Handbücher für ältere Versionen von ColdFusion waren mit Verweisen auf »DSNs« durchsetzt, aber in neueren Versionen verwendet man lieber den Begriff »Datenquelle«. Warum dieser Wechsel? Wer weiß, aber vielleicht hat es etwas damit zu tun, dass »DSN« ganz ähnlich der Abkürzung »DNS« ist, was für einen Domain Name Server im Internet steht, und das ist ganz etwas anderes – Verwechslungen sind unerwünscht. Der Begriff Datenquelle ist synonym zu einem anderen vielbemühten Kürzel, ODBC (für Open Database Connectivity). Eine Datenquelle oder ODBC-Quelle ist im Wesentlichen eine Datenbank, aber wenn ich als Datenquelle davon spreche, meine ich damit, dass sie bereits auf den Zugriff durch ColdFusion vorbereitet ist. Die entsprechende Definition erfolgt im ColdFusion Administrator (siehe Kapitel 3). Dabei teilt man ColdFusion und dem System einige wichtige Dinge über die Datenbank mit: 쐽

Dass sie (tatsächlich) existiert.



Wo sie sich auf der Festplatte des Servers befindet (das ist der Pfadname).



Um welche Art Datenbankdatei es sich handelt (Microsoft Access, Oracle, FileMaker Pro usw.).



Und vor allem, dass ColdFusion eine Daten-Pipeline von und zu der Datenbank einrichten soll, so dass diese zum schnellen Zugriff bereitsteht.

Eine offene Pipeline ist eine wichtige Voraussetzung. Sie ermöglicht ColdFusion, schnell in eine Datenbank zu gelangen und nach Informationen zu suchen, ohne die Datei öffnen, sie zu durchsuchen und dann wieder schließen zu müssen. Bei einer kleinen Datenbank wie der ewigen Schlechtestenliste der Elvis-Filme scheint das keine größere Aufgabe zu sein, aber in der realen Welt, wo Datenbanken schnell Hunderte oder Tausende von Datensätzen umfassen, kann das Durchsuchen von Dateien eine schwere Last für den Prozessor des Servers darstellen.

52

Die Datenquelle und ODBC

Die Kennzeichnung einer Datenbank als Datenquelle ermöglicht Ihnen außerdem, Befehle an die Datenbankdatei zu schicken, und ihr damit beispielsweise mitzuteilen, welche Datensätze Sie suchen, oder welche Informationen Sie hinzufügen oder ändern möchten. Diese Befehle werden in einer präzisen und außerordentlich leistungsfähigen Sprache (SQL) übergeben, die ich in Kapitel 4 genauer vorstellen werde. SQL (Structured Query Language) ist ein allgemeiner Befehlssatz, den Programme wie ColdFusion nutzen, um mit einer Datenbank zu »kommunizieren«. Unter anderem gibt es Befehle zum Suchen und Laden von Daten, zur Dateneingabe, zum Anlegen und Löschen von Tabellenfeldern und vieles andere mehr. Die Datenquelle erlaubt außerdem unmittelbaren Zugriff auf die Datenbank. Wenn Sie einen neuen Datensatz einfügen oder bereits existierende Informationen ändern wollen, machen Sie das Ding einfach auf und erledigen Ihre Arbeit. Sie müssen das Programm nicht herunterfahren, aktualisieren oder neu laden – Ihre Änderungen werden sofort auf Ihrer Web-Site angezeigt. Die Beispieldatenbank mit den Elvis-Filmen wird keine großen Änderungen erfahren, aber wenn wir etwa eine Liste der Ehemänner von Liz Taylor archivieren, wie in Kapitel 1 beschrieben, werden Sie schnell erkennen, warum es so praktisch ist, ein Werkzeug für eine schnelle Aktualisierung zu besitzen. Datenquellen werden im ColdFusion Administrator definiert, dem Konfigurationsprogramm, das Sie in Kapitel 3 noch genauer kennen lernen. Die Definition einer Datenquelle ist ganz einfach – Sie öffnen in Ihrem Web-Browser ein Standarddialogfenster, teilen ColdFusion mit, wo auf der Festplatte sich Ihre Datenbank befindet, geben der Datenquelle einen geeigneten Namen, und fertig. Von diesem Moment an können Sie in allen ColdFusion-Dokumenten über den Datenquellennamen auf die Datenbank verweisen, in diesem Fall elvis. Das ist viel einfacher, als immer den gesamten Pfadnamen zu der Datenbankdatei eingeben zu müssen, wenn Sie darauf zugreifen wollen, wie beispielsweise: c:\my documents\bad stuff\elvis site\database\elvis.mdb

UNIX-Benutzer sind mit Pfadnamen für Dateien vertraut, aber Windows-Benutzer, die es mit »Ordnern« zu tun haben, wissen vielleicht nicht genau, worum es sich dabei handelt. Ein Pfadname ist der Text, der auf eine Datei auf Ihrer Festplatte verweist. Heißt eine Datei beispielsweise DOCUMENT.ZIP und befindet sich im Ordner STUFF auf Ihrem C-Laufwerk, hat sie den Pfadnamen c:\STUFF\DOCUMENT.ZIP. Damit habe ich Ihnen kurz erklärt, was eine Datenbank ist, und wie man sie zu einer Datenquelle macht. Diese Konzepte zeigen, wie ColdFusion verdeckt hinter den Kulissen

53

Aufbau einer ColdFusion-Applikation

arbeitet. Jetzt wollen wir betrachten, was der Endbenutzer von dem Ganzen sieht. Wir beschäftigen uns nun mit der Template-Datei von ColdFusion, also der Schablone, dem dritten lebenswichtigen Bestandteil, das das Puzzle vervollständigt.

2.3

Das ColdFusion-Template

Ein ColdFusion-Template legt das Layout und den Inhalt dessen fest, was der Benutzer letztlich im Browser sieht, wenn er auf Ihre professionell codierte ColdFusion-Site gelangt. Templates haben die Dateinamenerweiterung .CFM statt .HTML. Wenn ein Benutzer über seinen Browser eine .CMF-Datei anfordert, weiß der Server, dass die Kontrolle an ColdFusion übergehen soll. Templates werden genau wie HTML-Seiten aufgebaut – d.h. sie können in Texteditoren wie Notepad, vi oder EMACS von Hand codiert werden, aber auch über grafische Benutzeroberflächen (GUIs, Graphic User Interfaces), wie beispielsweise das Begleitprodukt von Allaire, ColdFusion Studio (mehr darüber erfahren Sie in der dritten Woche). Sie können Templates sogar verwenden, um andere Templates zu erzeugen. Um Ihnen das Konzept der Templates näher zu bringen, verwende ich wieder meine Datenbank mit den Elvis-Filmen als Beispieldatenquelle. Angenommen, ich will ein Template erstellen, die Informationen über »Speedway« ermittelt, diesen wunderbaren Film, in dem Elvis einen frustrierten Rennfahrer spielt, der zufällig auch Rock'n Roll-Sänger ist. Neben der anderen Dateinamenerweiterung und ein paar Codezeilen sieht meine Template-Datei ganz ähnlich wie ein Standard-HTML-Dokument aus. Wenn Sie dieses oder ein anderes ColdFusion-Template in einem Texteditor öffnen, sehen Sie etwas wie in Abbildung 2.2 gezeigt. Beachten Sie die speziellen Tags, die mit »CF« beginnen. Es handelt sich dabei um ColdFusion Markup Language, die bereits in Kapitel 1 angesprochen wurde. CFML-Tags werden nur von ColdFusion verarbeitet. Sie teilen ColdFusion mit, was es für Sie tun soll. In diesem Fall haben Sie zwei CFML-Tag-Abschnitte, den Abfrage-Abschnitt und den Ausgabe-Abschnitt.

54

Das ColdFusion-Template

Abbildung 2.2: Ein Beispiel für ein ColdFusionTemplate mit einem Abfrage-Abschnitt, einem AusgabeAbschnitt und Standard-HTML-Markup-Tags.

Die Abfrage Der erste Abschnitt, der in die Tags eingeschlossen ist, definiert eine Abfrage, das sind die Anweisungen, die wir an die Datenbank senden. In Abbildung 2.2 führt die Abfrage eine einfache Suche nach dem Datensatz mit dem Titel (title) 'Speedway' aus. Wenn die Anweisungen Sie verwirren: Machen Sie sich keine Sorgen. Weitere Informationen über alles, was Sie schon immer über SQL wissen wollten, finden Sie in Kapitel 5. Abfragen wie diese teilen ColdFusion drei Dinge mit: welche Datenquelle Sie verwenden wollen, welche Tabellen Sie dort ansprechen wollen, und welche Funktion für die Daten in diesen Tabellen ausgeführt werden soll – eine Suche, eine Änderung, einen Neueintrag usw.

HTML-Markup Der zweite Abschnitt in Abbildung 2.2 beginnt mit dem Tag und wird Ihnen vertraut vorkommen, wenn Sie schon einmal eine Web-Seite manuell codiert haben. Die gewöhnlichen HTML-Tags definieren den Seitentitel, die Kopfzeile usw. Die einzige Abweichung vom HTML-Markup liegt im -Abschnitt, der mit den Tags und eröffnet bzw. abgeschlossen wird.

55

Aufbau einer ColdFusion-Applikation

Die Ausgabe Der Ausgabeabschnitt ist in -Tags eingeschlossen. Auch er sieht ganz ähnlich wie HTML-Markup aus, enthält aber Variablen wie diese: #title# #year# #rating#

Eine Variable ist ein Symbol oder ein Name, das bzw. der für einen Wert steht. ColdFusion-Ausgabevariablen stehen für Werte, die von einer ColdFusionAbfrage zurückgegeben werden. Beachten Sie die Doppelkreuze vor und nach jedem Wort – sie teilen ColdFusion mit, dass es sich bei dem Text zwischen den Markierungen nicht um Ihren normalen HTMLCode handelt, sondern vielmehr um einen Verweis auf eine Variable. Wenn ColdFusion Doppelkreuze innerhalb eines -Abschnitts sieht, behandelt es den Text innerhalb der Markierungen als Variable. Programmierer und Web-Entwickler bezeichnen das Doppelkreuz (#) auch als Hash. Es dient als Platzhalter oder Markierung für irgend etwas anderes. In ColdFusion kennzeichnet ein Hash-Zeichen eine Variable. In Abbildung 2.2 verarbeitet ColdFusion die im -Tag angegebene Abfrage und gibt die Werte der einzelnen Variablen zurück. Um das Ganze zu verstehen, betrachten wir in Listing 2.1 den Abfrageabschnitt noch einmal. Listing 2.1: Ein Beispiel für einen ColdFusion-Abfrageabschnitt 1: 2: SELECT title, year, rating FROM movies WHERE title = 'Speedway' 3:

Mit Hilfe von SQL-Schlüsselwörtern wie SELECT, FROM und WHERE fordern Sie ColdFusion auf, die Tabelle »movies« nach Datensätzen zu durchsuchen, deren title gleich 'Speedway' ist, und die Daten der Felder title, year und rating (Filmtitel, Erscheinungsjahr und Bewertung) zu ermitteln. Diese Feldnamen entsprechen genau den im Abschnitt angegebenen Variablen. Wenn ein Benutzer über seinen Browser diese Template-Datei anfordert, gibt ColdFusion die angegebene Abfrage weiter und trägt die Rückgabewerte überall dort ein, wo die zugehörige Variable erscheint. Das Ergebnis sieht aus wie in Abbildung 2.3 gezeigt.

56

Das ColdFusion-Template

Abbildung 2.3: Beispielausgabe des in Abbildung 2.2 gezeigten Template.

Wenn der Benutzer nun den Befehl QUELLTEXT ANZEIGEN in seinem Browser anwendet, sieht er nur den in Abbildung 2.4 gezeigten Text.

Abbildung 2.4: Das sehen Sie für eine mit ColdFusion erstellte Seite, wenn Sie im Browser den Befehl Quelltext anzeigen ausführen.

57

Aufbau einer ColdFusion-Applikation

Der Browser-Befehl QUELLTEXT ANZEIGEN erlaubt dem Benutzer, den reinen Text und den HTML-Code anzuzeigen, aus dem sich eine Web-Seite aufbaut. In Netscape Navigator wählen Sie dazu im Menü ANSICHT den Befehl SEITENQUELLTEXT. Im Internet Explorer verwenden Sie ANSICHT, QUELLTEXT ANZEIGEN. Keine Abfrage, keine Variablen, nur reiner, unverfänglicher HTML-Code. ColdFusion erzeugt die Seite nämlich dynamisch, wenn der Browser des Benutzers die Seite anfordert, und sendet dann nur den HTML-Text. Der Benutzer merkt nichts von den Geschehnissen hinter den Kulissen.

2.4

Die Beziehung zwischen Abfrage und Ausgabe

Damit Sie die Beziehung zwischen den Abfrage- und Ausgabeabschnitten in ColdFusion besser verstehen, betrachten wir jetzt, was passiert, wenn wir Änderungen an der Abfrage vornehmen. In der in Abbildung 2.2 gezeigten Template-Datei war die Abfrage sehr spezifisch. Mit Hilfe von SQL-Befehlen habe ich ColdFusion aufgefordert, Daten aus einem einzigen Datensatz zu ermitteln – dessen title gleich 'Speedway' war. Um die Ausgabe von ColdFusion besser zu verstehen, betrachten wir jetzt ein Beispiel, in dem die Abfrage nicht so konkret ist, wie in Abbildung 2.5 gezeigt.

Abbildung 2.5: Ein weiteres Beispiel für eine Template-Datei, das außer im Abfrageabschnitt gleich dem Beispiel aus Abbildung 2.2 ist.

58

Die Beziehung zwischen Abfrage und Ausgabe

Beachten Sie, dass der neue Abfrageabschnitt ein Wildcard-Zeichen verwendet, den Stern. Wildcard-Zeichen werden in SQL verwendet, um jeweils alle Datensätze anzusprechen, die einer bestimmten Regel entsprechen.

Der Stern ist ein spezieller SQL-Befehl, der für »alles« steht. In Abbildung 2.5 haben wir die Abfrage »ermittle den Datensatz, für den title gleich 'Speedway' ist« in »ermittle alles« geändert – alle Datensätze in der Tabelle werden berücksichtigt. Beachten Sie, dass weder der Ausgabeabschnitt noch der HTML-Code verändert wurden. Die Ausgabe von Abbildung 2.5 würde wie folgt aussehen: Filmtitel: King Creole Erscheinungsjahr: 1958 Meine Bewertung: In Ordnung Filmtitel: Blue Hawaii Erscheinungsjahr: 1951 Meine Bewertung: In Ordnung Filmtitel: Kid Galahad Erscheinungsjahr: 1962 Meine Bewertung: aaaahhh! Filmtitel: Harum Scarum Erscheinungsjahr: 1965 Meine Bewertung: aaaahhh! Filmtitel: Roustabout Erscheinungsjahr: 1964 Meine Bewertung: Dafür gibt es keine Entschuldigung Filmtitel: Speedway Erscheinungsjahr: 1968 Meine Bewertung: Tatsächlich relativ gut Title: Charro Erscheinungsjahr: 1969 Meine Bewertung: In Ordnung Filmtitel: Clambake Erscheinungsjahr: 1967 Meine Bewertung: Tatsächlich relativ gut

59

Aufbau einer ColdFusion-Applikation

Filmtitel: Flaming Star Erscheinungsjahr: 1960 Meine Bewertung: Dafür gibt es keine Entschuldigung Filmtitel: Kissin' Cousins Erscheinungsjahr:1964 Meine Bewertung: Dafür gibt es keine Entschuldigung

Statt nur eines einzigen Films zeigt die Ausgabe jetzt die Daten für alle Filme in der Tabelle an. Die Ausgabe erfolgt vertikal über die Seite nach unten. In Abbildung 2.2 sehen Sie, dass es nur einen -Abschnitt gibt, mit nur einer Variablenmenge. Woher kommen all diese anderen Filme? Sie werden angezeigt, weil ColdFusion den Ausgabeabschnitt standardmäßig für jeden von der Abfrage zurückgegebenen Datensatz wiederholt. Jeder Text und jede Variable, die innerhalb der Tags und erscheint, wird wiederholt, bis alle Datensätze ausgewertet sind. Gibt die Abfrage einen Datensatz zurück, erhält man einen Ausgabeabschnitt. Gibt sie zwei Datensätze zurück, erhält man zwei Ausgabeabschnitte usw. Wie man diese Funktion nutzt und Beschränkungen für die Ausgaben findet, werde ich in späteren Kapiteln erklären.

URL-Variablen zur Konkretisierung der Ausgaben Ich hoffe, Sie verstehen langsam die grundlegende Beziehung zwischen einer ColdFusionAbfrage und der Ausgabe, die sie als Seite in Ihrem Browser erzeugt. Und dann wundern Sie sich vielleicht langsam über all diese zeitsparenden Funktionen, von denen ich Ihnen in Kapitel 1 erzählt habe. Wenn ich beispielsweise eine Site entwerfen will, auf der jeder Elvis-Film auf einer eigenen Seite angezeigt wird, müsste ich dann nicht für jeden Film ein separates ColdFusion-Template anlegen? Die Abfragen der einzelnen Templates würden sich dann jeweils auf einen einzelnen Film beziehen, richtig? Die Antwort lautet natürlich Nein, und der Grund ist eines der Schlüsselelemente, die ein Buch dieses Umfangs über ColdFusion rechtfertigen. Sie können mit Hilfe einer einzigen Template-Datei Hunderte von Web-Seiten erstellen, weil ColdFusion in den Abfrageabschnitten Variablen erlaubt. Statt einer Abfrage, die besagt »ermittle den Datensatz mit dem title gleich 'Speedway'« können Sie sagen »ermittle den Datensatz, in dem title gleich einer Variablen ist«, und die Variable dann später bereitstellen. Immer wenn Sie die Variable ändern, erhalten Sie eine Ausgabeseite mit einem anderen Datensatz. Das sind relativ viele wichtige Konzepte für ein einziges Kapitel, aber vertrauen Sie mir. Sie sollten verstehen, worum es bei der Verwendung von Variablen geht – die Details können Sie vorübergehend noch vernachlässigen.

60

Die Beziehung zwischen Abfrage und Ausgabe

Betrachten wir den Inhalt einer neuen Template-Seite in Listing 2.2. Listing 2.2: Ein vollständiges ColdFusion-Template mit Abfrage- und Ausgabeabschnitt

SELECT * FROM movies WHERE ID = '#code#'

Elvis Movies

Title: #title#

Erscheinungsjahr: #year#

Meine Bewertung: #rating#



Beachten Sie, dass die Abfrage jetzt eine Variable enthält, das Wort code, das in Doppelkreuze eingeschlossen ist. In dieser Abfrage fordern wir ColdFusion auf, die Tabelle »movies« nach Datensätzen zu durchsuchen, deren ID-Feld denselben Wert enthält wie die Variable #code#. Betrachten wir die Tabelle »movies« in Abbildung 2.6 noch einmal.

Abbildung 2.6: Die Tabelle »movies« – beachten Sie das Feld ID.

Sie erinnern sich vielleicht aus der Beschreibung der Datenbanken in diesem Kapitel, dass das Feld ID ein Schlüsselfeld ist. Meine Datenbank-Software hat das Schlüsselfeld automatisch angelegt, während ich die Zeilen für die einzelnen Elvis-Filme eingegeben habe.

61

Aufbau einer ColdFusion-Applikation

Jede Zeile in meiner Tabelle enthält im ID-Feld eine eindeutige Nummer, wodurch es optimal für die Auswahl eines bestimmten Datensatzes geeignet ist. In der in Listing 2.2 gezeigten Abfrage habe ich ColdFusion aufgefordert, die Datensätze zu ermitteln, deren ID-Feld gleich der Variablen #code# ist. Aber was ist »code«? Es ist kein Feld der Datenbank, woher weiß also ColdFusion, was für die Variable einzusetzen ist? Wir sagen ihm, was einzusetzen ist. Eine der praktischsten Funktionen von ColdFusion ist die Möglichkeit, einer Template-Datei über den Seiten-URL Variablen zu übergeben. Wir können beliebige Variablen verwenden, so lange diese irgendwo in der Template-Datei erscheinen. Betrachten Sie Abbildung 2.7.

Abbildung 2.7: Die Ausgabe von Listing 2.2 in einem Browser.

Hier habe ich einen speziellen URL in meinen Browser eingegeben. Ich habe meine Template-Datei aufgerufen, elvis_movies.cfm, und mit Hilfe des Fragezeichens (?) eine Variable angefügt. In diesem Fall habe ich eine einfache Variable namens code definiert und ihr den Wert 7 zugewiesen. ColdFusion verwendet wie viele CGI-Programme das Fragezeichen, um im URL Variablen zu kennzeichnen. Aus diesem Grund sollten Sie vermeiden, in Variablen- und Feldnamen Fragezeichen zu verwenden. ColdFusion könnte sie falsch interpretieren und einen Fehler zurückmelden. Die Template-Seite in Listing 2.2 würde also eine Web-Seite wie in Abbildung 2.7 gezeigt erzeugen.

62

Zusammenfassung

Wenn ich dieselbe Template-Seite verwende, aber den Wert für code im URL auf 2 setze, erhalte ich die Ausgabe für einen anderen Elvis-Film. Im Hintergrund setzt ColdFusion den Wert von code, den ich im URL in den Browser eingegeben habe, für die Variable #code# im Abfrageabschnitt des Template ein. Für den URL http://www.myserver.com/movies.cfm?code=3

interpretiert ColdFusion also den Abfrageabschnitt des Template movies.cfm wie in Listing 2.3 gezeigt. Listing 2.3: Ein Beispiel für einen Abfrageabschnitt, der eine ID-Nummer angibt, um einen bestimmten Datensatz anzusprechen.

SELECT title, year, rating FROM movies WHERE ID = 7

Durch eine Änderung des URL beim Zugriff auf eine Template-Seite kann ich Ausgaben für beliebige Filme meiner Datenbank erstellen. Enthielte meine Datenbank Hunderte oder Tausende von Datensätzen, könnte ich ebenfalls mit Hilfe dieses einzigen Template formatierte Ausgaben für jeden davon anzeigen. Auch hier sollten Sie sich keine größeren Gedanken machen, wenn Sie den Mechanismus von URL-Variablen nicht sofort verstehen. Das wichtige Konzept hier ist, dass der Abfrageabschnitt einer Template-Seite die Ausgabe für den Benutzer festlegt, und dass der Einsatz von Variablen in einer Abfrage erlaubt, Tausende von Datensätzen über ein einziges Template anzuzeigen. Ich werde in folgenden Kapiteln noch einmal auf URL-Variablen eingehen.

2.5

Zusammenfassung

Die meisten ColdFusion-Applikationen, die Sie erstellen werden, basieren auf einer Datenbank. Wenn Sie noch nicht viel mit Datenbanken gearbeitet haben, stellen Sie sich diese einfach als Minibibliotheken vor, die Daten nach üblichen Methoden organisieren. Wenn Sie den Namen von jemandem kennen, macht es eine Datenbank ganz einfach, die zugehörige Adresse zu finden, usw. Wenn Sie eine Datenbank als Hintergrund für eine ColdFusion-Applikation verwenden, definieren Sie sie mit Hilfe des ColdFusion Administrators als Datenquelle. Damit teilen Sie dem Programm mit, wo im System sich Ihre Datenbank befindet. Außerdem wird eine ODBC-Pipeline geöffnet, die ColdFusion direkt mit der Datenbank verbindet.

63

Aufbau einer ColdFusion-Applikation

Nachdem die Datenbank als Datenquelle aktiviert wurde, können Sie Template-Dateien anlegen, die Einträge der Datenbank als Web-Seiten ausgeben. Jede Template-Datei besteht aus drei Elementen – einem Abfrageabschnitt, einem Ausgabeabschnitt und Standard-HTML-Markup-Tags. Wenn ein Benutzer diese Templates in einem Web-Browser anzeigt, sieht er die Ausgaben im HTML-Format. Der Abfrageabschnitt eines Template teilt ColdFusion mit, welche Datenquelle Sie verwenden wollen, welche Tabelle Sie dabei ansprechen wollen, und was eigentlich getan werden soll. Eine der gebräuchlichsten Abfrageaufgaben ist die Suche, wobei Sie ColdFusion anweisen, Datensätze zu ermitteln, die einer bestimmten Bedingung genügen. Durch eine Änderung dieser Bedingung (beispielsweise durch die Verwendung von Variablen) in einer Abfrage manipulieren Sie die Ausgabe, die der Benutzer in seinem Browser sieht.

2.6 F

Welche anderen Programme verwenden ODBC? Was sind die Vorteile dieser Programme? A

F

Ältere Versionen von ColdFusion zwangen Sie, ein Verzeichnis für Ihre Template-Dateien zu definieren. Seit Version 3.0 können Sie diese an beliebiger Stelle Ihrer Web-Verzeichnisstruktur platzieren – so wie Standard-HTML-Seiten. Solange Ihre Templates die Dateinamenerweiterung .cfm verwenden, erkennt ColdFusion sie auch.

Können innerhalb einer einzigen ColdFusion-Template-Datei mehrere Abfragen verwendet werden? A

64

ColdFusion ist nur ein Beispiel für eine ODBC-kompatible Applikation. Es gibt Textverarbeitungen, Tabellenkalkulationen, Adressbücher und Mail-Programme, die dasselbe Attribut aufweisen. Die Vorteile dieser Programme gegenüber ihren Gegenstücken, die ODBC nicht unterstützen, ist die Tatsache, dass Sie sie wie ColdFusion nutzen können, um Dokumente aus einer Datenbank zu erzeugen. Betrachten Sie beispielsweise ein Mail-Programm: Mit ODBC können Sie Ihr Mail-Programm mit einer Datenbank verknüpfen und sofort ein RundschreibenMail an jeden in einer Tabelle mit Adresse aufgelisteten Namen schicken.

Wo werden die Template-Dateien von ColdFusion auf meinem Web-Server abgelegt? A

F

F&A

Ja, und in späteren Kapiteln werde ich Ihnen noch zeigen, welche Vorteile diese Vorgehensweise hat. Abfragen können sogar dazu genutzt werden, Suchparameter für andere Abfragen in demselben Template zu erzeugen.

Workshop

F

Was passiert, wenn ich Text und HTML-Markups außerhalb eines ColdFusion-Ausgabeabschnitts platziere? A

F

Die Anzeige erfolgt ganz normal, so wie für eine Standard-HTML-Datei. ColdFusion ignoriert einfach alles, was nicht innerhalb eines erscheint und gibt es einfach wörtlich an den Browser des Benutzers weiter.

Was passiert, wenn eine ColdFusion-Abfrage keine Übereinstimmung mit Datensätzen in einer Tabelle findet? A

2.7

Die Template-Seite wird normal angezeigt, aber der Text innerhalb der -Tags erscheint nicht. Das hat sowohl Vorteile als auch Nachteile, wie ich in späteren Kapiteln noch erklären werde.

Workshop

Um zu überprüfen, ob Sie den Stoff des heutigen Kapitels verstanden haben, sollten Sie jetzt die Quizfragen beantworten und versuchen, die Übungen nachzuvollziehen.

Quiz 1. Aus welchen drei Komponenten besteht eine ColdFusion-Applikation? 2. Was sieht ein Benutzer, wenn er in seinem Browser die Funktion QUELLTEXT ANZEIGEN für ein ColdFusion-Template aufruft? 3. Was sind die drei Abschnitte in einem ColdFusion-Template? 4. Wofür steht die Abkürzung SQL und worum handelt es sich dabei?

Antworten 1. Die Datenbank, die Datenquelle und das Template. 2. Standard-HTML-Markup und Text. ColdFusion-Text und Variablen erscheinen nicht in der Ausgabe. 3. Die Abfrage, das HTML-Markup und die Ausgabe. 4. Es steht für Structured Query Language und ermöglicht die Kommunikation zwischen einer Applikation und einer Datenbank.

65

Aufbau einer ColdFusion-Applikation

Übungen 1. Öffnen Sie eine Datenbankdatei und identifizieren Sie die folgenden Elemente: eine Tabelle, ein Feld und einen Datensatz. 2. Öffnen Sie eine Datenbanktabelle und zeigen Sie auf, wie ein Datensatz als Web-Seite angeboten werden könnte. 3. Öffnen Sie eine der Beispiel-Template-Dateien von der ColdFusion-Installations-CD und identifizieren Sie Abfrage- und Ausgabeabschnitt.

Antworten 3. Der Abfrageabschnitt ist der Teil, der in die Tags und eingeschlossen ist, der Ausgabeabschnitt der Teil, der in die Tags und eingeschlossen ist.

66

ColdFusion einrichten und eine Datenquelle definieren

3

ColdFusion einrichten und eine Datenquelle definieren

Nachdem Sie die grundlegenden Komponenten einer ColdFusion-Applikation kennen gelernt haben, können Sie die Software installieren oder eine Verbindung zu einem Remote-Provider für ColdFusion einrichten, so dass Sie endlich anfangen können Ihre eigenen Templates zu erstellen. Falls Sie noch nicht stolzer Besitzer eines ColdFusion-Servers sind, gilt es jetzt mehrere Entscheidungen zu treffen. Dieser Abschnitt hilft Ihnen zu entscheiden, ob Sie das Geld für eine eigene Kopie ausgeben sollen, oder ob sie besser bedient sind, wenn Sie Ihre CF-Dokumente auf dem Server irgendeines Anbieters ablegen. In diesem Kapitel geht es außerdem um die folgenden Themen: 쐽

Aspekte bei der Auswahl eines Remote-Providers.



Web-Server, die mit ColdFusion Server kompatibel sind.



Die drei Varianten von ColdFusion Server.



ColdFusion Server installieren.



Überprüfen der ColdFusion Server-Installation.



ColdFusion Administrator



Definieren einer ColdFusion-Datenquelle.



Aktivieren und Deaktivieren des ColdFusion-Dienstes.

Wenn Sie einer der glücklichen Benutzer sind, die einen eigenen Web-Server betreiben, können Sie die folgenden Abschnitte überspringen und zur Betrachtung der verschiedenen Varianten von ColdFusion Server weiterblättern, wo die beiden Servertypen betrachtet werden. Anhand der dort bereitgestellten Informationen können Sie entscheiden, welcher Typ für Sie geeignet ist. Wenn Sie dagegen zu uns gehören, die sich keine eigene T1-Verbindung leisten können, lesen Sie weiter. Ich werde einige wichtige Aspekte beleuchten, die Sie berücksichtigen sollten, wenn Sie einen externen Web-Provider wählen, und Sie bei der Entscheidung unterstützen, ob Sie für Testzwecke eine eigene Kopie von ColdFusion brauchen.

3.1

Kaufen oder nicht kaufen?

Wenn Sie die Entscheidung getroffen haben, Ihre ColdFusion-Site bei einem RemoteProvider unterzubringen, droht Ihnen ein Dilemma: Weil ColdFusion nur zusammen mit einem Web-Server funktioniert, können Sie die Vorschau für CF-Templates nicht einfach auf Ihrem Browser anzeigen, wie Sie es bei Standard-HTML gemacht haben. Es wäre wirklich sinnvoll, Ihre Templates auf Ihrem eigenen Computer auszuprobieren, bevor Sie sie auf den Server Ihres Providers hochladen, aber trotz all seiner Vorteile ist ColdFusion Server eine relativ kostspielige Anschaffung, wenn Sie es nur brauchen, um Templates zu testen.

68

Fragen, die Sie einem potentiellen ColdFusion-Provider stellen sollten

Allaire bietet eine Lösung mit einem speziellen Entwicklungspaket für Windows-Benutzer an – ColdFusion Studio. Es wird zu einem Bruchteil des Preises angeboten, den die vollständigen ColdFusion Server-Applikationen kosten, und umfasst einen speziellen Einzelplatz-Server. Dieser Mini-ColdFusion-Server läuft reibungslos neben dem kostenlosen Microsoft Personal Web Server, der in zahlreichen Microsoft-Produkten enthalten ist, wie beispielsweise FrontPage oder Windows 98. Es stellt eine voll funktionale und relativ preiswerte Methode dar, CF-Templates auf Ihrem lokalen Computer zu testen, bevor Sie sie auf einen Remote-Web-Host hochladen. Das Paket beinhaltet außerdem eine erweiterte Kopie von Allaire's HomeSite, einer semigrafischen Oberfläche für den Aufbau von Web-Seiten. Es beinhaltet grafische Kürzel für HTML- und ColdFusion-Tags und umfasst zeitsparende Funktionen wie beispielsweise die Tag-Überprüfung und Hilfen zum Aufbau von Abfragen. In der dritten Woche dieses Buchs werde ich ColdFusion Studio und den HomeSite-Editor genauer beschreiben. ColdFusion Studio wird häufig als semi-grafische Oberfläche bezeichnet, weil es den Entwicklern ermöglicht, mit HTML- und CFM-Dateien als Textseiten zu arbeiten, aber grafische Kürzel enthält, die die Codierung vereinfachen. Im Gegensatz dazu werden Programme wie Adobe PageMill und Microsoft FrontPage als grafische Oberflächen bezeichnet, weil der Entwickler dabei größtenteils die Seite schon so sieht, wie sie später in einem Browser angezeigt wird, statt direkt mit dem HTML-Text zu arbeiten.

3.2

Fragen, die Sie einem potentiellen ColdFusionProvider stellen sollten

Wenn Sie beschlossen haben, Ihre ColdFusion-Site bei einem externen Web-Provider unterzubringen, statt einen eigenen Server zu betreiben, sollten Sie Preise und Funktionen vergleichen. Um Provider zu finden, die ColdFusion anbieten, suchen Sie zunächst mit Ihrer bevorzugten Suchmaschine nach Begriffen wie »ColdFusion«, »Service«, »Provider«, »Hosting« und »Windows NT« oder »Solaris«. Mehrere gute Providerindizes bieten einen Preis- und Funktionsüberblick über verschiedene große Web-Hosts. Es ist äußerst wichtig, sich die Zeit zu nehmen, einen Provider zu ermitteln, der die Software wirklich kennt. ColdFusion ist ein sehr heißes Thema auf dem heutigen Web-Service-Markt, und viele über Nacht erschienene Hosting-Dienste wollen es sofort in ihr Angebot aufnehmen. Für jeden kompetenten Provider, der wirklich brauchbaren Cold-

69

ColdFusion einrichten und eine Datenquelle definieren

Fusion-Service bieten kann, gibt es mindestens genau so viele, die die Software gerade gestern erst installiert haben und keinen Schimmer davon haben, wie sie funktioniert. Wenn Sie gezielte Fragen wie die folgenden stellen, werden Sie schnell erkennen, welche Provider DNS von DSN unterscheiden können.

ColdFusion-Version Aus leicht nachvollziehbaren Gründen sollten Sie wissen, welche Softwareversion Ihr potentieller Provider einsetzt, bevor Sie anfangen, Templates zu erstellen. Die meisten für Version 4.0 entwickelten Templates sind auch zu Version 3.0 kompatibel, aber in der neuesten Version gibt es ein paar clevere Funktionen, die leider nicht mehr ganz so clever erscheinen, wenn sie nicht funktionieren, und wenn Sie sie aus Ihren Seiten herausnehmen müssen. Weil ColdFusion so geboomt hat, werden Sie viele Provider finden, die die Versionen 3.x und 4.x anbieten. Schließen Sie alle Provider aus, die ältere Versionen verwenden, weil sich die erste und die zweite Version der Software wesentlich von dem neuen Release unterscheiden. Bei ColdFusion Version 1 und Version 2 verwenden die Templates eine andere Dateinamenerweiterung (.dbm statt .cfm) und müssen sich in einem einzigen, zuvor festgelegten Verzeichnis befinden. Ich habe schon ältere ColdFusion-Sites auf neuere Server umgestellt, und kann Ihnen bestätigen, dass das eine sehr müßige Aufgabe ist. Wenn Sie eine sehr umfangreiche ColdFusion-Site umstellen, die mit Hilfe einer älteren Version der Software erstellt wurde, kann Ihnen der Administrator Ihres CF-Servers vielleicht mit ein paar Tricks helfen, beispielsweise durch die Aktivierung der Dateinamenerweiterung .dbm für Templates. Nehmen Sie per E-Mail oder Telefon Kontakt zu dem potentiellen Provider auf und fragen Sie, welche Version(en) er anbietet. Wenn er es nicht weiß, ist das bereits der erste Hinweis darauf, dass Sie sich besser an anderer Stelle umsehen sollten.

Die Anzahl der unterstützten Datenquellen Bisher habe ich ColdFusion-Applikationen nur auf konzeptueller Ebene besprochen. In meinen Beispielen verwendete ich immer eine einzige Datenquelle. Ich sollte hier erwähnen, dass es bestimmte Vorteile gibt, mehrere Datenquellen zu verwenden, insbesondere, wenn Sie es mit sehr großen Datenbanken zu tun haben. Beispielsweise ist es für ein riesiges Online-Kaufhaus sinnvoll, für jede Abteilung eine separate Produktdatenbank zu führen und diese als separate Datenquellen einzurichten. Warum? Stellen Sie sich ein solches Kaufhaus in der Realität vor, dann werden Sie es ver-

70

Fragen, die Sie einem potentiellen ColdFusion-Provider stellen sollten

stehen. Wenn ich Sie in das Kaufhaus schicke, um eine rote Unterhose mit Batman-Logo zu kaufen, Größe 7 bitte, Ihnen aber nicht sage, in welcher Abteilung Sie diese finden, dann brauchen Sie dafür womöglich einen ganzen Tag. Wenn ich die Suche eingrenze, indem ich Sie zuerst auf die Herrenabteilung verweise, werden Sie das Gewünschte relativ schnell finden – und ich kann daheim meinen Eistee schlürfen. Jetzt werden wir diese wunderbare Metapher auf ColdFusion übertragen. Wenn das Online-Kaufhaus Tausende von Produkten in einer einzigen Datenquelle speichert, braucht die Software wahrscheinlich sehr lange, bis es ein Produkt gefunden hat, das in einer Anfrage angefordert wurde. Vielleicht nicht den ganzen Tag, weil die Computer heute schon sehr schnell sind, aber Sie wissen, was ich meine. Sie können die Zeit verkürzen, die es dauert, bis ColdFusion Seiten an Ihre Benutzer zurückgibt, indem Sie Ihre Datenbanken klein halten und gegebenenfalls mehrere Datenquellen verwenden. Betrachten Sie als Beispiel zwei Möglichkeiten, die Daten eines Kaufhaus zu konfigurieren, wie in den Abbildungen 3.1 und 3.2 gezeigt.

Datenquelle “Produkte”

Datenquelle “Kunden” ETC.

Produkte

Eingaben

Kunden

"

Versand

"

Werbung

"

Kontakte

"

Abbildung 3.1: Eine zweite Beispielstruktur, die für jede Abteilung eine separate Datenquelle verwendet.

store.mdb

Datenquelle “Kaufhaus”

Produkte

Eingabe

Kunden

Eingabe

Versand

"

Werbung

"

Kontakte

"

Abbildung 3.2: Eine Beispieldatenstruktur für ein Kaufhaus, dessen Abteilungen eine einzige Datenquelle gemeinsam verwenden.

store.mdb

In Abbildung 3.1 habe ich das Layout einer ColdFusion-Site aufgezeigt, wo alles in einer einzigen Datenquelle untergebracht ist. Alle Operationen des Kaufhauses, unter anderem die Kundendatenbanken, die Versandinformation und Produktlisten, werden innerhalb einer einzigen Datenquelle verwaltet. Immer wenn ColdFusion nach einem Datensatz sucht, muss es sich durch diese riesige Datenmenge bewegen.

71

ColdFusion einrichten und eine Datenquelle definieren

Im Gegensatz dazu zeigt Abbildung 3.2 eine Site, die von mehreren Datenbanken bedient wird, die alle als separate Datenquellen eingerichtet sind. Wenn ColdFusion nach Daten über ein Produkt sucht, muss es nur die Datenquelle durchsuchen, die Informationen über Produkte enthält, und nicht diejenigen, die Versandinformation, Kundennamen und alles andere enthalten. Sie sollten abschätzen können, wie viele Datenquellen Sie für Ihre Site brauchen. Kleine bis mittlere Sites kommen mit einer Datenquelle aus, und häufig erlauben die Web-Hosts auch nicht mehr. Wenn Sie glauben, Ihre Site braucht mehr als eine Datenquelle, sollten Sie sich mit Ihrem Host-Provider in Verbindung setzen.

Aktualisierung der Datenquellen Die Aktualisierung der Datenquellen ist ein wichtiger Faktor, der bei der Auswahl eines Web-Hosts für ColdFusion häufig übersehen wird. Wenn Sie ihn ignorieren, werden Sie irgendwann die Tastatur gegen die Wand werfen – wenn Sie nämlich all die Stunden daran sitzen, die Sie doch hofften, mit ColdFusion einzusparen. Wenn Sie eine Remote-ColdFusion-Site führen, wollen Sie Ihre Datenquelle irgendwann aktualisieren. Möglicherweise haben Sie Ihrer Datenbank manuell Daten hinzugefügt, oder Sie haben neue Tabellen oder Felder angelegt. Jedenfalls wollen Sie, dass die Datenbank auf der Maschine Ihres Web-Providers synchron mit der auf Ihrem lokalen System ist. Bei den meisten Providern geht das ganz einfach, indem Sie Ihre geänderte Datenbank hochladen oder die ältere Datei auf dem Server des Providers überschreiben. Ihre datenbankgesteuerten Seiten stehen nicht zur Verfügung, während die Datei übertragen wird, aber das können Sie ganz einfach kompensieren, indem Sie Ihre Uploads während Zeiten geringer Auslastung durchführen, beispielsweise in der Nacht, wenn die meisten Ihrer Benutzer schlafen. Nachdem der Upload beendet ist, reflektiert Ihre Web-Site automatisch die neuen Datenbankeinträge und alles ist gut. Ich sage, die meisten Provider bieten diese Funktion an, weil überraschend viele diese einfache Methode noch nicht entdeckt haben, und andere sie nicht unterstützen können, weil sie ältere Versionen von ColdFusion einsetzen oder äußerst strenge Sicherheitsanforderungen durchsetzen. Bei diesen Providern ist die Aktualisierung nicht ganz so einfach. Immer wenn Sie Ihre Daten aktualisieren müssen, laden Sie Ihre Datenbank hoch und setzen sich mit der Support-Abteilung Ihres Providers per E-Mail oder über das Telefon in Verbindung, um sie zu bitten, die Datenquelle manuell zu aktualisieren. Wenn Sich Ihre Datenbank nicht häufig ändert, kommen Sie mit dieser zuletzt beschriebenen Methode durchaus zurecht. Wenn Sie dagegen eine ColdFusion-Site für einen Kunden angelegt haben, dessen Verkaufsabteilung an einem Freitagnachmittag fünf neue Produkte eintragen will, für die eine gesonderte Werbung erfolgen soll, werden Sie Ihr Wochenende damit verbringen, die wahren Grenzen des »technischen Supports rund um

72

ColdFusion Server-Varianten

die Uhr« auszuloten. Wenn Sie zwei oder dreimal pro Tag anrufen, um Ihre Datenquelle aktualisieren zu lassen, werden Sie sich bei dem für Sie zuständigen Mitarbeiter außerdem einen Beliebtheitsgrad im Bereich von Bill Gates erarbeiten. Fragen Sie die potentiellen Provider, was Sie tun müssen, um eine existierende Datenquelle zu aktualisieren. Bestehen Sie auf konkreten Antworten und geben Sie sich nicht mit wenig konkreten Auskünften zufrieden wie etwa »Ach, Sie laden sie einfach hoch und wir übernehmen den Rest für Sie...«.

Wo werden Ihre Datenbanken abgelegt? Viele Provider fordern, dass Ihre Datenbanken in ein bestimmtes Verzeichnis oder in einen bestimmten Ordner auf ihrem Server hochgeladen wird, damit sie sie als Datenquellen initialisieren können. Fragen Sie die potentiellen Hosts, wo sich dieses Verzeichnis befindet, und ob Sie, der Entwickler, direkten Zugriff darauf haben. Aus Sicherheitsgründen wollen einige Provider nicht, dass Sie Ihre Datenbank direkt in das Verzeichnis hochladen, in dem ColdFusion sie erwartet. Das bedeutet, nach dem Hochladen müssen Sie sich per E-Mail mit einem Techniker in Verbindung setzen, damit dieser die Änderungen für Sie vornimmt. Damit nehmen Sie eine Position ein wie im letzten Abschnitt bereits beschrieben – immer wenn Sie eine manuelle Änderung an Ihrer Datenbank vornehmen, sind Sie auf den technischen Support Ihres Providers angewiesen, der hinter den Kulissen zusätzliche Arbeiten für Sie ausführt. Auch hier gilt, dass Sie diese Vorgehensweise akzeptieren können, wenn sich Ihre Datenbank nicht häufig ändert und die paar E-Mails den Betrieb nicht wesentlich verzögern werden. Wenn Sie dagegen ständig Daten aktualisieren oder neue Tabellen einfügen, sollten Sie einen Provider bevorzugen, der Ihnen erlaubt, Ihre Datenbank direkt hochzuladen.

3.3

ColdFusion Server-Varianten

Allaire's ColdFusion Server gibt es in drei Varianten. Die erste ist die Professional Edition – das Standardpaket, mit dem Sie alle in diesem Buch beschriebenen Aufgaben nachvollziehen können. Die Enterprise Edition bietet zusätzliche Sicherheit sowie Maßnahmen gegen den Systemausfall, für diejenigen, die sehr komplexe E-Commerce-Applikationen planen und mit Werkzeugen wie CORBA arbeiten wollen. Die dritte und neueste Variante ist ColdFusion Express, die kostenlose Applikation von Allaire, die eine begrenzte Funktionsmenge gegenüber der Vollversion bietet.

73

ColdFusion einrichten und eine Datenquelle definieren

Die Codebeispiele später in diesem Buch sind auf ColdFusion Professional und Enterprise Edition ausgelegt. Die Beispiele für die ersten sieben Kapitel funktionieren auch mit ColdFusion Express, aber die weiteren Kapitel verwenden Funktionen, die von Express nicht unterstützt werden. Wenn Sie nicht genau wissen, welche Version Sie brauchen, bleiben Sie bei der Professional Edition, die für die meisten Sites gut geeignet ist – selbst wenn darauf E-CommerceFunktionen angeboten werden.

Kompatibilität mit der Professional Edition ColdFusion Server Professional Edition ist kompatibel mit Systemen unter Windows NT Server 4.0 oder höher, mit Windows 95- und 98-Systemen sowie mit Red Hat Linux 6.0 oder 6.1. ColdFusion 4.x arbeitet mit Web-Server-Paketen zusammen, die eines der folgenden gebräuchlichen Web-Server-APIs (Application Programmers Interface) unterstützen: 쐽

Netscape Server API



Internet Server API



WebSite Server API



Apache 1.3.2 oder höher



CGI (Common Gateway Interface) – eingeschränkte Funktionalität

Kompatibilität mit der Enterprise Edition ColdFusion Server Enterprise Edition ist kompatibel mit Windows NT 4.0 und höher, Red Hat Linux 6.0 oder 6.1, HP-UX 11 und SPARC Solaris 2.5.1, 2.6 und 2.7. Auf NT-Maschinen ist ColdFusion 4.x kompatibel mit allen oben aufgelisteten Web-Server-Paketen. Auf Solaris-Systemen unterstützt sie folgendes: 쐽

Apache API 1.3.2 oder höher



CGI (Common Gateway Interface)

74

Installation von ColdFusion Server auf Windows-Plattformen

3.4

Installation von ColdFusion Server auf WindowsPlattformen

Verglichen mit dem, was ich später beschreiben werde, ist die Installation von ColdFusion Server ein Klacks. Nachdem Sie die CD-ROM eingelegt haben, erfolgt die Installation ganz ähnlich wie bei allen anderen Windows-Programmen, die Sie schon installiert haben. Vor der Installation sollten Sie sicherstellen, dass Dateien und Verzeichnisse auf Ihrem Server »bereinigt« sind – d.h. dass sich keine alten Dateien von früher installierten Applikationen mehr dort befinden. Abhängig von Ihrem Betriebssystem benötigt die ColdFusion Server Professional Edition 50 bis 100 MB Speicherplatz auf Ihrer Festplatte, die Enterprise Edition 120 bis 200 MB. Stellen Sie sicher, dass Ihre Web-Server-Software installiert ist, bevor Sie mit der Installation von ColdFusion beginnen. Wenn Sie nicht sicher sind, ob auf Ihrem System ein WebServer läuft, öffnen Sie einen Browser und geben Sie den folgenden URL ein: http://127.0.0.1/

Wenn Sie jetzt die Homepage Ihrer Site oder anderen Text sehen, wissen Sie, dass alles richtig läuft. Andernfalls lesen Sie in der Dokumentation Ihres Web-Servers weitere Informationen nach. Weil Sie offensichtlich Ihren eigenen Web-Server führen, setze ich voraus, dass Sie schon mit allgemeinen Vorgehensweisen vertraut sind, und langweile Sie nicht mit Details zur Installation wie beispielsweise dem Anklicken der Setup-Schaltfläche, der Eingabe Ihres Namens und der Seriennummer usw. Neben alledem bietet die Installation einige Optionen an. Ich empfehle Ihnen, das Standard-Installationsverzeichnis beizubehalten, es sei denn, es gibt wirklich einen guten Grund, der dagegen spricht. Anschließend werden Sie gefragt, welche ColdFusion-Komponenten Sie installieren wollen. Wenn Festplattenspeicher für Sie kein Thema ist, lassen Sie dem Installationsprogramm freien Lauf, so dass es einfach alles installiert. Wenn Sie später feststellen, dass Sie eine der Komponenten nicht benötigen, können Sie sie immer noch löschen. Das Installationsprogramm präsentiert Ihnen eine Liste kompatibler Server-APIs und fordert Sie auf, die von Ihnen verwendete Web-Server-Software auszuwählen. Wenn Sie einen Server ausführen, der nur teilweise von ColdFusion unterstützt wird, sollten Sie jetzt in der Dokumentation nachlesen, welche Funktionen von anderen Kompatibilitätsmodi unterstützt werden.

75

ColdFusion einrichten und eine Datenquelle definieren

Windows-Benutzer, die ColdFusion für Apache-Web-Server installieren, müssen einige manuelle Änderungen am Server vornehmen. Detaillierte Informationen finden Sie in der Hilfedatei von ColdFusion. Jetzt werden Sie aufgefordert, ein Administratorkennwort auszuwählen, das Sie später brauchen, um auf den ColdFusion Administrator zuzugreifen. ColdFusion installiert standardmäßig seine Dokumentation als HTML- und CFM-Seiten. Das erscheint Ihnen vielleicht ungewöhnlich, wenn Sie gewohnt sind, Dokumente in Microsoft Word oder anderen Textformaten zu lesen, aber wenn Sie anfangen, auf den Seiten zu lesen, werden Sie verstehen, warum diese Darstellungsform gewählt wurde. Durch Codierung einiger der Seiten in .CFM-Template-Dateien kann Allaire die Beispielausgabe für die verschiedenen ColdFusion-Tags direkt demonstrieren. Nachdem die Setup-Dateien dekomprimiert sind, fordert der Installer Sie auf, Ihren Server neu zu starten, so dass ColdFusion die erforderliche Verknüpfung mit Ihrem SystemODBC einrichten kann. Abhängig von Ihrer Systemplattform wird ColdFusion auf unterschiedliche Weise ausgeführt. Unter Windows NT wird es zu einem Systemdienst, der über die Systemsteuerung bereitgestellt wird. Auf Solaris-Systemen läuft es als Prozess und wird von einem Skript initiiert. Auf Windows 9x-Systemen wird es als normale Programmdatei ausgeführt und steht über die Systemleiste zur Verfügung.

3.5

Installation von ColdFusion Server auf UNIXbasierten Plattformen

ColdFusion wird als »Paket«-Datei ausgeliefert, ein bekanntes Konzept für UNIX- oder Solaris-Administratoren. Wie alle Paketdateien wird ColdFusion mit den Dienstprogrammen pkgadd, pkgrm und pkginfo installiert und verwaltet. Um die Installation zu beginnen, melden Sie sich als Root bei Ihrem System an und legen die Installations-CD ein. Geben Sie folgendes ein: pkgadd -d /cdrom/cdrom0

Eine Liste der relevanten Paketdateien wird angezeigt, aus der Sie die ColdFusion-Datei auswählen. Von hier aus erfolgt die Programminstallation wie gewohnt. ColdFusion fordert Sie auf, eine Seriennummer, ein Standard-Installationsverzeichnis und den Make Ihres Web-Servers einzugeben. Sie werden aufgefordert, einen Benutzernamen einzugeben, unter dem ColdFusion Server ausgeführt werden soll.

76

Überprüfen des Server-Setups

Benutzer mit UNIX-basierten Systemen mit bestimmten Apache- oder Netscape-basierten Web-Servern müssen ihre Software möglicherweise manuell konfigurieren, wenn sie mit ColdFusion arbeiten wollen. Weitere Informationen finden Sie in den Dateien in /opt/coldfusion/webserver/apache/README oder /opt/coldfusion/webserver/NSAPI//README. Nachdem das Installationsprogramm alle Dateien kopiert hat, startet ein Shellskript Ihren Web-Server neu und der ColdFusion-Dienst wird zum ersten Mal aufgerufen.

3.6

Überprüfen des Server-Setups

Nachdem die erste Setup-Phase abgeschlossen ist, sollten Sie ColdFusion Server unbedingt überprüfen. Öffnen Sie einen Browser auf Ihrem System und geben Sie den folgenden URL ein: http://127.0.0.1/CFIDE/Administrator/index.cfm

Wenn alles geklappt hat, sehen Sie die Anmeldeseite für ColdFusion Administrator, wie in Abbildung 3.3 gezeigt.

Abbildung 3.3: Die Eingangsseite in den ColdFusion Administrator.

Wenn Sie diese Administrationsseite nicht sehen oder Ihre Web-Server-Software einen 404-Fehler meldet (Seite nicht gefunden), überprüfen Sie die folgenden Dinge:

77

ColdFusion einrichten und eine Datenquelle definieren



Haben Sie bei der Installation der Software die Standard-Installationspfade beibehalten? Falls Sie ein alternatives Verzeichnis angegeben haben, befindet sich die Administrator-Seite an einer anderen Position als http://127.0.0.1/CFIDE/Administrator/ index.cfm.



Haben Sie die Installation vollständig ausgeführt? Manchmal bewirken andere Programme auf Ihrem Computer – beispielsweise Anti-Virus-Software – einen Abbruch der Installation. Deaktivieren Sie das problemverursachende Programm und führen Sie die Installation von ColdFusion erneut aus.



Läuft Ihr Web-Server? Für die Ausführung von ColdFusion ist es unabdingbar, dass Ihre Web-Server-Software aktiviert ist.

Das ist alles. Der Setup ist relativ einfach – einfacher als die Installation eines durchschnittlichen Web-Browsers.

3.7

Der ColdFusion Administrator

Beginnend mit ColdFusion 3.0 hat Allaire berücksichtigt, dass Systemadministratoren nicht immer den Luxus genießen, an der Tastatur des von ihnen betreuten Servers zu sitzen. Aus diesem Grund hat Allaire eine intelligente Web-Oberfläche für das Konfigurations-Utility seines Programms geschaffen, den ColdFusion Administrator. Sie rufen die Administrator-Oberfläche auf, indem Sie auf ein Desktop-Icon klicken, mit der rechten Maustaste auf ein Icon der Taskleiste klicken (bei Windows 9x-Plattformen), oder indem Sie remote auf einen speziellen URL in einem beliebigen Web-Browser zugreifen. Vorausgesetzt, Sie haben bei der Installation von ColdFusion Server die Standardverzeichnisse beibehalten, ist der URL für den Zugriff auf den Administrator: http://your.hostname/CFIDE/Administrator/index.cfm

Sie sollten in Ihrem Browser ein Lesezeichen auf die ColdFusion Administrator-Seite setzen. Ich werde in den folgenden Kapiteln häufig darauf verweisen, wenn es um die Definition von Datenquellen geht, um die Einrichtung des Zugriffs auf das Mailsystem Ihres Servers oder das Debugging von Templates. Egal mit welcher Methode Sie den Administrator starten, bleibt das Ergebnis dasselbe. Der Standard-Web-Browser Ihres Systems zeigt den Anmeldebildschirm von ColdFusion Administrator an. Geben Sie das bei der Installation festgelegte Kennwort ein. Sie sehen mehrere Frames, die den Zugriff auf die Optionen von ColdFusion ermöglichen, wie in Abbildung 3.4 gezeigt.

78

Der ColdFusion Administrator

Abbildung 3.4: Die Hauptseite für die Konfiguration im ColdFusion Administrator.

Server-Optionen Dieser Abschnitt bietet Optionen, mit denen Sie die Leistung von ColdFusion beeinflussen. Sie brauchen die Standardeinstellungen vielleicht jetzt noch nicht anzupassen, aber wenn Ihre Site heftig frequentiert wird, können diese Server-Optionen helfen, Leistungsprobleme zu vermeiden. Unter anderem gibt es die folgenden Server-Optionen: 쐽

Versionsinformation



Methoden zur Definition und Konfiguration spezieller ColdFusion-Variablen



Kennwort- und Sicherheits-Setup



Verzeichniszuordnung Verzeichniszuordnungen definieren die Position Ihrer Schlüsselverzeichnisse auf Ihrem Web-Server, beispielsweise das Stammverzeichnis.

79

ColdFusion einrichten und eine Datenquelle definieren

3.8

Datenquellen – Optionen und Setup

Damit ColdFusion mit einer Datenbank kommunizieren kann, muss die Datenbankdatei im ColdFusion Administrator als Datenquelle konfiguriert werden. Zur Definition einer Datenquelle verschieben Sie Ihre Datenbank zunächst an eine Stelle auf Ihrer Festplatte, wo Sie sie eine Zeit lang beibehalten können. Es ist kein Problem, wenn Sie sie später verschieben, aber dann müssen Sie die Datenquelleninformation neu definieren. ColdFusion gibt ein Standardverzeichnis für Datenbanken vor, aber dies ist nur ein Vorschlag und Sie sind nicht gezwungen, Ihre Datenbank dort abzulegen. Einige Entwickler legen lieber alle ihre Datenbanken in einem Verzeichnis ab. Ich arbeite an den Sites mehrerer Kunden und lege die zugehörigen Datenbanken in den entsprechenden Ordnern für diese Kunden ab. Auf diese Weise stelle ich sicher, dass ich bei einer Sicherung der Kundenseiten auch die Datenbank berücksichtige. Nachdem Sie die Datenbank irgendwo abgelegt haben, starten Sie den ColdFusion Administrator mit dem speziellen URL: http://ihr.hostname/CFIDE/Administrator/index.cfm

Nachdem Sie sich angemeldet haben, klicken Sie unter »Datenquellen« auf den Link »ODBC«. Ihre Anzeige sieht etwa aus wie in Abbildung 3.5 dargestellt.

Abbildung 3.5: Die ODBC-Konfigurationsseite im ColdFusion Administrator.

80

Datenquellen – Optionen und Setup

ColdFusion stellt ein Eingabeformular bereit, in dem mehrere Parameter angefordert werden; die verschiedenen Optionen sind in den folgenden Abschnitten beschrieben.

Datenquellenname Geben Sie den Namen Ihrer Datenquelle in das Feld NAME DER DATENQUELLE ein. Sie können Ihrer Datenquelle einen beliebigen Namen geben, aber es ist immer sinnvoll, hier den Namen Ihrer Datenbank beizubehalten. Beispielsweise habe ich eine Datenquelle namens »elvis« für meine Datenbank elvis.mdb eingerichtet. Wie ich in Kapitel 4 beschreiben werde, verwende ich für die Benennung von Dateien normalerweise Kleinbuchstaben und schreibe statt Leerzeichen Unterstriche (_). Verwenden Sie bei der Benennung von Datenquellen nicht die Wörter »cookie« oder »registry«. Diese Wörter nutzt ColdFusion für die Ausführung anderer Funktionen.

ODBC-Treiber Im Pulldown-Feld ODBC-TREIBER wählen Sie den Treiber für die Software aus, mit der Sie eine Datenbank angelegt haben. Für meine Datei ist das ganz einfach – ich wähle einfach MICROSOFT ACCESS. Abhängig davon, ob Sie in der Vergangenheit andere ODBCApplikationen installiert haben, und auf welcher Plattform Sie ColdFusion ausführen, kann dieses Feld eine Vielzahl unterstützter Formate enthalten. Wenn im ODBC-Feld Ihre Datenbank-Software nicht aufgelistet ist, dann hat das normalerweise den Grund, dass auf Ihrem System kein ODBC-Treiber für Ihr Dateiformat installiert ist. Suchen Sie auf der Web-Site Ihres Herstellers nach Aktualisierungen oder lesen Sie auf der Site für Ihre System-Software nach, welche ODBC-Treiber unterstützt werden. Um eine völlig neue Datenquelle zu definieren, klicken Sie auf die Schaltfläche HINZUFÜEin erweiterter Dialog wird angezeigt, wie in Abbildung 3.6 gezeigt.

GEN.

Beschreibung Die Eingabe einer Beschreibung Ihrer Datenquelle im erweiterten Dialog ist optional. Wenn Sie jedoch vorhaben, mehrere Datenquellen einzurichten, kann eine kurze Beschreibung des Datenbankinhalts Ihnen helfen, herauszufinden, worum es sich bei den einzelnen Datenquellen handelt.

81

ColdFusion einrichten und eine Datenquelle definieren

Abbildung 3.6: Der erweiterte Dialog für die Definition einer neuen ColdFusionDatenquelle.

Datenbankdatei Im Feld DATEI DATENBANK geben Sie entweder den vollständigen Pfad zur Datenbankdatei ein (z.B. c:\eigene dokumente\Web\datenbanken\elvis.mdb), oder Sie suchen mit Hilfe der Schaltfläche SERVER DURCHSUCHEN die Datei in einem Standard-Navigationsfenster. Bei den meisten Applikation ist das ausreichend. In einigen Situationen müssen Sie aber auch folgendes definieren: 쐽

TIMEOUT FÜR DB-ANMELDUNGEN: Die Anzahl der Sekunden, wie lange ColdFusion wartet, wenn es versucht, sich bei einer Datenquelle anzumelden.



DB-VERBINDUNGEN BEGRENZEN: Die Anzahl der Anforderungen, die eine Datenquelle gleichzeitig verarbeiten kann.



COLDFUSION-ANMELDUNG: Der Benutzername und das Kennwort für den Zugriff auf eine Datenbank.



DB-VERBINDUNGEN AUFRECHTERHALTEN: Gibt an, ob ColdFusion bei jeder Anforderung eine direkte Verbindung zur Datenbank einrichtet, oder ob es die Datenbankinformation in einen Cache stellt, um so die Server-Leistung zu unterstützen.



ERLAUBTE SQL-OPERATIONEN: Eine Sicherheitsmaßnahme, die dafür sorgt, dass nur bestimmte SQL-Befehle für eine Datenbankdatei ausgeführt werden könne.

Klicken Sie auf ERSTELLEN, dann ist die Datenquelle eingerichtet.

82

Eine Datenquelle überprüfen

3.9

Eine Datenquelle überprüfen

Es ist immer sinnvoll, Datenquellen im ColdFusion Administrator zu überprüfen, nachdem man sie angelegt hat. Damit stellen Sie sicher, dass das Programm Ihre Datenbankdatei findet und darauf zugreifen kann. Außerdem schließen Sie damit aus, dass beim Erstellen von Templates Fehler durch eine unzulängliche Einrichtung der Datenquelle auftreten.

Abbildung 3.7: Im ColdFusion Administrator wird die Einrichtung einer Datenquelle überprüft.

Dazu gehen Sie auf die Hauptseite des Administrators zurück und wählen unter dem Link DATENQUELLEN den Eintrag DATENQUELLE ÜBERPRÜFEN. Die Seite sieht aus wie in Abbildung 3.7 gezeigt. In der Liste sehen Sie die Meldung über die erfolgreiche Prüfung der soeben definierten Datenquelle, »elvis«. Wenn Sie den Namen nicht sehen, ist etwas schief gelaufen. Gehen Sie zur Einrichtung der Datenquelle zurück und überprüfen Sie alle Einträge. Falls die neue Datenquelle in der Liste erscheint, markieren Sie sie und klicken auf ÜBERPRÜFEN. Wenn ColdFusion eine Verbindung zu der Datenbank herstellen kann, ist alles im grünen Bereich; andernfalls wird eine Fehlermeldung erzeugt. Einige der häufigsten Gründe für fehlerhafte Datenquellen sind unter anderem: 왘 왘

Fehlerhaft geschriebene Dateinamen. Die Datenbankdatei wurde nach dem Einrichten verschoben oder umbenannt.

83

ColdFusion einrichten und eine Datenquelle definieren



Die Datenbank ist durch ein Kennwort geschützt und ColdFusion hat den für den Zugriff erforderlichen Benutzernamen und das Kennwort nicht erhalten.



Der Typ der Datenbankdatei ist nicht mit dem im Setup-Dialog ausgewählten ODBC-Treiber kompatibel.



Die Datenbankdatei ist defekt oder anderweitig unleserlich.

Nachdem eine Datenquelle definiert und erfolgreich überprüft wurde, kann sie in ColdFusion genutzt werden. In ein paar Tagen werden Sie anfangen, Templates zu erzeugen, die Informationen aus Datenquellen laden. Hier werden wir jedoch beim Thema »Datenbanken« bleiben und einige Schlüsselkonzepte erklären.

Protokollierung In diesem Abschnitt geben Sie die E-Mail-Adresse eines Administrators an, der benachrichtigt werden soll, wenn ein ColdFusion-Prozess einen Fehler erzeugt. Außerdem geben Sie hier die Position einer allgemeinen Protokolldatei für ColdFusion an, sowie das E-MailProtokoll, das Aktionen verfolgt, wenn Meldungen mit Hilfe der Mail-Funktionen von ColdFusion geschickt werden. Protokolldateien sind Textdokumente, mit denen die Aktionen einer Applikation verfolgt werden. Sowohl ColdFusion als auch Ihre Web-Server-Software verwenden Protokolldateien, um Ereignisse wie etwa Web-Seiten-Besuche aufzuzeichnen, Fehler zu melden oder darauf hinzuweisen, wenn sich Benutzer für kennwortgeschützte Bereiche Ihrer Site anmelden oder diese verlassen.

Automatisierte Aufgaben In diesem Abschnitt finden Sie einen Setup-Dialog für die Definition und Einplanung automatisierter Aufgaben, wie beispielsweise Protokollzyklen und das Testen von Links. Die Aufgaben können so konfiguriert werden, dass sie beliebig lange und in beliebigen Abständen ausgeführt werden.

Erweiterungsseiten In diesem Abschnitt des Administrators werden Java-Applets, CFC-Tags und in C++ geschriebenen benutzerdefinierte Tags registriert. Ich werde in der dritten Woche noch auf die Erweiterungen zurückkommen.

84

Den ColdFusion-Dienst aktivieren und deaktivieren

Weitere Optionen Es gibt noch sehr viel mehr Administrator-Optionen, die Ihnen jetzt noch nichts sagen, die aber Bedeutung erlangen, sobald Sie die komplexeren Funktionen von ColdFusion nutzen. Unter anderem geht es dabei um folgendes: 쐽

Einrichten eines Standard-Mail-Servers für die Mailabwicklung.



Debugging-Optionen zum Testen Ihrer Templates.



Die Seite mit den Verity-Optionen zum Aufbau und zur Verwaltung von Suchindizes.

3.10 Den ColdFusion-Dienst aktivieren und deaktivieren Wenn Sie ColdFusion Server installieren, nimmt das Programm an, dass Sie es ständig ausführen wollen und konfiguriert Ihr System entsprechend. Wenn Sie Ihr System nach der Programminstallation neu starten, wird ColdFusion sofort ausgeführt, und zwar so lange, bis Sie seine Dienste manuell deaktivieren. Meistens gibt es gar keinen Grund, ColdFusion zu deaktivieren, aber es gibt Situationen, wo es erforderlich werden könnte. Möglicherweise aktualisieren Sie Ihren Web-Server oder die ColdFusion-Software irgendwann. Dafür ist es erforderlich, das Programm zu beenden. Klicken Sie dazu in der Programmgruppe von ColdFusion auf das Icon STARTEN/BEENDEN. Nachdem Sie sich mit dem Administratorkennwort angemeldet haben, sehen Sie einen Dialog wie in Abbildung 3.8 gezeigt in Ihrem Browser. Wenn Sie das Programm angehalten haben, um Aktualisierungen oder andere Änderungen am System vorzunehmen, ist anschließend möglicherweise ein Neustart des Systems erforderlich. Wenn Sie verhindern wollen, dass ColdFusion nach dem Neustart wieder ausgeführt wird, müssen Sie es deaktivieren, so dass der Dienst nicht automatisch wieder aufgenommen wird. Dieser Prozess ist von der von Ihnen verwendeten Plattform abhängig. Detaillierte Informationen zu Ihrem jeweiligen Betriebssystem finden Sie in Ihrer ColdFusion-Dokumentation.

85

ColdFusion einrichten und eine Datenquelle definieren

Abbildung 3.8: Starten/BeendenDienstprogramm von ColdFusion.

3.11 Zusammenfassung Abhängig von Ihren Bedürfnissen oder denen Ihrer Kunden führen Sie ColdFusion entweder auf einem eigenen Server aus, oder Sie nehmen die Dienste eines der vielen Web-Provider in Anspruch, die heute ColdFusion-Unterstützung als optionale Funktion anbieten. Egal welche Vorgehensweise Sie wählen, müssen Sie zu diesem Zeitpunkt Entscheidungen treffen. Wenn Sie Ihre Site bei einem externen Provider unterbringen, wollen Sie möglicherweise dennoch Ihre ColdFusion-Applikationen auf Ihrem eigenen, lokalen System überprüfen, bevor Sie sie hochladen. Das Spezialpaket ColdFusion Studio von Allaire ist ideal für diese Funktion geeignet, weil es eine Einzelplatzversion von ColdFusion Server bereitstellt. Bevor Sie einen Web-Provider für Ihre Arbeit mit ColdFusion auswählen, sollten Sie gründlich recherchieren. Fragen Sie die potentiellen Host-Anbieter, welche Version der Software sie unterstützen, wie viele Datenquellen sie erlauben, und was nötig ist, um eine Datenquelle zu aktualisieren. Vergleichen Sie die Ergebnisse mit Ihren Anforderungen. Wenn Sie vorhaben, ColdFusion auf Ihrem eigenen System auszuführen, müssen Sie zwischen Professional Edition und Enterprise Edition wählen, abhängig von den Anforderungen Ihrer Site und Ihrer Systemsoftware. Die Installation beider Varianten ist ganz einfach. Verwenden Sie am besten die Standardeinstellungen. Nachdem die Software installiert ist, erfolgen Änderungen für den Betrieb von ColdFusion über den Administrator, auf den Sie lokal oder remote über eine spezielle Web-Seite zugreifen.

86

Workshop

Damit ColdFusion eine Datenbank erkennt, muss die Datei im ColdFusion Administrator als Datenquelle definiert werden. Die Einrichtung von Datenquellen gibt einen Namen für die Verbindung vor, teilt ColdFusion mit, wo sich die Datenbankdatei befindet, und gibt an, welcher ODBC-Treiber verwendet werden soll, abhängig von dem Make der Datenbanksoftware, die die Datei erzeugt hat. Nachdem Sie eine Datenquelle definiert haben, bietet der Administrator die Möglichkeit der Überprüfung, so dass Sie schnell erkennen, ob ColdFusion Zugriff auf die Datenbank hat. In Kapitel 4 werde ich das Schlüsselelement jeder ColdFusion-Applikation genauer betrachten – die Datenbank.

3.12 Workshop F&A F

Wird ColdFusion irgendwann direkte Unterstützung meiner Server-Software, Server X, Y oder Z bieten? A

F

Warum ist die ColdFusion Enterprise Edition so viel teurer als die Professional Edition? Ist sie wirklich so viel besser? A

F

Mit jedem neuen Release von ColdFusion hat Allaire die Anzahl der direkt unterstützten Web-Server-APIs erhöht. Die Web-Site des Unternehmens ist die beste Informationsquelle für aktuelle Neuigkeiten zu zukünftigen Entwicklungen. Falls gerade Ihr Server nicht unterstützt wird, wird es auch nichts schaden, sich mit Allaire in Verbindung zu setzen und die Lobby für Ihren Server ein bisschen zu stärken.

Die Enterprise Edition bietet einige Profi-Funktionen wie beispielsweise CORBAUnterstützung für das grundlegende ColdFusion-Paket. Diese komplexen Funktionen können in diesem Buch nicht beschrieben werden, aber man kann davon ausgehen, dass die meisten Benutzer auch mit der weniger teueren Professional Edition auskommen. Sie können später jederzeit eine Aktualisierung vornehmen, wenn Sie feststellen, dass Sie die von der Enterprise Edition angebotenen Funktionen unbedingt brauchen.

Kann ich meinen ColdFusion Server wirklich von jedem beliebigen Computer aus konfigurieren? A

Ja. Ab Version 3.0 erlaubt die neue ColdFusion Administrator-Oberfläche, Konfigurationsänderungen von jeder an das Web angeschlossenen Maschine aus vorzunehmen. Mit Hilfe dieser Schnittstelle können Sie administrative Aufgaben erledi-

87

ColdFusion einrichten und eine Datenquelle definieren

gen, wie beispielsweise die zyklische Weiterschaltung von Protokolldateien, das Hinzufügen oder Entfernen von Datenquellen oder das Starten und Beenden des ColdFusion-Diensts.

Quiz 1. Nennen Sie mindestens drei Fragen, die Sie einem potentiellen ColdFusion WebProvider stellen sollten. 2. Was ist ColdFusion Studio und wie unterscheidet es sich von ColdFusion Server? 3. Welche zwei Varianten von ColdFusion Server gibt es? Wie unterscheiden sie sich? 4. Welche Web-Server bedürfen besonderer Aufmerksamkeit, wenn Sie ColdFusion Server installieren? 5. Nennen Sie zwei Methoden, den ColdFusion Administrator zu starten. 6. Beschreiben Sie die Einrichtung einer Datenbank als ColdFusion-Datenquelle. 7. Geben Sie einen Grund an, warum Sie den ColdFusion-Dienst deaktivieren sollten, und beschreiben Sie, wie das geht.

Antworten 1. Welche Version von ColdFusion verwendet der Provider? Wie viele Datenquellen werden unterstützt? Wie werden Datenquellen aktualisiert? Wo werden die Datenbanken abgelegt? 2. ColdFusion Studio ist ein spezielles Programm für ColdFusion-Entwickler. Es beinhaltet eine semi-grafische Oberfläche für den Aufbau von Template-Seiten sowie eine Einzelplatzversion von ColdFusion Server. Es kostet nur einen Bruchteil des ServerPakets, kann aber nicht genutzt werden, um anderen Anwendern im Web Seiten bereitzustellen. 3. ColdFusion Server Professional und ColdFusion Server Enterprise. Sie unterscheiden sich hinsichtlich der unterstützten Web-Plattformen. Die Enterprise-Version beinhaltet außerdem zusätzliche Funktionen für die Sicherung von Sites, auf denen E-Kommerz stattfindet. 4. Auf Windows-Plattformen müssen einige Releases des Apache-Servers manuell für ColdFusion konfiguriert werden. Auf Solaris-Plattformen sollten Apache- und Netscape-Benutzer ebenfalls in ihrer Dokumentation nachlesen.

88

Workshop

5. Der Administrator kann von einer Web-Seite aus (alle Plattformen), aus dem StartMenü von Windows (Windows NT und 9x) oder aus der Systemleiste (nur Windows 9x) gestartet werden. 6. Öffnen Sie ColdFusion Administrator, wählen Sie unter DATENQUELLEN den Link ODBC, gehen Sie zur Datenbankdatei und wählen Sie die Datenquelle aus. 7. Sie müssen den Dienst möglicherweise deaktivieren, wenn Sie Ihre Web-Server-Software aktualisieren oder andere wichtige Änderungen an Ihrem System vornehmen. Um den Dienst zu starten und zu stoppen, verwenden Sie das Utility STARTEN/BEENDEN im ColdFusion Administrator.

Übungen 1. Wenn Sie noch keine Kopie von ColdFusion besitzen, laden Sie die Demo-Version von ColdFusion Server von der Web-Site von Allaire herunter und installieren sie auf Ihrem lokalen Computer. 2. Wenn Sie vorhaben, Ihre Site extern unterzubringen, legen Sie eine Liste potentieller Web-Provider an und stellen Sie ihnen die in diesem Kapitel erarbeiteten Fragen. Zeichnen Sie die Antworten auf und vergleichen Sie sie mit den Preisen für das Hosting. 3. Richten Sie eine Beispiel-Datenquelle für eine auf Ihrem System existierende Datenbank ein. Überprüfen Sie sie mit Hilfe des ColdFusion Administrators.

89

Aufbau einer Datenbank und Organisation der Daten

4

Aufbau einer Datenbank und Organisation der Daten

Nachdem ich die Datenbankkonzepte vorgestellt habe, wollen wir uns über die Realität Gedanken machen, beispielsweise darüber, welche Informationen Sie mit der Welt teilen wollen. Wenn Sie eine Datenbank für die Verwendung mit ColdFusion oder einer anderen Web-Applikation entwerfen, sollten Sie vorausschauend planen und versuchen, die Dateigröße minimal zu halten. Kleinere, gut organisierte Datenbanken bedeuten kürzere Suchzeiten, glücklichere Benutzer und weniger Probleme, wenn Änderungen oder Aktualisierungen anfallen. In diesem Kapitel geht es um die folgenden Dinge: 쐽

Von ColdFusion unterstützte Datenbanksoftware.



ColdFusion als Schnittstelle zwischen Datenbank und Web.



Anlegen einer Datenzuordnung.



Datenbeziehungen



Entwurf einer Beispieldatenbank.



Anlegen von Datenbeziehungen.



Sicherheitsaspekte für Tabellen und Datenbanken.



Füllen einer Datenbank.

4.1

Von ColdFusion unterstützte Datenbanksoftware

ColdFusion unterstützt zahlreiche Datenbankpakete. Selbst wenn Sie keines der unten aufgeführten Pakete einsetzen, kann die von Ihnen verwendete Datenbanksoftware möglicherweise Daten in einem der gebräuchlichen Dateiformate exportieren, unter anderem im dBASE-Format oder als reinen Text. ColdFusion unterstützt die folgenden Datenbankdateitypen auf Windows-Plattformen: 쐽

Microsoft SQL Server



Microsoft Access



Microsoft FoxPro



Oracle



Borland Paradox



Borland dBASE



Microsoft Excel



Clipper

92

ColdFusion als Schnittstelle zwischen Datenbank und Web

Auf SPARC Solaris-Systemen unterstützt sie die folgenden Datenbankdateitypen: 쐽

DB2



dBASE



FoxPro



Informix



OpenIngres



Oracle



Sybase SQL Server



Sybase System 10 und 11

4.2

ColdFusion als Schnittstelle zwischen Datenbank und Web

Im Internet-Jargon wird ColdFusion häufig auch als Schnittstelle zwischen Datenbank und Web bezeichnet. Solche Schnittstellen erlauben den Entwicklern, eine Datenbank mit einer Web-Site zu »verknüpfen« und einen, einige oder alle Datensätze als StandardHTML-Seiten anzuzeigen, wie in Kapitel 1 und 2 bereits beschrieben. ColdFusion ist keineswegs die einzige Applikation dieser Art. Verschiedene Programme bieten ähnliche Funktionen an, aber nur wenige können mit ColdFusion konkurrieren, was Leistungsfähigkeit und Einfachheit betrifft. Darüber hinaus kann ColdFusion nicht nur einfache Datenbankaufgaben erledigen, weil es Werkzeuge einführt, die den Entwicklern erlauben, vollständige Web-basierte Applikationen zu erstellen. Das Programm fängt Web-Anforderungen vom Browser eines Benutzers auf. Wird beim Web-Server eine .cfm-Datei statt einer .html-Datei angefordert, mit der Web-Server in der Regel arbeiten, übernimmt es die Kontrolle. Abbildung 4.1 zeigt, wie ColdFusion sich in einen existierenden Web-Server integriert. Wenn ColdFusion eine Anforderung auffängt, kann es dafür die unterschiedlichsten Aufgabenstellungen erledigen. Es beherrscht viele der für CGI-Applikationen (Common Gateway Interface) gebräuchlichen Funktionen, ebenso wie die Durchführung von Datenbanksuchen. Als »Schnittstelle« stellt ColdFusion eine aktive Verknüpfung zwischen Ihrem Web-Server und einer Datenbank bereit, aber die eigentliche Verknüpfung wird von der ODBC (Object Database Connectivity Source) Ihres Systems übernommen.

93

Aufbau einer Datenbank und Organisation der Daten

HTTP-Anfrage

CF-Seite

Datenbankserver Web Browser

Dateiserver

Internet oder Intranet

Web Server

E-mail-Server verteilte Objekte ColdFusion Server

Web-Seite

Client

Netzwerk

andere Systeme im Unternehmen

Web-Seite Server

Abbildung 4.1: Der Datenfluss von einer BrowserAnforderung zur Ausgabe.

ODBC Ich habe ODBC bereits in Kapitel 2 kurz vorgestellt, aber wir wollen das Ganze noch einen Schritt weiter führen. ODBC ist ein API (Application Programming Interface), das den Programmierern die Möglichkeit gibt, Applikationen (wie ColdFusion) zu schreiben, die direkt mit Datenbanken kommunizieren. Stellen Sie sich ODBC einfach als Vermittler zwischen Ihrer Applikation und Ihrer Datenbank vor. Wenn wir ODBC-kompatible Software ausführen, wie beispielsweise Textverarbeitungen, Tabellenkalkulationen, ColdFusion usw., erlaubt diese Vermittlerfunktion unserer Applikation, mittels standardisierter Befehle mit unserer Datenbank zu kommunizieren. Ohne diesen Vermittler müsste jede datenbankfreundliche Applikation die Sprachen jedes Datenbankpakets auf dem Markt kennen. Bei der Installation von ODBC auf unserem System werden verschiedene Treiber installiert, die mit den unterschiedlichsten gebräuchlichen Datenbankapplikationen kompatibel sind. Ein Treiber ist Software, die Ihrem System ermöglicht, mit Hardware oder anderer Software zu kommunizieren. Ihr Betriebssystem beispielsweise kommuniziert mit Hilfe von Treibern mit Ihrer Grafikkarte, Ihrer Soundkarte und Ihrem Drucker. Andere Programme, die mit unserer Datenbank kommunizieren, nutzen dazu den Treiber, der im Wesentlichen Programmbefehle in eine Sprache übersetzt, die die Datenbank versteht. Standardmäßig unterstützen die meisten ODBC-kompatiblen Programme die gebräuchlichsten Datenbankformate, auch ColdFusion.

94

Anlegen einer Datenzuordnung

ODBC-Treiber sind spezifisch für die jeweilige Version der Software und für das Anlegen der Datenbank. Einige Treiber, wie beispielsweise für Microsoft-Produkte, Oracle und Sybex, erweitern die Möglichkeiten, mit einer Datenbank zu kommunizieren, weil sie spezielle Funktionen unterstützen. Unter anderem handelt es sich dabei um spezielle SQLBefehle und Textformatierung. Lesen Sie in der Dokumentation Ihrer Datenbanksoftware nach, welche Funktionen sie unterstützt.

4.3

Anlegen einer Datenzuordnung

Unabhängig davon, wie komplex Ihre Daten sind, ist es immer sinnvoll, ein Schema anzulegen, bevor Sie anfangen, eine Datenbank auf Ihrem Computer anzulegen. Ein Schema ist eine visuelle Darstellung einer Datenbank, ein Plan, der die Namen aller Tabellen und Felder aufzeigt.

Für ein Beispielschema können Sie Papier und Bleistift zur Hand nehmen und einen Plan zeichnen, der die einzelnen Tabellen sowie ihr Verhältnis zueinander aufzeigt, und definiert, wie sie Eingaben erhalten. Setzen Sie sich an Ihren größten Tisch und holen Sie sich das größte Blatt Papier, das Sie finden können. Einige Unternehmen verwenden spezielle Schemenformulare für diesen Zweck, während wir gewöhnliches Volk dazu einfach ganz normales Papier benutzen. Mit einem Bleistift zu schreiben, erscheint Ihnen vielleicht seltsam, nachdem Sie nun Stunden an der Tastatur verbracht haben, aber das ist wie mit dem Radfahren – man verlernt es nicht. Legen Sie zuerst eine Liste aller Kategorien an, die Sie für Ihre Daten brauchen. Schreiben Sie einen kurzen Satz zur Beschreibung dazu. In diesem Beispiel werden wir uns vorübergehend von der Elvis-Datenbank trennen, weil der King hier unsere Bedürfnisse nicht befriedigen kann. Nehmen wir statt dessen an, Sie wollen ein Web-Versandhaus gründen, das Nudeln herstellt und verkauft, die wie die Profile bekannter Fernsehpolizisten geformt sind. Ich denke an Jack Lord Rigatoni, T.J. Hooker Fettuccini und vielleicht kleine Ravioli, die aussehen wie Ponch und John von ChiPs. Die Datenbankkategorien sind in Tabelle 4.1 gezeigt.

95

Aufbau einer Datenbank und Organisation der Daten

Datenbankkategorie

was sie enthält

Produkt (Product)

Produkte, Preise und Beschreibungen

Kunde (Customer)

frühere Web-Kunden und diejenigen, die sich in unsere E-Mail-Liste eingetragen haben

Aufträge (Orders)

aktuelle und erledigte Aufträge

Lieferanten (Suppliers)

woher wir unser Rohmaterial beziehen

R

Händler, die unsere Produkte führen

Tabelle 4.1: Datenbankkategorien für TV Cop Pasta Inc.

Wenn Sie Ihre Daten in Kategorien einteilen, denken Sie am besten darüber nach, wie Sie (oder andere) an einem ganz normalen Arbeitstag auf die Daten zugreifen wollen. Wenn Sie beispielsweise eine Site für ein Unternehmen entwerfen, das eine Versandabteilung, eine Entwicklungsabteilung und eine Verkaufsabteilung hat, sollten Sie jede dieser Abteilungen separat betrachten. Der Versand hat vermutlich hauptsächlich mit Produktdaten zu tun, der Verkauf mit den Kundendaten usw. Jetzt wollen wir kreativ werden. Für jede Datenkategorie zeichnen wir ein großes Rechteck, wie in Abbildung 4.2 gezeigt.

Kunden

Aufträge

Produkte

Lieferanten

Wiederverkäufer

Abbildung 4.2: Beispiel für ein Datenbankschema, wobei jede Datenkategorie in einem Feld angeordnet wird.

Statt der Rechtecke können Sie auch Kreise verwenden, aber vermeiden Sie phantasievollere Umrisse wie Herzchen und Sterne, wenn Sie es mit einem sehr konservativen Kunden zu tun haben. Jedes Rechteck stellt eine Tabelle in der zu erstellenden Datenbank dar.

96

Anlegen einer Datenzuordnung

Tragen Sie die Namen der verschiedenen Tabellen in die Rechtecke ein. Sie befinden sich noch in der Planungsphase, deshalb brauchen Sie sich hier keine größeren Gedanken darüber zu machen, dass alles peinlich genau aufgezeichnet wird. Sie können später immer noch Änderungen vornehmen – schließlich ist das der Sinn und Zweck eines Schemas. Anschließend zeigen Sie auf, wie die einzelnen Tabellen ihre Eingaben erhalten sollen. Beispielsweise können die Daten für die Tabellen Produkte, Lieferanten und Händler von den Angestellten Ihres Unternehmens eingegeben werden, während die Kundendaten aus dem Web kommen, und die Aufträge werden von der Verkaufsabteilung erzeugt. Zeichnen Sie große Pfeilumrisse, die die Eingaben darstellen, wie in Abbildung 4.3 gezeigt.

Kunden

Web

Verkauf

Personal

Aufträge

Produkte

Lieferanten

Wiederverkäufer

Personal

Personal

Abbildung 4.3: Der Plan kennzeichnet Dateneingaben durch Pfeile. Beschriften Sie die Pfeile mit den Methoden, wie die Eingaben zu erwarten sind.

Dank des Plans sehen Sie bereits Bereiche, wo Daten dupliziert geführt werden, und genau das wollen Sie in dieser Übung vermeiden. Namen und Adressen in der Auftragstabelle sind redundant zu der Auflistung in der Kundentabelle. Sie brauchen also eine Verknüpfung von Daten in einer Tabelle mit einer anderen Tabelle.

97

Aufbau einer Datenbank und Organisation der Daten

4.4

Einführung von Datenbeziehungen

Und hier erfahren Sie die eigentliche Schönheit relationaler Datenbanken. Statt die Kundeninformation für jeden meiner Aufträge eingeben zu müssen, und dann noch einmal, wenn ich der Kundentabelle neue Einträge hinzufüge, kann ich die Daten über mehrere Tabellen hinweg verknüpfen (man spricht von einem Link). Links oder Verknüpfungen zwischen Daten bedeuten, dass die gleichen Daten von zwei oder mehr Tabellen genutzt werden. Wenn Sie neue Daten eingeben oder existierende Daten aktualisieren, werden diese Änderungen automatisch in allen Tabellen reflektiert. Abbildung 4.4 zeigt die Beziehungen auf unserem Plan.

Kunden

Web Name Adresse

Telefon

Verkauf

Personal

Aufträge Lieferung an Bestelltes Produkt Kontostand

Lieferanten Name Adresse Telefon

Produkte

Name Verkaufspreis Wiederverkäuferpreis Lagerbestand

Wiederverkäufer Name Adresse Telefon

Personal

Personal

Abbildung 4.4: Die Linien auf dem Plan zeigen, wo Daten zwischen Tabellen verknüpft werden.

Sie haben sich bereits ein paar Stunden Arbeit erspart, die Sie beliebig verbringen können. Wenn wir unsere Templates codieren, werden Sie sehen, dass es ColdFusion egal ist, ob eine Zelle wirklich Daten enthält, oder aber einen Link auf Daten, die sich irgendwo anders in der Datenbank befinden. Es betrachtet den Inhalt einer Zelle nur als Text, unabhängig davon, wo er herkommt.

98

Entwurf der Datenbank

Überlegen Sie, wo Sie an anderen Stellen des Plans Daten verknüpfen und damit Eingabezeit einsparen können. Die Tabelle AUFTRÄGE in Abbildung 4.5 enthält das Feld BESTELLTES PRODUKT, das ganz einfach aus der Produkttabelle übernommen werden kann. Der Datenplan beginnt langsam wie ein Schaltplan eines alten 73er Plymouth Fury auszusehen, aber wir verfügen dadurch über eine vollständige visuelle Darstellung Ihrer Daten, auf die Sie immer wieder zurückgreifen können. Wenn Sie in die eigentliche Entwurfsphase eintreten, wissen Sie bereits, wie die einzelnen Tabellen heißen sollen, welche Felder sie enthalten, von wo sie ihre Eingaben erhalten und welche Tabellen Datenverknüpfungen verwenden.

Kunden

Web Name Adresse

Telefon

Verkauf

Personal

Aufträge Lieferung an Bestelltes Produkt Kontostand

Lieferanten Name Adresse Telefon

Wiederverkäufer Name Adresse Telefon

Personal

4.5

Produkte

Name Verkaufspreis Wiederverkäuferpreis Lagerbestand

Personal

Abbildung 4.5: Das Feld »Bestelltes Produkt« kann Informationen aus der Produkttabelle übernehmen.

Entwurf der Datenbank

Jetzt kommen wir wieder in vertrautere Gefilde – in den Schreibtischstuhl – und beginnen mit dem Entwurf der Datenbank. Ich werde hier nicht zu sehr ins Detail gehen, weil Ihre Vorgehensweise von dem von Ihnen eingesetzten Datenbankprodukt abhängig ist. Jeder Softwarehersteller hat eigene Methoden, Tabellen anzulegen und Felder zu definieren, aber die meisten sind äußerst einfach. In diesem Beispiel verwende ich das gebräuchliche Paket Microsoft Access. Wenn Sie ein anderes Paket einsetzen und Probleme bekommen, sollten Sie in der Dokumentation für Ihr Programm nachlesen.

99

Aufbau einer Datenbank und Organisation der Daten

Zuerst weisen Sie Ihr Datenbankpaket an, eine neue Datei anzulegen. Um die Datenbankdatei zu erstellen, öffnen Sie Microsoft Access und wählen DATEI / NEU. Access bietet mehrere Schablonen zur Auswahl an; machen Sie das Ganze so einfach wie möglich und wählen Sie den Standard, LEERE DATENBANK. Access fordert Sie auf, einen Dateinamen anzugeben – verwenden Sie tv_cop_pasta_inc.mdb. Die Dateinamenerweiterung ist für Microsoft Access spezifisch – andere Hersteller verwenden andere Dateinamenerweiterungen. Beim Entwurf einer Datenbank sollten Sie sich an eine Konvention für die Benennung von Dateien, Tabellen und Feldern halten. Ich verwende dafür immer Kleinbuchstaben und ersetze Leerzeichen durch einen Unterstrich (_). Durch die konsequente Verwendung von Kleinbuchstaben brauche ich nie darüber nachzudenken, ob ich einen Buchstaben vielleicht groß schreiben soll, wenn ich in einem ColdFusion-Template auf meine Datenbank zugreife. Die Verwendung von Unterstrichen ist nicht unbedingt nötig – neuere Versionen von ColdFusion erkennen auch Leerzeichen –, aber dadurch stelle ich sicher, dass meine Datenbank auf jeden Windows- oder UNIX-basierten Server portiert werden kann. Mit dem Datenplan als Unterstützung legen Sie im nächsten Schritt die Tabellen an. Klicken Sie in Microsoft Access im Dialogfeld TABELLE auf die Schaltfläche NEU. Beim Anlegen der einzelnen Tabellen bietet das Programm verschiedene Ansichten der neuen Tabellen. Eine Tabellenansicht gibt an, wie Sie Ihre Daten betrachten. In Microsoft gibt es zwei Ansichten: Entwurfsansicht und Datenblattansicht.

In der Datenblattansicht von Access wird eine neue Tabelle in einem Tabellenraster angezeigt, wobei die Felder horizontal oben am Bildschirm beschriftet und die Zeilen vertikal dargestellt werden. Wenn Sie bereits mit Tabellenkalkulationen gearbeitet haben, wird Ihnen diese Ansicht sehr vertraut vorkommen. Die Entwurfsansicht zeigt die eigentlichen Daten nicht an, sondern listet nur die Felder auf, so dass es einfacher wird, neue Tabellenfelder zu definieren. Wir werden gleich noch einmal auf diese Ansicht zurückkommen. Weil Sie jetzt nur Tabellen erstellen und noch keine Daten eingeben, verwenden Sie einfach die Datenblattansicht, die ein leeres Raster erzeugt. Beachten Sie, dass Access (wie die meisten Datenbankapplikationen) beim Anlegen einer neuen Tabelle die Option anbietet, Daten zu importieren. Wenn Sie eine existierende Tabelle oder Textdatei aus einer anderen Applikation haben, dann ermöglicht Ihnen diese Funktion, existierende Information in die aufzubauende Datenbank aufzunehmen.

100

Entwurf der Datenbank

Hier legen Sie jedoch nur Tabellen an und wollen sich nicht mit dem Inhalt beschäftigen. Klicken Sie für jede neue Tabelle auf die Schaltfläche SCHLIESSEN. Access fragt Sie, ob Sie einen Primärschlüssel für die Tabelle anlegen wollen. Antworten Sie mit »Ja« (ich werde gleich erklären, warum). Jetzt fordert Access Sie auf, einen Namen für die Tabelle anzugeben. Verwenden Sie auch hier die oben beschriebene Konvention: Kleinbuchstaben und Unterstriche. Wiederholen Sie diesen Prozess für die folgenden Tabellennamen: 쐽

Produkte



Kunden



Aufträge



Lieferanten



Händler Einige Datenbankprogramme stellen Platz für eine kurze Beschreibung der erzeugten Tabelle bereit. Es ist nie verkehrt, diese Möglichkeit zu nutzen, falls später jemand anderer mit Ihrer Datenbanktabelle arbeitet. Eine gute Beschreibung erspart Ihnen viele Telefonanrufe.

Felder definieren Jetzt öffnen Sie eine Tabelle und richten die Felder ein. Nutzen Sie auch hier wieder Ihren praktischen Plan. Es gibt mehrere Möglichkeiten. Die einfachste ist es, auf die einzelnen Feldtitel zu doppelklicken (FELD1, FELD2 usw.) und sie entsprechend umzubenennen. Auch hier empfehle ich Ihnen, nur Kleinbuchstaben zu verwenden und Leerzeichen durch Unterstriche zu ersetzen. Diese Methode ist praktisch, wenn Sie nur ein paar wenige Felder einrichten wollen, aber wenn Sie 10 oder 20 Felder haben, ist sie relativ ineffizient. Wenn Sie nicht gerade einen Bildschirm in der Größe Ihres Garagentors haben, sehen Sie nicht alle definierten Felder, ohne in der Datenbank horizontal weiterzublättern. Das horizontale Blättern ist lästig und macht schneller mürbe als ein schwerhöriger Nachbar, der nur eine einzige CD besitzt. Insbesondere in Datenbankapplikationen bedeutet die horizontale Bewegung, dass Sie nie eine ganze Zeile mit Informationen auf dem Bildschirm sehen. Vermeiden Sie es, wo immer möglich. Um sich besser orientieren zu können, verwenden Sie jetzt die Entwurfsansicht von Microsoft Access. Andere Pakete bieten vermutlich ähnliche Funktionen. Die Entwurfsansicht ist

101

Aufbau einer Datenbank und Organisation der Daten

ein praktisches Werkzeug für die Definition von Feldnamen, weil sie mehrere Namen gleichzeitig anzeigt. In dieser Ansicht sehen Sie, ob Sie einen Feldnamen bereits eingegeben haben und welchen Datentyp das Feld enthält. Abbildung 4.6 zeigt die Entwurfsansicht einer der Beispieltabellen. Beachten Sie, dass in Abbildung 4.6 jeder Eintrag einen Feldnamen, einen Datentyp sowie Platz für eine optionale Beschreibung aufweist. In dieser Ansicht können Sie ganz schnell viele Felder definieren. Nachdem Sie die Felder eingegeben haben, gehen Sie mit Hilfe des Pulldown-Menüs ANSICHT wieder zur Datenblattansicht zurück. Sie sehen die Tabelle im normalen Format, wie in Abbildung 4.7 gezeigt.

Abbildung 4.6: Die Tabelle aus Abbildung 4.6 in der Datenblattansicht.

Datentypen Jetzt kehren wir noch einmal zur Entwurfsansicht zurück. Jedes von Ihnen definierte Feld hat einen bestimmten Datentyp. Mit dem Datentyp teilen Sie Ihrem Datenbankprogramm mit, welche Art Information ein Feld enthalten wird. Beispielsweise legt der Datentyp JA/ NEIN in Access ein einfaches Kontrollkästchen in dem Feld an. Der Datentyp WÄHRUNG zeigt automatisch »DM« und zwei Dezimalstellen an, wenn Sie eine Zahl eingeben. Der Datentyp TEXT (für Benutzer von MSQL Server CHAR) erlaubt die Eingabe beliebiger Zeichenketten. Andere Datenbankprogramme bieten andere Datentypen an, aber die grundlegenden Datentypen werden von allen unterstützt.

102

Entwurf der Datenbank

Abbildung 4.7: Eine Beispieltabelle in der Entwurfsansicht, nachdem die Felder definiert wurden.

Die Verwendung der richtigen Datenbanktypen für die einzelnen Felder ist wesentlich für einen guten Datenbankentwurf – sie hilft, Suchen zu beschleunigen, bewahrt die Integrität Ihrer Daten und hilft Ihnen zu überprüfen, ob der richtige Datentyp in ein Feld eingetragen wird (z.B. ein Datumswert, eine Zahl, eine Währungsangabe usw.). Bestimmte Datentypen stellen jedoch ein Problem für neue ColdFusion-Benutzer dar. Angenommen, ich habe in Microsoft Access eine Tabelle angelegt und eines der Felder auf den Datumstyp gesetzt. Jetzt könnte ich ein Datum eingeben, zu dem ein Produkt bestellt wurde, beispielsweise »1. Januar 2001«. Wenn ich später ein Template anlege, um dieses Datum anzuzeigen, sehe ich das Datum so formatiert, wie Microsoft Access es intern ablegt, nämlich: 2001-01-01 00:00:00

Wenn ich ein Feld auf den Währungstyp setze und »25.00 DM« eingebe, erhalte ich beispielsweise bei der Anzeige meinem ColdFusion-Template folgendes: 25.0000

So legt meine Datenbanksoftware Währungswerte ab. In beiden Fällen stellt meine Datenbankapplikation mehr Informationen bereit, als ich einem Web-Benutzer vielleicht zeigen will – der Datumstyp fügt Stunden, Minuten und Sekunden ein, und der Währungstyp erweitert meinen Geldwert auf vier Dezimalstellen. In Kapitel 14 erfahren Sie, wie Sie diese zusätzliche Information zu Ihrem Vorteil nutzen und steuern, wie sie dem Benutzer angezeigt wird. Am besten bleiben Sie in den Beispielen für Woche 1 und 2 bei den Datentypen TEXT und MEMO. Zurück zu unserem Tabellenentwurf. Access gibt standardmäßig den Datentyp TEXT vor. Dieser Datentyp erlaubt die Eingabe von bis zu 255 Zeichen; wenn Sie mehr Platz brauchen, verwenden Sie den Datentyp MEMO, der bis zu 65000 Zeichen unterstützt. Beide Datentypen speichern den Text so, wie er eingegeben wird.

103

Aufbau einer Datenbank und Organisation der Daten

Hier lassen wir die Felder aus, die Links auf Daten in meinem Plan enthalten. Zuvor müssen Sie festlegen, wie sie verknüpft werden – d.h. welche Tabelle die tatsächlichen Daten enthalten soll, und welche Tabellen einfach Links auf andere Tabellen enthalten. Jetzt soll es um Schlüssel und die Definition von Beziehungen gehen.

Die Bedeutung von Schlüsseln Um die Verwendung eines Schlüsselfelds zu verstehen, betrachten Sie die Auftragstabelle in Abbildung 4.8. Sie enthält bereits Aufträge.

Abbildung 4.8: Die Auftragstabelle, deren Felder bereits definiert sind und Daten enthalten.

Betrachten Sie die zweite und die dritte Zeile. Beide Aufträge stammen von demselben Auftraggeber, Nick Danger; er hat nämlich genau dasselbe am selben Tag zweimal bestellt. Wenn ich über ein ColdFusion-Template auf diese Tabelle zugreife, wie erkennt dann das Programm, dass es sich um zwei separate Aufträge handelt, und nicht um einen einzelnen, der versehentlich zweimal eingegeben wurde? Um das zu erkennen, verwendet das Programm den Primärschlüssel, den ich beim Anlegen der Tabelle definiert habe. Das ist die Zahl, die Sie in der linken Spalte der Abbildung sehen. In Abbildung 4.8 erscheint sie als ID-Feld, das Microsoft Access automatisch füllt, wenn ein Benutzer eine Datenzeile einträgt. Access gibt diesem Feld standardmäßig den Namen ID. Ein Primärschlüssel ist ein Wert in einem Feld, der einen Datensatz eindeutig kennzeichnet.

Selbst wenn alle anderen Felder dieselben Daten wie ein anderer Datensatz enthalten, erkennen Sie am Schlüssel immer, dass Sie eindeutige Daten vor sich haben. Die Kundentabelle hat ebenfalls einen eigenen Primärschlüssel, wie in Abbildung 4.9 gezeigt. Für ColdFusion-Entwickler stellen Schlüsselfelder außerdem eine sehr effiziente Methode dar, Datensätze zu kennzeichnen. Wenn Ihre ColdFusion-Template-Abfragen das Programm auffordern, nach dem Datensatz zu suchen, der als Produkt Jack Lord Rigatoni ent-

104

Datenbeziehungen einrichten

hält, durchläuft ColdFusion alle Textzellen, bis es eine genaue Übereinstimmung mit dieser Zeichenkette findet. Wenn Sie es statt dessen anweisen, den Datensatz mit der ID »10« (dem Primärschlüssel) zu suchen, weiß es genau, wo es suchen muss und gibt die angeforderten Daten in einem Bruchteil der Zeit zurück, die für die andere Suche aufgewendet werden muss. Abbildung 4.9: Die Kundentabelle verwendet einen eigenen Primärschlüssel, der von Access ebenfalls mit dem Titel ID bezeichnet wird.

4.6

Datenbeziehungen einrichten

Jetzt wenden wir uns den so wichtigen Datenbeziehungen zu. Auf unserem Plan haben Sie bereits mögliche Beziehungen gekennzeichnet, oder Felder, die von mehreren Tabellen gemeinsam genutzt werden könnten. Das Thema Datenbeziehungen ist sehr umfangreich – und kann im Rahmen dieses Buchs nicht erschöpfend behandelt werden. Unterschiedliche Datenbankapplikationen unterstützen unterschiedliche Methoden zum Anlegen von Beziehungen, und einige Berater haben Karriere damit gemacht, eine einzige dieser Methoden erschöpfend zu beherrschen. In diesem Buch werde ich auf eine einfache Beziehung eingehen – das Listenfeld – und hoffe, dass Sie diese Beschreibung des Konzepts inspiriert, so dass Sie auch nach weiteren Möglichkeiten suchen, Tabellendaten für die gemeinsame Nutzung bereitzustellen. Ein Ziel bei der gemeinsamen Nutzung von Daten ist es, die Zeit zu reduzieren, die Sie mit der Eingabe von Daten in Ihre Datenbank verbringen. Wenn Sie beispielsweise ein neues Produkt in die Produkttabelle eingegeben haben, wäre es zeitsparend, den Produktnamen in allen anderen Tabellen einfach bereitzustellen, wie beispielsweise in der Auftragstabelle. Um das ganze zu illustrieren, habe ich ein einfaches Listenfeld für das Feld in der Auftragstabelle angelegt. Sie sehen es in Abbildung 4.10.

BESTELLTES

PRODUKT

Immer wenn in die Produkttabelle ein neuer Produktname eingetragen wird, erscheint dieser auch als Auswahlmöglichkeit in dem Listenfeld der Auftragstabelle. Um diese Art Beziehung in Microsoft Access zu definieren, wechseln Sie in die Entwurfsansicht, um die Attribute des Felds BESTELLTES_PRODUKT zu ändern. Behalten Sie den

105

Aufbau einer Datenbank und Organisation der Daten

Datentyp mit der Standardvorgabe »Text« bei, weil das Feld letztlich einen Produktnamen enthalten wird. Anschließend legen Sie das Listenfeld im Fenster FELDEIGENSCHAFTEN unten links in der Entwurfsansicht fest, wie in Abbildung 4.11 gezeigt. Abbildung 4.10: Dieses Listenfeld in der Auftragstabelle holt Informationen aus den Daten der Produkttabelle.

Abbildung 4.11: Auf der Registerkarte Nachschlagen in den Feldeigenschaften können Sie dem Feld bestelltes_ produkt ein Listenfeld zuordnen.

Auf der Registerkarte NACHSCHLAGEN setzen Sie das Feld STEUERELEMENT ANZEIGEN auf LISTENFELD, den Herkunftstyp auf ABFRAGE und die Datensatzherkunft auf produkte. Microsoft Access verwendet Listenfelder als Möglichkeit, Datenbeziehungen einzurichten – Ihre Software unterstützt vielleicht andere Methoden. Detaillierte Informationen finden Sie in der Hilfedatei Ihres Programms im Abschnitt über die Definition von Beziehungen.

106

Datenbeziehungen einrichten

So weit, so gut. Sie haben Access angewiesen, dass für das Feld BESTELLTES_PRODUKT ein Listenfeld angezeigt wird, dessen Inhalt aus der Produkttabelle stammt. Aber woher weiß Access, welches Feld in der Produkttabelle in der Liste angezeigt werden soll? Um das Feld PRODUKT zu spezifizieren, muss ich eine einfache SQL-Abfrage in Access erstellen. Ich werde in Kapitel 5 noch genauer auf SQL eingehen. Hier verwenden Sie einfach eine einfache visuelle Oberfläche, die in Access enthalten ist: den Abfrage-Generator. Starten Sie den Abfrage-Generator mit Hilfe der Schaltfläche mit den drei Punkten neben dem Auswahlfeld DATENSATZHERKUNFT. Man bezeichnet diese drei Punkte auch als Ellipse. In Access bedeutet die Ellipse, dass es an dieser Stelle noch weitergeht, und genau dorthin wollen wir kommen. Die Schaltfläche öffnet den Abfrage-Generator, wie in Abbildung 4.12 gezeigt.

Abbildung 4.12: Der Abfrage-Generator von Microsoft Access.

Sehen Sie sich noch einmal Abbildung 4.11 an. Weil ich im Feld DATENSATZHERKUNFT die Produkttabelle angegeben habe, bevor ich den Abfrage-Generator aufgerufen habe, sehe ich diese Tabelle und ihre Felder oben auf dem Bildschirm. Im ersten Feld darunter habe ich das Feld NAME aus der Produkttabelle im Feld FELD ausgewählt. Damit wird eine schnelle Abfrage angelegt, die das Programm anweist »gehe in die Produkttabelle und hole alle Werte aus dem Feld NAME«. Der Abfrage-Generator von Microsoft Access ist eine der vielen Applikationen zur visuellen Entwicklung von SQL-Anweisungen. Andere Datenbankprogramme bieten ähnliche Schnittstellen an, und es gibt einige gute externe Programme, mit denen Abfragen erzeugt werden können. Speichern Sie die Abfrage, indem Sie sie schließen, und speichern Sie den neuen Tabellenentwurf. Wenn Sie zurück in die Datenblattansicht wechseln und wieder auf die Auftragstabelle zugreifen, sehen Sie ein Listenfeld wie in Abbildung 4.10 gezeigt.

107

Aufbau einer Datenbank und Organisation der Daten

Damit haben Sie wieder wertvolle Zeit gespart, und Sie haben vermutlich auch mögliche Versandfehler eliminiert. Wenn bei jedem Auftrag der Produktname eingegeben werden muss, passiert früher oder später ein Tippfehler, irgendjemand erhält seine Baretta Manicotti nicht, und Sie haben einen Kunden verloren.

4.7

Tabellen- und Datenbanksicherheit

Weil es hier um Datenbanken geht und wir verantwortungsbewusste Entwickler sind, wollen wir auch die Sicherheitsaspekte betrachten. In diesem Buch geht es immer wieder um die Sicherheit, insbesondere in den Abschnitten über den E-Commerce. Die folgenden Abschnitte bieten nur eine kurze Einführung, wie Sie Ihre Datenbank im Web schützen. Ich weiß, dass Sie spätestens in Kapitel 8, wenn Sie erste Templates erstellen, Angst haben werden, Ihre Datenbank direkt ins Web zu stellen und Seiten bereitzustellen. Zuvor sollten Sie einige Dinge berücksichtigen. Das Beispielkaufhaus stellt zwei Tabellen im Web bereit, Produkte und Kunden. Betrachten Sie den Datenplan. Sie sehen, dass die Produkttabelle keine Eingaben aus dem Web entgegennimmt – sie gibt nur Ausgaben in die ColdFusion-Templates weiter. Sie wissen aber, dass Ihre Konkurrenten bei Famous Corporate CEO's Pasta ziemlich clever sind. Sie wollen sicher gehen, dass sich nicht irgend jemand Zugang zu Ihren Daten verschafft und völlig falsche Produktbeschreibungen eingibt – mit dem seltsamen Humor dieser Leute. Sie wollen Sicherheit, die nur Ihnen und Ihren Mitarbeiten erlaubt, Daten in diese Tabelle einzugeben. Die zweite Tabelle, die Kundentabelle, präsentiert eine schwierigere Situation. Sie müssen sie den Web-Benutzern zur Verfügung stellen, so dass diese ihre Daten in ein ColdFusionFormular eingeben und damit Ihren Cop Pasta Newsletter abonnieren können. Aber Sie möchten die Tabelle natürlich auch schützen, so dass die Leute von Famous Corporate CEO's Pasta nicht Ihre Mailing-Liste stehlen und ihre blödsinnige Werbung an alle Ihre Kunden senden. Beide Situationen werden einfach gelöst: Man weist den Tabellen Berechtigungen zu.

Tabellenberechtigungen Die meisten Datenbankpakete bieten die Möglichkeit, Berechtigungen für einzelne Tabellen zu definieren. Im allgemeinen legen Sie »Benutzer« in Ihrer Datenbanksoftware an und erteilen diesen Kennwörter. Anschließend weisen Sie jeder Tabelle Benutzerberechtigungen zu. In der Cop Pasta Datenbank sollten Sie Benutzernamen für Ihre Mitarbeiter und sich selbst einrichten und dann den Schreibzugriff, also die Eingaben, auf sich und

108

Tabellen- und Datenbanksicherheit

Ihre Mitarbeiter beschränken. Wenn Sie die Datenbank zum nächsten Mal öffnen, werden Sie nach Ihrem Benutzernamen und dem Kennwort gefragt, bevor Sie irgendwelche Änderungen vornehmen dürfen. Die Leseberechtigung, das ist der lesende Zugriff auf die Datenbank, bleibt davon unberührt, weil Sie wollen, dass alle Web-Benutzer Ihre Produktdaten sehen. Die Realisierung der Sicherheit für die Kundentabelle ist etwas komplexer. Nur Ihre Mitarbeiter und Sie sollten in der Lage sein, die Tabelle einzusehen, aber die Web-Benutzer brauchen Schreibzugriff dafür, so dass sie ihre Daten über das Web-Formular eintragen können. Einige Datenbankpakete geben den Tabellen standardmäßig Schreibzugriff, während in anderen häufig ein allgemeiner Benutzer angelegt werden muss – häufig als »browser« oder »guest« bezeichnet –, um jemanden festzulegen, der vom Web aus auf Ihre Datenbank zugreift. Abhängig von den Sicherheitseinstellungen Ihres Web-Servers muss dieser generische Benutzer möglicherweise auch im ColdFusion Administrator in die Datenquelleneigenschaften eingetragen werden, wenn Ihre Datenbank Eingaben aus dem Web akzeptieren soll. Klären Sie das mit Ihrem Systemadministrator ab oder lesen Sie in der Datenbankdokumentation nach, um herauszufinden, wie Web-Benutzern Schreibberechtigungen zugewiesen werden. Tabellenberechtigungen können normalerweise auch ganzen Gruppen, also vordefinierten Benutzerklassen, zugewiesen werden. Das vereinfacht das Ganze erheblich, wenn Ihre Mitarbeiterzahl plötzlich explodiert – ein ganzer Stab Verkäufer, Versandleute und eine Werbetruppe. Sie könnten für jeden Angestellten einen Benutzernamen anlegen und sie in Gruppen anordnen, die den entsprechenden Anforderungen der einzelnen Abteilungen entsprechen. Sie könnten beispielsweise den Verkäufern Zugriff auf die Auftragstabelle erteilen, verhindern, dass die Versandleute Zugriff auf die Produktbeschreibungen haben, und den PR-Leuten den Zugriff auf alles verbieten. In Microsoft Access erfolgt die Realisierung von Sicherheit in zwei Schritten. Zuerst wählen Sie EXTRAS/SICHERHEIT/BENUTZER- UND GRUPPENKONTEN. Damit wird ein Dialogfeld geöffnet, in dem Sie Benutzer eintragen und entfernen und Kennwörter erstellen oder ändern können. Nachdem Sie definiert haben, welche Benutzer Zugriff auf Ihre Datenbank haben, wählen Sie EXTRAS/SICHERHEIT/BENUTZER- UND GRUPPENBERECHTIGUNGEN. Ein weiteres Dialogfeld wird angezeigt, in dem Sie den Tabellen in Ihrer Datenbank Benutzerberechtigungen zuweisen können.

109

Aufbau einer Datenbank und Organisation der Daten

4.8

Daten in eine Datenbank schreiben

Die einfachste Methode, Daten einzugeben, ist es, die Tabelle zu öffnen, den Cursor in der entsprechenden Zelle zu platzieren und einfach loszuschreiben. Diese Methode ist praktisch, wenn Ihre Daten aus nur je einem oder zwei Wörtern bestehen, aber wenn Sie lange Sätze oder Listen eingeben müssen, werden Sie sehr häufig horizontal blättern müssen, wenn Sie Ihren Text sehen wollen. Das horizontale Blättern ist sehr lästig, es muss also eine bessere Möglichkeit geben. Es gibt vier primäre Methoden, Daten in eine Datenbank zu stellen. Die erste, nämlich die Information direkt in die Zellen einzugeben, ist die grundlegendste dieser Methoden. Im folgenden wollen wir die drei anderen betrachten.

Das Eingabeformular Das Eingabeformular ist eine praktische Funktion, die von den meisten modernen Datenbankpaketen unterstützt wird. Eingabeformulare erlauben Ihnen, die Datensätze Ihrer Datenbank einzeln anzusehen. Nachdem Sie ein Formular erstellt haben, wird es zusammen mit Ihren Daten in der Datenbank abgelegt, so dass Sie es später wieder nutzen können. Betrachten wir das Eingabeformular, das ich für die Eingabe von Daten in meine Auftragstabelle angelegt habe, wie in Abbildung 4.13 gezeigt.

Abbildung 4.13: Beispiel für ein Eingabeformular, mit dem Daten in die Auftragstabelle eingegeben werden können.

Dies ist ein einfaches Formular, das ich mit Hilfe des Formular-Assistenten von Access erstellt habe (der lustige Hintergrund stammt von Microsoft). Das ist sehr viel praktischer, als meine Daten direkt in die Tabellenzellen einzugeben, weil ich damit alle Felder auf einem einzigen Bildschirm anzeigen kann und damit mehr Ellbogenfreiheit für die Bearbeitung des Texts habe. Um auf andere Datensätze zuzugreifen oder einen neuen einzugeben, verwende ich einfach die Pfeiltasten unten in der Anzeige.

110

Daten in eine Datenbank schreiben

Daten importieren Die schnellste Methode, Daten in eine Datenbank zu stellen, ist das Importieren aus einer existierenden Quelle. Abhängig davon, welche Datenbanksoftware Sie verwenden, können Sie Daten aus Datenbanken importieren, die in anderen Softwarepaketen, Tabellenkalkulationen, Textdateien, HTML-Seiten oder Textverarbeitungsdokumenten erstellt wurden. Das ist eine praktische Funktion, wenn Ihnen beispielsweise jemand einen Datenträger übergibt, der eine Textliste internationaler Käsespezialitäten enthält: Sie importieren sie in Ihre Datenbank und sind sofort eine anerkannte Käseautorität. Ihre Datenbanksoftware unterstützt spezifische Importmethoden und Dateiformate. Ich habe hier weder den Platz noch die Ausdauer, alle zu beschreiben – lesen Sie also die Details in Ihrer Dokumentation nach. Wenn Ihre Datenbanksoftware nicht erlaubt, Daten eines bestimmten Dateityps zu importieren, haben Sie bei der Einrichtung Ihrer Software möglicherweise nicht die entsprechende Datentransformation installiert. Wiederholen Sie die Installation und verwenden Sie die benutzerdefinierten Einstellungen. Suchen Sie dabei nach einer Liste der unterstützten Datentransformationen. Eingabeformulare und Importieren sind praktische Eingabemethoden für alle, die direkten Zugriff auf meine Datenbanken haben und außerdem eine Kopie meiner Datenbanksoftware besitzen. Was aber mache ich, wenn ich einem Benutzer ermöglichen will, Daten vom Web aus einzugeben?

Web-Eingaben ColdFusion verarbeitet Dateneingaben mit dem -Tag. Mit können Sie ein spezielles Formular-Template erstellen, das sich ähnlich wie die Mail- und Suchformulare verhält, die Sie aus dem Web kennen. Wenn ein Benutzer auf Ihr Eingabe-Template zugreift, erhält er ein Formular ähnlich wie in Abbildung 4.14 gezeigt. Jedes Eingabefeld entspricht einem Feld in den Cop Pasta-Tabellen. Wenn der Benutzer das Formular sendet, gelangt seine Eingabe in Ihre Datenquelle, so dass sie unmittelbar in Ihrer Datenbank und allen relevanten Web-Templates erscheint. Abhängig von der moralischen Integrität Ihrer Benutzer kann die Aufnahme von Eingaben über das Web etwas riskant sein. Selbst der gefestigste Charakter kann manchmal nicht widerstehen, böse Worte und ungezogene Sprüche in Web-Eingabeformulare einzugeben. Sie sollten einen Mechanismus einführen, mit dem Sie den Geisteszustand Ihrer Benutzer abschätzen können, um die Eingaben zu checken, bevor sie der gesamten Welt präsentiert werden. Mehr über diese Methoden erfahren Sie in Kapitel 7.

111

Aufbau einer Datenbank und Organisation der Daten

Abbildung 4.14: Ein ColdFusiongesteuertes Eingabeformular, das über das Web zur Verfügung gestellt wird.

4.9

Zusammenfassung

ColdFusion kommt mit den meisten gebräuchlichen Datenbankformaten zurecht. Formate, die nicht direkt unterstützt werden, können als exportierte Daten in Form von Textdateien verarbeitet werden. Wenn Sie mit Datenbanken arbeiten, dienen die ColdFusionFunktionen als Schnittstellenprogramm, wobei die ODBC-Fähigkeiten eines Systems genutzt werden, um eine offene Pipeline von und zu der Datenbank zu erzeugen. Ein guter Datenbankentwurf ist wesentlich für die Leistungsoptimierung in ColdFusionApplikationen. Eine sinnvoll geplante Datenbank spart Codierungszeit beim Aufbau der Templates. Sie sollten unbedingt eine visuelle Darstellung einer Datenbank anlegen, bevor Sie sich an den Computer setzen, um Tabellen, Felder, Eingaben und Datenbeziehungen anzulegen. Die gemeinsame Nutzung von Daten in mehreren Tabellen spart Eingabezeit und sorgt dafür, dass die Dinge überschaubar und konsistent bleiben. Es ist wichtig, Tabellenschlüssel zu definieren, die die Suchzeiten in ColdFusion minimieren und Ihnen eine einfache Methode an die Hand geben, auf eindeutige Datensätze zu verweisen, wenn Sie später Templates erstellen. Weil Sie vermutlich Ihre neue Datenbank nutzen, um Ihre Templates später zu testen, sollten Sie außerdem die wichtigsten Sicherheitsaspekte verstanden haben, um Ihre Daten zu schützen.

112

Workshop

Es gibt zahlreiche Methoden, eine Datenbank mit Daten zu füllen. Daten können über Datenbankformulare, Importieren und Web-Formulare eingegeben werden. Gut durchdachte Sites verwenden eine Kombination aus all diesen Methoden. In Kapitel 5 werden wir SQL genauer betrachten – der erste Schritt, ColdFusion-Templates anzulegen.

4.10 Workshop F&A F

Kann ich meine Datenbanksoftware auch dann nutzen, wenn sie von ColdFusion nicht unterstützt wird? A

F

Gibt es noch andere Applikationen, die als Schnittstelle zwischen Datenbank und Web fungieren können? A

F

Ja. Es gibt noch andere gebräuchliche Entwicklungsprogramme, wie beispielsweise PHP, Microsoft Active Server Pages, Microsoft SQL Server oder mini-SQL. Dabei gibt es die unterschiedlichen Ausprägungen und Preise.

Gibt es noch andere Programme, die ODBC nutzen? Kann ich sie mit Datenbanken einsetzen, die ich für ColdFusion angelegt habe? A

F

Ja, wenn Sie die Möglichkeit haben, Datenbankdateien in einem der vielen von ColdFusion erkannten Formate zu exportieren. Die meisten modernen Datenbankpakete unterstützen das Exportieren zumindest in ein paar anderen Datenbankformaten. Zumindest können Sie Ihre Daten immer als Textdatei exportieren. Das ist weniger effizient als die Verwendung einer richtigen Datenbankdatei, aber zumindest funktioniert es.

Ja und ja. ODBC-kompatible Programme stellen eine ausgezeichnete Möglichkeit dar, Informationen aus Datenbanken zu lesen und in sie zu schreiben. Angenommen, ich entwickle das Layout für einen Artikel in einer Zeitschrift. Mit Hilfe einer ODBC-Design-Applikation kann ich den Inhalt meines Artikels aus einer Datenbank laden. Der Inhalt kann von einer anderen ODBC-Datenbank in die Datenbank eingegeben worden sein, wie beispielsweise mit der Textverarbeitung, die der Verfasser des Artikels benutzt.

Ist es sinnvoll, die Datenpläne anderer Leute einzusehen, bevor ich eigene anlege? A

Ja. Aus der Vorgehensweise erfahrener Datenbankentwickler gewinnen Sie wichtige Einsichten für Ihren eigenen Entwurf. Im Web gibt es viele Datenbankmodel-

113

Aufbau einer Datenbank und Organisation der Daten

le. Suchen Sie in einer der großen Suchmaschinen, wie beispielsweise Alta Visa oder HotBot danach. Suchen Sie nach Schlüsselwörtern wie »Datenbank«, »Struktur«, »Modell« und »Schema«. F

Ich habe erkannt, dass die Wiederverwendung und Verknüpfung von Daten in meinen Tabellen der Schlüssel zur Freizeit ist. Wo finde ich weitere Informationen? A

F

Am besten lesen Sie zuerst die Hilfedatei Ihrer Datenbanksoftware. Programme wie Microsoft Access bieten eine detaillierte Beschreibung von Datenbeziehungen und verwenden häufig ganz reale Beispiele zur Verdeutlichung. Diese Beispiele sind vielleicht nicht ganz so aufregend wie TV Cop Pasta, aber Sie können daraus erkennen, wie Sie Beziehungen in Ihren Tabellen verwenden.

Mich verwirrt der Abfrage-Generator von Access. Soll ich mir Sorgen machen? A

Nein. Warten Sie ab, bis Sie die morgige Einführung in SQL gelesen haben, dann wird Ihnen vieles klarer sein.

Quiz 1. Was ist ein ODBC-Treiber? 2. Warum wird ColdFusion als »Schnittstellen«-Applikation bezeichnet? 3. Was ist ein Schema? 4. Warum ist es so wichtig, eine visuelle Darstellung einer Datenbank anzufertigen, bevor man die eigentliche Datei erstellt? 5. Welche Farbe hat in einem 73er Plymouth Fury der Draht, der das Fernlicht für die Scheinwerfer einschaltet? 6. Warum verwende ich Kleinbuchstaben und Unterstriche für die Namensgebung meiner Datenbank und Tabellen? 7. Was ist ein Primärschlüssel? 8. Beschreiben Sie kurz, wie man Berechtigungen für eine Tabelle einrichtet. 9. Nennen Sie drei Methoden, Informationen in eine Datenbank einzutragen.

114

Workshop

Antworten 1. Ein ODBC-Treiber ist Software, die kompatiblen Programmen erlaubt, mit einer Datenbank zu kommunizieren. 2. Es verknüpft eine Datenbank mit dem Web, indem es mit der Web-Server-Software und ODBC zusammenarbeitet. 3. Ein Schema ist ein visueller Plan einer Datenbank, in dem die Tabellen, Felder und Beziehungen für die Daten aufgezeigt werden. 4. Durch das Anlegen eines Schemas können Sie erkennen, ob Daten unnötig in mehreren Tabellen redundant vorliegen, wie die einzelnen Tabellen Eingaben erhalten sollen, und wie die Sicherheit dafür aussehen soll. Außerdem können Sie Fehler im Datenbankentwurf ausschließen. 5. Ich habe keine Ahnung – der grüne ist für die Innenbeleuchtung. 6. Um eine Dateinamenkonvention einzurichten, oder eine Standardmethode, wodurch alles wohl organisiert und zwischen einzelnen Systemen portabel bleibt. 7. Ein Primärschlüssel ist ein Wert in einem Feld, der einen Datensatz eindeutig kennzeichnet. 8. Um Tabellenberechtigungen anzulegen, richten Sie in den meisten Datenbankapplikationen zuerst einen oder mehrere »Benutzer« an und geben diesen Lese- oder Schreibberechtigung für die einzelnen Tabellen Ihrer Datenbank. 9. Mit Hilfe eines Eingabeformulars, durch das Importieren von Daten und die Übernahme von einem Web-Formular.

Übungen 1. Denken Sie sich ein abgefahrenes, fiktives Unternehmen aus und legen Sie einen Datenplan dafür an. Wenn Sie ein eigenes Unternehmen haben, können Sie das Abgefahrene und Fiktive sein lassen. 2. Entwerfen Sie eine kleine Datenbank für Ihr »Unternehmen« und geben Sie Beispieldaten ein. 3. Wenn Sie eine Datenbankapplikation verwenden, die Listenfelder unterstützt (wie beispielsweise Microsoft Access), legen Sie ein Listenfeld in einer Ihrer Tabellen an. Sie sollte Informationen aus einer anderen Tabelle in Ihrer Datenbank übernehmen. 4. Legen Sie in Ihrer Datenbanksoftware einen Benutzer an. Setzen Sie die Berechtigungen Ihrer Tabellen so, dass dieser Benutzer Schreibberechtigung dafür hat. Richten Sie eine andere Tabelle so ein, dass der Benutzer diese nur lesen kann.

115

Aufbau einer Datenbank und Organisation der Daten

5. Geben Sie Beispieldaten in die Datenbank ein und probieren Sie die von Ihrer Software unterstützten Eingabemethoden aus. 6. Lesen Sie in der Dokumentation Ihrer Textverarbeitung nach, ob sie ODBC-kompatibel ist. Falls sie ODBC-kompatibel ist, ermitteln Sie die Methoden zum Lesen und Schreiben von Datenbankinformation aus und in Dokumente der Textverarbeitung.

116

Finden Sie die Daten, die Sie brauchen: Abfragen und SQL – eine Einführung

5

Abfragen und SQL – eine Einführung

In Kapitel 2 habe ich Ihnen Ihre erste ColdFusion-Template-Seite vorgestellt und gezeigt, wie sie eine Abfrage verwendet, um Daten auszuwählen, die dann im Web präsentiert werden. Ich habe einige einfache Abfragen angelegt und Beispiele für die möglichen Ausgaben aufgezeigt. In diesem Kapitel werden wir die Abfragen genauer betrachten und zeigen, wie Sie SQL (Structured Query Language) verwenden, um Datensätze aus einer Datenbank auszuwählen. Es geht hier um die folgenden Themen: 쐽

ColdFusion-Abfragen



SELECT-Anweisung – Grundlagen



SELECT-Anweisung – Bedingungen



Daten sortieren und auswerten



Datenbanken mit SQL ändern

5.1

ColdFusion-Abfragen

Um noch einmal kurz das Konzept der Abfragen zu erläutern, betrachten wir die Abfrage aus Kapitel 2. Sie arbeitet mit meiner Datenbank der schlechtesten Elvis-Filme, insbesondere mit der Tabelle movies. Hier der Code für diesen Abfrageabschnitt, wie er in einem ColdFusion-Template erscheint:

SELECT title, year, rating FROM movies WHERE title = 'Speedway'

Wenn ich diesen Abfrageabschnitt in einer Template-Seite zusammen mit einem einfachen -Abschnitt zur Ausgabe der Ergebnisse kombiniere, sieht der Benutzer in seinem Browser etwas wie in Abbildung 5.1 gezeigt. Die SQL-Anweisung in dieser Abfrage weist ColdFusion an, in meine Datenbank zu gehen, nach der Tabelle movies zu suchen, und dann die Felder title, year und rating von allen Datensätzen auszuwählen, deren title-Feld das Wort 'Speedway' enthält. Wenn wir eine SQL-Anweisung mit dem Schlüsselwort SELECT beginnen, handelt es sich um eine sogenannte SELECT-Abfrage. SELECT-Abfragen werden häufig genutzt, um in einer Datenbank etwas zu suchen. Andere Anweisungen verwenden UPDATE, womit der Inhalt eines Datensatzes geändert wird, oder INSERT, womit einer Tabelle ein neuer Datensatz hinzugefügt wird. Wir werden diese Anweisungen später genauer betrachten.

118

SELECT-Anweisung – Grundlagen

Abbildung 5.1: Beispielausgabe für die Abfrage WHERE title = 'Speedway'.

Praktisch an SQL ist, dass es der natürlichen Sprache manchmal ganz ähnlich ist. Wenn Sie die SQL-Anweisung aus dem Codebeispiel lesen, sehen Sie, dass das Englisch sehr deskriptiv ist. Grund dafür ist zum Teil, dass Applikationen wie ColdFusion eine Datenbank ähnlich wie wir Menschen auswerten. Wenn wir bestimmte Informationen suchen, öffnen wir eine Datenbankdatei, suchen die betreffende Tabelle und durchsuchen dann die Datensätze nach den entsprechenden Wörtern.

5.2

SELECT-Anweisung – Grundlagen

SELECT-Anweisungen verleihen SQL seine scheinbar magischen Kräfte. Damit entsteht in

ColdFusion die Möglichkeit, einen bestimmten Datensatz oder mehrere Datensätze abhängig von dem von Ihnen angegebenen Kriterium zu suchen. Wir beginnen mit einer Beispieltabelle. In Tabelle 5.1 zeige ich den Inhalt der Tabelle songs meiner Datenbank mit den Elvis-Trivialitäten. ID

Liedtitel

Released

Rating

1

Baby, Let's Play House

1954

Aaaaausgezeichnet!

2

Good Rockin' Tonight

1954

Aaaaausgezeichnet!

3

Money Honey

1956

Aaaaausgezeichnet!

Tabelle 5.1: songs

119

Abfragen und SQL – eine Einführung

ID

Liedtitel

Released

Rating

4

Teddy Bear

1957

Ganz in Ordnung

5

A Big Hunk O'Love

1959

Ganz in Ordnung

6

Bossa Nova Baby

1963

Oh weh!

7

Devil In Disguise

1963

Aaaaausgezeichnet!

8

Do The Clam

1965

Oh weh!

9

Don't Cry Daddy

1969

Das Ende ist nah!

Tabelle 5.1: songs (Forts.)

Das ist alles ganz einfach – drei Felder und das ID- oder Schlüsselfeld, das mein Datenbankprogramm automatisch eingefügt hat. Das Schlüsselfeld enthält eindeutige Bezeichner für die einzelnen Zeilen meiner Tabelle. Wir beginnen mit einer Abfrage, die alle Felder für alle Datensätze in der Tabelle zurückgibt. Betrachten Sie Listing 5.1. Listing 5.1: Eine Beispielabfrage, die den Inhalt der vier Felder aus der Tabelle songs ermittelt

SELECT ID, title, released, rating FROM songs

Damit fordere ich ColdFusion auf, den Inhalt aller vier Felder aus jedem Datensatz meiner Tabelle zu ermitteln. Ich habe keinen WHERE-Parameter angegeben, deshalb vergleicht ColdFusion keinen Text mit meinen Tabelleneinträgen – es lädt einfach alles. Beachten Sie auch, dass ich ColdFusion aufgefordert habe, die Daten aus allen Feldern in meiner Tabelle zurückzugeben, ID, title, released und rating. Statt sie alle aufzulisten, könnte ich auch das Wildcard-Zeichen verwenden, den Stern, um damit alle Felder anzusprechen, wie in Listing 5.2 gezeigt. Listing 5.2: Eine Abfrage, die den Inhalt aller Felder der Tabelle songs ermittelt.

SELECT * FROM songs

Damit erhalten Sie dieselbe Ausgabe wie für Listing 5.2, haben aber nicht so viel Schreibarbeit, insbesondere wenn sehr viele Felder auszuwählen sind.

120

SELECT-Anweisung – Grundlagen

Das Wildcard-Zeichen, der Stern, kann sehr zeitsparend wirken, wenn Sie wirklich die Daten aller Felder der Datenbank ermitteln wollen, aber verwenden Sie ihn nicht zu freizügig. Wenn Sie nur die Daten aus ein paar wenigen Feldern brauchen, listen Sie diese separat auf und vermeiden Sie das WildcardZeichen. Auf diese Weise wird die Suchzeit von ColdFusion reduziert und Ihre Site ist schneller. Weiter unten auf meiner Template-Seite verwende ich einen -Abschnitt, wie in Listing 5.3 gezeigt, um das Ergebnis meiner Abfrage anzuzeigen. Listing 5.3: Ein Ausgabeabschnitt zur Anzeige der Abfrageergebnisse

Liedtitel: #title#
Erscheinungsjahr: #released#
Meine Bewertung: #rating#



In diesem Ausgabeabschnitt habe ich die Abfrage angegeben, die ich dieser Ausgabe zuordnen will (“get_songs“), und dann Beschriftungen gefolgt von Variablen. Die Zeilen enden alle mit einem
, dem Standard-HTML-Code für eine Zeilenschaltung (Carriage Return). Obwohl ich es in meiner Abfrage ausgewählt habe, habe ich das ID-Feld in meinem -Abschnitt nicht verwendet. Ich glaube, dem durchschnittlichen Web-Benutzer ist es relativ egal, wie ich die Einträge meiner Datenbank nummeriere, deshalb habe ich es weggelassen. ColdFusion hat keine Fehlermeldung dafür ausgegeben, weil es nur die Daten ausgibt, die ich angefordert habe. Beachten Sie, dass der Text, der innerhalb meiner -Tags angegeben ist, für jeden Datensatz in der Datenbank wiederholt wird. Listing 5.3 erzeugt also die folgende Ausgabe: Liedtitel: Baby, Let's Play House Erscheinungsjahr: 1954 Meine Bewertung: Aaaaausgezeichnet! Liedtitel: Good Rockin' Tonight Erscheinungsjahr: 1954 Meine Bewertung: Aaaaausgezeichnet! Liedtitel: Money Honey Erscheinungsjahr: 1956 Meine Bewertung: Aaaaausgezeichnet!

121

Abfragen und SQL – eine Einführung

Liedtitel: Teddy Bear Erscheinungsjahr: 1957 Meine Bewertung: Ganz in Ordnung Liedtitel: A Big Hunk O'Love Erscheinungsjahr: 1959 Meine Bewertung: Ganz in Ordnung Liedtitel: Bossa Nova Baby Erscheinungsjahr: 1963 Meine Bewertung: Oh weh! Liedtitel: Devil In Disguise Erscheinungsjahr: 1963 Rating: Aaaaausgezeichnet! Liedtitel: Do The Clam Erscheinungsjahr: 1965 Meine Bewertung: Oh weh! Liedtitel: Don't Cry Daddy Erscheinungsjahr: 1969 Meine Bewertung: Das Ende ist nah!

Eine Zeile mit Whitespaces trennt die Datensätze voneinander, weil ich die HTML-Absatzmarkierung (

) am Ende meines -Abschnitts angegeben habe. In Kapitel 6 und danach werde ich weitere Methoden aufzeigen, Ausgaben aufzubereiten. Die Abfrage in Listing 5.3 ist praktisch, wenn ich dem Web-Benutzer einfach den gesamten Inhalt meiner Datenbank zeigen will, aber in der Regel will man spezifischere Anzeigen erstellen. Angenommen, ich will nur die Datensätze von 1954 zeigen, das übrigens Elvis' bestes Jahr war. Dazu formuliere ich meine Abfrage um wie in Listing 5.4 gezeigt. Listing 5.4: Ein Abfrageabschnitt, der Daten für ein bestimmtes Veröffentlichungsjahr ausgibt

SELECT title, released, rating FROM songs WHERE released = '1954'

In Listing 5.4 habe ich meiner SELECT-Anweisung eine WHERE-Klausel hinzugefügt, um das Ganze ein bisschen zu reduzieren. Ich suche jetzt nur nach Datensätzen, die im Feld year den Eintrag 1954 haben.

122

Konkretisierung einer SELECT-Anweisung

Wenn Sie in einer WHERE-Klausel eine Zeichenkette angeben, mit der verglichen werden soll, müssen Sie diese immer in einfache Anführungszeichen (') einschließen. Diese einfachen Anführungszeichen weisen ColdFusion an, den Inhalt als Text statt als Operator Ihrer Abfrage zu lesen. Nummerische Zeichenketten, wie beispielsweise 1954, müssen nicht in Anführungszeichen eingeschlossen werden. Mit demselben -Abschnitt wie in Listing 5.3 gezeigt, erzeugt meine neue Abfrage die folgende Ausgabe: Liedtitel: Baby, Let's Play House Erscheinungsjahr: 1954 Meine Bewertung: Aaaaausgezeichnet! Liedtitel: Good Rockin' Tonight Erscheinungsjahr: 1954 Meine Bewertung: Aaaaausgezeichnet!

Jetzt werden nur zwei Datensätze zurückgegeben. Beide beziehen sich auf Veröffentlichungen von 1954 – die WHERE-Klausel hat es möglich gemacht. Jetzt betrachten wir einige weitere Beispiele, wie die WHERE-Klausel weiter verfeinert werden kann.

5.3

Konkretisierung einer SELECT-Anweisung durch Bedingungen

Durch das Hinzufügen von ein oder mehr Bedingungen in meine WHERE-Klausel kann ich sehr genau angeben, welche Datensätze meine Abfrage zurückgeben soll. Jede Bedingung verhält sich wie eine True/False-Anweisung: Wenn die Abfrage einen Datensatz auswertet, in dem die Bedingung True ergibt, wird dieser Datensatz als Ausgabe zurückgegeben. Ist die Bedingung False, ignoriert die Abfrage den Datensatz und wertet den nächsten Datensatz aus. SQL verwendet zwei Operatortypen für den Aufbau bedingter Anweisungen, relationale Operatoren und logische Operatoren.

Relationale Operatoren Bisher haben alle meine Abfragen den Gleichheitsoperator (=) verwendet, der feststellt, ob der Inhalt eines Feldes gleich dem von mir vorgegebenen Text ist. Das Gleichheitszeichen

123

Abfragen und SQL – eine Einführung

ist gut für den Vergleich von Zeichenketten geeignet, wie beispielsweise »Baby, Let's Play House«, aber wenn es um Zahlen geht, stehen uns andere Tricks zur Verfügung. Tabelle 5.2 beschreibt die sechs relationalen Operatoren, die für SQL-Anweisungen zur Verfügung stehen. Operator

Definition

=

gleich

ungleich




größer

=

größer gleich

Tabelle 5.2: Relationale Operatoren

Wenn ich eine Abfrage formulieren will, die alle Lieder aus meiner Tabelle zurückgibt, die im Jahr 1959 oder später veröffentlicht wurden, verwende ich in meiner WHERE-Klausel den Größer-gleich-Operator (>=), wie in Listing 5.5 gezeigt. Listing 5.5: Eine Beispielabfrage mit dem Größer-gleich-Operator

SELECT ID, title, released, rating FROM songs WHERE released >= '1959'

Damit erhalten wir fünf Einträge, die alle Lieder beinhalten, die im Jahr 1959 und später veröffentlicht wurden: Liedtitel: A Big Hunk O'Love Erscheinungsjahr: 1959 Meine Bewertung: Ganz in Ordnung Liedtitel: Bossa Nova Baby Erscheinungsjahr: 1963 Meine Bewertung: Oh weh! Liedtitel: Devil In Disguise Erscheinungsjahr: 1963 Rating: Aaaaausgezeichnet! Liedtitel: Do The Clam Erscheinungsjahr: 1965 Meine Bewertung: Oh weh!

124

Konkretisierung einer SELECT-Anweisung

Liedtitel: Don't Cry Daddy Erscheinungsjahr: 1969 Meine Bewertung: Das Ende ist nah!

Relationale Operatoren sind insbesondere dann praktisch, wenn Ihre Abfragen mit Datums- oder Währungswerten arbeiten. Diese Operatoren erlauben Ihrer Abfrage, nach Werten zu suchen, die größer, kleiner oder gleich einem von Ihnen angegebenen Wert sind, zum Beispiel: 왘

In einer Kundentabelle könnten die Einträge der Kunden gesucht werden, die im letzten Jahr für mehr als 500.00 DM gekauft haben.



In einer Produkttabelle können Artikel gesucht werden, von denen mehr als jeweils 1000 Stück verkauft wurden.



Eine Tabelle mit Schlagzeilen könnte darauf abgefragt werden, Einträge anzuzeigen, die in der letzten Woche eingegeben wurden.



Eine Neuheiten-Seite könnte eine Tabelle abfragen, um die neuen Ergänzungen einer Web-Site zu ermitteln.

Logische Operatoren Wenn Sie mehrere Bedingungen in einer WHERE-Klausel angeben wollen, verwenden Sie logische Operatoren, um die Bedingungen zu verknüpfen. Dazu setzt man Boolesche Operatoren ein, um True/False-Anweisungen zu formulieren, die festlegen, ob ein bestimmter Datensatz von meiner Abfrage zurückgegeben wird. Boolesche Operatoren sind Wörter wie »and« und »or«, die die Suchbedingungen konkretisieren. Sie werden in SQL häufig genutzt, aber auch in Programmiersprachen, Ablaufdiagrammen und sogar in Web-Suchen. Angenommen, ich will die Tabelle mit den Liedern durchsuchen und nur diejenigen zurückgeben, die 1965 veröffentlicht wurden, und die ich mit »Aaaaausgezeichnet!« beurteilt habe. Mit Hilfe des AND-Operators in meiner WHERE-Klausel kann ich zwei Bedingungen verknüpfen und wähle einen Datensatz nur dann aus, wenn er beide Bedingungen erfüllt. Ich habe dazu eine Abfrage wie in Listing 5.6 gezeigt verwendet.

125

Abfragen und SQL – eine Einführung

Listing 5.6: Ein Abfrageabschnitt, der den Booleschen Operator AND verwendet

SELECT title, released, rating FROM songs WHERE released = '1965' AND rating = 'Aaaaausgezeichnet!'

Ich habe den AND-Operator angegeben, so dass in meiner WHERE-Klausel zwei Bedingungen erfüllt sein mussten. Unter Verwendung desselben -Abschnitts wie in den vorherigen Beispielen gibt dieses Template nur einen Datensatz zurück, nämlich den für »Devil In Disguise«. Ich vergebe mein »Aaaaausgezeichnet!« nicht leichtfertig! Will ich alle Lieder zurückgeben, die in den Jahren 1956 und 1957 aufgenommen wurden, verwende ich den Booleschen Operator OR zur Verknüpfung von zwei Bedingungen, so dass ein Datensatz dann zurückgegeben wird, wenn seine Daten eine der beiden Bedingungen erfüllt. Meine Abfrage sehen Sie in Listing 5.7. Listing 5.7: Ein Abfrageabschnitt, der den Booleschen Operator OR verwendet

SELECT title, released, rating FROM songs WHERE released = '1956' OR released = '1957'

Listing 5.7 erzeugt die folgende Ausgabe: Liedtitel: Money Honey Erscheinungsjahr: 1956 Meine Bewertung: Aaaaausgezeichnet! Liedtitel: Teddy Bear Erscheinungsjahr: 1957 Meine Bewertung: Ganz in Ordnung

Logische Operatoren können auch mit allen sechs relationalen Operatoren kombiniert werden. Angenommen, ich will alle Lieder finden, die 1959 oder später veröffentlicht wurden, und die ein »Aaaaausgezeichnet!« erhalten haben. Listing 5.8 zeigt meine Abfrage. Listing 5.8: Ein Abfrageabschnitt mit relationalen und Booleschen Operatoren

SELECT title, released, rating FROM songs WHERE released >= '1959' AND rating = 'Aaaaausgezeichnet!'

Logische Operatoren können auch zu zusammengesetzten Bedingungen verknüpft werden.

126

Konkretisierung einer SELECT-Anweisung

Eine zusammengesetzte Bedingung ist eine WHERE-Klausel, die mehrere logische Operatoren enthält. Wie in der Algebra werden zusammengesetzte Bedingungen von links nach rechts ausgewertet. Um eine gebräuchliche zusammengesetzte Bedingung zu demonstrieren, wollen wir annehmen, ich möchte alle Lieder anzeigen, die 1959 oder später veröffentlicht wurden, und die entweder ein »Aaaaausgezeichnet!« oder ein »Ganz in Ordnung« erhalten haben. Listing 5.9 zeigt meine Abfrage. Listing 5.9: Ein Abfrageabschnitt mit einer zusammengesetzten Bedingung

SELECT title, released, rating FROM songs WHERE released >= '1959' OR rating = 'Aaaaausgezeichnet!' OR rating = 'Ganz in Ordnung'

Unter Verwendung des -Abschnitts aus früheren Beispielen gibt die Abfrage aus Listing 5.9 alle Datensätze zurück, die eine der drei Bedingungen erfüllen. Liedtitel: Baby, Let's Play House Erscheinungsjahr: 1954 Meine Bewertung: Aaaaausgezeichnet! Liedtitel: Good Rockin' Tonight Erscheinungsjahr: 1954 Meine Bewertung: Aaaaausgezeichnet! Liedtitel: Money Honey Erscheinungsjahr: 1956 Meine Bewertung: Aaaaausgezeichnet! Liedtitel: Teddy Bear Erscheinungsjahr: 1957 Meine Bewertung: Ganz in Ordnung Liedtitel: A Big Hunk O'Love Erscheinungsjahr: 1959 Meine Bewertung: Ganz in Ordnung Liedtitel: Bossa Nova Baby Erscheinungsjahr: 1963 Meine Bewertung: Oh weh! Liedtitel: Devil In Disguise Erscheinungsjahr: 1963 Meine Bewertung: Aaaaausgezeichnet!

127

Abfragen und SQL – eine Einführung

Liedtitel: Do The Clam Erscheinungsjahr: 1965 Meine Bewertung: Oh weh! Liedtitel: Don't Cry Daddy Erscheinungsjahr: 1969 Meine Bewertung: Das Ende ist nah!

In einer einzigen Abfrage können sowohl AND- als auch OR-Operatoren verwendet werden, aber wie Sie sehen, ist es ein bisschen kompliziert für ColdFusion, herauszufinden, welche Bedingung zuerst verarbeitet werden soll. Um zu bestimmen, welche Bedingung ich verarbeiten will, bevor ich sie für eine andere auswerten will, verwendet SQL einen Trick aus der Unterstufen-Algebra, wie in Listing 5.10 gezeigt. Listing 5.10: Ein Abfrageabschnitt mit Klammern zur Festlegung der Verarbeitungsreihenfolge

SELECT title, released, rating FROM songs WHERE released >= '1959' AND (rating = 'Aaaaausgezeichnet!' OR rating = 'Ganz in Ordnung')

Beachten Sie die Klammern in Listing 5.10. Diese Abfrage ist ähnlich der in Listing 5.9, aber durch die Verwendung des AND-Operators und der Klammern entsteht ein völlig anderes Ergebnis. Die Klammern teilen ColdFusion mit, dass ihr Inhalt zuerst ausgewertet werden soll, und dass die Ergebnisse mit den anderen Bedingungen verglichen werden sollen. Im Fall von Listing 5.10 betrachtet die Abfrage zuerst einen Datensatz, um festzustellen, ob seine Bewertung (rating) gleich »Aaaaausgezeichnet!« oder »Ganz in Ordnung« ist. Trifft eine dieser Bedingungen zu, und nur dann, wird geprüft, ob das Feld released den Wert 1959 oder höher hat. Die Abfrage in Listing 5.10 erzeugt die folgende Ausgabe: Liedtitel: A Big Hunk O'Love Erscheinungsjahr: 1959 Meine Bewertung: Ganz in Ordnung Liedtitel: Devil In Disguise Erscheinungsjahr: 1963 Rating: Aaaaausgezeichnet!

Die Abfrage ermittelt nur zwei Lieder, nämlich die, die 1959 oder später veröffentlicht wurden, UND die mit »Ganz in Ordnung« ODER »Aaaaausgezeichnet!« beurteilt wurden.

128

Konkretisierung einer SELECT-Anweisung

Liedtitel: A Big Hunk O'Love Erscheinungsjahr: 1959 Meine Bewertung: Ganz in Ordnung Liedtitel: Devil In Disguise Erscheinungsjahr: 1963 Rating: Aaaaausgezeichnet!

Zusammengesetzte Bedingungen sind eine der leistungsfähigsten Funktionen von SQL. Durch ihre Verwendung in Abfragen können Sie selbst für die größten Datenbanken akzeptable Suchzeiten realisieren. Beispiele für die Verwendung sind: 왘

Eine Produkttabelle könnte abgefragt werden, um Artikel anzuzeigen, die mehr als 100 DM kosten und die in den letzten Monaten in Stückmengen von 1000 und mehr verkauft wurden.



Eine Kundentabelle könnte abgefragt werden, um zu zeigen, welche Kunden in einem bestimmten Postleitzahlenbereich wohnen, und die im letzten Jahr für mehr als 500 DM gekauft haben.



Eine Vereinstabelle könnte abgefragt werden, um nur die Organisationen zu ermitteln, die ein jährliches Budget von mehr als 200000 DM haben und sich um Behinderte kümmern.

Die Operatoren IN und BETWEEN Die Operatoren IN und BETWEEN ergänzen SQL nicht um neue Funktionen; statt dessen stellen sie Abkürzungen für die Vereinfachung Ihrer Abfragen dar. Angenommen, wir wollen Lieder auswählen, die die Bewertung »Ganz in Ordnung«, »Oh weh!« oder »Das Ende ist nah!« erhalten haben, und die den Niedergang von Elvis' Musikerkarriere eingeläutet haben. Eine Abfrage mit logischen Operatoren könnte aussehen wie in Listing 5.11 gezeigt. Listing 5.11: Eine Beispielabfrage mit zwei OR-Operatoren

SELECT title, released, rating FROM songs WHERE rating = 'Ganz in Ordnung' OR rating = 'Oh weh!' OR rating = 'Das Ende ist ➥nah!'

129

Abfragen und SQL – eine Einführung

Liedtitel: Teddy Bear Erscheinungsjahr: 1957 Meine Bewertung: Ganz in Ordnung Liedtitel: A Big Hunk O'Love Erscheinungsjahr: 1959 Meine Bewertung: Ganz in Ordnung Liedtitel: Bossa Nova Baby Erscheinungsjahr: 1963 Meine Bewertung: Oh weh! Liedtitel: Do The Clam Erscheinungsjahr: 1965 Meine Bewertung: Oh weh! Liedtitel: Don't Cry Daddy Erscheinungsjahr: 1969 Meine Bewertung: Das Ende ist nah!

Die OR-Liste wird hier schon ein wenig unhandlich. Jetzt verwenden wir den IN-Operator, der dieselbe Auswahl mit einer vereinfachten Frage trifft, wobei mehrere OR-Operatoren ersetzt werden. Listing 5.12 zeigt ein Beispiel. Listing 5.12: Ein Abfrageabschnitt mit IN ersetzt mehrere OR-Operatoren

SELECT title, released, rating FROM songs WHERE rating IN ('Ganz in Ordnung', 'Oh weh!', 'Das Ende ist nah!')

Die Abfrage in Listing 5.12 ersetzt den Gleichheitsoperator durch IN, gefolgt von einer Liste mit Einträgen, die durch Kommas voneinander getrennt sind. Die Klammern markieren Anfang und Ende der Liste. Die Ausgabe aus Listing 5.12 ist identisch mit der aus Listing 5.11. Analog dazu stellt der BETWEEN-Operator eine Abkürung für die Operatoren Kleiner () dar. Um alle Lieder anzuzeigen, die zwischen 1954 und 1965 veröffentlicht wurden, kann ich die konventionelle Methode verwenden wie in Listing 5.13 gezeigt. Listing 5.13: Ein Abfrageabschnitt mit mehreren relationalen Operatoren

SELECT title, released, rating FROM songs WHERE released >= '1954' AND released ) eingeben, warten Sie einen Moment. Diese Pause aktiviert die Tag-Vorschau von Studio, die ein Dropdown-Feld gültiger Parameter für das Tag anzeigt, wie in Abbildung 8.11 gezeigt. Wenn Sie einen dieser Parameter auswählen, fügt Studio automatisch den entsprechenden Text (wie beispielsweise bgcolor in das -Beispiel) ein und zeigt gegebenenfalls ein weiteres Dropdown-Feld mit Werten für diesen Parameter an.

211

ColdFusion Studio

Tag-Abschluß Wenn Sie auf ein Tag-Symbol auf den Bearbeitungs-Registerkarten klicken oder manuell ein Tag in das Bearbeitungsfenster eingeben, fügt ColdFusion dahinter automatisch das entsprechende, schließende Tag ein. Ihr Cursor bleibt jedoch zwischen den öffnenden und schließenden Tags stehen, so dass Sie Text eingeben können. Beachten Sie in Abbildung 8.12 die Cursorposition. Ich habe das Tag eingegeben, und Studio hat es durch das entsprechende Tag vervollständigt.

Abbildung 8.11: Der Tag-Abschluss von Studio stellt das zugehörige schließende Tag für jedes von Ihnen eingegebene öffnende Tag bereit.

Abbildung 8.12: Die Tag-Vorschau von Studio zeigt eine Liste gültiger Parameter für das ausgewählte Tag an.

212

Die Hilfestellung von Studio

Tag-Syntaxprüfung Die Tag-Syntaxprüfung von Studio »überwacht« Ihre Tags, während Sie sie eingeben, und zeigt mögliche Probleme in der Statusleiste unten auf dem Bildschirm an. Wenn ich beispielsweise im Tag den Schreibfehler mache, erkennt Studio diesen, erzeugt einen Warnton und zeigt den Fehler rot an, wie unten in Abbildung 8.13 gezeigt.

Abbildung 8.13: Studio zeigt mögliche Tag-Fehler am unteren Bildschirmrand in rot an.

Der Tabellen-Assistent Der Tabellen-Assistent bietet eine visuelle Oberfläche, die Ihnen helfen soll, sich das Layout einer HTML-Tabelle besser vorzustellen. Aus Ihren Angaben erzeugt der Assistent den erforderlichen HTML-Code und fügt ihn in Ihr Dokument ein. Um auf den Tabellen-Assistenten zuzugreifen, gehen Sie oberhalb des Bearbeitungsfensters auf die Registerkarte Tabellen und klicken auf das entsprechende Icon. Abbildung 8.14 zeigt das Dialogfeld.

213

ColdFusion Studio

Abbildung 8.14: Der Tabellen-Assistent von Studio ermöglicht Ihnen, HTML-Tabellen auf einer grafischen Oberfläche zu definieren.

Durch Markieren von Zeilen oder Zellen und mit Hilfe der Schaltflächen + (Pluszeichen) und – (Minuszeichen) können Sie ganz einfach komplexe Tabellen anlegen, deren Zeilen sich über mehrere Spalten erstrecken und umgekehrt. Nachdem Sie ein grundlegendes Layout definiert haben, klicken Sie auf die Schaltfläche WEITER. Sie sehen das in Abbildung 8.15 gezeigte Dialogfeld.

Abbildung 8.15: Einrichten von Tabelleneigenschaften im Tabellen-Assistenten von Studio.

Dieser Dialog ermöglicht Ihnen, Tabelleparameter zu bearbeiten, wie beispielsweise für Breite, Ausrichtung oder Hintergrundfarbe. Klicken Sie noch einmal auf WEITER. Ein drittes Dialogfeld definiert die Eigenschaften einzelner Zellen. Mit der Schaltfläche FERTIGSTELLEN wird der HTML-Code für unsere hier definierte Tabelle in das Dokument eingefügt, wie in Abbildung 8.16 gezeigt.

214

Die Hilfestellung von Studio

Abbildung 8.16: Mit Hilfe der im Tabellen-Assistenten angegebenen Parameter erzeugt Studio den erforderlichen Code automatisch.

Der Frame-Assistent Die Oberfläche des Frame-Assistenten ist ähnlich der des Tabellen-Assistenten. Sie zeigt eine grafische Darstellung eines Browser-Bildschirms und ermöglicht Ihnen, die Anzahl und die Eigenschaften der verwendeten Frames zu definieren. Anhand der von Ihnen angegebenen Parameter erzeugt Studio den Code für eine Frameset-Seite und die zugehörigen Seiten, die den Frame-Inhalt bilden. Um auf den Frame-Assistenten zuzugreifen, gehen Sie auf die Registerkarte FRAMES über dem Hauptbearbeitungsfenster und klicken auf das Symbol FRAME-ASSISTENT. Sie sehen den in Abbildung 8.17 gezeigten Dialog. Nachdem Sie das Aussehen einer Frame-Seite skizziert haben, klicken Sie auf WEITER. Sie sehen den in Abbildung 8.18 gezeigten Eigenschaftendialog. Hier können Sie Namen für die einzelnen Frames angeben und Parameter definieren, wie beispielsweise Ränder, Blättern usw. Im Feld QUELL-URL definieren Sie den Namen des gesamten Framesets, beispielsweise my_frames_page.html. Klicken Sie auf die Schaltfläche FERTIGSTELLEN, um den Code einzufügen, der das Frameset erzeugt.

215

ColdFusion Studio

Abbildung 8.17: Aufbau eines Framesets mit Hilfe des Frame-Assistenten von Studio.

Abbildung 8.18: Definieren von Frame-Eigenschaften mit dem FrameAssistenten von Studio.

Der SQL-Editor Der SQL-Editor von Studio erlaubt Ihnen, komplexe Abfragen ganz einfach über eine Drag&Drop-Oberfläche zu erzeugen. Wenn Sie eine neue Abfrage erzeugen, stellt Studio eine Verbindung zu der entsprechenden Datenquelle her und zeigt die Feldnamen sowie den Inhalt der ausgewählten Tabelle an. Durch das Verschieben der Feldnamen mittels Drag&Drop in den SQL-Editor sehen Sie genau, welche Felder und welche Datentypen die Abfrage erzeugt.

216

Die Hilfestellung von Studio

Um eine neue Abfrage zu erzeugen, klicken Sie auf die Registerkarte CFML EINFACH oberhalb dem Bearbeitungsfenster und klicken auf das Symbol CFQUERY. Studio zeigt ein Dialogfenster an, in dem Sie den Namen für die Abfrage und die Datenquelle angeben und andere Abfrageparameter manuell bearbeiten können. Abbildung 8.19 zeigt das Dialogfenster.

Abbildung 8.19: Eine Abfrage in Studio anlegen.

Nachdem Sie die grundlegende Abfrage angelegt haben, können Sie entweder eine manuelle SQL-Anweisung erstellen, indem Sie diese einfach in das bereitgestellte Feld eingeben, oder mit Hilfe des Symbols neben dem Feld den visuellen SQL-Editor starten. Wenn Sie den Editor starten, ermöglicht Ihnen Studio, zu einer Datenquelle zu gehen und eine Tabelle auszuwählen, für die die SQL-Anweisung ausgeführt werden soll, wie in Abbildung 8.20 gezeigt. Nachdem Sie die Tabelle für die Abfrage ausgewählt haben, klicken Sie auf die Schaltfläche NEUE ABFRAGE. Studio startet seine Drag&Drop-SQL-Oberfläche. Falls Sie bereits mit SQL-Editoren in Programmen wie Microsoft Access gearbeitet haben, wird Ihnen diese Oberfläche vertraut vorkommen. Abbildung 8.21 zeigt den Hauptbildschirm des Editors.

217

ColdFusion Studio

Abbildung 8.20: Der Abfrageeditor fordert Sie zunächst auf, eine Datenquelle und eine Tabelle für die Abfrage auszuwählen.

Abbildung 8.21: Der SQL-Editor erzeugt automatisch eine Text-SQLAnweisung, wenn Sie sich auf seiner grafischen Oberfläche bewegen.

In Abbildung 8.21 zeigt das obere Fenster die Namen der Felder der ausgewählten Tabelle an. Ziehen Sie die Namen in das Feld SPALTE, um anzugeben, welche Felder Ihre Abfrage auswählen soll. Die Felder rechts neben SPALTE werden für die Definition weiterer Auswahlkriterien verwendet (beispielsweise WHERE-Anweisungen), oder zum Sortieren der von der Abfrage zurückgegebenen Datensätze.

218

Studio für Ihre Arbeit konfigurieren

Wenn Sie Feldnamen per Drag&Drop einfügen und Kriterien ändern, erscheint die entsprechende SQL-Anweisung als Text unten auf dem Bildschirm. Wenn Ihre Abfrage fertig ist, klicken Sie auf die Schaltfläche SCHLIESSEN und geben einen Namen an. Studio fügt den erzeugten Text in Ihr aktuelles Dokument ein.

8.7

Studio für Ihre Arbeit konfigurieren

Abhängig davon, wie Sie ColdFusion nutzen, können einige der komplexeren Funktionsmerkmale Ihre Arbeit unterstützen aber auch behindern. Beispielsweise ist die Funktion TAG-ABSCHLUSS ausgezeichnet dafür geeignet, eine neue Web-Seite anzulegen, aber sie fügt möglicherweise überflüssige schließende Tags ein, wenn Sie ein bereits existierendes Dokument bearbeiten. Der Tag-Abschluß und andere automatische Funktionen werden über die vertikale Symbolleiste links vom Editor aktiviert bzw. deaktiviert. Weitere Konfigurationsoptionen stehen über OPTIONEN | EINSTELLUNGEN zur Verfügung. Die verschiedenen Einstellungsmöglichkeiten sind in Tabelle 8.3 beschrieben. Einstellungskategorie

Funktion

Allgemein

Erlaubt die Einstellung von Position und Stil der Ressourcen-Registerkarten; steuert Programmwarnungen, die Verwendung langer Dateinamen und Splash-Bildschirme.

HTML

Setzt Präferenzen für Tags, auch ob der Tag-Text groß oder klein geschrieben werden soll, den Hexadezimalcode für Farben und ob das schließende Tag

für Absätze angegeben werden soll.

Startup

Definiert, welche Fenster unmittelbar nach Öffnen von Studio angezeigt werden sollen.

Positionen

Falls Sie bei der Installation von Studio nicht die vorgegebenen Verzeichnisse verwendet haben, können Sie hier auf die Hilfebibliotheken verweisen; außerdem definieren Sie hier die Position gespeicherter Codeausschnitte und der Standard-Template-Datei.

Dateieinstellungen

Definiert erkannte Dateinamenerweiterungen für Text und Grafik.

Editor

Konfiguriert Einstellungen für Tag-Hilfefunktionen, Farbcodierung und Standard-Templates.

Browser

Definiert den internen Standard-Browser sowie die Server-Zuordnungen.

Entwurf

Setzt Attribute für die Funktion ENTWURFSANSICHT.

Tabelle 8.3: Konfigurationseinstellungen von Studio

219

ColdFusion Studio

Einstellungskategorie

Funktion

Überprüfung

Aktiviert die Tag-Überprüfung, um Ihre Tags mit etablierten Standards wie HTML 2, 3 oder 4 sowie Netscape und Internet ExplorerErweiterungen zu vergleichen.

Rechtschreibprüfung

Ermöglicht Ihnen, das Rechtschreibmodul von Microsoft Windows (falls vorhanden) oder ein externes Rechtschreibprogramm zu benutzen.

Dreamweaver

Ermöglicht die Integration mit Macromedia Dreamweaver.

CodeSweeper

Einstellungen für die CodeSweeper-Funktion von Studio.

Projekte

Definiert Dateitypen, die in Studio-Projekte aufgenommen werden sollen.

Tag-Definitionsbibliothek

Einige Markup-Sprachen verwenden identische Tags; diese Registerkarte erlaubt Ihnen, die Reihenfolge festzulegen, in der Studio Sprachen durchsucht, um Tag-Definitionen zu erhalten.

Tabelle 8.3: Konfigurationseinstellungen von Studio (Forts.)

Um schnell über die Tastatur auf das Konfigurationsprogramm von Studio zuzugreifen, drücken Sie (F8).

8.8

Hilfe- und Referenzfunktionen von Studio

Wie bereits erwähnt, kann dieses Kapitel nur einen grundlegenden Überblick über ColdFusion Studio bieten. Glücklicherweise beinhaltet die Applikation eine sehr umfassende und bedienfreundliche Hilfereferenz, die nicht nur Informationen zu der Studio-Oberfläche enthält, sondern auch zu ColdFusion Server, dem CFML-Tag-Set und HTML-Funktionen. Um auf den Referenzabschnitt zuzugreifen, klicken Sie auf das Symbol HILFE auf den Ressourcen-Registerkarten unten links auf dem Bildschirm. Studio zeigt im linken Fenster einen aufklappbaren Hilfeindex an. Um den Index nach einem oder mehreren Schlüsselwörtern zu durchsuchen, klicken Sie auf das Symbol SUCHEN (das Sie an der Brille erkennen) im oberen Teil des Ressourcenfensters. Studio zeigt ein Suchfeld an, in das Sie Schlüsselwörter eingeben können, um ein geeignetes Hilfethema anzuzeigen.

220

Zusammenfassung

Wenn Sie nach einem allgemeinen Begriff wie Formular oder Eingabe suchen, grenzen Sie die Suchkategorien mit Hilfe der Kontrollkästchen im Suchdialog ein.

8.9

Zusammenfassung

ColdFusion Studio ist das Partner-Produkt, das Allaire zu CF Server anbietet. Es unterstützt eine semi-grafische Oberfläche zum Anlegen von Template-Dateien, ebenso wie verschiedene automatisierte Funktionen zur Erleichterung der Codierung. Wenn Sie keine Kopie von Studio besitzen, können Sie auf der Web-Site von Allaire eine Demo-Version herunterladen. Einer der größten Vorteile dieser Applikation liegt in ihrer Fähigkeit, mit Remote-Dateien und -Datenquellen zu arbeiten. Remote- und lokale Server müssen im Ressourcenbereich von Studio definiert werden, bevor man auf ihren Inhalt zugreifen kann. Studio unterstützt außerdem einen sehr leistungsfähigen Editor, der auf dem HTML-Editor HomeSite von Allaire basiert. Alle HTML- und CFML-Tags sind durch Farbcodierung einfach zu erkennen. Alle Tags können durch Anklicken einer einzigen Schaltfläche in ein Dokument eingefügt werden. Der Editor stellt eine MDI-Oberfläche bereit, wo es ganz einfach ist, alle Dateien eines Projekts zu öffnen und zu bearbeiten.

8.10 Workshop F&A F

Ist die Demo-Version von Studio beschränkt? A

F

Nur in Hinblick auf die Gültigkeitsdauer. Die Demo-Version läuft nach 30 Tagen ab.

Ich habe bereits den HomeSite-Editor von Allaire. Ist er mit ColdFusion kompatibel? A

Ja, aber er beinhaltet nicht die ColdFusion-spezifischen Funktionen , die in Studio unterstützt werden.

221

ColdFusion Studio

F

Ich verwende Netscape oder Browser X für die Vorschau auf meine Dateien. Kann ich Studio so konfigurieren, dass es ihn standardmäßig verwendet? A

Ja. Wählen Sie OPTIONEN | EINSTELLUNGEN | BROWSER und geben Sie den Pfad zu Ihrem Browser an.

Quiz 1. Wo befinden sich die Ressourcen-Registerkarten von Studio standardmäßig? 2. Was müssen Sie tun, bevor Sie auf Remote-Dateien oder -Datenquellen zugreifen können? 3. Wie greifen Sie auf die Funktion Tag-Vorschau von Studio zu? 4. Wie starten Sie den Tabellen-Assistenten oder den Frame-Assistenten? 5. Was macht der SQL-Editor? 6. Wie aktivieren bzw. deaktivieren Sie den Ressourcenbereich? 7. Was müssen Sie tun, um ColdFusion-Templates in der Browser-Ansicht des Editors anzuzeigen?

Antworten 1. Unten im Ressourcenbereich, oder unmittelbar unterhalb der beiden kleineren Fenster links auf dem Bildschirm. 2. Sie müssen auf der Ressourcen-Registerkarte REMOTE-DATEIEN einen Remote-Server definieren. 3. Geben Sie den Anfang eines CFML- oder HTML-Tags ein und warten Sie darauf, dass das Dropdown-Feld erscheint. 4. Wählen Sie die entsprechende Bearbeitungs-Registerkarte unmittelbar oberhalb des Bearbeitungsfensters und klicken Sie auf das Symbol Tabellen-Assistent oder FrameAssistent. 5. Er zeigt eine Drag&Drop-Oberfläche an, auf der Sie eine SQL-Anweisung erstellen können. Nachdem Sie eine Anweisung eingegeben haben, wird Sie als Text in Ihre Template-Seite eingefügt. 6. Die Taste (F9) schaltet den Ressourcenbereich um und bietet damit mehr Bildschirmplatz im Bearbeitungsfenster.

222

Workshop

7. Sie müssen Entwicklungszuordnungen definieren, um Studio den URL Ihres WebServers und der zugehörigen Dateien mitzuteilen.

Übungen 1. Falls Sie noch keine Kopie von Studio besitzen, laden Sie sich die Demo-Version von der Web-Site von Allaire herunter. 2. Definieren Sie Ihren lokalen Server im Ressourcenbereich oder stellen Sie eine Verbindung zu einem Remote-Server her und überprüfen Sie Ihre Verbindung, indem Sie die Remote-Datenquelle und die Template-Dateien anzeigen. 3. Legen Sie mit Hilfe von Studio eine der Beispiel-Template-Dateien aus Kapitel 7 an. Erstellen Sie mit dem SQL-Editor die erforderliche Abfrage. 4. Definieren Sie auf der Registerkarte Projekte im Ressourcenbereich ein Projekt. Falls Sie mehrere CF-Projekte auf Ihrem System haben, definieren Sie alle. 5. Machen Sie sich mit der Hilfereferenz von Studio vertraut. Suchen Sie nach einem Schlüsselwort, das Sie interessiert.

223

Erweiterung Ihrer Applikationen mit Variablen und If-Then-Anweisungen

9

Variablen und If-Then-Anweisungen

In den Kapiteln 6 und 7 haben Sie eine dynamische Web-Applikation erstellt, die sowohl Eingaben als auch Ausgaben verarbeiten konnte. Dabei haben Sie sehr viele Variablen verwendet – Abfragevariablen, um Ausgaben zu erzeugen, und Formularvariablen, um Daten von einer Template an eine andere zu übergeben. Dieses Kapitel stellt Ihnen zwei leistungsfähige Tags vor, die mit Hilfe von Variablen steuern, wie Daten verarbeitet werden. In diesem Kapitel geht es um die folgenden Themen: 쐽

Verwendung des -Tags mit Variablen.



Realisierung eines grundlegenden Kennwortschutzes mit Hilfe von .



Anlegen und Definieren von ColdFusion-Variablen.



Mit Variablen einen einfachen Zählmechanismus einrichten.

9.1

Definieren einer Beispielapplikation

Gargantuan Electronics ruft schon wieder an. Man kann Ihnen gar nicht genug für Ihre gute Arbeit danken, die Sie in den Kapiteln 6 und 7 geleistet haben. Die Abteilung für den technischen Support besitzt jetzt eine funktionierende ColdFusion-Applikation, die den Angestellten erlaubt, die verrücktesten Supportanfragen aufzuzeichnen, die sie jeden Tag erhalten. Jetzt können sie Informationen über ein einfaches Web-Formular eingeben, und der Herr am Telefon sagt, dass die Angestellten diese Methode ausgezeichnet im Griff haben. Es gibt jedoch ein kleines Problem, und man braucht Ihre Hilfe. Die einfache Zugriffsmethode, die Sie geschaffen haben, hat dummerweise zu den unvermeidlichen Scherzen zwischen den Kollegen geführt. Einige Kollegen haben Telefonanrufe in die Datenbank eingetragen und diese einfach anderen Kollegen zugeschrieben. Vor kurzem gab es einen Eintrag, der besagte, dass »Joey« einen Anruf vom Bundesgesundheitsminister hatte, der fragte, ob Zigarettenrauch schädlich für sein Gargantuan CD-ROM-Laufwerk sei. Joey schwört, dass er nichts mit dem Eintrag zu tun hat. Man möchte, dass Sie einen einfachen Kennwortschutz für die Eingabeseite der Applikation anlegen. Jedem Techniker wird ein Kennwort zugewiesen, das er eingeben muss, damit er Einträge in der Datenbank vornehmen darf. Man braucht dabei keine 128-BitPGP-Verschlüsselung und auch keine anderen extremen Sicherheitsmaßnahmen, sondern eben nur eine einfache Methode, die die Techniker bei Vernunft hält. Außerdem würde man gerne einen Wettbewerb für den technischen Support realisieren, wobei die teilenehmenden Angestellten, die innerhalb eines bestimmten Zeitraums die meisten verrückten Supportanfragen aufzeichnen, irgendeinen Preis bekommen, wie beispielsweise eine Klinikpackung Aspirin. Man möchte, dass Sie eine Methode schaffen, die

226

Das -Tag

zukünftigen Einträge der einzelnen Techniker in der Datenbank zu zählen, und den Angestellten die Auswahl zu erlauben, ob sie an dem Wettbewerb teilnehmen wollen oder nicht. Sie versichern dem netten Herrn am Telefon, dass Sie bereits Hunderte kennwortgeschützter Applikationen entwickelt haben, und dass dies die leichteste Übung für Sie ist. Nachdem Sie aufgelegt haben, durchsuchen Sie sofort den Index dieses Buchs nach dem Wort »Kennwort« und machen sich an die Arbeit.

9.2

Das -Tag

Um der Applikation von Gargantuan einen Kennwortschutz hinzuzufügen, verwenden Sie ein leistungsfähiges ColdFusion-Tag, . wird in Kombination mit Variablen genutzt, um eine bedingte Anweisung in einem Template einzurichten. Im Wesentlichen teilt es ColdFusion mit »Falls dies zutrifft, dann mach jenes!« Dabei bleibt es Ihnen als Entwickler überlassen, zu definieren, was dies und jenes ist. Bedingte Anweisungen steuern ColdFusion-Prozesse, indem sie festlegen, dass für die Ausführung von Aktion A die Bedingung B erfüllt sein muss.

Betrachten wir ein einfaches if-then-Konstrukt unter Verwendung von . Ich habe ein grundlegendes Formular angelegt, das eine Frage stellt. Der Benutzer beantwortet meine Frage, indem er auf die Links Richtig oder Falsch klickt, wie in Abbildung 9.1 gezeigt. Wirklich nur eine einfache Frage – ich hätte nicht einmal ein ColdFusion-Template gebraucht, um sie zu erstellen. Standard-HTML wäre ausreichend gewesen. Den Code sehen Sie in Listing 9.1. Listing 9.1: question.html 1: 2: 3: Meine Frage 4: 5: Bitte beantworten Sie die folgende Frage, indem Sie auf einen der Links ➥klicken: 6: 7: Man sollte Computer-Hardware nur bedienen, wenn man mit beiden ➥Beinen barfuss in einer Pfütze steht.



227

Variablen und If-Then-Anweisungen

8: 9: Richtig

10: Falsch

11: 12:

Beachten Sie, dass die Links true und false in den Zeilen 9 und 10 beide auf dieselbe Template-Seite verweisen, answer.cfm. In den Links habe ich außerdem die Variable reply definiert und für den Link Richtig auf True, für den Link Falsch auf False gesetzt.

Abbildung 9.1: Meine Beispielseite mit einer Frage.

Der Gedanke dahinter ist, dass ich, statt zwei Seiten anzulegen, die die beiden Antworten verarbeiten, ein einziges ColdFusion-Template nutze und darauf ein if-then-Konstrukt anlege, das beide Antworten abdeckt. Den Code für meine Antwortseite sehen Sie in Listing 9.2. Listing 9.2: answer.cfm 1: 2: 3: 4: 5: 6: 7: 8: 9:

228

Ihre Antwort war: #reply#

Das -Tag

10: 11: Oiiiiii....nein, Sie sollten vielleicht Ihre ➥Benutzerhandbücher noch einmal lesen. 12: 13: 14: 15: 16: 17: Richtig! Sie haben Ihre Hausaufgaben gemacht und werden ➥Ihre Elektronikerlizenz in etwa ➥4 bis 6 Wochen erhalten! 18: 19: 20: 21:

Diese Template-Seite macht drei Dinge. Erstens verwendet sie in Zeile 3 ein Tag vor der -Zeile, so dass ich den Wert der von der Frage-Seite übergebenen Variablen anzeigen kann. Zweitens verwendet sie in Zeile 9 mit einer qualifizierenden Anweisung, die feststellt, ob die Variable reply gleich true ist. In diesem Fall zeigt das Template den Text zwischen dem ersten -Tag in Zeile 9 und dem nächsten in Zeile 13 an. Falls die Anweisung keine Übereinstimmung feststellt, ignoriert sie den ersten Text und geht zum zweiten -Tag in Zeile 15. Ist die Variable reply gleich false, zeigt das Template den Text zwischen den -Tags in den Zeilen 15 und 19 an. Beachten Sie, dass ich in den IF-Anweisungen in den Zeilen 9 und 15 keine Doppelkreuze um die Variable reply angegeben habe. erkennt reply automatisch als Variable und handelt entsprechend. Beachten Sie auch, dass ich die Variablenwerte in einfache Anführungszeichen eingeschlossen habe, um zu kennzeichnen, dass der Text als solcher interpretiert werden soll. Wenn Sie schreiben, nimmt ColdFusion automatisch an, dass Sie dahinter einen Vergleich mit einer Variablen oder eine bedingte Anweisung verwenden wollen. Die Ergebnisse dieses Template sehen Sie in den Abbildungen 9.2 und 9.3.

229

Variablen und If-Then-Anweisungen

Abbildung 9.2: Die TemplateSeite answer.cfm für reply gleich false.

Abbildung 9.3: Die TemplateSeite answer.cfm für reply gleich true.

Das -Tag Das -Tag wird häufig in Kombination mit einem zweiten Tag verwendet, . Wie der Name schon sagt, wird verwendet, um damit auszudrücken »Falls etwas anderes zutrifft, dann...«. Das -Tag besagte »Wenn dies gilt, dann tu jenes«, und

230

Das -Tag

wenn man ihm ein folgen lässt, heißt das für ColdFusion »Falls es nicht zutraf, mache statt dessen jenes«. Um die Verwendung von zu demonstrieren, habe ich meine Frage-Seite so abgeändert, dass noch eine dritte Alternative angeboten wird, »Ich weiß nicht«, wie in Abbildung 9.4 gezeigt.

Abbildung 9.4: Meine neue und überarbeitete Frage-Seite mit drei möglichen Antworten.

Um die dritte Auswahl anzubieten, habe ich der ursprünglichen Frage-Seite den folgenden Text hinzugefügt: Ich weiß nicht



Dies ist ein weiterer Link, wobei die Variable reply auf dont_know gesetzt wurde. Beachten Sie, dass ich hier den Apostroph (don't) weggelassen habe, weil ColdFusion ihn bei der Übergabe an die Antwort-Seite als einfaches Anführungszeichen interpretieren könnte. Außerdem habe ich das Leerzeichen durch einen Unterstrich ersetzt. ColdFusion bietet einige Werkzeuge, die Zeichen wie Apostrophe verarbeiten können, wenn sie in Variablen auftauchen – einige davon werden später in diesem Kapitel noch vorgestellt. Um Zeit zu sparen, ist es jedoch immer am einfachsten, diese Zeichen wo immer möglich zu vermeiden. Auf meiner neuen Frage-Seite biete ich drei mögliche Ergebnisse für meine Antwort-Seite an, Richtig, Falsch und Ich weiß nicht. Ich könnte dafür drei separate -Anweisungen erzeugen, aber es gibt eine einfachere Methode.

231

Variablen und If-Then-Anweisungen

Der Kern meiner Frage war »Richtig oder Falsch: Man sollte Computer-Hardware nur bedienen, wenn man mit beiden Beinen barfuss in einer Pfütze steht.« Offensichtlich erwarten wir die Antwort Falsch, aber wenn jemand auf Richtig oder Ich weiß nicht klickt, ist das ein Alarmzeichen. Ich kann für die Antworten True und Ich weiß nicht dieselbe Reaktion verwenden, weil dieser Benutzer sich und andere gefährdet und dringend Hilfe braucht. Ich verwende , um damit auszudrücken »Falls irgendeine andere Antwort als Falsch gegeben wird, dann mach jenes«. Listing 9.3 zeigt, wie das in meinem Template answer.cfm realisiert ist. Listing 9.3: Der abgeänderte Ausgabeabschnitt von answer.cfm 1: 2: 3: 4: 5: Ihre Antwort war: #reply# 6: 7: 8: 9: 10: 11: Sie haben recht. Sie haben Ihre Hausaufgaben gemacht ➥und werden Ihre Elektronikerlizenz in ➥etwa 4 bis 6 Wochen erhalten. 12: 13: 14: 15: Verlassen Sie sofort Ihren Computer. ➥Ihre Antwort hat gezeigt, dass Sie nur unter Aufsicht Erwachsener ➥mit elektronischen Geräten arbeiten sollten. 16: 17: 18: 19:

ist Teil eines -Konstrukt, d.h. es erscheint immer zwischen den Tags und und kann nicht eigenständig verwendet werden.

Der Code in Listing 9.3 vergleicht den Wert der Variablen reply mit dem Wert false. Falls der Vergleich true ergibt, gibt sie den Text weiter, der vor dem -Tag steht.

232

Eine Applikation mit erstellen

Enthält die Antwort etwas anderes als das Wort false, gibt das Template statt dessen die zweite Zeichenkette weiter. Auf diese Weise habe ich drei mögliche Antworten mit einer -Anweisung abgedeckt.

9.3

Eine Applikation mit erstellen

Kommen wir zurück zu unserem Projekt für Gargantuan. Gargantuan will, dass die technischen Angestellten für jeden Eintrag ein Kennwort angeben. Und hier erkennen Sie vielleicht schon, wie praktisch sein kann. Sie denken, am besten wird der Kennwortschutz im Kapitel 7 erstellten Eingabe-Template untergebracht. Wenn der Angestellte jetzt Details zu einem verrückten Support-Anruf eingeben will, muss er auch das Kennwort für seinen Benutzernamen eingeben. Wird das Formular übergeben, wertet ColdFusion das Kennwort aus. Ist der Vergleich erfolgreich, wird die vom Benutzer vorgegebene Beschreibung des Anrufs in die Datenbank eingetragen. Andernfalls gibt ColdFusion eine Fehlermeldung zurück. Als erstes müssen Sie der Datenbank Kennwörter hinzufügen. Aus Kapitel 6 wissen Sie, dass die Namen aller Angestellten in der Tabelle techs der Datenbank von Gargantuan abgelegt sind. Falls Sie eine Kopie einer Datenbank auf Ihrem lokalen Server verwalten, achten Sie immer darauf, die existierende Datenbank des Kunden nicht mit einer älteren Version zu überschreiben. Öffnen Sie die Tabelle und fügen Sie das neue Feld ein, password, wie in Abbildung 9.5 gezeigt.

Abbildung 9.5: Die abgeänderte Tabelle techs in der Datenbank calls.mdb.

Für Testzwecke habe ich jedem Angestelltennamen ein Kennwort zugeordnet. Dazu habe ich einfach die Namen rückwärts geschrieben – kein erhöhtes Sicherheitsniveau, aber die Leute bei Gargantuan können sie später immer noch ändern.

233

Variablen und If-Then-Anweisungen

9.4

Die Seite für die Kennwortprüfung

Um die Kennwort-Seite zu erstellen, öffnen Sie zunächst das Eingabeformular, das Sie in Kapitel 7 angelegt haben, und nehmen ein paar Ergänzungen vor, um das Feld für die Eingabe des Kennworts anzulegen. Meine abgeänderte Seite sieht aus wie in Listing 9.4 gezeigt. Falls Sie die Einführung in ColdFusion Studio in Kapitel 8 gelesen haben, verwenden Sie Studio, um die Übungen in diesem Kapitel nachzuvollziehen. Andernfalls können Sie auch einen Standard-Texteditor verwenden. Listing 9.4: Die abgeänderte tech_calls.cfm 1: 8: 21:

SELECT password FROM techs WHERE tech_name = '#tech_who_took_call#'

2: 3: 4: SELECT password FROM techs 5: WHERE tech_name = '#tech_who_took_call#' 6: 7: 8: 29: 30: Return to List of Calls
31: 32: 33: 34:

238

Die Einfügeseite

Die -Anweisung in den Zeilen 11 bis 26 vergleicht die vom Benutzer übergebenen Kennwortdaten mit dem von der Abfrage zurückgegebenen Kennwort. Stimmen die beiden nicht überein, erhält der Benutzer die Fehlermeldung in Zeile 13. In allen anderen Fällen () wird der neue Datensatz in die Tabelle calls (Zeilen 17 bis 22) eingetragen und der Benutzer erhält eine Bestätigungsmeldung. Beachten Sie auch, dass ich dem -Tag eine Liste mit Formularfeldern hinzugefügt habe. Das war erforderlich, weil dieses Template jetzt mit einigen neuen Variablen arbeitet, form.password und get_pass.password, die ich nicht mit den anderen Anrufdetails in die Tabelle calls schreiben will. Sie wissen, dass standardmäßig versucht, alle Variablen zum Einfügen an die Datenbank zu senden. In diesem Fall hätte ich dann einen ColdFusion-Fehler erhalten, weil es in der Tabelle calls kein password-Feld gibt. In einem Browser sieht die abgeänderte insert.cfm wie in Abbildung 9.7 gezeigt aus.

Abbildung 9.7: Die Einfüge-Seite für Gargantuan, nachdem eine Kennwortüberprüfung eingeführt wurde.

Wenn ein Benutzer Anrufdaten in das Formular aus Abbildung 9.6 eingibt, sieht er die in Abbildung 9.8 gezeigte Bestätigung, falls er ein richtiges Kennwort eingegeben hat. Erzeugt das Kennwort keine Übereinstimmung, sieht er die in Abbildung 9.9 gezeigte Ausgabe.

239

Variablen und If-Then-Anweisungen

Abbildung 9.8: Wurde das Kennwort korrekt eingegeben, sehen Sie diese Bestätigung und die Daten werden in die Tabelle calls eingetragen.

Abbildung 9.9: Wird ein fehlerhaftes Kennwort eingegeben, erhalten Sie diese Fehlermeldung und es wird nichts in die Datenbank eingetragen.

240

Variablen mit definieren

9.6

Variablen mit definieren

Die zweite Änderung, die Gargantuan bestellt hat, ist ein Eintragszähler, so dass die Angestellten abhängig von der Anzahl der von ihnen protokollierten Anrufe an einem Wettbewerb teilnehmen können. Wenn ein Angestellter neue Informationen in die Datenbank einträgt, erlaubt ihm die Bestätigungsmeldung, den übertragenen Anruf seinem Gesamtzählerstand hinzuzufügen. Nach einer zuvor festgelegten Zeit belohnt Gargantuan den Angestellten mit den meisten erfassten Anrufen. ColdFusion bietet mehrere Methoden, Dinge zu »zählen«, aber für diese Aufgabenstellung wollen wir nur eine davon betrachten – das -Tag. bietet dem Entwickler die Möglichkeit, neue Variablen anzulegen, die nicht in Abfragen oder Formulardaten definiert sind. Mit können Sie beliebige Variablen anlegen, ihnen Werte zuweisen und sie an beliebiger Stelle in Ihrer Template-Datei verwenden. Um beispielsweise eine einfache Textvariable zu erzeugen, die meinen Namen anzeigt, verwende ich das -Tag wie folgt:

In diesem Template kann ich überall innerhalb von -Tags auf meinen Namen zugreifen, indem ich auf die Variable developer verweise. Ich habe beim Anlegen der Variablen keine Doppelkreuze verwendet, aber wenn ich später in einem Dokument auf die Variable verweise, muss ich die Doppelkreuze verwenden. Anders als einige Programmier- und Skriptingsprachen verwendet ColdFusion »typlose« Variablen, d.h. Sie müssen dem Programm nicht mitteilen, ob ein Variablenwert nummerisch, Text, Ja/Nein oder Zeit/Datum ist. Zugegeben, die Umwandlung eines Zwei-Wort-Namens in eine Ein-Wort-Variable wird Ihnen vielleicht nicht besonders viel Zeit sparen, aber lesen Sie weiter, um noch andere Einsatzmöglichkeiten für kennen zu lernen. Variablen, die mit erstellt werden, sind nicht immer dafür vorgesehen, dem Benutzer angezeigt zu werden. Es ist zwar möglich, aber häufig wird im Hintergrund verwendet, um Dinge bei der Seitenausgabe oder der Datenbankänderung zu steuern.

Der Zählmechanismus Um die Applikation für Gargantuan mit Hilfe eines Zählers auszubauen, lege ich mit einen Zählmechanismus an. Über eine Abfrage ermittle ich, wie viele Beiträge

241

Variablen und If-Then-Anweisungen

ein Angestellter produziert hat. Mit lege ich dann eine neue Variable an, deren Wert gleich dem vorherigen Wert plus 1 ist. Die neue Variable reflektiert den aktuellen Zähler für den Angestellten. Als erstes müssen Sie ein Feld in der Datenbank von Gargantuan anlegen, das den aktuellen Zähler für den Angestellten aufnimmt. Weil die Angestellten der Support-Abteilung alle in der Tabelle techs aufgelistet sind, ist das eine ideale Position für den Zähler. In Abbildung 9.10 habe ich der Tabelle techs das neue Feld submissions hinzugefügt und jeweils den Ausgangswert 0 eingetragen.

Abbildung 9.10: Die Tabelle techs in der Datenbank von Gargantuan, die jetzt einen Zähler für die Einträge der einzelnen Techniker beinhaltet.

Jetzt fügen Sie dem existierenden Template insert.cfm Text hinzu. Wenn ein Benutzer eine Bestätigung erhält, dass sein Beitrag in die Datenbank eingefügt wurde, sieht er gleichzeitig eine Schaltfläche oder einen Link, die bzw. der ihm ermöglicht, diesen Anruf zu »zählen« und somit an dem Wettbewerb teilzunehmen. Wenn der Benutzer auf die Schaltfläche klickt, werden sein Benutzername und der neue Zählerwert einer Aktionsseite übergeben, die die Datenbank mit Hilfe des -Tags aktualisiert. Ich dachte, eine Schaltfläche wäre für diesen Zweck ganz praktisch, deshalb habe ich insert.cfm ein kurzes Formular hinzugefügt, wie in Listing 9.7 gezeigt.

Listing 9.7: Bestätigung der Kennwortdaten und Eingabe von Details zu den Anrufen 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:

242

48:

SELECT * FROM 8tracks ORDER BY artist







SELECT * from 8tracks ORDER BY artist

SELECT * from 8tracks ORDER by artist



29: 30:
31: 32: 33: 34: 35: 36: 37: 52: 53:
KünstlerTitelZustandVerwendung
54: 55: 56:

Beachten Sie, dass ich für jedes Tabellenelement Kommentare eingefügt habe, und Abschnitte mit Tabellendaten, , eingerückt habe, um sie von Tabellenzeilenabschnitten, , abzuheben. Die in Abbildung 10.9 verwendete Abfrage ist identisch mit der aus früheren Beispielen. In Zeile 4 wählt sie alle Felder in allen Datensätzen der Datenbanktabelle 8tracks aus. Interessant wird es eigentlich ab dem -Tag in Zeile 18.

260

Ausgabetabellen mit dem
-Tag von HTML erzeugen

Abbildung 10.6: Um diese Tabelle anzulegen, kombinieren Sie

und die
Tags von HTML.

Bei der Definition der Tabelle haben wir keinen -Abschnitt spezifiziert. Wir wollen nämlich, dass die beiden ersten Zeilen der Tabelle (der Titel und die Überschriften) nur einmal erscheinen. Hätten wir diese Zeilen in -Tags eingeschlossen, würden sie für jeden von meiner Abfrage zurückgegebenen Datensatz wiederholt. Die Tabelle verwendet dir Rahmenbreite 2 und den cellpadding-Parameter 4, der um jedes angezeigte Textelement ein bisschen Abstand einfügt. Außerdem verwenden wir align="center", um die Tabelle auf dem Browser-Bildschirm zu zentrieren. Die erste Tabellenzeile in Zeile 22 enthält den Text, der zum Titel der Tabelle wird. Er erstreckt sich dank des COLSPAN-Parameters über alle vier Spalten. Der Parameter BGCOLOR legt einen schwarzen Hintergrund (Hex-Code #000000) fest. Vor diesem Hintergrund verwenden wir eine weiße Schrift (Hex-Code #FFFFFF), so dass der Titel hervorgehoben dargestellt wird. Die zweite Tabellenzeile in Zeile 30 richtet die vier Spalten ein, in denen die Überschriften gezeigt werden. Der Überschrifttext wird fett ausgezeichnet. Wir haben innerhalb jedes -Tag, um eine Zeile zu erzeugen, gefolgt von vier -Tag, nachdem wir alle vier Zeile angegeben haben. Danach schließen wir das -Tag und die eigentliche Tabelle in den Zeilen 49 und 53. Dieses Beispiel erzeugt eine relativ einfache Tabelle, aber Sie sehen, wie das Ganze sehr schnell komplex werden kann, wenn innerhalb eines Tabellen-Tags mehrere Abschnitte verwendet werden. Die Übungen am Ende dieses Kapitels werden Ihnen zeigen, wie andere Tabellentypen erzeugt werden, um Ihre ColdFusion-Fertigkeiten zu testen.

10.4 Daten gruppieren Jetzt wollen wir die Tabellen einen Moment vergessen und einen anderen Ausgabetrick von ColdFusion betrachten, der Ihnen hilft, Ihre Seiten übersichtlicher zu gestalten. Betrachten Sie noch einmal Abbildung 10.1, wo Sie den Inhalt der Tabelle 8tracks in linearem Format sehen. Beachten Sie, dass die Datensätze hier in keiner bestimmten Reihenfolge angezeigt werden – standardmäßig erscheinen sie in der Reihenfolge, in der sie in die Datenbank eingegeben wurden. In Kapitel 5 habe ich gezeigt, wie der ORDER BY-Parameter in einer SQL-Abfrage verwendet werden könnte, um die Anzeigereihenfolge von Datensätzen zu ändern. Hätte ich beispielsweise in der Abfrage für Abbildung 10.1 ORDER BY condition angegeben, würden alle Datensätze dem Zustand nach alphabetisch sortiert ausgegeben, so dass zuerst alle Bänder im ausgezeichneten Zustand angezeigt werden usw. Das ist zwar ausreichend, aber einer besseren Seitenorganisation halber könnte es sinnvoll sein, bestimmte Datensätze als Gruppe angeordnet zu zeigen. Betrachten Sie dazu Abbildung 10.7. Diese Seite zeigt die Vorteile bei der Gruppierung von Ausgabedaten.

262

Ausgaben mit dem GROUP-Parameter anlegen

Abbildung 10.7: Die Tabelle 8tracks, sortiert und gruppiert nach dem Feld condition.

Die Gruppierung von Daten bedeutet, dass sie nach einer Gemeinsamkeit angeordnet werden. In dem Beispiel aus Abbildung 10.7 wurden die Datensätze nach dem Inhalt des Felds condition gruppiert. Durch die Anordnung Ihrer Abfrageergebnisse in Gruppen machen Sie Ihre Seiten übersichtlicher. Auf einer Seite wie der in Abbildung 10.7 gezeigten ist es ganz einfach, nachzusehen, welche Bänder noch abspielbar sind, und welche ich bei der nächsten Reise genau so gut zu Hause lassen könnte. Durch die Verwendung verschiedener Felder für die Gruppierung können Sie Ihre Ausgabe dem jeweiligen Publikum anpassen. Eine Tabelle mit Produktaufträgen könnte beispielsweise nach dem Kunden gruppiert werden, um alle Aufträge anzuzeigen, die von einem bestimmten Kunden erteilt wurden, oder nach dem Produkt, um zu zeigen, welche Produkte am besten verkauft werden, oder nach der Adresse, um zu zeigen, in welchen Orten welche Produkte gekauft werden.

10.5 Ausgaben mit dem GROUP-Parameter anlegen Um Seiten wie in Abbildung 10.7 gezeigt zu erstellen, verwenden Sie eine ORDER BY-Klausel in Ihrer in Kombination mit dem GROUP-Parameter in Ihrer Anweisung. ORDER BY bewirkt, dass die Ergebnisse Ihrer Abfrage in einer bestimmten Rei-

263

Ausgaben mit Hilfe von Tabellen und Gruppen organisieren

henfolge zurückgegeben werden, wobei Datensätze alphabetisch oder nummerisch nach dem von Ihnen angegebenen Feld sortiert werden. Der GROUP-Ausgabeparameter von ColdFusion funktioniert nur dann, wenn Sie in Ihrer SQL-Abfrage eine ORDER BY-Anweisung angegeben haben. Damit mehrere Datensätze korrekt gruppieren kann, muss es diese nach dem »gruppierten« Feld vorsortiert erhalten. Der GROUP-Parameter übernimmt die Steuerung im -Abschnitt eines Template, um sortierte Datensätze in definierbaren Gruppen anzuordnen. Betrachten Sie den Code für Abbildung 10.7 in Listing 10.4. Listing 10.4: tapes.cfm 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:

264



Die 8-Spur-Bänder in meinem Auto

Die 8-Spur-Bänder in meinem Auto

  • Künstler: #artist#
    Titel: #title#
    Verwendung: #uses#





    Ausgaben mit dem GROUP-Parameter anlegen

    32: 33: 34: 35: 36: 37: 38: 39:



    Betrachten Sie zuerst den Abfrageabschnitt in den Zeilen 3 bis 5. Er verwendet eine einfache SELECT-Anweisung, die den Inhalt aller Datensätze der Tabelle 8tracks ermittelt. Die SQL-Anweisung verwendet die ORDER BY-Klausel, um damit anzugeben, dass die Ergebnisse in alphabetischer Reihenfolge nach dem Inhalt des Felds condition zurückgegeben, und innerhalb dieser Reihenfolge nach dem Feld artist sortiert werden sollen. Wenn wir diese Abfrage ohne weitere Änderungen verwenden, zeigt unsere Seite einfach eine Liste aller Bänder an, wobei diejenigen in ausgezeichnetem Zustand zuerst kommen, die wiederum nach alphabetisch nach dem Künstler sortiert sind usw. Beachten Sie außerdem, dass in den Zeilen 19 und 25 zwei -Abschnitte verwendet werden, um die Abfragedaten anzuzeigen, die ineinander verschachtelt sind. Eine Verschachtelung liegt vor, wenn Sie ein Paar von -Tags (die untergeordneten Tags) innerhalb eines bereits existierenden Abschnitts einfügen (die übergeordneten Tags). Das erste, übergeordnete Tag-Paar sehen Sie in Zeile 19. Es identifiziert die Abfrage, aus der die Daten ermittelt werden sollen, und gibt mit Hilfe des GROUP-Parameters an, welches Feld für die Gruppe verwendet wird. Stellen Sie sich den Inhalt jeder Gruppe als Untermenge aller von der Abfrage zurückgegebenen Datensätze vor. Unmittelbar nach diesem Tag wird der Text Bandzustand: #condition# angegeben, um die Gruppe zu kennzeichnen. Das Tag

      , das eine nicht-geordnete Liste kennzeichnet, erscheint in Zeile 21. Es erzeugt eine mit Absatzmarkierungen versehene ungeordnete Liste aus den Einträgen. In diesen Ausgabeabschnitt ist das zweite -Paar verschachtelt, das in Zeile 25 beginnt. Hier haben wir keinen Abfragenamen angegeben, weil ColdFusion standardmäßig voraussetzt, dass wir die von der im übergeordneten Tag-Paar angegebenen Abfrage zurückgegebenen Daten verwenden wollen. Innerhalb jeder Gruppe verwenden wir
    • , das Listenelement-Tag, um damit festzulegen, dass jeder Datensatz in der aktuellen Gruppe ein Objekt der nicht-geordneten Liste,
        , seiner Gruppe sein soll. Auf diese Weise wird jeder Datensatz als mit einer Absatzmarkierung versehener, eingerückter Text unter der zugehörigen Gruppenüberschrift

        265

        Ausgaben mit Hilfe von Tabellen und Gruppen organisieren

        angezeigt. Beachten Sie, dass nicht-geordnete Listen und Listenelemente für die Gruppierung von Ausgaben nicht zwingend erforderlich sind – wir haben sie hier nur verwendet, um die Seite besser zu strukturieren. In Zeile 29 schließen wir die inneren, untergeordneten -Tags. In Zeile 30 schließen wir das
          -Tag mit
        , um das Listenende für eine Gruppe zu kennzeichnen. Als letztes schließen wir in Zeile 34 den übergeordneten -Abschnitt mit . Falls Ihre gruppierte Seite das Aussehen von Treppenstufen aufweist, haben Sie sehr wahrscheinlich ein
          -Tag nicht geschlossen, bevor Sie das übergeordnete -Tag geschlossen haben.

          10.6 Lange Seiten mit Hilfe von Index-Links organisieren Meine Tabelle 8tracks enthält nur drei Zustandstypen (condition): Schlecht, Passabel und Ausgezeichnet. Damit reicht es vollkommen aus, eine gruppierte Seite dafür anzulegen, aber was mache ich, wenn meine Datenbank Hunderte von Datensätzen enthält, die 10 oder mehr Zustandstypen aufweisen? Eine gruppierte Seite würde das Ganze übersichtlicher machen, aber ein Benutzer müsste dennoch immer wieder blättern, um eine gewünschte Gruppe anzuzeigen. Um einen besseren Zugriff auf sehr lange Seiten zu unterstützen, wende ich einen Trick an, den die HTML-Entwickler seit den ersten Tagen des Web kennen: Seitenindizes oder Anker. Seitenanker ermöglichen dem Entwickler, oben im Dokument eine Themenliste anzulegen und jeden der Themennamen zu einem Link zu machen, der auf Text weiter unten auf der Seite verweist. Betrachten Sie das Beispiel in Abbildung 10.8. Die gesamte Verfassung wurde als einzige Seite in den Browser geladen, aber es handelt sich dabei um ein sehr umfangreiches Dokument, in dem Sie sehr viel blättern müssen, wenn Sie alles sehen wollen. Die Index-Links ermöglichen dem Benutzer, sofort auf die gewünschte Seite zu gelangen. Durch Anklicken eines Links geht der Browser des Benutzers zu der Seite mit dem zugehörigen Thema. Das HTML-Tag, das diese Funktionalität realisiert, ist . Um einen Seitenindex einzurichten, legen Sie zunächst unter Verwendung des -Tags Anker auf den einzelnen Abschnitten Ihrer Seite an: Artikel III

          266

          SQL-Anweisung DISTINCT

          Oben auf Ihrer Seite verwenden Sie den folgenden Link: Artikel III

          Sie sehen, wie Index-Links für gruppierte Seiten praktisch sein können. Jetzt wollen wir betrachten, wie ColdFusion-Templates ihre eigenen Index-Links erzeugen.

          Abbildung 10.8: Der erste Bildschirm einer langen Seite, wo Sie IndexLinks sehen, mit denen sie sich zu weiter unten liegenden Abschnitten bewegen.

          10.7 Mit der SQL-Anweisung DISTINCT dynamische Index-Links erzeugen Um dynamisch Index-Links einzufügen, verwenden wir die DISTINCT-Anweisung in der SQL-Anweisung unseres Template. In Listing 5.20 haben Sie gesehen, wie DISTINCT ColdFusion anweist, je ein Element jedes Typs zu ermitteln. Die folgende Abfrage beispielsweise: SELECT DISTINCT condition FROM 8tracks

          Erzeugt aus unserer Tabelle das folgende Ergebnis: Schlecht Passabel Ausgezeichnet

          Das sind nur drei Elemente, obwohl die Tabelle 14 Einträge enthält. Mit DISTINCT haben wir die verschiedenen Klassifikationen des Felds condition aufgelistet.

          267

          Ausgaben mit Hilfe von Tabellen und Gruppen organisieren

          Wenn Sie eine DISTINCT-Abfrage in Kombination mit einer gruppierten Seite verwenden, können Sie dynamisch Links auf Gruppen erzeugen. Ein entsprechendes Template sehen Sie in Listing 10.5. Listing 10.5: Dynamisch Links auf Gruppen erstellen 1: 12: 13: 14: 15: Die 8-Spur-Bänder in meinem Auto 16: 17: 18: 19: Die 8-Spur-Bänder in meinem Auto 20: 21: Klicken Sie auf einen der folgenden Links, um Bänder mit diesem Zustand ➥anzuzeigen

          22: 23: 24: 25: 26: 27: Bandzustand: #condition#
          28: 29: 30: 31: 32: 33: 34: 35:

        • Künstler: #artist#
          Titel: #title#
          Verwendung: #uses#







        Wir sind vom Gruppierungs-Template aus Listing 10.4 ausgegangen und haben einige neue Funktionen eingeführt. Beachten Sie die zusätzliche Abfrage, get_conditions. Wir haben DISTINCT verwendet, um einen der condition-Werte zu erhalten. Außerdem wurde der Abfrage ein zweiter -Abschnitt zugeordnet. Betrachten wir zunächst den zweiten -Abschnitt, in dem ich das -Tag verwende, um die Gruppen mit Ankern zu versehen. Wir haben verwendet, so dass ColdFusion bei der Gruppierung der Daten den Zustandstyp automatisch einfügt. Damit erscheint eigentlich nichts neues im Browser des Benutzers – Ankerpunkte werden gesetzt. Zurück zum ersten -Abschnitt. Hier haben wir die Ergebnisse der Abfrage get_conditions verwendet, um dynamisch Index-Links anzulegen. Jeder davon verweist auf eine Gruppenüberschrift. Weil Index-Links das Doppelkreuz (#) verwenden, um auf -Abschnitte weiter unten auf der Seite zu verweisen, müssen Sie dem Symbol ein zusätzliches Doppelkreuz als »Escape«-Zeichen hinzufügen, wenn es innerhalb von -Tags verwendet. Auf diese Weise kann ColdFusion zwischen einem echten Doppelkreuz und einem Variablenkennzeichner unterscheiden. Im ersten Ausgabeabschnitt können die drei Doppelkreuze hintereinander etwas verwirrend sein, aber betrachten wir sie doch einmal genauer. Die beiden ersten Doppelkreuze

        269

        Ausgaben mit Hilfe von Tabellen und Gruppen organisieren

        brauchen wir für das einzelne Doppelkreuz für den Index-Link. Würde ich diese Links manuell codieren, würden sie wie folgt aussehen: Bänder in schlechtem Zustand Bänder in passablem Zustand Bänder in ausgezeichnetem Zustand

        Hier muss ich jedoch zwei Doppelkreuze schreiben, um ein einziges zu erhalten, weil ich mich innerhalb eines -Tags bewege. Das dritte Doppelkreuz kennzeichnet den Anfang der Variablen, #condition#. Diese Variable wird auch in dem Text verwendet, der den Link kennzeichnet: Bandzustand: #condition#

        Für den Benutzer sieht diese Seite aus wie in Abbildung 10.9 gezeigt.

        Abbildung 10.9: Eine dynamisch gruppierte und mit Index-Verweisen versehene Seite.

        Wenn der Benutzer oben auf der Seite auf einen der Links klickt, führt ihn sein Browser automatisch zu dieser Gruppe. Für eine kleine Datenbank wie diese ist es nicht besonders schwer, sich manuell auf der Seite zu bewegen, aber je größer die Datenbanken werden, desto mehr profitieren Sie von Gruppierung und Index-Links.

        270

        Zusammenfassung

        10.8 Zusammenfassung Der Aufbau von Seiten, auf denen man sich einfach bewegen kann, ist äußerst wichtig für ein erfolgreiches Web-Design. Genau so wichtig ist es für das Erzeugen von ColdFusionTemplates. CF bietet mehrere Funktionen, die Ihnen ermöglichen, Abfrageausgaben nach Ihrem Geschmack zu formatieren. Sie können Ihre Daten tabellarisch anordnen, aber auch zusätzliche Werkzeuge wie etwa Gruppierung und Sortieren anwenden. ist eine schnelle Methode, abgefragte Daten in eine Tabelle umzuwandeln. Es soll das -Tag in Ihren Templates ersetzen und benötigt nur ein paar Parameter, um eine grundlegende Tabelle anzuzeigen. Es unterstützt jedoch eine begrenzte Funktionsmenge, wenn sie also erweiterte Tabelleneigenschaften benötigen, sollten Sie besser mit HTML-Tabellen arbeiten und die Zellen mit füllen. Ein weiteres Ausgabewerkzeug , das eine einfachere Navigation in Ihrer Applikation realisieren soll, ist die Gruppierung von Daten. Mit Hilfe des GROUP-Parameters in Abschnitten können Sie Ihre Daten nach einem gemeinsamen Feld ordnen. Insbesondere längere Seiten profitieren von der Gruppierung, ebenso wie von Index-Links, die mit dem SQL-Befehl DISTINCT erzeugt werden.

        10.9 Workshop F&A F

        Warum werden meine fetten Überschriften in einer nicht angezeigt? A

        F

        Standardmäßig erzeugt Ihre Tabelle mit dem -Tag, was keinen fett ausgezeichneten Text erkennt. Um fette Überschriften zu verwenden, fügen Sie den HTMLTABLE-Parameter hinzu, um Ihre Tabelle in HTML 3.0 zu erstellen.

        Kann ich in einer Grafik verwenden? A

        Ja, wenn Sie den HTMLTABLE-Parameter verwenden. Am einfachsten fügen Sie Grafik ein, indem Sie ein Feld in Ihrer Datenbank erzeugen, das den Linkpfad zu der Grafik enthält. Wenn Sie eine Abfrage ausführen, gibt ColdFusion den Link als eine Ihrer Variablen zurück, die dann einer hinzugefügt werden kann.

        271

        Ausgaben mit Hilfe von Tabellen und Gruppen organisieren

        F

        Ich habe HTML-Tabellen in Kombination mit verwendet, und jetzt wird meine Tabelle überhaupt nicht angezeigt. Was könnte ich tun? A

        F

        Sehen Sie sich den Code für Ihre Tabelle an und achten Sie dabei sorgfältig darauf, was innerhalb und was außerhalb des -Tags passiert. Fehler entstehen häufig durch nicht geschlossene
  • -Tags, und auch durch nicht abgeschlossene
    -Tags den Parameter align="center" verwendet, um die Überschriften jeweils in der Spaltenmitte anzuzeigen. Für die dritte Zeile, die in Zeile 42 beginnt, öffnen wir in Zeile 40 das -Tag. Von hier an werden bis zum schließenden -Tag in Zeile 49 jede Zeichenkette, jedes Tag und jede Variable für jeden von der Abfrage zurückgegebenen Datensatz wiederholt – wir müssen also sorgfältig vorgehen.

    261

    Ausgaben mit Hilfe von Tabellen und Gruppen organisieren

    Wenn Sie Tabellen manuell mit anlegen, resultieren die meisten Fehler aus Tabellen-Tags, die in den -Abschnitt Ihrer Seite eingeschlossen bzw. außerhalb verwendet werden sollten. Wenn Sie eine Vorschau für eine solche Seite anzeigen und die Tabelle nicht richtig (oder überhaupt nicht) aufgebaut ist, überprüfen Sie noch einmal die Elemente, die innerhalb oder außerhalb Ihrer -Abschnitte stehen sollen. Jeder Datensatz sollte in einer eigenen Zeile stehen. Verwenden Sie also ein
    -Tags, um die vier Spalten anzulegen. Jedes enthält eine der von der Abfrage zurückgegebenen Variablen, und wir müssen darauf achten, dass diese in derselben Reihenfolge wie die Überschriften platziert werden. Wir schließen jedes -Tag hinter der jeweiligen Variablen, und das
    - oder
    -Tags.

    Ich habe den GROUP-Parameter in einem -Abschnitt verwendet. ColdFusion hat Gruppen erzeugt, aber es gibt mehrere Gruppen desselben Typs und nur einen Datensatz pro Gruppe. A

    Das passiert, wenn Sie nicht die ORDER BY-Klausel in der Abfrage Ihres Template verwenden. ColdFusion gruppiert Datensätze nach einem gemeinsamen Feld, aber nur, wenn es sie nach diesem Feld sortiert erhält.

    Quiz 1. Was sind die zwei Modi von ? 2. Welchen Parameter müssen Sie in angeben, wenn Sie für Ihre Tabelle Überschriftenfelder brauchen? 3. Welches Werkzeug verwenden Sie, wenn sich in Ihrer Tabelle Zeilen über mehrere Spalten erstrecken sollen? 4. Was ist Verschachtelung? 5. Wie viele -Tags brauchen Sie, um eine gruppierte Seite anzulegen? 6. Welche Funktion hat das HTML-Tag ? 7. Ich habe ein Datenbankfeld mit den folgenden Werten: Ja, Ja, Ja, Nein, Vielleicht, Ja, Nein, Nein. Wie viele Datensätze gibt eine Abfrage zurück, wenn ich auf dieses Feld das DISTINCT-Tag anwenden?

    Antworten 1. Textmodus, der Tabellen mit Hilfe des -Tags anlegt, und HTMLTABLE-Modus, der Tabellen in HTML 3.0 anlegt. 2. Den COLHEADERS-Parameter, der ColdFusion darauf hinweist, dass die Tabelle Spaltenüberschriften verwendet. 3. Ganz normale HTML-Tabellen, wobei die Tabellenzeilen, die Daten enthalten sollen, mit gefüllt werden.

    272

    Workshop

    4. Man spricht von Verschachtelung, wenn Sie ein Tag-Paar innerhalb eines anderen Tag-Paars platzieren. Die meisten ColdFusion-Tags unterstützen Verschachtelung. 5. Zwei. Das erste definiert die Abfrage und das Feld, nach dem die Daten gruppiert werden sollen. Der zweite, untergeordnete Ausgabeabschnitt zeigt, wie Text innerhalb einer Gruppe angezeigt werden soll. 6. legt einen unsichtbaren Seiten-Anker ein, auf den im Dokument oder über einen externen Link verwiesen werden kann. 7. Drei: Ja, Nein und Vielleicht.

    Übungen 1. Legen Sie eine Seite an, die verwendet, um den Inhalt einer Datenbank anzuzeigen. Verwenden Sie zunächst den -Modus, um Daten anzuzeigen, und dann HTMLTABLE. 2. Legen Sie mit HTML-
    -Tags und ColdFusion-Ausgabe eine Tabelle an. Verwenden Sie Überschriftzeile, die sich über alle Spalten erstreckt, und beenden Sie die Tabelle mit einer ähnlichen Abschlusszeile. Verwenden Sie BGCOLOR, um eine Ihrer Datenspalten mit farbigem Hintergrund anzuzeigen. 3. Legen Sie eine Seite an, die Daten in Tabellen gruppiert. Jede Gruppe sollte eine Überschrift haben, gefolgt von einer Tabelle, die mit Daten aus dieser Gruppe gefüllt wird. 4. Legen Sie mit Hilfe der SQL-Anweisung DISTINCT Index-Links auf die gruppierten Tabellen aus der vorhergehenden Übung an.

    273

    Eingabeseiten mit grundlegenden -Tags verbessern

    1 1

    Eingabeseiten mit grundlegenden -Tags

    Das -Tag von ColdFusion dient als Ersatz für das -Tag von HTML und bietet eine erweiterte Funktionsmenge, die das Aussehen und die Funktionalität Ihrer Eingabeseiten verbessert. Dieses Kapitel beschreibt und einige seiner Tags. Dabei geht es unter anderem um die folgenden Dinge: 쐽

    Die Arbeitsweise von .



    in Ihren Templates.



    Das -Tag zum Entgegennehmen und Auswerten von Benutzereingaben.



    Das -Tag zur Anpassung von Eingabefeldern.



    Das -Tag zum Füllen von Auswahllisten aus einer Abfrage.



    Das -Tag für die Auswahl einer Zahl.

    11.1 Die Arbeitsweise von In Kapitel 7 haben Sie erfahren, wie ColdFusion mit Standard-HTML-Formularen zusammenarbeitet, um Daten in eine Datenbank einzufügen und die dort existierenden Daten zu aktualisieren. Die Beispiele in diesem Kapitel haben gezeigt, wie man mit Hilfe des HTML--Tags ein Web-Eingabeformular erzeugt und ein ColdFusion-Template als Action-Seite für dieses Formular entwickelt. Wenn ein Benutzer das Formular ausfüllt und auf die Senden-Schaltfläche klickt, werden die gesammelten Daten in Form eines URL an das entsprechende ColdFusion-Template geschickt. dient in ColdFusion als Ersatz für das -Tag von HTML, bietet aber einen größeren Funktionsumfang. verwendet ähnliche Elemente wie , benötigt ebenfalls eine definierte ACTION-Seite und sendet die gesammelten Daten ebenfalls über einen URL. Aber es bietet mehr als die Standard-HTML-Formulare und eröffnet Ihnen neue Möglichkeiten, Daten anzuzeigen und Einträge auszuwerten. Dieses Kapitel beschreibt die grundlegenden Eingabe- und Auswahl-Tags, die in zur Verfügung stehen. Anders als das HTML--Tag funktioniert das -Tag nur, wenn es innerhalb einem Template oder einer .cfm-Datei steht. Das Standard-Tag kann in .cfm- oder .html-Dateien verwendet werden. Wenn Sie bereits Aktionsseiten erzeugt haben, die Eingaben aus StandardHTML-Formularen verarbeiten, können Sie diese auch völlig unverändert als Aktionsseiten für -Seiten verwenden. Die erweiterten Funktionen des Tags betreffen nur die Benutzereingabe – an der Verarbeitung der Daten auf Aktionsseiten hat sich nichts geändert.

    276

    Die Arbeitsweise von

    erzeugt erweiterte Formularwerkzeuge mit JavaScript, aber sie müssen sich keine Gedanken machen, falls Sie kein Programmierer sind. In Ihren Template-Seiten verwenden Sie einfach die verschiedenen -Tags wie für Standardformulare, dann erzeugt ColdFusion das nötige JavaScript, sobald der Browser des Benutzer die Formularseite anfordert. Eine der Funktionen von ist beispielsweise der Schieberegler, der im Formular mit dem -Tag implementiert wird. Der Formularabschnitt in Ihrer TemplateDatei sieht aus wie in Listing 11.1 gezeigt. Listing 11.1: Beispiel für einen Formularabschnitt mit 1: 2: Wählen Sie mit Hilfe des Schiebereglers eine Zahl zwischen 1 und 100: 3:

    4:

    9:

    10:

    11:

    Wenn der Benutzer die in Listing 11.1 erzeugte Seite sieht, erhält er eine Ausgabe wie in Abbildung 11.1 gezeigt. Wenn die Benutzer den Befehl QUELLTEXT ANZEIGEN für die Schiebereglerseite ausführen, sehen sie, was im Hintergrund passiert, wie in Listing 11.2 gezeigt. Listing 11.2: Der Quellcode, der im Browser des Benutzers für erscheint 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:

    277

    Eingabeseiten mit grundlegenden -Tags

    14: 15: Wählen Sie mit Hilfe des Schiebereglers eine Zahl zwischen 1 und 100: 16:

    17: 18: 19: Ihr Browser muss Java unterstützen,
    damit Sie Cold Fusion Java Applets ➥anzeigen können!
    20: 21:

    22:

    23:

    Abbildung 11.1: Wenn ein Benutzer den durch ein -Tag erzeugten Schieberegler bewegt, wird der Eingabewert innerhalb eines zuvor definierten nummerischen Wertebereichs entsprechend angepasst.

    Lassen Sie sich von dem JavaScript in Listing 11.2 nicht abschrecken. Sie müssen nicht JavaScript beherrschen, um verwenden zu können, und genau das ist der Punkt – Sie verwenden -Elemente einfach, um eine Seite zu erstellen. ColdFusion erzeugt im Hintergrund das JavaScript, und der Benutzer sieht eine professionell formatierte Formularseite – in der Meinung, Sie hätten alles selbst codiert.

    278

    in der Praxis

    Für Browser, die JavaScript nicht unterstützen oder es deaktiviert haben, erzeugt eine generische Fehlermeldung, die dem Benutzer mitteilt, dass ihm eine bestimmte Funktionalität fehlt, um die Seite anzeigen zu können. Mit Hilfe des NotSUPPORTED-Parameters, der im nächsten Abschnitt beschrieben wird, können Sie diese Nachricht Ihren Anforderungen anpassen. Jetzt betrachten wir die von verarbeiteten Parameter und codieren unter Verwendung dieses Tags und der entsprechenden Werkzeuge ein paar Beispielseiten.

    11.2 in der Praxis Wie das HTML-Tag benötigt das ColdFusion-Tag einen »Aktions«-Parameter, um die Aktionsseite für das Formular zu definieren, und einen »Methoden«-Parameter, um festzulegen, wie die gesammelten Daten versendet werden. Um einen Formularabschnitt irgendwo auf einer ColdFusion-Template-Seite zu definieren, verwende ich etwa folgenden Text:

    verarbeitet dieselben Parameter wie das -Tag von HTML, auch TARGET für die Verwendung mit Framesets und ENCTYPE, um die Methode festzulegen, wie das Formular codiert wird. Darüber hinaus akzeptiert auch zwei Java-spezifische Parameter, ENABLECAB und ONSUBMIT. Sie sind für die normale Formularverarbeitung nicht notwendig, können aber sehr praktisch für Java-Programmierer sein, die ihren Formularseiten benutzerdefinierte Funktionsmerkmale hinzufügen wollen. Nachdem in einer Template-Seite ein -Abschnitt definiert wurde, kann man die verschiedensten Eingabe- und Anzeigeelemente nutzen. Ich kann Standard-HTML-Formularelemente wie beispielsweise INPUT und TEXTAREA austauschbar oder in Kombination mit den komplexeren Werkzeugen von ColdFusion verwenden. Wir werden diese komplexeren Tags noch genauer betrachten. Zuvor möchte ich Sie jedoch darauf hinweisen, dass es einige gemeinsame Parameter dafür gibt, mit deren Hilfe Sie ihr Aussehen und ihre Arbeitsweise anpassen können – schließlich werden alle begleitenden Tags zu im Hintergrund von JavaScript gesteuert. Tabelle 11.1 beschreibt diese gemeinsamen Parameter. Falls Sie die Bedeutung eines dieser Parameter jetzt noch nicht verstehen, machen Sie sich keine Gedanken. Sie werden die Arbeitsweise verstehen, wenn wir die erweiterten Tags von genauer betrachten.

    279

    Eingabeseiten mit grundlegenden -Tags

    Parameter

    Funktion

    NAME (zwingend erforderlich)

    Für alle -Tags muss ein Name angegeben werden..

    NotSUPPORTED

    Die Meldung die angezeigt werden soll, wenn der Browser des Benutzers kein Java unterstützt. Falls Sie hier keine Meldung angeben, zeigt ColdFusion standardmäßig eine generische Meldung an.

    ONVALIDATE

    Der Name einer JavaScript-Funktion zur Auswertung von Benutzereingaben. Falls Sie keine solche Funktion angeben, verwendet ColdFusion seine eigenen Auswertungsmethoden, wenn der VALIDATE-Parameter in einem -Tag angegeben ist.

    ONERROR

    Eine JavaScript-Funktion, die ausgeführt wird, falls die Auswertung fehlschlägt. Auch dies übernimmt ColdFusion standardmäßig, Sie brauchen also nur diesen Parameter anzugeben, wenn Sie eine allgemeine vorgegebene Funktion nutzen wollen.

    ALIGN

    Entspricht den Standard-Ausrichtungsfunktionen von HTML, wird aber nur auf das -Element angewendet, für das der Parameter spezifiziert ist.

    BOLD

    Zeichnet den Text für das entsprechende -Element fett aus.

    ITALIC

    Zeichnet den Text für das entsprechende -Element kursiv aus.

    FONT

    Hier können Sie einen beliebigen von JavaScript unterstützten Schriftnamen angeben, um das Erscheinungsbild Ihres -Elements anzupassen.

    FONTSIZE

    Die Größe der zuvor festgelegten Schriftart.

    HEIGHT

    Die Höhe des -Elements, angegeben in Pixeln.

    HSPACE

    Horizontaler Abstand des -Elements.

    VSPACE

    Vertikaler Abstand des -Elements.

    WIDTH

    Die Breite des -Elements, angegeben in Pixel.

    Tabelle 11.1: Gemeinsame Parameter der -Tags

    11.3 Das -Tag ist dem Standard-Formular-Tag von HTML sehr ähnlich. Abhängig von den dafür angegebenen Parametern kann das Tag genutzt werden, um Benutzereingaben in Form von Textfeldern, Optionsfeldern, Kontrollkästchen oder Kennwortfeldern entgegenzunehmen.

    280

    Das -Tag

    Einer der wichtigsten Vorteile von im Vergleich zu seinem HTML-Gegenstück ist, dass es Benutzereingaben auswerten kann – d.h. es kann den von einem Benutzer eingegebenen Text daraufhin überprüfen, ob er einem bestimmten Format entspricht, wie beispielsweise, ob es sich um eine fünfstellige Postleitzahl handelt, oder eine neunstellige Sozialversicherungsnummer. Falls keine Übereinstimmung festgestellt wird, wird der Benutzer angewiesen, seine Eingabe zu wiederholen und noch einmal zu senden. Angenommen, ein Kunde hat mich gebeten, eine einfache Online-Umfrage zu realisieren, was seine Benutzer über Kriminalität denken. Die Seite sollte etwa wie in Abbildung 11.2 gezeigt aussehen. Dieses Formular enthält zwei Fragen. Für die erste Frage habe ich ein Standard-Optionsfeld verwendet. Wenn ein Optionsfeld markiert ist, wird die Markierung aller anderen automatisch aufgehoben, um sicherzustellen, dass der Benutzer nur eine Antwort für die Frage auswählen kann. Optionsfelder können mit Standard-HTML-Code verarbeitet werden, deshalb kann ich hier sowohl als auch zur Realisierung der Frage verwenden. Der erste Teil meines Formulars wurde mit dem Code aus Listing 11.3 erzeugt. Listing 11.3: Optionsfelder erstellen 1: 2: Die Kriminalitätsumfrage 3: 4: 5: Die Kriminalitätsumfrage 6: Wir möchten Sie zu diesem heißen Thema befragen. Beantworten Sie bitte ➥unsere Fragen und klicken Sie auf die Senden-Schaltfläche. 7: 8: 11: 1. Was denken Sie über die Kriminalität in Ihrer Stadt?

    12:

    13: Ich bin dagegen.
    14:

    15: Ich bin dafür.
    16:

    17: Ich habe keine Meinung zu diesem Thema.
    18:

    19: Ich bin Verbrecher und sollte deshalb nicht an der Umfrage ➥teilnehmen. 20:



    281

    Eingabeseiten mit grundlegenden -Tags

    Abbildung 11.2: Dieses Formular, das mit dem Tag erstellt wurde, sieht aus wie ein StandardHTML-Formular, enthält aber eine Funktion, die die Benutzereingaben auswertet.

    Ich habe vier mögliche Antworten für die Frage angeboten und ihnen über den VALUE-Parameter Variablen zugewiesen. Die der Aktionsseite übergebene Variable ist for (Zeile 14), against (Zeile 12), no opinion (Zeile 16) und criminal (Zeile 18). Die zweite Frage auf dem Formular ermöglicht die Verwendung der Auswertungsfunktion von . Der Kunde will sehen, wie die Benutzer in unterschiedlichen Städten auf die Frage antworten, deshalb soll für jede Antwort eine Postleitzahl angegeben werden. Um sicherzustellen, dass der Benutzer wirklich eine fünfstellige Postleitzahl eingegeben hat, erzeuge ich mit Hilfe des Texts in Listing 114. die zweite Frage und schließe das Formular. Listing 11.4: Die zweite Hälfte des Eingabeformulars verwendet VALIDATE, um die Eingabe einer gültigen Postleitzahl zu überprüfen. 1:

    SELECT * from 8tracks

    Das -Tag

    7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:

    Wählen Sie Ihr Lieblingsband aus meinem Auto!

    Wählen Sie aus der folgenden Auswahl Ihr Lieblingsband:

    #title#



    SELECTED="yes"

    25: 26:

    27: 28:

    29: 30:

    Diese Methode wertet jede Zeile des Abfrageergebnisses aus, ob es sich um den Titel »Mambo Hits!« handelt. Wenn sie sie findet, fügt die -Anweisung genau dieser OPTION-Anweisung den Text SELECTED="yes" hinzu. Hier handelt es sich um ein relativ einfaches Formular mit nur einem Auswahlfeld, aber Sie sehen bereits, wie komplex Ihr Code werden könnte, wenn Sie mehrere davon auf einer Seite einsetzen. Und hier komm ins Spiel. Es unterstützt eine sehr viel kompaktere Methode, SELECT-Felder mit Abfragedaten zu füllen und bietet sogar noch praktische Möglichkeiten, wie beispielsweise die Auswahl eines bestimmten Datensatzes. Um für den Aufbau der Abstimmseite einzusetzen, mache ich zuerst das HTML--Tag zu . Ich verwende dieselbe Abfrage wie zuvor, aber mein Formularabschnitt sieht aus wie in Listing 11.7 gezeigt. Listing 11.7: Auswahl einer Standardvorgabe mit 1: 2: 3:

    4:

    5:

    6: 7:

    stellt eine viel einfachere Möglichkeit dar, das SELECT-Feld zu füllen. Es verwendet die Parameter NAME und VALUE, wie ein normales , beinhaltet aber auch noch einige weitere Funktionsmerkmale, wie in Tabelle 11.4 beschrieben. Parameter

    Funktion

    NAME (required)

    Der Variablenname, der den ausgewählten Daten zugeordnet wird.

    SIZE

    Die Größe des Auswahlfelds, angegeben in Zeilen.

    REQUIRED

    Wenn dieser Parameter auf yes gesetzt ist, muss ein Wert ausgewählt werden, damit das Formular verarbeitet wird.

    Tabelle 11.4: Parameter für

    289

    Eingabeseiten mit grundlegenden -Tags

    Parameter

    Funktion

    MESSAGE

    Der Text, der erscheint, falls REQUIRED auf yes gesetzt ist und beim Senden nichts ausgewählt war.

    ONERROR

    Der Name einer JavaScript-Funktion, die ausgeführt wird, wenn die Auswertung fehlschlägt.

    MULTIPLE

    Erlaubt dem Benutzer, mehrere Werte im Auswahlfeld auszuwählen.

    QUERY

    Der Name der Abfrage, mit der das Feld gefüllt wird.

    SELECTED

    Die Werte einer oder mehrere Einträge in VALUE, die als standardmäßig ausgewählt erscheinen.

    VALUE

    Das Abfragefeld, das der Aktionsseite als Variable übergeben wird.

    DISPLAY

    Das Abfragefeld, das in dem Auswahlfeld angezeigt wird.

    Tabelle 11.4: Parameter für (Forts.)

    Betrachten Sie noch einmal den Code in Listing 11.7. In meiner -Anweisung in Zeile 3 habe ich die Parameter NAME und VALUE für mein Auswahlfeld angegeben und mit dem Parameter SELECTED festgelegt, dass ein bestimmter VALUE als ausgewählt erscheinen soll. Sie wissen, dass das ID-Feld in meiner Datenbank der Primärschlüssel und damit für jeden Datensatz eindeutig ist, deshalb ist es für die Auswahl gut geeignet. Wenn ich in meine Datenbank sehe, erkenne ich, dass das Band »Mambo Hits!« die ID 6 hat, deshalb habe ich diesen Wert für SELECTED verwendet. SELECTED muss ein Wert sein, der im VALUE-Parameter angegeben ist. Im obigen

    Beispiel habe ich das ID-Feld als Wert verwendet, weshalb ich einen gültigen ID-Wert als SELECTED-Datensatz angeben muss.

    11.6 Das -Tag bietet keine besonderen Zeiteinsparungen wie , aber ist ganz praktisch für die Benutzer, um einen nummerischen Wert in einem Formular auszuwählen. Um das zu verdeutlichen, wollen wir annehmen, wir legen ein Formular an, in dem die Benutzer meine Bänder anhand einer Skala von 1 bis 10 beurteilen sollen. Betrachten Sie dazu Abbildung 11.6. Für die Verarbeitung von muss ein Browser unbedingt Java unterstützen. Wenn Sie davon ausgehen können, dass Ihre Benutzer Java nicht unterstützen, sollten Sie statt dessen ein Auswahlfeld verwenden.

    290

    Das -Tag

    Abbildung 11.6:

    ermöglicht den Benutzern, eine Zahl auszuwählen, indem sie eine JavaScript-Leiste über einen bestimmten Wertebereich ziehen.

    Um diese Seite anzulegen, habe ich in einer einfachen Abfrage alle Bänder aus meiner Datenbank eingelesen und dann ein erzeugt, um die Ergebnisse anzuzeigen und Bewertungen dafür zu ermitteln. Listing 11.8 zeigt den Code. Listing 11.8: rate_tapes.cfm 1: ➥SELECT * from 8tracks ➥ 2: 3: Bewerten Sie meine Bänder 4: 5: Bewerten Sie meine Bänder durch Auswahl einer Zahl zwischen 1 und 10 ➥auf dem folgenden Schieberegler. 10 ist ein interessantes Band, 1 ist ein ➥Türstopper. 6: 7: #artist#: #title#
    8: 9:

    10:

    11:

    291

    Eingabeseiten mit grundlegenden -Tags

    12: 13:

    Im -Tag habe ich wieder das ID-Feld als Namen verwendet, weil eindeutige Nummern eine gute Auswahl darstellen. Wenn der Benutzer auf seinem Formular auf die Senden-Schaltfläche klickt, übergibt er eine Folge von ID-Nummern mit Bewertungswerten für jede davon. verarbeitet die in Tabelle 11.5 gezeigten Parameter. Parameter

    Funktion

    LABEL

    Eine Beschriftung, die oberhalb des Schiebereglers erscheint. Wenn Sie möchten, dass der aktuelle Wert des Schiebereglers in der Beschriftung angegeben wird, verwenden Sie die Variable %value% und setzen REFRESHLABLE auf yes.

    REFRESHLABEL

    Ist dieser Parameter auf yes gesetzt, wird die Beschriftung aktualisiert, während der Benutzer den Schieberegler bedient.

    IMG

    Eine Bilddatei, die für den Schieberegler verwendet wird.

    IMGSTYLE

    Legt fest, wie die IMG-Datei angezeigt wird. Mögliche Werte sind tiled, centered und scaled.

    RANGE

    Die Ober- und Untergrenzen für den Schieberegler, durch ein Komma voneinander getrennt. Beispielsweise erlaubt RANGE="1,10" dem Benutzer, eine Zahl zwischen 1 und 10 auszuwählen.

    SCALE

    Gibt die Inkrementschritte zwischen den Werten an. Wurde RANGE beispielsweise auf Zahlen zwischen 1 und 500 gesetzt, zeigt SCALE=100 nur die Zahlen 100, 200, 300 usw. an.

    VALUE

    Gibt die Vorgabeeinstellung des Schiebereglers an..

    ONVALIDATE

    Der Name einer JavaScript-Funktion, mit der die Eingabe ausgewertet wird.

    MESSAGE

    Text, der erscheint, falls die Auswertung fehlschlägt.

    ONERROR

    Eine Javascript-Funktion, die ausgeführt wird, wenn die Auswertung fehlschlägt.

    GROOVECOLOR

    Statt einer IMG-Datei können Sie den Schieberegler auch mit einer gültigen HEX-Farbe darstellen.

    BGCOLOR

    Die Hintergrundfarbe der Beschriftung für den Schieberegler.

    TEXTCOLOR

    Die Textfarbe der Beschriftung für den Schieberegler.

    Tabelle 11.5: Parameter für

    292

    Zusammenfassung

    11.7 Zusammenfassung Das -Tag von ColdFusion bietet zahlreiche Möglichkeiten, die Dateneingabe auf Ihrer Site an Ihre Bedürfnisse anzupassen und zu erweitern. Obwohl es mehr Funktionsmerkmale aufweist als das Standard--Tag von HTML, übergibt es die ermittelten Daten auf dieselbe Weise. Aus diesem Grund können die durch ColdFusion erweiterten Formulare mit bereits existierenden Aktionsseiten und CGI-Skripten verarbeitet werden. Mit ColdFusion erweiterte Formulare verwenden JavaScript, um die neuen Funktionsmerkmale im Browser der Benutzer zu erzeugen. Der Entwickler muss nicht Java sprechen, um diese Werkzeuge nutzen zu können. Sie verwenden einfach die erforderlichen Tags in Ihren Templates – den Rest übernimmt ColdFusion im Hintergrund für Sie. Mit den Tags und in erzeugen Sie Textfelder, die Benutzereingaben automatisch auswerten, um sicherzustellen, dass der Benutzer bei der Eingabe gültige Telefonnummern, Postleitzahlen, Sozialversicherungsnummern oder andere von Ihnen vorgegebenen Formate einhält. erlaubt Ihnen außerdem, die Darstellung der Eingabeelemente anzupassen, beispielsweise mit farbigen Schriften, Hintergrundfarben und fetten und kursiven Einträgen. Besonders praktisch für ColdFusion-Entwickler ist das -Tag, das die Aufgabe wesentlich vereinfacht, ein Auswahlfeld mit Abfrageergebnissen zu füllen. ermöglicht Ihnen, eine JavaScript-gesteuertes Auswahlwerkzeug für nummerische Werte bereitzustellen.

    11.8 Workshop F&A F

    Ich stelle eine reine HTML-Site auf ColdFusion um. Sollte ich alle meine Seiten durchlaufen und alle meine -Tags in -Tags umwandeln und sie auf Template-Seiten platzieren? A

    Wenn es keine Probleme gibt, sollten Sie auch nichts ändern. Der Vorteil bei der Beibehaltung existierender HTML-Formulare ist, dass sie kein Java benötigen und damit schneller geladen und narrensicher für alle Benutzer sind. Wenn Sie jedoch ein Formular haben, das von den erweiterten Funktionsmerkmalen von profitieren könnte, sollten Sie eine Aktualisierung vornehmen.

    293

    Eingabeseiten mit grundlegenden -Tags

    F

    Was passiert, wenn meine Site sich an Benutzer wendet, die keine Java-kompatiblen Browser verwenden? A

    F

    Sie können alternative Formulare mit reinem HTML für Benutzer bereitstellen, die kein Java unterstützen, indem Sie die Fehlermeldung im Parameter NotSUPPORTED der -Abschnitte entsprechend anpassen.

    Kann ich als erfahrener JavaScript-Programmierer das Verhalten von -Tags anpassen? A

    Ja. -Tags erlauben, JavaScript-Funktionen anzugeben, die ausgeführt werden, wenn bestimmte Aktionen auftreten, wie beispielsweise eine erfolgreiche oder eine fehlgeschlagende Auswertung.

    Quiz 1. Was passiert, wenn ein Benutzer mit einem Browser, der kein Java unterstützt, versucht, eine mit ColdFusion erweiterte Formularseite anzuzeigen? 2. Benennen Sie das wichtigste von unterstütze Leistungsmerkmal, das von dem Standard-HTML-Tag nicht unterstützt wird. 3. Was ist der Unterschied zwischen und ? 4. Was ist der wichtigste Vorteil von gegenüber der Standardform ? 5. Welcher Parameter wird von einem abfragegestützten verwendet, um festzulegen, welche Option standardmäßig als Vorgabe dargestellt werden soll? 6. Angenommen, Sie wollen einen mit den Werten 5, 10, 15, 20 usw. bis 100 anlegen. Welche beiden Parameter verwenden Sie für das Tag?

    Antworten 1. Sie erhalten die Standardmeldung von ColdFusion, dass die Seite nicht unterstützt wird, oder einen von Ihnen im -Tag bereitgestellten Fehlertext. 2. unterstützt eine Textauswertung, bei der festgestellt werden kann, ob der Benutzer eine gültige Telefonnummer, eine Postleitzahl usw. eingegeben hat. 3. unterstützt auch Optionsfelder und Kontrollkästchen, während insbesondere auf Texteingaben ausgelegt ist. Darüber hinaus erzeugt die Felder mit Hilfe von JavaScript und nicht mit HTML, so dass Sie die Farbe von Feld und Schrift anpassen können. 4. vereinfacht es, Auswahlfelder mit Abfrageergebnissen zu füllen.

    294

    Workshop

    5. Es überrascht nicht, dass dies der SELECTED-Parameter ist, der auf den Text aus dem Feld, das Sie als Ihren VALUE spezifiziert haben, verweisen muss. Wenn Sie das Abfragefeld title als Ihren VALUE verwenden, enthält Ihr SELECTED-Parameter den Text eines gültigen Titels in Ihrer Tabelle. 6. Der RANGE-Parameter wird auf 5,100 gesetzt, SCALE auf 5. Auf diese Weise kann der Benutzer Werte in Inkrementschritten von 5 auswählen, beginnend mit »5«.

    Übungen 1. Legen Sie ein Formular an, in das Benutzer eine gültige Sozialversicherungsnummer (neunstellig, nur aus Ziffern bestehend) eingeben müssen. Passen Sie die Fehlermeldung so an, dass sie »Sie lernen es nie!« ausgibt, wenn der Benutzer einen ungültigen Wert eingibt. 2. Legen Sie ein Formular an, das Benutzereingaben in Textfeldern sammelt. Passen Sie mit die Farbe, die Schrift und die Größe der Felder an. 3. Legen Sie ein Formular an, in dem der Benutzer mehrere Werte aus einem Auswahlfeld auswählen kann. Erzeugen Sie mit und einer Abfrage Auswahlmöglichkeiten und legen Sie eine Vorgabe für die Auswahl fest. 4. Legen Sie mit Hilfe von einen Schieberegler an, der dem Benutzer erlaubt, einen Zeitraum zwischen 1900 und heute auszuwählen.

    295

    Erweiterte Formulartechniken zur Verwaltung von Eingaben

    2 1

    Erweiterte Formulartechniken zur Verwaltung von Eingaben

    Sie haben bisher viel über Web-Formulare und wie sie Eingaben von Benutzern bearbeiten erfahren. In diesem Kapitel geht es um erweiterte Entwurfstechniken, mit deren Hilfe Sie mehr aus Ihren Formularen machen. Sie lernen, Eingaben, Aktualisierungen und Löschvorgänge vorzunehmen und Ihre Formulare zu kombinieren, damit sie einfacher zu verwalten sind, wenn sich die Datenbankstruktur Ihrer Site ändert. Das Kapitel führt außerdem zwei -Tags ein, die in Kapitel 11 nicht berücksichtigt wurden, und die neue Möglichkeiten unterstützen, komplexe Daten anzuzeigen und Benutzereingaben entgegenzunehmen. In diesem Kapitel geht es um die folgenden Dinge: 쐽

    Mit SQL Datensätze aktualisieren, einfügen und löschen.



    Mehrfunktionale Formularseiten.



    Daten mit anzeigen und auswählen.



    Daten mit und anzeigen und auswählen.

    12.1 Aktualisieren, Einfügen und Löschen mit SQL In Kapitel 5 haben Sie erfahren, wie Sie mit den Tags und Datensätze in einer Datenbank bearbeiten und hinzufügen. Für einfache Sites sind diese Werkzeuge wunderbar geeignet – Sie ermöglichen Ihnen, Benutzerdaten aus einem Formular entgegenzunehmen und irgendeine Aktion dafür in Ihrer Datenbank vorzunehmen. Nachdem Sie jedoch mehr über ColdFusion gelernt haben und Ihre Applikationen immer komplexer werden, brauchen Sie vielleicht flexiblere Methoden für die Arbeit mit Ihrer Datenbank. Abbildung 12.1 zeigt ein grundlegendes Beispiel. Um diese Daten in eine Tabelle einzutragen, verwenden Sie beispielsweise die in Listing 12.1 gezeigte Aktionsseite. Listing 12.1: guestbook_submit.cfm 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

    298



    Danke für Ihren Eintrag

    Aktualisieren, Einfügen und Löschen mit SQL

    11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:

    Danke für Ihren Eintrag Ihr Text sieht wie folgt aus:



    Ihr Name: #form.name#

    Ihre E-Mail-Adresse: #form.email#

    Ihr Nettoverdienst: #net_worth#



    Abbildung 12.1: Ein grundlegendes Eingabeformular, das Daten vom Benutzer entgegennimmt.

    Beachten Sie das -Tag in Zeile 1 von Listing 12.1 – hier werden die Benutzerdaten eingefügt. Weitere Informationen über und finden Sie in Kapitel 7.

    ist ein ausgezeichnetes Werkzeug, wenn Sie nur mit Formulardaten arbeiten wollen, aber was machen Sie mit anderen Informationen, die Sie einfügen wollen – Informationen, die nicht aus dem Formular stammen? Nehmen wir beispielsweise an, Sie wol-

    299

    Erweiterte Formulartechniken zur Verwaltung von Eingaben

    len die aktuelle Zeit und das Datum einfügen, wann der Benutzer der Datenbank Informationen hinzugefügt hat. Sie könnten eine spezielle ColdFusion-Funktion, Now(), auf Ihrer Aktionsseite ausführen, um die aktuelle Zeit und das Datum zu erzeugen, aber weil dieser Wert nicht über das Formular übergeben wird, »sieht« ihn nicht. Das -Tag erlaubt nur das Einfügen von Formularfeldern – diese Methode funktioniert also offensichtlich nicht. ColdFusion-Funktionen werden in Kapitel 14 genauer beschrieben. Hier müssen Sie nur wissen, dass #Now()# eine Variable erzeugt, die die aktuelle Zeit und das Datum enthält, die Ihr Web-Server bereitstellt. In solchen Situationen, wo Eingabedaten nicht direkt aus einem Formular kommen, können Sie alternative Methoden nutzen, um sie Ihrem Datenbankinhalt hinzuzufügen oder diesen zu bearbeiten. Diese Methoden sind die SQL-Anweisungen UPDATE, INSERT und DELETE. Alle werden im Kontext einer Standard-SQL-Abfrage anstelle der schon bekannten SELECT-Anweisung verwendet. Die nächsten Abschnitte beschreiben die drei Anweisungen detailliert, aber zuvor wollen wir einige Situationen betrachten, in denen Sie diese SQLMethoden anstelle ihrer einfacheren ColdFusion-Gegenstücke verwenden sollten: 쐽

    Wenn Sie Daten einfügen wollen, die nicht aus einem Formular stammen.



    Wenn Sie Daten in mehrere Tabellen einfügen wollen.



    Wenn das Einfügen oder Aktualisieren zu kompliziert ist, um durch oder ausgeführt zu werden.



    Wenn Sie einen oder mehrere Datensätze aus einer Tabelle löschen wollen.

    Die SQL-Anweisung INSERT Am folgenden Beispiel sehen Sie, wie man Daten mit SQL einfügt. Die ACTION-Seite in Listing 12.1 enthielt die folgende Einfügefunktion:

    Aber jetzt wollen Sie das aktuelle Datum und die Zeit in die Datenbank eintragen, die nicht über das Formular übergeben werden. Sie könnten die obige Anweisung durch eine SQL-Abfrage wie die folgende ersetzen:

    INSERT INTO visitors(name,email,net_worth,date) VALUES('#name#',

    300

    Aktualisieren, Einfügen und Löschen mit SQL

    '#email#', '#net_worth#', #Now()#)

    Das Einfügen mit SQL ist viel flexibler als , weil Sie damit mehr Kontrolle darüber haben, wie und wo Daten eingefügt werden. Betrachten Sie die Anweisung noch einmal etwas genauer. Sie beginnt mit einem Standard--Tag, wobei aber kein NAME angegeben ist, weil diese Abfrage keine Daten ausgibt. Sie gibt den Namen einer Tabelle an, für die das INSERT INTO durchgeführt werden soll, gefolgt von einer Liste der Feldnamen, durch Kommas getrennt und in Klammern eingeschlossen. Die Reihenfolge dieser Feldnamen ist wichtig, weil sie genau der Reihenfolge der in VALUES aufgelisteten Daten entsprechen muss. Der Wert, der dann letztlich in INSERT ,#Now()# steht, trägt das aktuelle Datum und die Zeit wie vom Web-Server bereitgestellt in die Tabelle visitors ein, wenn der Benutzer das Formular aktualisiert. Diese spezielle Funktion wird nicht in einfache Anführungszeichen eingeschlossen, weil es sich nicht um eine Zeichenkette handelt – vielmehr haben wir hier ein Datum/Zeit-Objekt, worüber Sie in Kapitel 14 noch mehr erfahren werden. Angenommen, der Benutzer gibt typische Daten in das Formular ein, könnte meine Microsoft Access-Datenbank jetzt einen Datensatz wie in Abbildung 12.2 gezeigt enthalten. Beachten Sie, dass das ID-Feld von Access automatisch bereitgestellt wird, wenn neue Datensätze in die Tabelle eingetragen werden. Abbildung 12.2: Ein Datensatz, der mit der SQL-Anweisung INSERT eingefügt wurde und das Datum und die Zeit enthält, wann er eingefügt wurde.

    Abhängig von Ihrer Datenbank-Software und dem Datentyp in Ihrer Tabelle müssen Datum/Zeit-Objekte wie beispielsweise Now() speziell formatiert werden, damit sie in einem INSERT in Ihre Datenbank eingefügt werden können. Wenn Sie Probleme mit dem oben gezeigten INSERT haben, versuchen Sie, für die Beispiele in diesem Kapitel Textdatentypen zu verwenden. Nachdem Sie in Kapitel 14 mehr über Datum/Zeit-Objekte erfahren haben, verwenden Sie ColdFusion-Funktionen, um Now() in ein Datumsformat umzuwandeln, das von Ihrer Datenbank verarbeitet werden kann.

    301

    Erweiterte Formulartechniken zur Verwaltung von Eingaben

    Die SQL-Anweisung UPDATE Die Anweisung UPDATE ist INSERT ganz ähnlich, nimmt aber andere Parameter entgegen. Betrachten wir ein Beispiel. Angenommen, Sie wollen eine Seite erstellen, die dem Benutzer ermöglicht, fehlerhafte Einträge aus dem vorigen Beispiel zu korrigieren. Dazu verwenden Sie ein Formular, das einen bereits existierenden Datensatz aus der Datenbank lädt und zeigen ihn als VALUEs in einem Formular an, wie in Abbildung 12.3 gezeigt.

    Abbildung 12.3: Ein Formular, in dem Benutzer zuvor gesendete Daten bearbeiten können.

    Listing 12.2 zeigt den Code, mit dem dieses Formular erstellt wurde. Für die Seite muss das ID-Feld über den URL angegeben werden (oder möglicherweise über ein vorhergehendes Formular), um den Datensatz des Benutzers zu laden. Listing 12.2: guestbook_edit.cfm 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:

    302

    SELECT * FROM visitors WHERE ID = #ID#

    Benutzerinformation bearbeiten

    Benutzerinformation bearbeiten

    Aktualisieren, Einfügen und Löschen mit SQL

    12: 13: Um Ihre Benutzerinformation zu bearbeiten, ändern Sie die Textfelder ➥und drücken auf die folgende Schaltfläche. 14: 15: 16: 17: Ihr Name:
    18:

    19: 20: Ihre E-Mail-Adresse:
    21:

    22: 23: Ihr Nettoeinkommen:
    24: $

    25: 26: 27: 28: 29: 30: 31: 32: 33:

    Beachten Sie, dass in Listing 2.2 in Zeile 26 ein verborgenes Feld enthalten ist, das die ID für den betreffenden Datensatz enthält. Das ist wichtig, weil Sie sie auf der ACTION-Seite brauchen, um die Aktualisierung mit oder der SQL-Anweisung UPDATE durchzuführen. Das Formular ermöglicht den Benutzern, die existierenden Daten zu bearbeiten – Tippfehler korrigieren, Nettoverdienst erhöhen, usw. – und die neue Information dann in die Datenbank einzutragen, wo der alte Datensatz überschrieben wird. Dazu könnten Sie ein -Tag wie das folgende auf der ACTION-Seite verwenden:

    ist in Kapitel 7 beschrieben.

    Wenn Sie die ID (den Primärschlüssel der Tabelle) als verborgenes Feld übergeben, kann den Datensatz mit den vom Benutzer bearbeiteten Daten überschreiben. Angenommen, Sie wollen das Ganze etwas komplizierter machen und das existierende

    303

    Erweiterte Formulartechniken zur Verwaltung von Eingaben

    Datumsfeld mit dem neuen Datum überschreiben, wenn der Benutzer seine bearbeiteten Daten einträgt. Wie bietet auch keine Möglichkeit, Daten zu aktualisieren, die nicht im Formular übergeben werden. Dazu brauchen Sie die SQLAnweisung UPDATE, wie in Listing 12.3 gezeigt, das die ACTION-Seite für das Formular zeigt. Listing 12.3: guestbook_edit_submit.cfm 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:

    UPDATE visitors SET name='#name#', email='#email#', net_worth='#net_worth#', visited=#Now()# WHERE ID=#ID#



    Danke für Ihren Eintrag

    Danke für Ihren Eintrag Sie haben folgenden Text eintragen:



    Ihr Name: #form.name#

    Ihre E-Mail-Adresse: #form.email#

    Ihr Nettoverdienst: #net_worth#



    Listing 12.3 enthält eine Abfrage, in der statt die SQL-Anweisung UPDATE verwendet wird. Es übergibt UPDATE den Namen einer Tabelle und gibt dann die Feldnamen und die Variablenwerte ein, die die alten Daten überschreiben. Beachten Sie, dass die Funktion #Now()# wie im letzten Abschnitt nicht in einfache Anführungszeichen eingeschlossen ist, weil es sich nicht um eine Zeichenkette handelt. Die UPDATE-Abfrage endet mit der zwingend erforderlichen Zeile: WHERE ID=#ID#

    304

    Aktualisieren, Einfügen und Löschen mit SQL

    Daran erkennt ColdFusion, welchen Datensatz Sie ersetzen müssen – wenn Sie die Zeile nicht angeben, schlägt die Aktualisierung fehl und Sie erhalten eine Fehlermeldung.

    Die SQL-Anweisung DELETE Anders als INSERT und UPDATE gibt es für die SQL-Anweisung DELETE kein äquivalentes ColdFusion-Tag. Wenn Sie also mit ColdFusion Daten aus einer Tabelle löschen wollen, müssen Sie immer die DELETE-Anweisung in einer SQL-Abfrage verwenden. Wenn Sie aus einer Datenbank Datensätze mit DELETE entfernen, sind diese unwiderruflich gelöscht. Sie können es sich also nicht anders überlegen. Deshalb sollten Sie bei der Erstellung von Seiten, auf denen Benutzer Informationen löschen können, extrem vorsichtig vorgehen. Abbildung 12.4 zeigt ein Beispiel für ein Formular, von dem aus Daten gelöscht werden können. Listing 12.4 zeigt den Code für Abbildung 12.4. Listing 12.4: guestbook_delete.cfm 1: 2: SELECT * FROM visitors 3: 4: 5: 6: 7: Benutzerinformation löschen 8: 9: 10: 11: Benutzerinformation löschen 12: 13: Um einen Benutzer zu löschen, wählen Sie den Namen und klicken auf die ➥Schaltfläche unten. 14: 15: 16: 17: 18: 19: 20: 21:

    305

    Erweiterte Formulartechniken zur Verwaltung von Eingaben

    22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:

    #name#








    Das ist eine ganz einfache Formularseite, aber es gibt ein paar Dinge zu beachten. Erstens, der Abfrageabschnitt in den Zeilen 1 bis 3 ermittelt die Daten für alle Benutzer der Tabelle visitors. Sie werden als OPTION-Werte im Auswahlfeld des Formulars angezeigt (Zeilen 18 bis 26). Beachten Sie, dass das Auswahlfeld zwar den Namen des Benutzers anzeigt, die übergebene Variable aber #ID# ist. Auch dies ist wichtig, weil Sie der ACTION-Seite, wo das eigentliche Löschen passiert, einen eindeutigen Wert übergeben müssen. Die ID ist optimal dafür geeignet, weil sie sicherstellt, dass Sie nicht den falschen Datensatz löschen. Listing 12.4 übergibt der ACTION-Seite guestbook_delete_action.cfm nur eine Variable, die ID des Datensatzes. Listing 12. 5 zeigt diese Seite. Listing 12.5: guestbook_delete_action.cfm 1: 2: DELETE FROM visitors 3: WHERE ID=#form.ID# 4: 5: 6: 7: 8: 9: 10: Eintrag gelöscht 11: 12: 13: 14: Danke für Ihren Eintrage 15: 16: Der Datensatz für die Benutzer-ID #form.ID# ➥wurde gelöscht. 17:

    306

    Mehrere Formularaktionen kombinieren

    18:

    19: 20: 21:

    Abbildung 12.4: Ein Formular, von dem aus Benutzer Datensätze aus einer Datenbank löschen können.

    Die SQL-Anweisung DELETE ist sehr einfach zu benutzen – und genau darin liegt die größte Gefahr. Man braucht ihm nur einen Parameter zu übergeben – in diesem Fall die #ID# aus dem vorherigen Formular. Man gibt einfach den Namen einer Tabelle an, aus der etwas gelöscht werden soll, und zack, ist der Datensatz weg. Wenn Sie Seiten erstellen, die DELETE verwenden, sollten Sie zum Ausprobieren eine Testtabelle oder -Datenquelle verwenden. Wenn Sie eine aktive Datenquelle verwenden, riskieren Sie den Verlust wertvoller Daten.

    12.2 Mehrere Formularaktionen kombinieren In den vorigen Beispielen haben Sie drei verschiedene Formulare und ACTION-Seiten erstellt, die drei verschiedene Funktionen ausgeführt haben. In einer echten Web-Applikation wollen Sie zwei oder mehr dieser Aktionen auf einer einzigen Seite anbieten – womit

    307

    Erweiterte Formulartechniken zur Verwaltung von Eingaben

    Sie Ihren Benutzern eine einfachere Navigation erlauben und sich selbst Zeit bei der Codierung ersparen. Betrachten Sie beispielsweise Abbildung 12.5.

    Abbildung 12.5: Ein mehrfunktionales Administrationsformular mit zwei möglichen Aktionen.

    Diese Seite unterstützt zwei verschiedene Aktionen: Einfügen und Aktualisieren. Beide führen zur selben ACTION-Seite, aber nur die edit-Funktion übergibt eine Variable. Listing 12.6 zeigt, was im Hintergrund passiert. Listing 12.6: user_admin.cfm 1: 2: SELECT * FROM visitors 3: 4: 5: 6: 7: Benutzerverwaltung 8: 9: Benutzerverwaltung 10: 11: Diese Seite erlaubt Gargantuan-Administratoren, Benutzerinformationen in ➥die Datenbank einzutragen und dort zu bearbeiten. 12: 13: 14: Benutzer hinzufügen 15: Hier klicken um einen neuen Benutzer einzutragen. 16:

    308

    Mehrere Formularaktionen kombinieren

    17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:

    Benutzerinformationen bearbeiten Wählen Sie einen Benutzer aus der folgenden Liste


    #name#





    Die in Zeile 1 lädt alle Benutzer aus der Tabelle, um sie in der Dropdown-Liste mit den bearbeitbaren Einträgen anzuzeigen, wie im vorigen Abschnitt zur SQL-Anweisung UPDATE bereits beschrieben. Für das Hinzufügen ist nichts besonderes notwendig – nur ein Verweis auf die Seite user_edit.cfm. Auf der ACTION-Seite passiert die eigentliche Arbeit. Wenn ein Benutzer die Option »Hinzufügen« wählt, gelangt er auf die Seite user_edit.cfm und es wird keine Variable übergeben. Wählt er einen Namen aus der Bearbeitungsliste, gelangt er auf dieselbe Seite, aber die Variable #ID# wird vom Formular übergeben. Abhängig vom Vorhandensein der #ID#Variablen erkennt die ACTION-Seite, was passieren soll. Listing 12.7 zeigt, wie eine Seite beide Aktionen unterstützen kann. Listing 12.7: user_edit.cfm 1: 4: 5: 6: 7:

    SELECT * FROM visitors WHERE ID=#form.ID#



    Benutzerverwaltung

    Benutzerinformationen hinzufügen oder bearbeiten:

    Name: VALUE="#get_user.email#"

    >

    Net Worth: 61:

    62: 63: 64: 65: 66: 67: 68:

    Wie Sie sehen, wird es hier schon ein bisschen komplizierter, aber die Zeit, die Sie sich damit sparen, wird sich spätestens dann auszahlen, wenn Sie Ihr Formular oder Ihre Datenbank später ändern müssen. Betrachten wir den Code. Das erste Element auf der Seite verwendet eine spezielle Funktion, #IsDefined()#, um die Existenz der Variablen #ID# zu überprüfen. Auch über diese Funktion werden Sie in einem späteren Kapitel mehr erfahren – hier brauchen Sie nur zu wissen, dass #IsDefined()# prüft, ob die zwischen den Klammern angegebene Variable existiert. Wurde die Variable #ID# vom vorhergehenden Formular übergeben, erzeugt diese ACTIONSeite mit Hilfe von die Variable to_do und definiert sie in Zeile 3 als »edit«. Wurde keine Variable übergeben (weil der Benutzer vielleicht einen neuen Datensatz anlegt), wird to_do in Zeile 7 auf »add« gesetzt. Ist to_do gleich »edit«, verwendet die Seite das in den Zeilen 13 bis 15, um Daten für den ausgewählten Benutzer zu laden. Ist to_do als »add« definiert, wird die Abfrage nicht ausgeführt. Im Formularabschnitt ab Zeile 28 wird die Variable to_do wieder verwendet, um festzustellen, ob ein neuer Datensatz hinzugefügt oder ein bereits existierender Datensatz bearbeitet werden soll. Ist to_do gleich »edit«, wird jedem Formularfeld ein VALUE-Benutzer hinzugefügt, so dass die Benutzerinformation auf der Seite angezeigt wird. Ist to_do gleich »add«, ist kein VALUE angegeben und die Eingabefelder sind leer, so dass neue Informationen eingetragen werden können. Unmittelbar vor dem Schließen des Formulars wird in Zeile 61 ein verborgenes Feld mit der ID des Datensatzes hinzugefügt, falls to_do gleich »edit« ist. Für Aktualisierungen muss eine ID oder ein Primärschlüssel angegeben werden, deshalb müssen Sie diesen auf der nächsten Seite übergeben, falls Sie eine Aktualisierung vorhaben. Ist der Datensatz neu, muss keine ID übergeben werden.

    311

    Erweiterte Formulartechniken zur Verwaltung von Eingaben

    Haben Sie das verstanden? Falls nicht, sollten Sie diesen Abschnitt noch einmal durchlesen. Es dauert ein bisschen, bis man verstanden hat, wie diese mehrfunktionalen Seiten funktionieren, aber der Aufwand wird sich irgendwann auszahlen. Das Ergebnis von Listing 12.7 ist, dass dem Web-Server eine von zwei Seiten angezeigt wird. Wählt der Benutzer auf dem vorhergehenden Formular »Benutzer hinzufügen«, sieht er leere Formularfelder. Wählt er »Benutzer bearbeiten«, sieht er Formularfelder mit den Daten des Benutzers, die hier bearbeitet werden können. Betrachten Sie jetzt die ACTION-Seite, user_update.cfm. Auch diese Seite muss eine von zwei Aktionen ausführen. Ist der Datensatz neu, fügt sie ihn ein und trägt die Benutzerdaten in die Tabelle ein. Handelt es sich um einen bereits existierenden Datensatz, der bearbeitet werden soll, muss die ACTION-Seite statt dessen aktualisieren. Diese Seite verwendet dieselbe Funktion #IsDefined()#, um zu überprüfen, ob eine IDVariable übergeben wurde. Listing 12.8 zeigt den zugehörigen Code. Listing 12.8: user_update.cfm 1: 4: 5: 6: 7:

    12: 13:

    18: 19:

    26: 27: 2: 3: ➥SELECT FAQ_number,text FROM superview_faqs WHERE FAQ_number = ➥'#FAQ_number#' 4: 5: 13: 14: 15: Die Mail wurde versendet 16: 17: 18: 19:

    SELECT * FROM users

    #text#

    #name# #email#




    Wie bei jedem Werkzeug, das in der Lage ist, mehrere E-Mails gleichzeitig zu versenden, besteht die Gefahr des Spam-Missbrauchs mit . Sie sollten nicht berechtigte Benutzer fernhalten, indem Sie Seiten oder Abschnitte, die nur intern genutzt werden sollen, durch ein Kennwort schützen. Außerdem sollten Sie Ihren Kunden auf die Gefahren beim Versenden nicht angeforderter Mail hinweisen und ihm erklären, dass er nur -Applikationen erzeugen soll, die etwas an Benutzer schicken, die sich entweder in eine MailingListe eingetragen oder explizit Mail angefordert haben.

    342

    Eingehende Mail mit entgegennehmen

    13.6 Eingehende Mail mit entgegennehmen Die leistungsfähige Ergänzung zu ist , das Mails empfängt und damit den Benutzern ermöglicht, eingehende Mail von einer ColdFusion-Template-Seite aus anzuzeigen und zu verwalten. arbeitet wie ein Mail-Client unter Verwendung des POP3-Mail-Protokoll. Es kann so angepasst werden, dass es die vielen Funktionen für POP3-Benutzer unterstützt. POP3 steht für Post Office Protocol, das ist ein gebräuchlicher Internet-Standard zum Empfangen von E-Mail. POP3-kompatible Mail-Server speichern die Mail der Benutzer, bis sie von einem POP3-kompatiblen Mail-Client abgerufen wird, wie beispielsweise Microsoft Outlook, Eudora oder Netscape Mail. Wenn Sie neue Nachrichten von Ihrem ISP (Internet Service Provider) herunterladen, verwenden Sie sehr wahrscheinlich POP3. Einer der Vorteile von POP3 gegenüber anderen Mail-Protokollen ist die Möglichkeit, nur Mail-Header zu laden – ohne die eigentliche Nachricht. Mit dieser Methode können POP3-cClient-Programme den Benutzern ermöglichen, ihre Mailboxen vorabzufragen und unerwünschte Nachrichten zu löschen, bevor sie sie herunterladen. beinhaltet diese Funktion ebenfalls. Der Header einer E-Mail ist der Teil der Nachricht, der definiert, von wem die Mail kommt, an wen sie geschickt werden soll, wann und wie sie versendet wurde, und andere Steuerdaten. Die andere Komponente einer E-Mail ist ihr Rumpf mit dem eigentlichen Text der Nachricht. Es gibt zwei Möglichkeiten, Parameter bereitzustellen: 쐽

    Dynamisch, etwa von einer Formularseite oder einer Abfragevariablen.



    Statisch durch die direkte Bereitstellung von Parametern im Template.

    Sie übergeben Parameter mit dem Namen eines POP3-Mail-Servers, einem Benutzernamen und einem Kennwort. Wenn ein Benutzer eine Template-Seite mit dem -Tag lädt, lädt ColdFusion alle Nachrichten, die auf diesen Benutzer warten, oder alternativ nur deren Header. merkt sich die geladene Mail-Information so wie die Ergebnisse einer Datenbankabfrage speichert. Durch Verwendung spezieller Variablen wie #FROM#, #SUBJECT# und #BODY# in Kombination mit können Sie den Inhalt der Mail eines Benutzers als Ausgabe eines Template anzeigen.

    343

    E-Mail

    Betrachten wir eine Beispielanwendung von in Listing 13.8. Angenommen, der Benutzer ist ein Angestellter im riesigen Hauptsitz von SuperView 2000. Alle Angestellten bei SuperView verwenden den Mail-Server pop.superview2000.com, um ihre eingehende Mail abzufragen. Listing 13.8: Mail-Header von einem POP3-Mail-Server abrufen 1:

    From: #from#
    Subject: #subject#



    344

    Mail mit löschen

    Um die Ergebnisse eines Mail-Ladevorgangs mit anzuzeigen, verwende ich dieselbe Technik wie für eine Standard-. Ich gebe den Namen an und verwende dann die Variablen, die für den Benutzer ausgegeben werden, wenn er die Seite anzeigt. Anders als bei sind die von verwendeten Ausgabevariablen nicht definierbar. Um darauf zuzugreifen, müssen die von ColdFusion vorgegebenen Variablennamen verwenden werden. Tabelle 13.2 zeigt eine vollständige Liste der von zurückgegebenen Variablen. Variablenname

    Inhalt

    DATE

    Enthält Zeit und Datum, wann die Nachricht gesendet wurde.

    FROM

    Der Name der Person, die die Nachricht gesendet hat.

    TO

    Die E-Mail-Adresse, an die die Nachricht gesendet wurde.

    ATTACHMENTS

    Falls der Nachricht Dateien angehängt wurden, werden diese hier durch Tabulatoren voneinander getrennt aufgelistet.

    CC

    Die Adresse anderer, denen der Absender eine Kopie der Mail zuschickt.

    REPLYTO

    Die E-Mail-Adresse, an die Antworten gesendet werden.

    SUBJECT

    Das Thema der Nachricht.

    MESSAGENUMBER

    Eine Nummer, die jeder empfangenen Nachricht zugeordnet wird. Diese Variable ist praktisch für Steueraufgaben, wie beispielsweise die Codierung einer Aktion, die Nachricht Nummer 5 zu löschen.

    BODY

    Wird nur zugewiesen, wenn die Aktion GETALL im -Tag verwendet wird. BODY enthält den eigentlichen Text der Nachricht.

    Tabelle 13.2: Die von zurückgegebenen Variablennamen

    Um den Inhalt einer dieser Variablen in einem -Abschnitt anzuzeigen, verweise ich so auf die Variable, wie ich eine Abfragevariable verwende, nämlich mit Doppelkreuzen: #subject# oder #from#.

    13.7 Mail mit löschen Mit Hilfe der in diesem Kapitel beschriebenen Techniken kann ich mit ColdFusion einen vollständigen E-Mail-Client anlegen. Dazu würde ich auf meinen Template-Seiten verwenden, um die Nachrichten für den Benutzer zu laden und anzuzeigen, und , um ausgehende Mails zu senden. Bisher habe ich jedoch nur das Lesen und das Schreiben von Mail angesprochen – wie lösche ich die Mail vom Server, nachdem der Benutzer sie gelesen hat?

    345

    E-Mail

    Ich verwende die dritte -Aktion, DELETE. Diese Aktion wird immer in Kombination mit dem Parameter MESSAGENUMBER verwendet, um die zu löschende Nachricht zu spezifizieren. Wenn Sie mit dem DELETE-Parameter von Nachrichten von einem Mail-Server löschen, können diese nicht wiederhergestellt werden. Wenn Sie ein wirklich gutes Verhältnis zum Systemadministrator des Mail-Servers haben, könnte er eine Nachricht aus einer Sicherungskopie wiederherstellen (falls es eine solche gibt), aber das ist eher unwahrscheinlich. Verwenden Sie DELETE also mit Vorsicht. Angenommen, ich habe bereits einen einfachen Mail-Client für die Angestellten von SuperView 2000 angelegt. Um ein Template zu erzeugen, die mir erlaubt, Nachrichten zu löschen, lege ich zunächst eine Formularseite an, die den Account-Namen und das Kennwort des Benutzers entgegennimmt und diese Daten mit Hilfe von einem Template übergibt, um die aktuellen Nachrichten des Benutzers abzufragen und anzuzeigen. Für weitere Funktionalitäten könnte ich die Mail des Benutzers in einzelnen Komponenten auf einem Formular anzeigen. Mit Hilfe von Kontrollkästchen oder Auswahlfeldern und der von zurückgegebenen #messagenumber# kann der Benutzer nicht mehr benötigte Nachrichten löschen. Falls Sie schon lange kein Formular mehr angelegt haben, finden Sie in Kapitel 11 einige Beispiele dafür. Abbildung 13.7 zeigt ein Beispielformular. Im Code für dieses Formular habe ich die Kontrollkästchen für die einzelnen Nachrichten mit der von der -Standardvariablen #messagenumber# zurückgegebenen Nummer definiert, etwa wie folgt:

    Wenn der Benutzer eine zu löschende Nachricht kennzeichnet und das Formular sendet, ist die übergebene Variable gleich messagenumber=1, messagenumber=2 usw. Die Aktionsseite für das Formular verwendet und die Aktion DELETE, um die entsprechende Nachricht zu löschen, wie in Listing 13.10 gezeigt. Listing 13.10: delete_mail.cfm 1:





    Funktionen

    25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:



    #DollarFormat(net_worth)#


    Betrachten Sie jetzt die Variable genauer, die in Listing 14.1 die Tabellenzelle für den Nettoverdienst erzeugt. Ich habe hier die reguläre Abfragevariable net_worth in der Funktion DollarFormat() verwendet. Beachten Sie, dass die Doppelkreuze für die Variable um die gesamte Funktion herum gesetzt sind, und nicht nur um den Variablennamen herum. Falls der Benutzer Dollarzeichen ($) in seiner Eingabe verwendet, veranlasst DollarFormat() ColdFusion, einen Fehler zurückzugeben. Deshalb habe ich auf meiner Formularseite ein Dollarzeichen links neben dem Eingabefeld angezeigt: daran soll der Benutzer erkennen, dass er nur eine Zahl eingeben soll. Wenn ich eine Funktion wie DollarFormat() verwende, ändert ColdFusion die Methode, wie die Variable dem Benutzer angezeigt wird – aber es nimmt keine dauerhaften Änderungen am Inhalt der Variablen vor. Betrachte ich meine Gästebuchtabelle, nachdem ich diese Seite angezeigt habe, sehe ich immer noch die ursprünglichen Eingaben des Benutzers, ohne Kommas und Dezimalpunkt. Obwohl ColdFusion-Funktionen keine permanenten Änderungen an Variableninhalten vornehmen, können Sie sie mit Tags wie beispielsweise kombinieren, wenn Sie die Daten in Ihren Tabellen dauerhaft ändern wollen. Mit Hilfe des in Listing 14.1 gezeigten -Abschnitts erhalte ich jetzt eine Seite wie in Abbildung 14.3 gezeigt. Weil ich auch das HTML-Tag für die Spalte mit dem Nettoverdienst verwendet habe, wird die Liste der Geldbeträge jetzt sauber formatiert angezeigt. In der Dokumentation von ColdFusion wird DollarFormat() als Anzeige- und Formatfunktion bezeichnet. Wie andere Funktionen dieser Kategorie wird DollarFormat() hauptsächlich dafür eingesetzt, die Anzeige einer Variablen zu verändern. Anzeige- und Formatfunktionen können jedoch auch im Hintergrund genutzt werden, um Variablen in ein bestimmtes Format zu bringen, beispielsweise wenn Sie eine Gesamtsumme für eine Spalte berechnen wollen.

    355

    ColdFusion-Funktionen zur Datenbearbeitung

    Abbildung 14.3: Die Funktion DollarFormat() bewirkt, dass Variablen mit Dollarzeichen, Kommas und Dezimalpunkten angezeigt werden.

    14.2 Allgemeine Regeln für Funktionen Egal für welche Aufgabe sie eingesetzt werden, alle Funktionen in ColdFusion gehorchen ein paar gemeinsamen Regeln.

    Funktionseingabe Alle ColdFusion-Funktionen nehmen entweder eine Zeichenkette oder eine Variable als Eingabe entgegen. Das bedeutet, Sie können entweder einen bestimmten Wert eingeben, der formatiert werden soll (was selten vorkommt), oder den gültigen Namen einer Variablen, die formatiert werden soll (was die Regel ist). Der folgende Code beispielsweise

    #DollarFormat(123456)#

    erzeugt dieselbe Ausgabe wie der folgende Code:

    356

    Allgemeine Regeln für Funktionen

    #DollarFormat(number)#

    Es ist jedoch wahrscheinlicher, dass Sie eine Variable wie #number# aus den Ergebnissen einer verwenden, statt sie manuell mit zu definieren.

    Funktionsnamen ohne Berücksichtung der Groß-/ Kleinschreibung Funktionsnamen können in beliebigen Kombinationen aus Groß- und Kleinbuchstaben geschrieben werden – ColdFusion wird sie immer erkennen. Die Programmdokumentation verwendet Großbuchstaben (wie beispielsweise in DateFormat()), um Wörter in Funktionsnamen voneinander abzuheben. Diese Konvention ist durchaus sinnvoll und es empfiehlt sich, sie in Ihren Templates beizubehalten.

    Funktionsbegrenzungen Wenn Funktionen als Teil eines CFML-Tags verwendet werden, müssen zur Begrenzung keine Doppelkreuze angegeben werden. Der Code

    beispielsweise setzt die Variable price auf den Wert $20,000.00. Werden Funktionen außerhalb eines Tags verwendet, müssen sie in -Tags platziert und durch Doppelkreuze begrenzt werden, so dass ColdFusion weiß, dass es sie als Funktionen und nicht als normalen Text behandeln soll.

    Funktionen verschachteln Wie viele andere ColdFusion-Werkzeuge können auch Funktionen verschachtelt werden. Um beispielsweise überflüssige führende Leerzeichen von einer Variablen zu entfernen und sie in Großbuchstaben anzuzeigen, verschachteln Sie die Funktionen UCase() und LTrim() wie folgt: #UCase(LTrim(my.variable))#

    Die Reihenfolge, in der Funktionen verschachtelt werden, spielt eine wichtige Rolle. Die innere Funktion wird zuerst ausgeführt, anschließend die äußeren Funktionen.

    357

    ColdFusion-Funktionen zur Datenbearbeitung

    Die folgenden Abschnitte stellen Ihnen einige der ColdFusion-Funktionen vor, die von den Entwicklern am häufigsten eingesetzt werden. Eine vollständige Liste aller Funktionen mit Verwendungsbeispielen entnehmen Sie bitte der Dokumentation zu ColdFusion Server und ColdFusion Studio. Einige Funktionen sind speziell auf die Verwendung mit bestimmten ColdFusion-Werkzeugen ausgelegt (wie beispielsweise Listen-, Struktur und Datenfeldfunktionen für die Datenmanipulation oder die Authentifizierungsfunktionen für Sicherheitszwecke. Diese Funktionen werden in späteren Kapiteln zusammen mit den zugehörigen Werkzeugen beschrieben. Sie müssen nicht alle die folgenden Funktionen kennen, um in Kapitel 15 weiterlesen zu können. Nehmen Sie sich jedoch die Zeit, die folgenden Abschnitte durchzublättern, um sich mit den verschiedenen Funktionstypen vertraut zu machen, und um zu verstehen, wofür Funktionen eingesetzt werden können.

    14.3 Anzeige- und Formatfunktionen Anzeige- und Formatfunktionen sind die vermutlich gebräuchlichsten Funktionstypen. Wie DollarFormat(), das Sie schon kennen gelernt haben, wandeln Anzeige- und Formatfunktionen den Inhalt einer Variablen in ein bestimmtes Format um. Anzeige- und Formatfunktionen werden häufig eingesetzt, um die Formulareingaben von Benutzern zu vereinheitlichen, so dass sie mit dem Format anderer Daten in einer Datenbank übereinstimmen. Außerdem können sie ihnen helfen, mit der Datenbank eines Kunden zurecht zu kommen, in der Geldwerte oder Daten anders abgelegt sind als die Variable, denen Sie sie zuordnen wollen.

    DateFormat() Verwendung: DateFormat(datum, maske) Mit DateFormat() legen Sie fest, wie eine Variable, die ein Datum enthält, angezeigt werden soll. Die Funktion nimmt zwei Parameter entgegen: ein Datum (oder eine Variable, die ein Datum enthält) und eine optionale Maske. Eine Maske ist eine Zeichenfolge, die Ihnen genaue Kontrolle über die Anzeige von Daten gibt. Viele ColdFusion-Funktionen nehmen Masken als Parameter entgegen, die Platzhalterzeichen verwenden, um das Anzeigeformat festzulegen, wie beispielsweise DD/.MM/.YY für ein Datum.

    358

    Anzeige- und Formatfunktionen

    Wenn Sie keine Maske vorgeben, formatiert ColdFusion das Datum wie 03-Mar-99. Masken werden aus den in Tabelle 14.1 gezeigten Zeichen zusammengesetzt. Maskierungszeichen Ausgabe D

    Tag als Ziffer. Wenn der Tag einstellig ist, wird keine führende 0 verwendet.

    DD

    Tag als Ziffer. Wenn der Tag einstellig ist, wird eine führende 0 verwendet.

    DDD

    Tag als Abkürzung mit drei Buchstaben, wie beispielsweise Sun, Sat usw.

    DDDD

    Tag als vollständig ausgeschriebenes Wort: Sunday usw.

    M

    Monat als Ziffer. Wenn der Monat einstellig ist, wird keine führende 0 verwendet.

    MM

    Monat als Ziffer. Wenn der Monat einstellig ist, wird eine führende 0 verwendet.

    MMM

    Monat als Abkürzung mit drei Buchstaben.

    MMMM

    Der vollständig ausgeschriebene Monatsname.

    Y

    Die beiden letzten Ziffern des Jahres, ohne führende 0 für Zahlen kleiner 10.

    YY

    Die beiden letzten Ziffern des Jahres, mit führender 0 für Zahlen kleiner 10.

    YYY

    Die Jahreszahl mit vier Ziffern.

    Tabelle 14.1: Maskierungszeichen für DateFormat()

    Der folgende Code beispielsweise: #DateFormat(“Dec. 8, 2000", “D MMMM YYYY")#

    erzeugt den Text 8 December 2000, und der folgende Code: #DateFormat(“Dec. 8, 2000", “MM/DD/YY")#

    erzeugt den Text 12/08/00. DateFormat() ist vor allem für die Formatierung von Datums/Zeit-Objekten von

    ColdFusion praktisch. Dabei handelt es sich um spezielle Datumseinheiten, die im nächsten Abschnitt beschrieben werden.

    359

    ColdFusion-Funktionen zur Datenbearbeitung

    DecimalFormat() Verwendung: DecimalFormat(zahl) DecimalFormat() zeigt Werte oder Variablen mit Tausendertrennzeichen und Dezimal-

    punkt gefolgt von zwei Dezimalstellen an. Beispielsweise erzeugt der Code #DecimalFormat(123456)#

    die Ausgabe 123,456.00. Diese Funktion ist insbesondere für die Formatierung von Zahlen in tabellarischen Anzeigen geeignet.

    DollarFormat() Verwendung: DollarFormat(zahl) DollarFormat() zeigt einen Wert mit Dollarzeichen, Tausendertrennzeichen (Komma) und Dezimalpunkt an.

    Der Code #DollarFormat(123456)#

    erzeugt die Ausgabe $123,456.00. Wenn Sie mit ausländischen Geldwerten arbeiten, werden Sie die internationalen Funktionen von ColdFusion schätzen. Sie können zur Manipulation und Anzeige von Geldbeträgen, Zahlen, Datumswerten und Zeiten in dem für Sie geeigneten Format eingesetzt werden. Eine vollständige Liste aller unterstützten Länder sowie Details zu den verfügbaren Funktionen finden Sie in der Dokumentation von ColdFusion.

    NumberFormat() Verwendung: NumberFormat(zahl, maske) Wie DateFormat() erlaubt auch NumberFormat() eine genaue Kontrolle über die Anzeige Ihres Texts mit Hilfe einer Maske. Ist keine Maske angegeben, wird die Zahl ausschließlich in Ziffern angegeben. Tabelle 14.2 zeigt die Maskierungszeichen.

    360

    Anzeige- und Formatfunktionen

    Maskierungszeichen

    Ausgabe

    9

    Platzhalter für eine Ziffer.

    .

    Gibt die Position des Dezimalpunkts an.

    0

    Füllt die Zahl mit Nullen auf.

    ()

    Zeigt Klammern um negative Zahlen an.

    +

    Zeigt ein Pluszeichen vor positiven Zahlen und ein Minuszeichen vor negativen Zahlen an.

    -

    Zeigt ein Minuszeichen vor negativen Zahlen und ein Leerzeichen vor positiven Zahlen an.

    ,

    Trennt Tausender durch ein Komma voneinander ab.

    C

    Zentriert die Zahl innerhalb der Maskenbreite.

    L

    Richtet die Zahl innerhalb der Maskenbreite links aus.

    $

    Platziert ein Dollarzeichen vor der Zahl.

    ^

    Gibt die genaue Position für eine Zahl innerhalb der Maskenlänge an.

    Tabelle 14.2: Maskierungszeichen für NumberFormat()

    Beispielsweise erzeugt der Code #NumberFormat(1234.56787, “9999")#

    die Zahl 1235, wobei die Zahl aufgerundet wird, weil in der Maske keine Position für den Dezimalpunkt angegeben ist. #NumberFormat(1234.56787, “$9999.99")#

    dagegen rundet die Zahl auf zwei Dezimalstellen und fügt ein Dollarzeichen ein: $1234.57. Um in derselben Zahl ein Komma als Tausendertrennzeichen anzuzeigen, verwenden Sie die folgende Maske: #NumberFormat(1234.56787, “$9,999.99")#

    dieses Format gibt den Wert $1,234.57 zurück.

    ParagraphFormat() Verwendung: ParagraphFormat(text) ParagraphFormat() wird für die Anzeige von Text verwendet, in dem Zeilenschaltungen

    eingebettet sind. Beispielsweise enthält Text aus E-Mails häufig harte Zeilenschaltungen nach einer bestimmten Zeichenanzahl. Wenn Sie diesen Text in die eines Eingabeformulars einfügen, sehen Sie seltsame Umbrüche. ParagraphFormat() formatiert diese Art Text für eine korrekte HTML-Anzeige.

    361

    ColdFusion-Funktionen zur Datenbearbeitung

    Listing 14.2 zeigt ein Beispiel für die Arbeitsweise von ParagraphFormat(). Listing 14.2: paragraph_format.cfm 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:

    SELECT name FROM husbands



    SELECT name FROM husbands

    2: 3: 4: SELECT name from husbands 5: 6: 7: 8: 9: Wählen Sie den Favoriten unter Liz' Ehemännern 10: 11: 12: 13: Wählen Sie den Favoriten unter Liz' Ehemännern, indem Sie eines oder ➥mehrere ➥der Kontrollkästchen markieren: 14: 15:

    #husbands#

    387

    Listen, Strukturen und Datenfelder

    20: 21: 22:

    Damit habe ich Ihnen drei Methoden vorgestellt, wie Sie Daten in eine Liste eintragen können, aber Sie fragen sich vielleicht, wozu dieser ganze Aufwand? Ist eine Zeichenkette mit durch Kommas voneinander abgetrennten Werten wirklich so praktisch? Lesen Sie weiter, wie diese Listen verwendet werden, die Sie so professionell gepackt haben!

    15.3 Listenwerte mit lesen Durch das Tag zahlt sich der ganze Zeitaufwand aus, den Sie beim Packen von Daten in Listen investiert haben. Ich habe das in der Einführung der Datenlisten bereits kurz angesprochen, aber dieser Abschnitt wird ins Detail gehen. Angenommen, ich habe in meiner Freizeit eine riesige Datenbank eingerichtet, die Details zu jeder Folge der TV-Serie The Munsters enthält. Meine Tabelle enthält 70 Datensätze, die jeweils den Titel der Folge und eine kurze Zusammenfassung der Geschichte enthalten. Jetzt möchte ich den Web-Benutzern diese Informationen zur Verfügung stellen. Ich will eine Suchseite anlegen, auf der sie meine Tabelle nach Schlüsselwörtern durchsuchen können. Ich beginne mit dem in Abbildung 15.2 gezeigten Eingabeformular.

    Abbildung 15.2: Dieses Formular nimmt ein oder mehr Schlüsselwörter auf und übergibt sie einer Aktionsseite.

    388

    Listenwerte mit lesen

    Ich zeige den Code für diese Suchseite nicht an, weil er ganz einfach ist. Ich habe dafür ein Standard-HTML-Formular mit -Eingabefeld erstellt, in das der Benutzer die Schlüsselwörter eingeben kann. Wenn der Benutzer das Formular sendet, könnte die Variable keywords beispielsweise wie folgt aussehen: Keywords=Eddie Großvater Schule

    Weil die Variable genau das reflektiert, was der Benutzer eingegeben hat, werden zur Abtrennung der Schlüsselwörter keine Kommas verwendet. Das ist jedoch kein Problem, weil wir das auf der Aktionsseite berücksichtigen werden. Datenlisten verwenden standardmäßig Kommas als Trennzeichen, aber Sie können auch andere Zeichen verwenden, wie beispielsweise Leerzeichen. Legen Sie das gewünschte Trennzeichen in den -Anweisungen fest. Wenn meine Aktionsseite diese Suche verarbeitet, werte ich das Feld synopsis meiner Tabelle aus. Ich überprüfe es auf das Vorhandensein aller vom Benutzer übergebenen Schlüsselwörter. Listing 15.7 zeigt meine Aktionsseite. 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:



    Eine Datei kopieren

    Geben Sie den Namen der zu kopierenden Datei ein:

    Geben Sie den Namen der Zieldatei ein:




    Eine Datei löschen

    Geben Sie den Namen der zu löschenden Datei ein:




    Die folgenden Abschnitte betrachten die einzelnen -Abschnitte und die zugehörigen ACTION-Seiten genauer.

    459

    Dateien und Verzeichnisse

    Abbildung 18.4: Diese Formularseite verwendet drei -Abschnitte, um drei verschiedene Aufgaben zur Dateiverwaltung zu realisieren.

    Die ACTION-Seite für das Kopieren Betrachten Sie den Abschnitt für das Kopieren in Listing 18.5. Der Code sieht wie folgt aus:

    Eine Datei umbenennen

    Geben Sie den Namen der umzubenennenden Datei ein:

    Geben Sie den neuen Dateinamen ein:




    Listing 18.7 zeigt die ACTION-Seite für diesen -Abschnitt. Listing 18.7: copy.cfm 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:

    462

    Ihre Datei wurde umbenannt!



    DESTINATION="#FileDest#"

    Ihre Datei wurde umbenannt!

    Die Datei #FORM.FileSource# wurde in #FORM.FileDest# umbenannt.



    Dateien mit kopieren, umbenennen und löschen

    17: Sie können weiterarbeiten! 18: 19:

    Listing 18.7 ist Listing 18.6 sehr ähnlich, bis auf die ausgeführte ACTION. Die ACTION rename nimmt ebenfalls SOURCE und DESTINATION entgegen, die von der Formularseite dynamisch übergeben werden. Der ATTRIBUTES-Parameter wurde ebenfalls auf SCHREIBGESCHÜTZT (ReadOnly) gesetzt.

    Die ACTION-Seite zum Löschen Die ACTION-Seite für das Löschen, delete, ist die einfachste Aufgabe in , aber gleichzeitig auch die gefährlichste. Sie nimmt nur ein Attribut entgegen: den Namen der zu löschenden Datei. Der -Abschnitt aus Listing 18.5 sieht wie folgt aus:

    2: 3: 4: 5: 33: 34: Ihr Auftrag wurde nicht verarbeitet. Unser Zahlungsprozess hat den ➥folgenden Fehler zurückgegeben:



    37: 38: #MErrMsg# 39: 40: 41: 42:

    Beispiel für CFABORT

    Beispiel für CFABORT

    Beispiel A: Die Anweisung wird vollständig ausgeführt



    Der Wert von myVariable nach dem Hochzählen in der Schleife #Counter#mal ergibt: #myVariable#







    575

    ColdFusion-Tags



    Der Wert von myVariable nach Inkrementierung in der Schleife #counter#mal ergibt: #myVariable#



    B.16 CFAPPLET CFAPPLET erlaubt bei Verwendung in einem CFFORM den Verweis auf benutzerdefinierte Java-Applets, die zuvor mit dem ColdFusion-Administrator registriert wurden.

    Um ein Java-Applet zu registrieren, öffnen Sie den ColdFusion Administrator und klicken auf die Schaltfläche APPLETS.

    Syntax

    APPLETSOURCE Zwingend erforderlich. Der Name des registrierten Applets. NAME Zwingend erforderlich. Der Formularvariablenname für das Applet. HEIGHT Optional. Die Höhe, angegeben in Pixel. WIDTH Optional. Die Breite, angegeben in Pixel. VSPACE Optional. Abstand oberhalb und unterhalb des Applets, angegeben in Pixel.

    576

    CFAPPLET

    HSPACE Optional. Abstand an jeder Seite des Applets, angegeben in Pixel. ALIGN Optional. Ausrichtung. Gültige Werte sind: 쐽

    Left



    Right



    Bottom



    Top



    TextTop



    Middle



    AbsMiddle



    Baseline



    AbsBottom

    NOTSUPPORTED Optional. Der Text, den Sie anzeigen wollen, falls die Seite, die ein auf einem Java-Applet basierendes CFFORM-Steuerelement enthält, in einem Browser geöffnet wird, der Java nicht unterstützt oder die Java-Unterstützung deaktiviert hat. Ein Beispiel: NOTSUPPORTED="Der Browser muss Java unterstützen, damit ColdFusion Java Applets angezeigt werden können."

    Falls keine Meldung angegeben ist, wird standardmäßig die folgende angezeigt: Der Browser muss Java unterstützen, damit
    ColdFusion Java Applets angezeigt werden können!

    paramn Optional. Der gültige Name eines registrierten Parameters für das Applet. Geben Sie nur dann einen Parameter an, wenn Sie die bereits mit dem ColdFusion Administrator definierten Parameterwerte überschreiben wollen.

    Verwendung Weil Java-Applets vor der Verwendung registriert werden müssen, kann das CFAPPLET-Tag sehr einfach ausgelegt sein und die Standardparameterwerte so übernehmen, wie sie im Coldfusion Administrator registriert wurden. Sie können Parameter auch überschreiben, indem Sie sie direkt im CFAPPLET-Tag aufrufen.

    Beispiel

    Sitzungs- und Applikationsvariablen definieren

    CFAPPLICATION Example

    CFAPPLICATION definiert Gültigkeitsbereiche für eine ColdFusionApplikation und aktiviert oder deaktiviert das Speichern von Applikations- und Sitzungvariablen. Dieses Tag wird in der speziellen Datei Application.cfm abgelegt, die in einem Verzeichnis vor allen anderen CF-Templates ausgeführt wird.





    E-Turtleneck berichtet stolz, dass heute #application.number# Rollkragenpullover verkauft wurden.





    ...

    B.19 CFAUTHENTICATE Das Tag CFAUTHENTICATE authentifiziert einen Benutzer, indem es einen Sicherheitskontext für die Applikation einrichtet.

    Syntax

    SECURITYCONTEXT Zwingend erforderlich. Sicherheitskontext, in dem der angegebene Benutzer authentifiziert wird. Dieser Kontext muss zuvor im Sicherheitssystem definiert werden.

    582

    CFAUTHENTICATE

    USERNAME Zwingend erforderlich. Der zu authentifizierende Benutzer. PASSWORD Zwingend erforderlich. Kennwort für den Benutzer . SETCOOKIE Optional. Der Standardwert ist Yes (Ja). Gibt an, ob ColdFusion einen Cookie setzt, in dem Authentifizierungsinformationen enthalten sind. Dieser Cookie ist verschlüsselt und er enthält den Benutzernamen, den Sicherheitskontext, die Browser-Remote-Adresse sowie den HTTP-Benutzeragenten. THROWONFAILURE Optional. Der Standardwert ist Yes (Ja). Gibt an, ob ColdFusion eine Ausnahme (des Typs SECURITY) abfangen soll, falls die Authentifizierung fehlschlägt.

    Verwendung Tragen Sie dieses Tag in die Datei Application.cfm ein, um einen Sicherheitskontext für Ihre Applikation festzulegen. Rufen Sie die Funktion IsAuthenticated auf, um festzustellen, ob der Benutzer authentifiziert wurde. Falls Sie für SETCOOKIE den Wert No (Nein) angegeben haben, müssen Sie CFAUTHENTICATE für jede Seite der Applikation aufrufen (beispielsweise über die Datei Application.cfm). Falls Sie THROWONFAILURE auf Yes (Ja) gesetzt haben, können Sie CFAUTHENTICATE in einen CFTRY/ CFCATCH-Block einschließen, um mögliche Ausnahmen im Programm zu verarbeiten.

    Beispiel

    Authentifizierungsfehler



    Ihr gewünschter Kurs wurde gefunden: #Number# #Descript#


    Suchen...

    584

    CFCACHE



    B.21 CFCACHE CFCACHE ermöglicht Ihnen, Ihren Seitenaufbau wesentlich zu beschleunigen, wenn der dynamische Inhalt nicht bei jedem Zugriff des Benutzers auf die Seite aufgerufen werden muss. Dazu legt es temporäre Dateien an, die das statische HTML enthalten, das bei einer bestimmten Ausführung der ColdFusion-Seite zurückgegeben wurde. CFCACHE kann sowohl für einfache URLs als auch für URLs mit URL-Parametern verwendet werden.

    Syntax

    ACTION Optional. Legt eine der folgenden Aktionen fest: 쐽

    CACHE – Legt ein server-seitiges Caching fest. Der Standadwert ist CACHE.



    FLUSH – Die im Cache befindliche Seite wird aktualisiert. Wenn Sie FLUSH vorgeben, können Sie auch die Attribute DIRECTORY und EXPIREURL verwenden.



    CLIENTCACHE – Legt Browser-Caching fest.



    OPTIMAL – Legt durch eine Kombination aus serverseitigem und Browser-Caching ein optimales Caching fest.

    Weitere Informationen finden Sie im Abschnitt Verwendung. PROTOCOL Optional. Gibt das Protokoll an, mit dem Seiten aus dem Cache erzeugt werden. Geben Sie dafür HTTP:// oder HTTPS:// an. Der Standardwert ist HTTP://. TIMEOUT Optional. Datum und Uhrzeit, die die älteste noch verwendbare Cache-Seite angeben. Falls die Seite im Cache älter als angegeben ist, aktualisiert ColdFusion die Seite. Standardmäßig verwendet Cold-

    585

    ColdFusion-Tags

    Fusion alle Seiten im Cache. Wollen Sie beispielsweise, dass nur Dateien verwendet werden, die nicht älter als 4 Stunden sind, schreiben Sie folgendes:

    DIRECTORY Optional. Wird zusammen mit der Einstellung ACTION=FLUSH verwendet. Gibt den vollständigen Pfad zu einem Verzeichnis mit der Datei cfcache.map, die verwendet wird, wenn ACTION=FLUSH ist. Der Standardwert ist das Verzeichnis der aktuellen Seite. CACHEDIRECTORY Optional. Gibt den vollständigen Pfad zu dem Verzeichnis an, in dem die Seiten zwischengespeichert werden sollen. Der Standardwert ist das Verzeichnis deraktuellen Seite. EXPIREURL Optional. Wird zusammen mit der Einstellung ACTION=FLUSH verwendet. EXPIREURL nimmt eine URLReferenz mit Wildcards entgegen, die ColdFusion mit allen Zuordnungen in der Datei cfcache.mapvergleicht. Der Standard ist, alle Zuordnungen zu löschen. Beispielsweise erzeugt »foo.cfm« eine Übereinstimmung mit »foo.cfm«; »foo.cfm?*« erzeugt Übereinstimmungen mit »foo.cfm?x=5« und »foo.cfm?x=9«. PORT Optional. Die Portnummer des Web-Servers, von dem die Seite angefordert wird. Die Portnummer ist standardmäßig 80. Die Portnummer ist praktisch, weil CFCACHE-Code CFHTTP aufruft. Wenn die Portnummer im internen Aufruf von CFHTTP korrekt angegeben ist, wird der URL jedes der gefundenen Dokumente so aufgelöst, dass Links beibehalten werden.

    Verwendung In seiner einfachsten Form geben Sie einfach nur oben auf der Seite an, für die ein Caching realisiert werden soll. Mit dem ACTION-Attribut können Sie ein server-seitiges Caching, ein Browser-Caching oder eine Kombination aus server-seitigem und Browser-Caching festlegen. Der Vorteil beim Browser-Caching ist, dass es keine ColdFusion-Ressourcen verbraucht, weil der Browser die Seiten in seinem eigenen Cache ablegt, wodurch die Leistung verbessert wird. Der Vorteil bei der Kombination der beiden Caching-Arten ist, dass damit die Leistung optimiert wird; wenn der Browser-Cache veraltet ist, kann der Server die zwischengespeicherten Daten aus seinem eigenen Cache abrufen. Neben den eigentlichen Dateien im Cache verwendet CFCACHE eine Zuordnungsdatei, um das Caching zu steuern. Sie heißt cfcache.map und verwendet ein ähnliches Format wie eine INI-Datei unter Windows. Die Zurodnung eines URL mit Parametern wird wie folgt realisiert. Angenommen, das Verzeichnis »c:\InetPub\wwwroot\dir1« enthält die CFM-Datei »foo.cfm«, die mit und ohne URL-Parameter aufgerufen werden kann. Die Einträge für foo.cfm in cfcache.map sehen wie folgt aus: [foo.cfm] Mapping=C:\InetPub\wwwroot\dir1\CFCBD.tmp SourceTimeStamp=08/31/1999 08:59:04 AM

    586

    CFCACHE

    [foo.cfm?x=5] Mapping=C:\InetPub\wwwroot\dir1\CFCBE.tmp SourceTimeStamp=08/31/1999 08:59:04 AM [foo.cfm?x=9] Mapping=C:\InetPub\wwwroot\dir1\CFCBF.tmp SourceTimeStamp=08/31/1999 08:59:04 AM

    Die Datei cfcache.map in einem bestimmten Verzeichnis speichert nur Zuordnungen für dieses Verzeichnis. Sobald sich der Zeitstempel der zugrundeliegenden Seite ändert, aktualisiert ColdFusion die Cache-Datei für nur diesen URL. ColdFusion verwendet das Feld SourceTimeStamp, um festzustellen, ob die aktuell im Cache befindliche Datei aktuell ist oder neu aufgebaut werden muss. Der Cache kann wie folgt aktualisiert werden: 쐽

    TIMEOUT-Attribut – ColdFusion vergleicht den Zeitstempel der Datei im Cache mit dem TIMEOUTAttribut. Ist der Zeitstempel älter als TIMEOUT, wird die alte Datei gelöscht und eine neue wird angelegt. Sie können gegebenenfalls feste Zeitangaben vornehmen, aber es ist besser, relative Zeitangaben zu verwenden. Dies ist die bevorzugte Technik und sie kann für Sekunden, Stunden, Tage, Wochen, Jahre usw. verwendet werden.



    ACTION=FLUSH – Mit ACTION=FLUSH erzwingen Sie, dass die Dateien aus dem Cache entfernt werden. Dafür stehen zwei Attribute zur Verfügung, DIRECTORY und EXPIREURL.



    Manuell – Manuelles oder programmgesteuertes (mit CFFILE) Löschen der .tmp-Dateien. Das ist nicht zu empfehlen.

    Hinweise zu CFCACHE: 쐽

    CFCACHE setzt voraus, dass die Anzahl der von ColdFusion Server ausgehenden »gleichzeitigen

    Anforderungen« größer als 1 ist. Wird eine Cache-Datei erzeugt, benötigt die angeforderte Seite zwei Verbindungen, um die Anforderung erfüllen zu können. Wird eine Datei im Cache gefunden, ist nur eine Anforderung nötig. 쐽

    Debugging-Einstellungen haben keine Auswirkung auf CFCACHE, es sei denn, die Template aktiviert sie explizit. Wenn eine Datei im Cache angelegt wird, verwendet CFCACHE .



    ColdFusion stellt keine Seiten in den Cache, die von anderen als den URL-Parametern abhängig sind.



    Um CFCACHE in Kombination mit Secure Sockets Layer (SSL) zu verwenden, geben Sie PROTOCOL="http://" an. Falls Sie SSL benötigen, sollten Sie den ColdFusion-Server als DesktopApplikation ausführen. Beachten Sie jedoch, dass Allaire dringend emfpiehlt, ColdFusion Server als Dienst auszuführen. Weitere Informationen zu SSL finden Sie im Artikel #1096 der Knowledge Base unter http://www.allaire.com/Support/KnowledgeBase/ SearchForm.cfm.



    Falls eine Template aus irgendeinem Grund einen Fehler zurückgibt, wird die Fehlerseite in den Cache gestellt.

    587

    ColdFusion-Tags

    Example – cfcache



    CFCOLLECTION

    CFCOLLECTION

    591

    ColdFusion-Tags



    Beispiel für CFCONTENT

    Beispiel für CFCONTENT

    593

    ColdFusion-Tags



    CFCONTENT Example 2

    Beispiel 2 für CFCONTENT

    Dieses Beispiel zeigt, wie das Reset-Attribut die Ausgabe für Text ändert.

    RESET = "Yes ": 123456

    Dieses Beispiel zeigt, wie das Reset-Attribut die Ausgabe für Text ändert.

    RESET = "No ": 123456



    B.25 CFCOOKIE Definiert Cookie-Variablen einschließlich Gültigkeits- und Sicherheitsoptionen. Weitere Informationen finden Sie im Abschnitt Verwendung.

    Syntax

    NAME Zwingend erforderlich. Der Name der Cookie-Variablen.

    594

    CFCOOKIE

    VALUE Optional. Der der Cookie-Variablen zugeordnete Wert. EXPIRES Optional. Gibt das Ablaufdatum einer Cookie-Variablen an. Kann als Datum (wie beispielsweise 10/ 09/97), als eine Anzahl von Tagen (wie beispielsweise in 10, 100) , NOW oder NEVER angegeben werden. Mit NOW wird das Cookie vom Browser des Besuchers gelöscht. SECURE Optional. Gibt an, dass die Variable sicher übertragen werden soll. Falls der Browser die SSL-Sicherheit (Secure Socket Layer) nicht unterstützt, wird das Cookie nicht gesendet. PATH Optional. Gibt den URL innerhalb der festgelegten Domäne an, auf die sich dieses Cookie bezieht: PATH="/services/login"

    Hinweis Falls Sie einen Pfad angeben, müssen Sie auch einen Wert für das DOMAIN-Attribut angeben. DOMAIN Optional. Gibt die Domäne an, für die das Cookie gültig ist, und an die das Cookie gesendet werden kann. Eine explizit angegebene Domäne muss immer mit einem Punkt beginnen. Falls es sich um eine untergeordnete Domäne handelt, sind alle Domänen gültig, deren Domänennamen mit dieser Zeichenkette enden. Für Domänennamen, die mit Ländercodes enden (wie beispielsweise .de, .jp oder .us), muss die Angabe der untergeordneten Domäne mindestens drei Punkte enthalten, wie zum Beispiel .mongo.stateu.us. Bei speziellen Top-Level-Domänen sind nur zwei Punkte erforderlich, wie beispielsweise in .allaire.com. Wenn Sie einen PATH-Wert angeben, müssen Sie auch eine gültige DOMAIN angeben. Mehrere Einträge werden durch Semikolons ( ; ) voneinander getrennt.

    Verwendung Cookies, die mit CFCOOKIE geschrieben wurden, werden erst dann in die Datei cookies.txt geschrieben, nachdem die Browser-Sitzung beendet ist. Bevor der Browser geschlossen wird, bleibt das Cookie im Speicher. Falls Sie in CFCOOKIE das EXPIRES-Attribut nicht gesetzt haben, existiert das Cookie nur solange der Browser des Besuchers geöffnet ist. Wird der Browser geschlossen, verliert das Cookie seine Gültigkeit. Es wird dann nicht in die Datei cookies.txt geschrieben.

    Warnung Setzen Sie keine Cookie-Variable auf derselben Seite, auf der Sie auch das CFLOCATION-Tag verwenden. In diesem Fall wird das Cookie nie im Browser gespeichert und hat deshalb keinen Sinn.

    595

    ColdFusion-Tags

    Beispiel

    SELECT EMail, FromUser, Subject, Posted FROM Comments



    Beispiel für CFCOOKIE

    Beispiel für CFCOOKIE





    596

    CFDIRECTORY

    Der letzte AOL-Besucher auf dieser Site war #Cookie.LastAOLVisitor#, am #DateFormat(COOKIE.TimeVisited)#



    Beispiel für CFDIRECTORY

    Beispiel für CFDIRECTORY

    599

    ColdFusion-Tags





    B.27 CFERROR Bietet die Möglichkeit, benutzerdefinierte HTML-Seiten anzuzeigen, wenn Fehler auftreten. Auf diese Weise realisieren Sie ein konsistentes Look&Feel für Ihre Applikation, selbst wenn Fehler auftreten.

    Syntax

    TYPE Zwingend erforderlich. Der Fehlertyp, den diese benutzerdefinierte Fehlerseite verarbeiten soll: 쐽

    Geben Sie EXCEPTION an, wenn Ausnahmen verarbeitet werden sollen.



    Geben Sie VALIDATION an, wenn Fehler verarbeitet werden sollen, die beim Übersenden eines Formulars für die Dateneingabe entstehen. Eine Verarbeitungsroutine für Validierungsfehler ist nur dann sinnvoll, wenn sie in der Datei Application.cfm platziert wird.



    Geben Sie MONITOR an, um eine Ausnahmeüberwachung einzurichten.



    Geben Sie REQUEST an, um Fehler zu verarbeiten, die während der Verarbeitung einer Seite auftreten. Der Standardwert ist REQUEST.

    Weitere Informationen zu Variablen und anderen Konstrukten in Templates, mit denen die verschiedenen Fehlertypen verarbeitet werden können, finden Sie unter CFERROR-Fehlerseitenvariablen. TEMPLATE Zwingend erforderlich. Der relative Pfad zu der benutzerdefinierten Fehlerverarbeitungsseite. Die folgende Tabelle beschreibt die Templates, die für die verschiedenen Fehlertypen verwendet werden.

    600

    CFERROR

    Fehlertyp

    Entsprechende benutzerdefinierte Fehlerseite

    Exception

    Ein Template zur Ausnahmeverarbeitung, das vom CFML-Sprachprozessor dynamisch aufgerufen wird, wenn er eine nicht verarbeitete Ausnahmebedingung erkennt. Templates zur Ausnahmeverarbeitung können als Teil einer Applikation oder über das Tag l angegeben oder über den ColdFusion Administrator gesetzt werden. Ein Template für die Ausnahmeverarbeitung kann den vollen Umfang der CFML-Tags verwenden. Deshalb stellt es ein leistungsfähigeres Werkzeug als dar. Dieses Template verfügt außerdem über Zugriff auf die Fehlervariablen in der Tabelle unter CFERROR-Fehlerseitenvariablen.

    Request

    Dieses Template enthält nur die Fehlervariablen, die in der Tabelle unter CFERROR-Fehlerseitenvariablen beschrieben sind. Es darf keine CFML-Tags enthalten. Es ist praktisch für Backup-Fehlerverarbeitungsroutinen bei Sites mit hohen Anforderungen an die Benutzerschnittstelle.

    Validation

    Eine Verarbeitungsroutine für Validierungsfehler. Sie verarbeitet Fehler bei der Dateneingabevalidierung, die auftreten, wenn ein Formular übertragen wird. Sie ist nur dann sinnvoll, wenn sie in der Datei Application.cfm platziert wird.

    Monitor

    Ein Template für die Ausnahmeüberwachtung wird dynamisch durch den CFML-Sprachprozessor aufgerufen, wenn er erstmals eine Ausnahmebedingung erkennt, und zwar bevor er nach /- oder -Verarbeitungsroutinen für die Ausnahmeverarbeitung sucht.

    MAILTO Optional. Die E-Mail-Adresse des Administrators, der im Fehlerfall benachrichtigt werden soll. Dieser Wert steht für Ihre benutzerdefinierte Fehlerseite zur Verfügung, die die Mail-To-Eigenschaft des Fehlerobjekts verwendet, wie beispielsweise #Error.MailTo#. EXCEPTION Erforderlich, wenn der Fehlertyp als Exception oder Monitor angegeben wurde. Der Typ der Ausnahme.

    Verwendung Das CFERROR-Tag wird normalerweise verwendet, um die Fehlermeldungen für alle Seiten einer Applikation anzupassen. Deshalb trägt man es in der Regel in die Datei Application.cfm ein. Um sicherzustellen, dass die Fehlerseiten korrekt angezeigt werden, sollten die mit CFERROR festgelegten Seiten nicht mit dem Dienstprogramm cfencode verschlüsselt werden.

    601

    ColdFusion-Tags

    CFERROR-Fehlervariablen Das im TEMPLATE-Attribut des CFERROR-Tags angegebene Template für die Fehlerverarbeitung kann ein oder mehr Fehlervariablen enthalten, die von ColdFusion ersetzt werden, wenn ein Fehler anezeigt wird.

    Fehlervariablen für die Fehlertypen Request, Exception und Monitor Die folgenden Fehlervariablen stehen zur Verfügung, wenn in CFERROR eines der Attribute TYPE="Request", TYPE="Exception" oder TYPE="Monitor" angegeben ist: Variablen für die Fehlertypen Request, Exception und Monitor Fehlervariable

    Beschreibung

    Error.Diagnostics

    Detaillierte Fehlerdiagnose vom ColdFusion-Server.

    Error.MailTo

    E-Mail-Adresse des Administrators, der benachrichtigt werden soll (entspricht dem im MAILTO-Attribut von CFERROR gesetzten Wert).

    Error.DateTime

    Datum und Uhrzeit, wann der Fehler aufgetreten ist.

    Error.Browser

    Browser, der ausgeführt wurde, als der Fehler aufgetreten ist.

    Error.GeneratedContent

    Der erzeugte Inhalt der fehlgeschlagenen Anforderung.

    Error.RemoteAddress

    IP-Adresse des Remote-Clients.

    Error.HTTPReferer

    Seite, von der aus der Client auf die Verknüpfung zu der Seite zugriff, in der der Fehler auftrat.

    Error.Template

    Seite, die ausgeführt wurde, als der Fehler auftrat.

    Error.QueryString

    URL-Abfragezeichenkette der Client-Anfrage.

    Hinweis Falls Sie TYPE="Exception" oder TYPE="Monitor" angegeben haben, können Sie statt Error das Präfix CFERROR verwenden, wenn Sie diese Notationsform bevorzugen, beispielsweise CFERROR. Diagnostics, CFERROR.Mailto oder CFERROR.DateTime.

    Benutzerdefinierte Fehlerseiten mit TYPE="Validation" Folgende Fehlervariablen stehen zur Verfügung, wenn CFERROR TYPE="Validation" verwendet wird:

    602

    CFERROR

    Fehlervariable

    Beschreibung

    Error.ValidationHeader

    Text für die Kopfzeile der Validierungsmeldung.

    Error.InvalidFields

    Unsortierte Liste von aufgetretenen Validierungsfehlern.

    Error.ValidationFooter

    Text für die Fußzeile der Validierungsmeldung.

    Beispiel



    B.28 CFEXECUTE Ermöglicht ColdFusion-Entwicklern, beliebige Prozesse auf der Server-Maschine auszuführen.

    Syntax

    ...

    NAME Zwingend erforderlich. Der vollständige Pfadname der auszuführenden Applikation. Hinweis: Auf Windows-Systemen müssen Sie die Dateinamenerweiterung als Teil des Applikationsnamens angeben, beispielsweise .exe. ARGUMENTS Optional. Beliebige Befehlszeilenargumente, die dem Programm übergeben werden sollen. Falls ARGUMENTS als Zeichenkette übergeben wird, wird es wie folgt verarbeitet: 쐽

    Auf Windows-Systemen wird die gesamte Zeichenkette der Windows-Prozesssteuerung zur Syntaxanalyse übergeben.



    Auf UNIX-Systemen wird die Zeichenkette in ein Datenfeld mit Argumenten zerlegt. Das Standardtrennzeichen für die einzelnen Token ist das Leerzeichen; Argumente mit eingebetteten Leerzeichen können durch Anführungszeichen voneinander abgetrennt werden.

    Falls ARGUMENTS als Datenfeld übergeben wird, wird es wie folgt verarbeitet: 쐽

    604

    Auf Windows-Systemen werden die Elemente des Datenfelds zu einer Zeichenkette aus Token verknüpft, die durch Leerzeichen voneinander getrennt werden. Diese Zeichenkette wird dann der Windows-Prozesssteuerung übergeben, wie oben bereits beschrieben.

    CFEXECUTE



    Auf UNIX-Systemen werden die Elemente des Datenfelds ARGUMENTS in ein entsprechendes Datenfeld von exec() Argumenten kopiert.

    OUTPUTFILE Optional. Die Datei, in die die Ausgabe des Programms umgeleitet werden soll. Wird keine Datei angegeben, erscheint die Ausgabe auf der Seite, von der aus sie angefordert wurde. TIMEOUT Optional. Gibt an, wie viele Sekunden der Ausführungs-Thread von ColdFusion auf den angestossenen Prozess wartet. Die Angabe eines Timeout-Werts von 0 ist gleichbedeutend mit dem nicht-blockierenden Ausführungsmodus. Der Standardwert ist 0; der ColdFusion-Thread stösst also einen Prozess an und kehrt sofort zurück, ohne auf die Abarbeitung des Prozesses zu warten. Falls keine Ausgabedatei angegeben wurde und der Timeout-Wert gleich 0 ist, wird die Ausgabe des Programms in den Bit-Originalspeicherbereich umgeleitet.

    Verwendung CFEXECUTE steht auf Windows NT 4.0- und UNIX-Plattformen zur Verfügung. Fügen Sie zwischen die CFEXECUTE-Tags keine anderen ColdFusion-Tags oder -Funktionen ein. CFECEXUTE-Tags können nicht verschachtelt werden.

    Ausnahmen CFEXECUTE fängt die folgenden Ausnahmen ab: 쐽

    Falls der Applikationsname nicht gefunden wird, wird die Ausnahme »Application File Not Found« gemeldet.



    Falls die Ausgabedatei nicht geöffnet werden kann, wird die Ausnahme »Output File Cannot be opened« gemeldet.



    Falls der tatsächliche Benutzer des aktuell ausgeführten ColdFusion-Threads keine Berechtigung zur Ausführung des Prozesses besitzt, wird eine Sicherheitsausnahme gemeldet.



    Die Timeout-Werte müssen zwischen 0 und einer beliebigen höheren Zahl liegen.

    Beispiel

    Beispiel für CFEXIT

    Beispiel für CFEXIT

    CFEXIT kann für den Abbruch der Verarbeitung des aktuell ausgeführten benutzerdefinierten CFML-Tags verwendet werden. Die Ausführung wird unmittelbar nach dem Aufruf des benutzerdefinierten Tags auf der Seite fortgesetzt, auf der das Tag aufgerufen wurde. Verwendung von CFEXIT

    CFEXIT wird hauptsächlich verwendet, um einen bedingten Abbruch der Verarbeitung in einem benutzerdefinierten Tag vorzunehmen. CFEXIT gibt die Steuerung an die Seite zurück, die das benutzerdefinierte Tag aufgerufen hat, oder falls ein Tag von einem anderen Tag aufgerufen wurde, an das aufrufende Tag.



    Falls CFEXIT außerhalb eines benutzerdefinierten Tags verwendet wird, verhält es sich wie CFABORT. Beispielsweise wird der Text nach diesem Tag nicht verarbeitet:

    Dieser Text wird nicht ausgeführt, weil davor das CFEXIT-Tag steht.

    B.30 CFFILE Mit dem CFILE-Tag können Sie die gesamte Interaktion mit Dateien abwickeln. Die mit CFILE verwendbaren Attribute sind von dem Wert des ACTION-Attributs abhängig. Ist z.B. ACTION = "Write", erwartet ColdFusion die Attribute, die man normalerweise mit dem Schreiben einer Textdatei in Verbindung bringt. Weitere Informationen dazu, welche Attribute für welche ACTIONs gelten, entnehmen Sie bitte den einzelnen CFFILE-Hilfethemen.

    608

    CFFILE

    Hinweis Die im ColdFusion-Server vorgenommenen Einstellungen zur Basissicherheit verhindern möglicherweise, dass CFFILE ausgeführt wird. Diese Einstellungen werden im ColdFusion-Administrator auf der Seite BASISSICHERHEIT verwaltet. Damit das CFFILE-Tag verarbeitet werden kann, muss es auf der Administratorseite BASISSICHERHEIT aktiviert werden. Falls Sie ColdFusion-Anwendungen entwickeln, die für die Ausführung auf einem von mehreren Kunden genutzten Server ausgelegt sind, müssen Sie auf die Sicherheit der Dateien achten, die durch CFFILE hochgeladen oder auf andere Weise manipuliert werden könnten.

    CFFILE-Hilfethemen 쐽

    CFFILEACTION="Upload"



    CFFILEACTION="Move"



    CFFILEACTION="Rename"



    CFFILEACTION="Copy"



    CFFILEACTION="Delete"



    CFFILEACTION="Read"



    CFFILEACTION="ReadBinary"



    CFFILEACTION="Write"



    CFFILEACTION="Append"

    CFFILE ACTION-Attribute Abhängig von dem Wert, den Sie dem ACTION-Attribut von CFFILE zuweisen, gibt es weitere untergeordnete Attribute, die Sie einstellen können. In der nachfolgenden Tabelle wird gezeigt, welche Attribute Sie mit jeder CFFILE-Aktion verwenden können. CFFILE ACTION

    Attribute

    Upload

    ACCEPT DESTINATION FILEFIELD NAMECONFLICT MODE ATTRIBUTES

    Move

    SOURCE DESTINATION ATTRIBUTES

    609

    ColdFusion-Tags

    CFFILE ACTION

    Attribute

    Rename

    SOURCE DESTINATION ATTRIBUTES

    Copy

    SOURCE DESTINATION ATTRIBUTES

    Delete

    FILE

    Read

    FILE VARIABLE

    ReadBinary

    FILE VARIABLE

    Write

    OUTPUT FILE MODE ADDNEWLINE ATTRIBUTES

    Append

    OUTPUT FILE MODE ADDNEWLINE ATTRIBUTES

    CFFILE ACTION="Upload" Verwenden Sie CFFILE mit der Upload-Aktion, um eine in einem Formularfeld angegebene Datei in ein Verzeichnis auf dem Web-Server hochzuladen.

    Hinweis: Das MODE-Attribut gilt nur für ColdFusion unter Solaris und HP-UX

    

    Syntax

    610

    CFFILE

    FILEFIELD Zwingend erforderlich. Der Name des Formularfelds, das zum Auswählen der Datei verwendet wurde. Aber Vorsicht: Verwenden Sie keine Doppelkreuze (#) für die Angabe des Feldnamens. DESTINATION Zwingend erforderlich. Der vollständige Pfad zu dem Zielverzeichnis auf dem Web-Server, auf dem die Datei gespeichert werden soll. Beim Datei-Upload muss an das Zielverzeichnis ein abschließender Schrägstrich angefügt werden. Verwenden Sie dazu unter Windows den umgekehrten Schrägstrich (\) und unter UNIX den normalen Schrägstrich (/). Das Verzeichnis muss nicht unbedingt im Stammverzeichnis des Web-Server-Dokumentverzeichnisses liegen. NAMECONFLICT Optional. Der Standardwert ist Error. Gibt an, wie die Datei behandelt werden soll, wenn ein Namenskonflikt auftritt (es wurde ein Name für eine Datei angegeben, die bereits im Verzeichnis vorhanden ist). Erlaubte Einträge sind: 쐽

    Error – Standardwert. Die Datei wird nicht gespeichert. ColdFusion bricht die Verarbeitung der Seite ab und gibt einen Fehler zurück.



    Skip – Die Datei wird weder gespeichert, noch wird ein Fehler ausgegeben. Mit dieser Einstellung kann ein benutzerdefiniertes Verhalten basierend auf einer Prüfung der FILE-Eigenschaften zugelassen werden.



    Overwrite – Ersetzt eine bereits existierende Datei, wenn sie denselben Namen wie das CFFILEZiel verwendet.



    MakeUnique – Erzeugt automatisch einen eindeutigen Dateinamen für den Upload. Dieser Name wird in der FILE-Objektvariablen ServerFile gespeichert. Sie können diese Variable verwenden, um den Namen aufzuzeichnen, der beim Speichern der Datei verwendet wurde.

    ACCEPT Optional. Verwenden Sie ACCEPT, um einzuschränken, welche Dateitypen akzeptiert werden. Geben Sie einen bzw. mehrere durch Kommas voneinander getrennte MIME-Typen der Dateitypen ein, die Sie akzeptieren möchten. Um z.B. Uploads von GIF- und Microsoft Word-Dateien zuzulassen, geben Sie folgendes ein: ACCEPT="image/gif, application/msword"

    Beachten Sie, dass der Browser den Dateityp anhand der Dateinamenerweiterung bestimmt. MODE Optional. Definiert Berechtigungen für eine hochgeladene Datei unter Solaris oder HP-UX. Wird unter Windows ignoriert. Gültige Einträge entsprechen den Oktalwerten (nicht symbolisch) des UNIX-Befehls chmod. Berechtigungen werden für Eigentümer, Gruppe bzw. Alle anderen zugewiesen. Beispiel: MODE=644

    weist dem Eigentümer Lese-/Schreibberechtigungen und Gruppe/Alle anderen Leseberechtigungen zu. MODE=666

    611

    ColdFusion-Tags

    Weist Lese-/Schreibberechtigungen für Eigentümer, Gruppe und Alle anderen zu. MODE=777

    Weist allen Benutzern Lese-, Schreib- und Ausführungsberechtigungen zu. ATTRIBUTES Optional. Eine Liste der durch Kommas voneinander getrennten Dateiattribute, die für die hochzuladende Datei gesetzt werden. Die folgenden Dateiattribute werden unterstützt: 쐽

    ReadOnly



    Temporary



    Archive



    Hidden (Versteckt)



    System



    Normal

    Falls ATTRIBUTES nicht verwendet wird, werden die Attribute der Datei beibehalten. Werden Normal sowie ein beliebiges anderes Attribut angegeben, setzt dieses andere Attribut Normal außer Kraft. Einzelne Attribute müssen explizit angegeben werden. Wenn Sie beispielsweise nur das ReadOnlyAttribut angeben, werden alle anderen Attribute überschrieben.

    Beispiel Mit dem folgenden Beispiel wird ein eindeutiger Dateiname erstellt, wenn beim Hochladen der Datei unter Windows ein Namenskonflikt auftritt:

    Hinweis Unter Windows müssen Sie nach dem Zielverzeichnisnamen einen umgekehrten Schrägstrich (\) einfügen. Unter UNIX müssen Sie am Ende des Zielverzeichnisnamens einen normalen Schrägstrich (/) einfügen. In diesem Beispiel ist das Zielverzeichnis »uploads«.

    Ergebnisse eines Datei-Uploads auswerten Nachdem ein Datei-Upload abgeschlossen ist, können Sie mit Hilfe von Datei-Upload-Parametern Statusinformationen abrufen. Diese Statusinformationen enthalten eine Vielzahl von Informationen über die Datei, z.B. den Namen der Datei und das Verzeichnis, in dem sie abgelegt wurde. Datei-

    612

    CFFILE

    Upload-Parameter verwenden das Präfix »File«, z.B. File.ClientDirectory. Die Dateistatus-Parameter können Sie überall dort verwenden, wo auch die Verwendung anderer ColdFusion-Parameter zulässig ist. Nach einem Upload stehen die folgenden Datei-Upload-Statusparameter zur Verfügung. Parameter

    Beschreibung

    AttemptedServerFile

    Name, unter dem ColdFusion als erstes versucht hat, die Datei zu speichern, z.B. MeineDatei.txt.

    ClientDirectory

    Verzeichnisposition der aus dem Client-System hochgeladenen Datei.

    ClientFile

    Name der Datei, die aus dem Client-System hochgeladen wurde.

    ClientFileExt

    Dateinamenerweiterungen der Upload-Datei auf dem Client-System ohne Punkt, z.B. txt, nicht .txt.

    ClientFileName

    Dateiname der Upload-Datei aus dem Client-System ohne Dateinamenerweiterung.

    ContentSubType

    Untergeordneter Typ des MIME-Inhalts der gespeicherten Datei.

    ContentType

    Typ des MIME-Inhalts der gespeicherten Datei.

    DateLastAccessed

    Datum und Uhrzeit des letzten Zugriffs auf die Upload-Datei.

    FileExisted

    Gibt an (Yes oder No), ob die Datei bereits mit dem gleichen Pfad vorhanden war.

    FileSize

    Größe der Upload-Datei.

    FileWasAppended

    Gibt an (Yes oder No), ob ColdFusion die Upload-Datei an eine bestehende Datei angefügt hat.

    FileWasOverwritten

    Gibt an (Yes oder No), ob ColdFusion eine Datei überschrieben hat.

    FileWasRenamed

    Gibt an (Yes oder No), ob die Upload-Datei umbenannt wurde, um einen Namenskonflikt zu vermeiden.

    FileWasSaved

    Gibt an (mit Yes oder No), ob ColdFusion eine Datei gespeichert hat.

    OldFileSize

    Größe einer Datei, die während des Datei-Uploads überschrieben wurde.

    ServerDirectory

    Verzeichnis der Datei, die tatsächlich auf dem Server gespeichert ist.

    ServerFile

    Dateiname der Datei, die tatsächlich auf dem Server gespeichert ist.

    ServerFileExt

    Dateinamenerweiterung der Upload-Datei auf dem Server ohne Punkt, z.B. txt, nicht .txt.

    ServerFileName

    Dateiname der Upload-Datei auf dem Server ohne Erweiterung.

    TimeCreated

    Zeitpunkt der Erstellung der Upload-Datei.

    TimeLastModified

    Datum und Uhrzeit der letzten Bearbeitung der Upload-Datei.

    613

    ColdFusion-Tags

    Tipp Verwenden Sie das Präfix »File«, um auf die obengenannten Variablen zu verweisen. Beispiel: #File.FileExisted#.

    Hinweis Datei-Statusvariablen sind schreibgeschützt. Sie werden auf die Ergebnisse des aktuellen CFFILE-Vorgangs gesetzt. (Wenn zwei CFFILE-Tags ausgeführt werden, setzt eine nachfolgende CFFILE-Operation die Ergebnisse der ersten Operation außer Kraft.)

    UNIX-Beispiele In den folgenden drei Beispielen wird die Verwendung des MODE-Attributs unter UNIX demonstriert. Das erste Beispiel erstellt die Datei /tmp/foo mit den Berechtigungen rw-r-r-- (owner=read/write, group/other=read).

    In diesem Beispiel wird Text an die vorgegebene Datei angehängt und Lese-/Schreibberechtigungen (rw) für alle gesetzt.

    Das nächste Beispiel führt den Upload einer Datei durch und erteilt die Berechtigungen rwx-rw-rw (owner/group/other=read/write). CFFILE ACTION="Upload" FILEFIELD="Feldname" DESTINATION="/tmp/programm.exe" MODE=755>

    CFFILE ACTION="Move" Diese CFFILE-Aktion kann verwendet werden, um eine Datei von einer Speicherposition auf dem Server zu einer anderen zu verschieben. Syntax

    614

    CFFILE

    SOURCE Zwingend erforderlich. Der vollständige Pfad zu der zu verschiebenden Datei. DESTINATION Zwingend erforderlich. Der vollständige Pfad zu dem Verzeichnis, in das die Datei verschoben wird. Wenn Sie keinen Dateinamen angeben, muss beim Verschieben einer Datei ein Schrägstrich an das Ende des Zielverzeichnisses angehängt werden. Verwenden Sie dazu unter Windows den umgekehrten Schrägstrich (\) und unter UNIX den normalen Schrägstrich (/). ATTRIBUTES Optional. Eine Liste der durch Kommas voneinander getrennten Dateiattribute, die für die verschobene Datei gesetzt werden. Die folgenden Dateiattribute werden unterstützt: 쐽

    ReadOnly



    Temporary



    Archive



    Hidden (Versteckt)



    System



    Normal

    Wird ATTRIBUTES nicht verwendet, werden die Attribute der Datei beibehalten. Werden »Normal« und ein beliebiges anderes Attribut angegeben, setzt dieses andere Attribut »Normal« außer Kraft. Einzelne Attribute müssen explizit angegeben werden. Wenn Sie beispielsweise nur das ReadOnlyAttribut angeben, werden alle anderen Attribute überschrieben.

    Beispiel Das folgende Beispiel verschiebt unter Windows die Datei wichtigesMemo.doc vom Verzeichnis c:\dateien\upload\ in das Verzeichnis c:\dateien\memo\:

    Hinweis Unter Windows müssen Sie, falls Sie keinen Dateinamen angeben, nach dem Zielverzeichnisnamen einen umgekehrten Schrägstrich (\) einfügen. In diesem Beispiel ist das angegebene Zielverzeichnis »memo«.

    615

    ColdFusion-Tags

    CFFILE ACTION="Rename" Verwenden Sie CFFILE mit der Rename-Aktion, um eine Datei umzubenennen, die bereits auf dem Server vorhanden ist.

    Syntax

    SOURCE Zwingend erforderlich. Der vollständige Pfad zu der Datei, die umbenannt werden soll. DESTINATION Zwingend erforderlich. Der vollständige Pfad zu der Datei, einschließlich ihres neuen Namens. ATTRIBUTES Optional. Eine Liste der durch Kommas voneinander getrennten Dateiattribute, die für die umzubenennende Datei gesetzt werden. Die folgenden Dateiattribute werden unterstützt: 쐽

    ReadOnly



    Temporary



    Archive



    Hidden (Versteckt)



    System



    Normal

    Falls ATTRIBUTES nicht verwendet wird, werden die Attribute der Datei beibehalten. Wenn Normal und ein beliebiges anderes Attribut angegeben werden, setzt dieses andere Attribut Normal außer Kraft. Einzelne Attribute müssen explizit angegeben werden. Wenn Sie beispielsweise nur das ReadOnlyAttribut angeben, werden alle anderen Attribute überschrieben.

    Beispiel Das folgende Beispiel nennt die Datei wichtigesMemo.doc in altesMemo.doc um:

    616

    CFFILE

    CFFILE ACTION="Copy" Das CFFILE-Tag kann zum Kopieren einer Datei von einem Verzeichnis auf dem Server in ein anderes verwendet werden.

    Syntax

    SOURCE Zwingend erforderlich. Der vollständige Pfad zu der Datei, die kopiert werden soll. DESTINATION Zwingend erforderlich. Der vollständige Pfad zu dem Zielverzeichnis, in dem die Kopie der Datei abgelegt werden soll. Falls Sie keinen Dateinamen angeben, müssen Sie nach dem Zielverzeichnisnamen einen Schrägstrich einfügen. Verwenden Sie dazu unter Windows einen umgekehrten Schrägstrich (\). Verwenden Sie unter UNIX den normalen Schrägstrich (/). ATTRIBUTES Optional. Eine Liste der durch Kommas voneinander getrennten Dateiattribute, die für die zu kopierenden Datei gesetzt werden. Die folgenden Dateiattribute werden unterstützt: 쐽

    ReadOnly



    Temporary



    Archive



    Hidden (Versteckt)



    System



    Normal

    Falls ATTRIBUTES nicht verwendet wird, werden die Attribute der Datei beibehalten. Wenn Normal und ein beliebiges anderes Attribut angegeben werden, setzt dieses andere Attribut Normal außer Kraft. Einzelne Attribute müssen explizit angegeben werden. Wenn Sie beispielsweise nur das ReadOnlyAttribut angeben, werden alle anderen Attribute überschrieben.

    Beispiel Das folgende Beispiel speichert eine Kopie der Datei wichtigesMemo.doc im Verzeichnis c:\dateien\backup\:

    617

    ColdFusion-Tags

    Hinweis Unter Windows müssen Sie, falls Sie keinen Dateinamen angeben, nach dem Zielverzeichnisnamen einen umgekehrten Schrägstrich (\) einfügen. In diesem Beispiel ist das angegebene Zielverzeichnis »backup«.

    CFFILE ACTION="Delete" Das CFFILE-Tag kann dazu verwendet werden, eine Datei auf dem Server zu löschen.

    Syntax

    FILE Zwingend erforderlich. Der vollständige Pfad zu der Datei, die gelöscht werden soll.

    Beispiel Im folgenden Beispiel wird die angegebene Datei permanent gelöscht:

    CFFILE ACTION="Read" Sie können das CFFILE-Tag dazu verwenden, eine existierende Textdatei zu lesen. Die Datei wird in einen dynamischen Parameter eingelesen, den Sie dann an einer beliebigen Stelle auf der Anwendungsseite verwenden können. Sie könnten z.B. eine Textdatei einlesen und ihren Inhalt in eine Datenbank einfügen. Oder Sie lesen eine Textdatei und ändern den Inhalt mit Hilfe von Suchen&Ersetzen.

    Syntax

    FILE Zwingend erforderlich. Der vollständige Pfad zu der Textdatei, die gelesen werden soll.

    618

    CFFILE

    VARIABLE Zwingend erforderlich. Der Name der Variablen, die den Inhalt der Textdatei enthält, nachdem sie eingelesen wurde.

    Beispiel Im folgenden Beispiel wird eine Variable mit der Bezeichnung Nachricht erstellt, die den Inhalt der Datei nachricht.txt enthält.

    Die Variable Nachricht kann auf der Anwendungsseite verwendet werden. So können Sie z.B. den Inhalt der Datei Nachricht.txt auf der fertigen Web-Seite anzeigen: #Nachricht#

    ColdFusion unterstützt verschiedene leistungsfähige Funktionen zur Veränderung des Inhalts von Textdateien. Außerdem können Sie eine von einem CFFILE="Read" erstellte Variable in ArrayToListund ListToArray-Funktionen verwenden. In den Abschnitten Zeichenkettenfunktionen und Datenfeldfunktionen finden Sie weitere Informationen über die Verwendung von Zeichenketten und Datenfeldern.

    CFFILE ACTION="ReadBinary" Mit Hilfe des CFFILE-Tags können Sie eine existierende Binärdatei, wie beispielsweise eine ausführbare Datei oder eine Grafikdatei, einlesen. Die Datei wird in einen binären Objektparameter eingelesen, den Sie auf der Seite wie jeden anderen Parameter an beliebiger Stelle verwenden können. Falls Sie diese Datei mit Hilfe eines der Web-Protokolle wie HTTP oder SMTP übertragen oder in einer Datenbank ablegen wollen, sollten Sie sie zuerst in Base 64 konvertieren (siehe ToBase64).

    Syntax

    FILE Zwingend erforderlich. Der vollständige Pfad zu der Datei, die eingelesen werden soll. VARIABLE Zwingend erforderlich. Der Name der Variable, die den Inhalt der Binärdatei aufnehmen soll, nachdem diese eingelesen wurde.

    619

    ColdFusion-Tags

    Beispiel Im folgenden Beispiel wird eine Variable mit der Bezeichnung einBinaerObj erstellt, die den Inhalt der ausführbaren Datei in ColdFusion Server enthält.

    Anschließend können Sie die Binärdatei in Base 64 konvertieren, so dass Sie sie mit Hilfe von FTP zum Upload auf eine andere Site übertragen können.

    CFFILE ACTION="Write" Sie können das CFFILE-Tag verwenden, um dynamischem Inhalt in eine Textdatei zu schreiben. Sie könnten beispielsweise statische HTML-Dateien oder Protokollaktionen in einer Textdatei erstellen.

    Syntax

    FILE Zwingend erforderlich. Der vollständige Pfad zu der Datei, die erzeugt werden soll. OUTPUT Zwingend erforderlich. Der Inhalt der zu erstellenden Datei. MODE Optional. Definiert Berechtigungen für eine Datei unter Solaris oder HP-UX. Wird unter Windows ignoriert. Gültige Einträge entsprechen den Oktalwerten (nicht symbolisch) des Unix-Befehls chmod. Berechtigungen werden für Eigentümer, Gruppe bzw. Alle anderen zugewiesen. Beispiel: MODE=644

    weist dem Eigentümer Lese-/Schreibberechtigungen und Gruppe/Alle anderen Leseberechtigung zu. MODE=666

    Weist Lese-/Schreibberechtigung für Eigentümer, Gruppe und Alle anderen zu. MODE=777

    Weist allen Benutzern Lese-, Schreib- und Ausführungsberechtigung zu.

    620

    CFFILE

    ADDNEWLINE Optional. Yes oder No. Wird dieses Attribut auf Yes gesetzt, wird dem Text, der in die Datei geschrieben wird, ein Neue-Zeile-Zeichen (NL) hinzugefügt. Wird dieses Attribut auf No gesetzt, wird dem Text kein Neue-Zeile-Zeichen (NL) hinzugefügt. Der voreingestellte Wert ist Yes. ATTRIBUTES Optional. Eine Liste der durch Kommas voneinander getrennten Dateiattribute, die für die zu schreibende Datei gesetzt werden. Die folgenden Dateiattribute werden unterstützt: 쐽

    ReadOnly



    Temporary



    Archive



    Hidden (Versteckt)



    System



    Normal

    Wird ATTRIBUTES nicht verwendet, werden die Attribute der Datei beibehalten. Wenn »Normal« und ein beliebiges anderes Attribut angegeben werden, setzt dieses andere Attribut »Normal« außer Kraft. Einzelne Attribute müssen explizit angegeben werden. Wenn Sie beispielsweise nur das ReadOnlyAttribut angeben, werden alle anderen Attribute überschrieben.

    Beispiel Im folgenden Beispiel wird eine Datei mit den Informationen erstellt, die ein Benutzer in ein HTML-Einfügeformular eingegeben hat:

    Angenommen, ein Benutzer übermittelt ein Formular, in dem folgende Angaben stehen: AktualisierungsTitel="Messebesuch" VollerName="Gerry Blue" Datum="30.10.98" Inhalt="Wir hatten eine wunderbare Zeit in Heidelberg."

    ColdFusion erstellt die Datei Messebesuch.txt im Verzeichnis c:\dateien\updates\. Die Datei enthält den folgenden Text: Erstellt von: Gerry Blue Datum: 30.10.98 Wir hatten eine wunderbare Zeit in Heidelberg.

    In den folgenden Beispielen wird die Verwendung des MODE-Attributs unter UNIX demonstriert. Im ersten Beispiel wird die Datei /tmp/foo mit den Berechtigungen rw-r--r-- (owner=read/write, group/other=read) erstellt

    621

    ColdFusion-Tags

    In diesem Beispiel wird Text an die angegebene Datei angehängt und Lese-/Schreibberechtigungen (rw) für alle gesetzt.

    Das nächste Beispiel lädt eine Datei hoch und erteilt die Berechtigungen rwx-rw-rw (owner/group/ other=read/write). CFFILE ACTION="Upload" FILEFIELD="Feldname" DESTINATION="/tmp/programm.exe" MODE=755>

    CFFILE ACTION="Append" Das CFFILE-Tag mit der Append-Aktion kann dazu verwendet werden, Text am Ende einer bereits existierenden Textdatei einzufügen. Dies ist beispielsweise praktisch beim Erstellen von Protokolldateien.

    Syntax

    FILE Zwingend erforderlich. Der vollständige Pfad zu der Datei, an die der Inhalt des OUTPUT-Attributs angehängt wird. OUTPUT Zwingend erforderlich. Die an die im DESTINATION-Attribut angegebene Datei anzufügende Zeichenkette. ADDNEWLINE Optional. Yes oder No. Wird dieses Attribut auf Yes gesetzt, wird an den Text, der in die Datei geschrieben wird, ein Neue-Zeile-Zeichen (NL) angefügt. Wird dieses Attribut auf No gesetzt, wird dem Text kein Neue-Zeile-Zeichen (NL) hinzugefügt. Der voreingestellte Wert ist Yes.

    622

    CFFORM

    ATTRIBUTES Optional. Eine Liste der durch Kommas voneinander getrennten Dateiattribute, die für die anzufügende Datei gesetzt werden. Die folgenden Dateiattribute werden unterstützt: 쐽

    ReadOnly



    Temporary



    Archive



    Hidden (Versteckt)



    System



    Normal

    Wird ATTRIBUTES nicht verwendet, werden die Attribute der Datei beibehalten. Wenn »Normal« und ein beliebiges anderes Attribut angegeben werden, setzt dieses andere Attribut »Normal« außer Kraft. Einzelne Attribute müssen explizit angegeben werden. Wenn Sie beispielsweise nur das ReadOnlyAttribut angeben, werden alle anderen Attribute überschrieben.

    Beispiel Im folgenden Beispiel wird die Zeichenkette »Alle Jahre wieder ohne Ende« an die Datei urlaub.txt angefügt:

    B.31 CFFORM CFFORM ermöglicht es Ihnen, ein Formular mit benutzerdefinierten CFML-Steuerelement-Tags zu

    erstellen, die mehr Funktionen bieten als Standard-HTML-Formulareingabeelemente.

    Hinweis CFFORM bedingt, dass der Client ein Java-Applet herunterlädt. Das ist zeitaufwendig, deshalb kann die Verwendung von CFFORM etwas langsamer als die Verwendung eines einfachen HTML-Formulars sein. Darüber hinaus müssen die Browser Java-fähig sein, damit CFFORM korrekt arbeitet.

    Syntax

    ...

    NAME Optional. Der Name für das Formular, das Sie erstellen. ACTION Zwingend erforderlich. Der Name der ColdFusion-Seite, die bei der Übertragung des Formulars zur Verarbeitung ausgeführt wird. ENABLECAB Optional. Yes oder No. Ermöglicht Benutzern, die Microsoft-Installationsdateien (*.cab) herunterzuladen, die die für Java-Applet-basierte CFFORM-Steuerelemente benötigten Java-Klassen enthalten. Ist der Parameter auf Yes gesetzt, werden die Benutzer beim Öffnen der Seite gefragt, ob sie die CABDatei herunterladen möchten. ONSUBMIT Optional. JavaScript-Funktion, die nach der Rückgabe einer Eingabe-Validierung auszuführen ist. Verwenden Sie dieses Attribut, um JavaScript für die Vorverarbeitung von Daten auszuführen, bevor das Formular übermittelt wird. TARGET Optional. Der Name des Fensters oder des Fensterrahmens, an das bzw. den die Formularausgabe gesendet wird. ENCTYPE Optional. Der verwendete MIME-Typ zum Verschlüsseln von Daten, die mit der Methode POST übertragen werden. Der voreingestellte Wert ist Application/x-www-form-urlencoded. Es wird empfohlen, den voreingestellten Wert zu übernehmen. Dieses Attribut wird zur Kompatibilität mit dem HTML FORM-Tag zur Verfügung gestellt. PASSTHROUGH Optional. HTML-Attribute, die nicht explizit von CFFORM unterstützt werden. Wenn Sie ein Attribut und seinen Wert angeben, werden Attribut und Wert dem HTML-Code übergeben, der für das CFINPUT-Tag erzeugt wird. Im Abschnitt zur Verwendung des Tags finden Sie weitere Informationen zur Angabe von Werten.

    Verwendung Die folgenden benutzerdefinierten Steuer-Tags stehen zur Verfügung: 쐽

    624

    CFINPUT – Erstellt ein Formulareingabe-Steuerelement (Optionsfeld, Textfeld oder Kontrollkästchen) und ist in der Lage, Formulareingaben zu validieren.

    CFFORM



    CFSELECT – Erstellt ein Dropdown-Listenfeld.



    CFSLIDER – Erstellt ein Schieberegler-Steuerelement.



    CFTEXTINPUT – Erstellt ein Texteingabefeld.



    CFTREE – Erstellt ein Verzeichnisstruktur-Steuerelement.



    CFGRID – Erstellt ein Raster-Steuerelement zum Anzeigen von Tabellendaten in einem Cold-

    Fusion-Formular. 쐽

    CFAPPLET – Bettet ein registriertes Java-Applet in ein ColdFusion-Formular ein. Applets werden

    im ColdFusion-Administrator registriert. Mit Hilfe des PASSTHROUGH-Attributs können Sie Standardattribute und dynamische Attribute des HTML FORM-Tags und ihre Werte in das CFFORM-Tag einfügen. Diese Attribute und ihre Werte werden beim Erstellen eines Formulars über ColdFusion direkt dem Browser übergeben. Wenn Sie einen Wert in Anführungszeichen angeben, müssen Sie die Anführungszeichen maskieren, indem Sie sie verdoppeln. Beispiel: PASSTHROUGH= "readonly= " "YES " " "

    Das ENABLECAB-Attribut wird nur von MS Internet Explorer-Clients unterstützt, auf denen Authenticode 2.0 installiert ist. Authenticode 2.0 kann von der Website http://www.microsoft.com/ie/ security/authent2.htm. heruntergeladen werden.

    Hinweis Um die Dateisicherheit zu garantieren, werden CAB-Dateien mit Hilfe der IDs von VeriSign digital gekennzeichnet.

    Verwendung von HTML FORM-Tags in einem CFFORM Mit CFFORM können Sie Ihre Formulare auch mit standardisiertem HTML-Code ergänzen. Es gibt zwei Möglichkeiten: 쐽

    Sie können dem FORM-Tag standardisierte FORM-Tag-Attribute und deren Werte hinzufügen. Diese Attribute und Werte werden beim Erstellen eines Formulars über ColdFusion direkt dem Browser übergeben. Sie können z.B. FORM-Tag-Attribute wie TARGET verwenden, um Ihre CFFORMLeistungsmerkmale zu erweitern.



    Darüber hinaus können HTML-Tags, die im allgemeinen in einem HTML FORM-Tag platziert werden, auch zwischen und -Tags platziert werden.

    Sie verwenden beispielsweise ein Standard-HTML-INPUT-Tag, um die Schaltfläche AKTUALISIEREN in einem CFFORM zu erstellen:





    B.33 CFGRID Wenn CFGRID innerhalb von CFFORM verwendet wird, kann damit ein Raster-Steuerelement in einem ColdFusion-Formular angelegt werden. Ein Raster-Steuerelement ist eine Tabelle mit Daten, die in Zeilen und Spalten gegliedert ist. CFGRID-Spaltendaten werden mit einzelnen CFGRIDCOLUMN-Tags erstellt. Weitere Informationen finden Sie in der Beschreibung der CFGRIDROW- und CFGRIDUPDATE-Tags.

    Syntax

    NAME Zwingend erforderlich. Ein Name für das Rasterelement.

    638

    CFGRID

    HEIGHT Optional. Höhe des Raster-Steuerelements in Pixel. WIDTH Optional. Breite des Raster-Steuerelements in Pixel. VSPACE Optional. Vertikaler Randabstand über und unter dem Raster-Steuerelement in Pixel. HSPACE Optional. Horizontaler Randabstand links und rechts vom Raster-Steuerelement in Pixel. ALIGN Optional. Wert für die Ausrichtung. Gültige Einträge sind: Top, Left, Bottom, Baseline, Texttop, Absbottom, Middle, Absmiddle, Right. QUERY Optional. Der Name der Abfrage, die mit dem Raster-Steuerelement verknüpft ist. INSERT Optional. Yes oder No. Bei Yes können Endbenutzer neue Zeilendaten in das Raster einfügen. Standardwert No. DELETE Optional. Yes oder No. Bei Yes können Endbenutzer Zeilendaten im Raster löschen. Standardwert No. SORT Optional. Yes oder No. Bei Yes werden dem Raster-Steuerelement Sortierschaltflächen hinzugefügt. Werden diese Schaltflächen angeklickt, erfolgt eine einfache Textsortierung in der ausgewählten Spalte. Standardwert No. FONT Optional. Name der Schriftart, die für alle Spaltendaten im Raster-Steuerelement verwendet wird. FONTSIZE Optional. Schriftgrad für den Text im Raster-Steuerelement. Der Wert wird in Punkten angegeben. ITALIC Optional. Yes oder No. Yes stellt den gesamten Text des Raster-Steuerelements kursiv dar. Standardwert No. BOLD Optional. Yes oder No. Yes stellt den gesamten Text des Raster-Steuerelements fettgedruckt dar. Standardwert No.

    639

    ColdFusion-Tags

    HREF Optional. URL, der mit dem Rasterelement oder einer Abfragespalte für ein Raster verknüpft werden soll, das aus einer Abfrage aufgefüllt wird. Falls HREF eine Abfragespalte ist, wird der angezeigte HREFWert von der Abfrage aufgefüllt. Falls HREF nicht als Abfragespalte erkannt wird, wird angenommen, dass der HREF-Text ein aktuelles HTML-HREF-Tag ist. HREFKEY Optional. Der Name einer gültigen Abfragespalte, falls das Raster eine Abfrage verwendet. Die angegebene Spalte wird zum Schlüssel, unabhängig davon, welcher Auswahlmodus für das Raster verwendet wird. TARGET Optional. Zielattribut für HREF-URL. APPENDKEY Optional. Yes oder No. In Verbindung mit HREF übergibt Yes die CFGRIDKEY-Variable zusammen mit dem Wert des ausgewählten Verzeichnisstrukturelements in dem URL an die Anwendungsseite, die im CFFORM ACTION-Attribut festgelegt ist. Standardwert Yes. HIGHLIGHTHREF Optional. Yes markiert Hyperlinks, die mit einem CFGRID verknüpft sind, mit einem HREF-Attributwert. No deaktiviert das Markieren. Standardwert Yes. ONVALIDATE Optional. Der Name einer gültigen JavaScript-Funktion, die für die Auswertung der Benutzereingabe verwendet wird. Das Formularobjekt, Eingabeobjekt und der Eingabeobjektwert werden an die angegebene Routine übergeben, die wahr zurückgibt, falls die Auswertung erfolgreich ist, und andernfalls falsch. ONERROR Optional. Der Name einer gültigen JavaScript-Funktion, die im Falle einer fehlgeschlagenen Auswertung ausgeführt werden soll. GRIDDATAALIGN Optional. Legt die Ausrichtung der Spalten im Raster mit Left, Right oder Center fest. Standardwert Left. GRIDLINES Optional. Yes oder No. Yes aktiviert eine Linie im Raster-Steuerelement, No unterdrückt Zeilen- und Spaltenlineale. Standardwert Yes. ROWHEIGHT Optional. Gibt die die Anzahl der Pixel für die Mindestzeilenhöhe für das Raster-Steuerelement an. In Kombination mit CFGRIDCOLUMN TYPE="Image" können Sie ROWHEIGHT dazu verwenden, ausreichend Platz für Grafiken einzuplanen, die in der Zeile erscheinen sollen.

    640

    CFGRID

    ROWHEADER Optional. Yes oder No. Yes zeigt Zeilenbeschriftungen im Raster-Steuerelement an. Standardwert Yes. ROWHEADERALIGN Optional. Legt die Ausrichtung der Daten in einer Spaltenkopfzeile als Left, Right oder Center fest. Standardwert Left. ROWHEADERFONT Optional. Schriftart für die Zeilenbeschriftung. ROWHEADERFONTSIZE Optional. Schriftgrad für den Text der Zeilenbeschriftung im Raster-Steuerelement in Punkten. ROWHEADERITALIC Optional. Yes oder No. Yes stellt den Text der Zeilenbeschriftung kursiv dar. Standardwert No. ROWHEADERBOLD Optional. Yes oder No. Yes stellt den Text der Zeilenbeschriftung fettgedruckt dar. Standardwert No. ROWHEADERWIDTH Optional. Die Breite der Kopfzeilenspalte für die Zeilen in Pixel. COLHEADERS Optional. Yes oder No. Yes zeigt Spaltenkopfzeilen im Raster-Steuerelement an. Standardwert Yes. COLHEADERALIGN Optional. Legt die Ausrichtung der Daten in der Spaltenkopfzeile mit Left, Right oder Center fest. Standardwert Left. COLHEADERFONT Optional. Schriftart für die Spaltenkopfzeile im Raster-Steuerelement. COLHEADERFONTSIZE Optional. Größe der Schriftart für den Text der Spaltenkopfzeile im Raster-Steuerelement in Punkten. COLHEADERITALIC Optional. Yes oder No. Yes stellt den Text der Spaltenkopfzeile kursiv dar. Standardwert No. COLHEADERBOLD Optional. Yes oder No. Yes stellt den Text der Spaltenkopfzeile fettgedruckt dar. Standardwert No. BGCOLOR Optional. Wert für die Hintergrundfarbe des Raster-Steuerelements. Gültige Einträge sind: black, magenta, cyan, orange, darkgray, pink, gray, white, lightgray, yellow.

    641

    ColdFusion-Tags

    Ein hexadezimaler Wert wird im folgenden Format eingegeben: BGCOLOR="##xxxxxx" 

    steht für 0-9 oder A-F. Verwenden Sie entweder zweimal das Doppelkreuz oder kein Doppelkreuz.

    SELECTCOLOR Optional. Hintergrundfarbe für ein ausgewähltes Element. Farboptionen siehe BGCOLOR. SELECTMODE Optional. Auswahlmodus für Elemente im Raster-Steuerelement. Gültige Einträge sind: 쐽

    Edit – Benutzer können Rasterdaten bearbeiten.



    Single – Benutzerauswahl ist auf die ausgewählte Zelle beschränkt.



    Row – Benutzerauswahl wird automatisch auf die Zeile erweitert, die die ausgewählte Zelle enthält.



    Column – Benutzerauswahl wird automatisch auf die Spalte erweitert, die die ausgewählte Zelle enthält.



    Browse – Benutzer können Rasterdaten nur anzeigen.

    Der Standardwert ist Browse. MAXROWS Optional. Gibt die Höchstzahl an Zeilen an, die Sie im Raster anzeigen möchten. NOTSUPPORTED Optional. Der anzuzeigende Text, wenn die Seite mit einem Java-Applet-basierten CFFORM-Steuerelement von einem Browser geöffnet wird, der Java nicht unterstützt oder dessen Java-Unterstützung deaktiviert ist. Beispiel: NOTSUPPORTED=" Der Browser muß Java unterstützen, um ColdFusion-Java-Applets anzeigen zu können."

    Standardmäßig wird folgende Meldung angezeigt, wenn keine benutzerdefinierte Meldung angegeben ist: Der Browser muß Java unterstützen,
    um ColdFusion-Java-Applets anzeigen zu können!

    PICTUREBAR Optional. Yes oder No. Bei Yes werden für die Aktionen Einfügen, Löschen und Sortieren Bildschaltflächen anstelle von Textschaltflächen verwendet. Standardwert No. INSERTBUTTON Optional. Text für die Aktionsschaltfläche EINFÜGEN. Standardwert Einfügen. DELETEBUTTON Optional. Text für die Aktionsschaltfläche LÖSCHEN. Standardwert Löschen.

    642

    CFGRID

    SORTASCENDINGBUTTON Optional. Text für die Schaltfläche SORTIEREN. Standardwert »A -> Z«. SORTDESCENDINGBUTTON Optional. Text für die Schaltfläche SORTIEREN. Standardwert »Z



    B.47 CFLDAP CFLDAP stellt eine Schnittstelle zu LDAP-Verzeichnisservern (LDAP = Lightweight Directory Access Protocol) zur Verfügung, wie beispielsweise zum Netscape Directory Server.

    Syntax

    SERVER Zwingend erforderlich. Host-Name (»biff.upperlip.de«) oder IP-Adresse (»192.1.2.225«) des LDAPServers.

    679

    ColdFusion-Tags

    PORT Optional. Standardmäßiger Port ist der LDAP-Port 389. USERNAME Optional. Wenn kein Benutzername angegeben wird, ist die LDAP-Verbindung anonym. PASSWORD Optional. Kennwort für den Benutzernamen. ACTION Optional. Kennzeichnet die LDAP-Aktion. Es gibt fünf mögliche Werte: 쐽

    Query – (Standard) Gibt ausschließlich LDAP-Eintragsinformationen zurück. Setzt die Attribute NAME, START, ATTRIBUTES voraus. Weitere Informationen finden Sie im Abschnitt zur Verwendung dieses Tags.



    Add – Fügt dem LDAP-Server LDAP-Einträge hinzu. Setzt ATTRIBUTES voraus.



    Modify – Ändert LDAP-Eingaben auf einem LDAP-Server mit Ausnahme des Attributs für den charakteristischen Namen (»DN«). Setzt DN und ATTRIBUTES voraus. Zusätzliche Steuerungsmöglichkeiten bietet das MODIFYTYPE-Attribut, das weiter unten beschrieben wird.



    ModifyDN – Ändert das DN-Attribut für LDAP-Einträge auf einem LDAP-Server. Setzt DN und ATTRIBUTES voraus.



    Delete – Löscht LDAP-Eingaben auf dem LDAP-Server. Setzt DN voraus.

    NAME Zwingend erforderlich für ACTION="Query". Der Name, den Sie der LDAP-Abfrage zuweisen. TIMEOUT Optional. Gibt die maximale Zeit in Sekunden an, die für die LDAP-Bearbeitung benötigt wird. Der Standardwert beträgt 60 Sekunden. MAXROWS Optional. Gibt die maximale Anzahl an Eingaben für LDAP-Abfragen an. START Zwingend erforderlich für ACTION="Query". Gibt den charakteristischen Namen (»DN«) des Eintrags an, der für den Start der Suche verwendet werden soll. SCOPE Optional. Gibt den Gültigkeitsbereich der Suche aus der Eingabe an, die im Start-Attribut für ACTION="Query" festgelegt ist. Es gibt drei mögliche Werte: 쐽

    OneLevel – (Standard) Durchsucht alle Einträge auf genau einer Ebene unterhalb des Eintrags, der im START-Attribut festgelegt ist.



    Base – Durchsucht ausschließlich die im START-Attribut angegebene Eingabe.

    680

    CFLDAP



    Subtree – Durchsucht den im START-Attribut festgelegten Eintrag sowie alle Einträge in allen Ebenen darunter.

    ATTRIBUTES Zwingend erforderlich für ACTION="Query", "Add", "ModifyDN" und "Modify". Legt bei Abfragen die CSV-Liste der Attribute fest, die für Abfragen zurückgegeben werden soll. Für Abfragen können Sie auch das Platzhalterzeichen »*« verwenden, um alle mit dem Eintrag verknüpften Attribute zu erhalten. Darüber hinaus kann es verwendet werden, um die Liste der zu aktualisierenden Spalten für ACTION="Add" oder ACTION="Modify" anzugeben. Trennen Sie mehrere Attribute durch Semikolons, wenn sie für ACTION="Add" und ACTION="Modify" verwendet werden. Wenn Attribute für ACTION="ModifyDN" verwendet werden, leitet sie ColdFusion an den LDAP-Server ohne Syntaxüberprüfung weiter. FILTER Optional. Legt die Suchkriterien für ACTION="Query" fest. Auf Attribute wird im Formular verwiesen: »(Attribut Operator Wert)«. Beispiel: »(sn=Schmidt)«. Die Standardeinstellung ist »objectclass=*«. Wenn Sie auch das FILTERFILE-Attribut angeben, wird der Filter nicht als Filter, sondern als Suchzeichenkette betrachtet. FILTERFILE Optional. Damit legen Sie den Namen einer Filterdatei und den Namen des Strophen-Tags innerhalb dieser Datei fest, das die Spezifikation für den LDAP-Filterstring enthält. Sie können zur Identifikation der Datei entweder einen absoluten Pfadnamen oder einen einfachen Dateinamen angeben. Wenn Sie einen einfachen Dateinamen verwenden, sucht CFLDAP im LDAP-Standardverzeichnis von ColdFusion nach diesem Namen. Das LDAP-Standardverzeichnis ist C:\cfusion\ldap. Die Filterdatei muss das LDAP-Filterdateiformat aufweisen, wie es in RCF-1558 definiert ist. SORT Optional. Kennzeichnet das Attribut oder die Attribute, nach dem/denen Abfrageergebnisse sortiert werden. Trennen Sie bei Angabe mehrerer Attribute die einzelnen Attribute durch Kommas. SORTCONTROL Optional. Hiermit legen Sie fest, wie Abfrageergebnisse sortiert werden sollen. Geben Sie »nocase« ein, wenn beim Sortieren die Groß-/Kleinschreibung nicht berücksichtigt werden soll. In der Voreinstellung wird bei Sortiervorgängen die Groß-/Kleinschreibung beachtet. Sie können auch mit »asc« eine aufsteigende Sortierreihenfolge und mit »desc« eine absteigende Sortierreihenfolge festlegen. Sie können aber auch eine Kombination aus diesen Einstellungen wählen, beispielsweise »nocase« zusammen mit »asc«. Die voreingestellte Sortierreihenfolge ist aufsteigend. DN Zwingend erforderlich für ACTION="Add", "Modify", "ModifyDN" und "Delete". Legt den charakteristischen Namen (»DN«) für Aktualisierungsaktionen fest. Beispiel: »cn=Barbara Jensen, o=Herbertz GmbH, c=DE«.

    681

    ColdFusion-Tags

    STARTROW Optional. Wird in Verbindung mit ACTION="Query" verwendet. Gibt die erste Zeile der LDAP-Abfrage an, die in die ColdFusion-Abfrage eingefügt werden soll. Die Voreinstellung ist 1. Weitere Informationen zur Verwendung des Tags finden Sie im Abschnitt zu Abfrageobjekten und Abfragevariablen. MODIFYTYPE Optional. Hiermit geben Sie an, ob ein Attribut innerhalb einer Attributliste mit mehreren Werten hinzugefügt, gelöscht oder ersetzt werden soll: 쐽

    Add – Das neue Attribut wird an vorhandene Attribute angehängt.



    Delete – Das angegebene Attribut wird aus der Gruppe der vorhandenen Attribute gelöscht.



    Replace (Voreinstellung) – Ein vorhandenes Attribut wird durch das angegebene Attribut (oder die angegebenen Attribute) ersetzt.

    Beachten Sie, dass Sie bereits vorhandene Attribute oder Attribute, die eine leere Zeichenkette als Wert haben, nicht hinzufügen können. REBIND Optional. Yes oder No. Wenn Sie REBIND auf Yes setzen, versucht CFLDAP, den an den Client zurückgegebenen Verweis auf einen anderen Server (Referral) zu verfolgen, indem es das Callback-Objekt neu bindet und die Suchanfrage über die Adresse, auf die verwiesen wird, erneut stellt. Bei dieser neuen Anfrage verwendet CFLDAP die ursprünglichen Login-Identifikationsdaten. Die Voreinstellung ist No. Dies bedeutet, dass die auf andere Server weiterverwiesenen Client-Verbindungen anonym sind. REFERRAL Optional. Legt die Anzahl der Hops fest, die beim Weiterverweisen auf andere Server (Referral) zulässig sind. Gültige Werte sind ganze Zahlen größer oder gleich Null. Wenn Sie den Wert Null angeben, blockieren Sie damit die Fähigkeit von CFLDAP, Verweisadressen zu nutzen. In diesem Fall werden auch keine Daten zurückgegeben. SECURE Optional. Gibt an, welcher der beiden Sicherheitstypen – CFSSL_BASIC oder CFSSL_CLIENT_AUTH – benutzt werden soll, und stellt zusätzliche Informationen bereit, die vom angegebenen Sicherheitstyp benötigt werden. SECURE="CFSSL_BASIC,certificate_db"

    oder SECURE="CFSSL_CLIENT_AUTH,certificate_db,certificate_name, key_db,key_password"

    Diese Felder haben die folgenden Werte: certificate_db: Der Name der Datenbankdatei, in der die Zertifikatinformationen abgelegt sind (in Netscape Format cert7.db). Sie können zur Identifikation der Datei entweder einen absoluten Pfadnamen oder einen einfachen Dateinamen angeben. certificate_name: Der Name des Client-Zertifikats, das an den Server übertragen werden soll.

    682

    CFLDAP

    key_db: Schlüsseldatenbank, in der das Paar aus öffentlichem/privatem Schlüssel abgelegt ist (in Netscape Format key3.db). Sie können zur Identifikation der Datenbank entweder einen absoluten Pfadnamen oder einen einfachen Dateinamen angeben. keyword_db: Das Kennwort für den Zugriff auf die Schlüsseldatenbank. Wenn Sie für certificate_db oder keyword_db einen einfachen Dateinamen verwenden, sucht CFLDAP nach dieser Datei im LDAP-Standardverzeichnis von ColdFusion. Das LDAP-Standardverzeichnis ist C:\cfusion\ldap. Weitere Informationen über die Unterschiede zwischen den beiden Sicherheitstypen CFSSL_BASIC und CFSSL_CLIENT_AUTH finden Sie im Abschnitt zur Verwendung. SEPARATOR Optional. Legt das Trennzeichen fest, das CFLDAP benutzt, um die einzelnen Attributwerte in Attributen mit mehreren Werten gegeneinander abzugrenzen. Dieses Trennzeichen wird von den Aktionsattributen QUERY, ADD und MODIFY benutzt, und dient CFLDAP zur Ausgabe von Attributen mit mehreren Werten. Die Voreinstellung für dieses Zeichen ist das Komma (,).

    Verwendung Wenn Sie das Aktionsattribut QUERY verwenden, erzeugt CFLDAP ein Abfrageobjekt, das Ihnen den Zugriff auf die Informationen in den drei Abfragevariablen erlaubt, die in der folgenden Tabelle beschrieben sind. CFLDAP-Abfragevariable

    Beschreibung

    Abfragename.RecordCount

    Die Gesamtzahl der Datensätze, die von der Abfrage ausgegeben werden.

    Abfragename.CurrentRow

    Die aktuelle Zeile der Abfrage, die von CFOUTPUT verarbeitet wird.

    Abfragename.ColumnList

    Die Liste der Spaltennamen in der Abfrage.

    Der Sicherheitstyp CFSSL_BASIC stellt V2 SSL bereit, und der Sicherheitstyp CFSSL_CLIENT_AUTH unterstützt V3 SSL. V2 SSL bietet Verschlüsselung und Server-Authentifizierung. V3 SSL bietet zusätzlich noch eine zertifikatbasierende Client-Authentifizierung. Beide Sicherheitsformen verschlüsseln die Kommunikation zwischen Client und Server, und der Server überträgt stets ein digitales Zertifikat, um zu bestätigen, dass er der richtige Server ist. Für CFSSL_BASIC müssen Sie auch die CFLDAP-Attribute USERNAME und PASSWORD angeben, um sich selbst zu authentifizieren. V2 verschlüsselt dann das Kennwort vor der Übertragung. Für CFSSL_CLIENT_AUTH schicken Sie keinen Benutzernamen und kein Kennwort. Statt dessen führen Sie die Authentifizierung anhand eines digitalen Zertifikats durch, das Sie an den Server übertragen. Obwohl CFSSL_CLIENT_AUTH eine viel höhere Sicherheit bietet, ist dieses Sicherheitsverfahren schwierig zu verwalten, da alle Clients Zertifikate benötigen und der Server in der Lage sein muss, diese zu überprüfen. Zudem müssen mit allen Zertifikaten Schlüssel verknüpft sein, und diese Schlüssel müssen durch Kennwörter geschützt werden.

    683

    ColdFusion-Tags

    Beispiel





    Beispiel für CFLOCATION

    Beispiel für CFLOCATION

    CFLOCATION leitet den Browser zu einer bestimmten Web-Ressource um. Normalerweise wird dieses Tag dazu verwendet, um zu einer anderen CF-Vorlage oder zu einer HTML-Datei auf demselben Server zu gelangen. Mit dem ADDTOKEN-Attribut können Sie Clientinformationen an die Zielseite senden.

    Mit dem folgenden Beispielcode gelangen Sie zurück zur CFDOCS-Homepage (wenn Sie die Kommentarzeichen entfernen, werden diese Informationen im Frame angezeigt):

    685

    ColdFusion-Tags



    TIMEOUT Zwingend erforderlich. Legt fest, wie viele Sekunden maximal auf eine exklusive Sperre gewartet wird. Wird innerhalb des angegebenen Zeitraums eine exklusive Sperre erteilt, wird die Ausführung innerhalb des Tag-Blocks fortgesetzt. Andernfalls wird die weitere Vorgehensweise vom Wert des THROWONTIMEOUT-Attributs bestimmt.

    686

    CFLOCK

    SCOPE Optional. Legt für den Gültigkeitsbereich eine der folgenden Einstellungen fest: Application, Server, oder Session. Dieses Attribut und das NAME-Attribut schließen sich gegenseitig aus. Im Abschnitt Scope finden Sie ausführliche Informationen. NAME Optional. Gibt den Namen der Sperre an. In einem CFLOCK-Tag mit einem bestimmten Namen kann jeweils nur eine Anfrage ausgeführt werden. Deshalb kann durch die Angabe des NAME-Attributs der Zugriff auf dieselben Ressourcen von unterschiedlichen Teilen einer Anwendung heraus synchronisiert werden. Die Namen von Sperren gelten global auf einem ColdFusion-Server. Sie werden von Anwendungen und Benutzersitzungen jedoch nicht auf mehreren Servern in einer Gruppe (sogenannten Clustern) verwendet. Dieses Attribut und das SCOPE-Attribut schließen sich gegenseitig aus. Geben Sie deshalb das SCOPE-Attribut nicht zusammen mit dem NAME-Attribut im gleichen Tag an. Beachten Sie, dass der Wert des NAME-Attributs keine leere Zeichenkette sein darf. THROWONTIMEOUT Optional. Yes oder No. Legt fest, wie Timeout-Bedingungen abgewickelt werden. Bei Yes wird eine Ausnahme erstellt, die über das Timeout benachrichtigt. Bei No wird die Ausführung nach dem -Tag fortgesetzt. Standardwert Yes. TYPE Optional. ReadOnly oder Exclusive. Gibt die Art der Sperre an: Read-only-Sperre (nur Leseberechtigung) oder exklusive Sperre. Die Voreinstellung ist Exclusive. Bei einer Read-only-Sperre können mehrere Abfragen gemeinsam genutzte Daten gleichzeitig lesen. Eine exklusive Sperre erlaubt nur jeweils einer einzigen Abfrage den Lese- oder Schreibzugriff auf gemeinsam genutzte Daten (siehe folgenden Hinweis).

    Hinweis Begrenzen Sie den Gültigkeitsbereich von Code, der gemeinsam genutzte Daten aktualisiert. Exklusive Sperren sind erforderlich, um die Datenintegrität dieser Aktualisierungen sicherzustellen. Sie haben jedoch einen großen Einfluß auf die Systemleistung. Bei Read-only-Sperren ist der Durchsatz höher. Bei für die Systemleistung kritischen Anwendungen sollten Sie exklusive Sperren durch Readonly-Sperren ersetzen, wo immer dies möglich ist, beispielsweise beim Lesen gemeinsam genutzter Daten.

    Verwendung ColdFusion-Server ist ein Multi-Thread-Web-Applikations-Server, der mehrere Seitenanfragen gleichzeitig verarbeiten kann. Verwenden Sie CFLOCK, um sicherzustellen, dass mehrere gleichzeitig ausgeführte Anfragen nicht gemeinsam genutzte Datenstrukturen, Dateien oder CFX auf inkonsistente Weise verändern. Beachten Sie folgendes: 쐽

    Durch die Verwendung von CFLOCK bei CFML-Konstrukten, die gemeinsam genutzte Daten ändern, stellen Sie sicher, dass die Änderungen nacheinander und nicht alle gleichzeitig vorgenommen werden.

    687

    ColdFusion-Tags



    Die Verwendung von CFLOCK mit Konstrukten zur Dateiänderung sorgt dafür, dass die Aktualisierung von Dateien, die von anderen Anwendungen oder ColdFusion-Tags geöffnet sind, nicht fehlschlägt.



    Wenn Sie CFLOCK bei CFX-Aufrufen verwenden, können nicht Thread-sicher implementierte CFX von ColdFusion sicher aufgerufen werden. Dies gilt normalerweise nur für CFX, die mit C++ unter Verwendung von CFAPI entwickelt wurden. Alle mit C++ entwickelten CFX, die gemeinsam genutzte (globale) Datenstrukturen enthalten und ändern, müssen Thread-sicher sein, um problemlos mit ColdFusion verwendet werden zu können. Für das Schreiben von Thread-sicheren CFX mit C++ ist allerdings ein fundiertes Wissen erforderlich. Das CFX kann mit einem benutzerdefinierten CFML-Tag-Wrapper Thread-sicher gemacht werden.

    Gültigkeitsbereich Verwenden Sie das SCOPE-Attribut immer dann, wenn Sie Variablen in einem der gemeinsam genutzten Gültigkeitsbereiche anzeigen, setzen oder aktualisieren. Zum Setzen des Gültigkeitsbereichs stehen Ihnen die drei Optionen Server, Application und Session zur Verfügung. Im ColdFusion Administrator können Sie im Abschnitt SERVER auf der Seite SPERRUNGEN unterschiedliche Funktionsmerkmale des Sperrschemas nach Gültigkeitsbereichen getrennt setzen. Der folgenden Tabelle entnehmen Sie, welche Merkmale für die Bereiche Server, Application und Session verfügbar sind. Funktionsmerkmale

    Server

    Applikation

    Sitzung

    keine automatische Überprüfung oder Sperre

    ja

    ja

    ja

    vollständige Überprüfung

    ja

    ja

    ja

    automatische Lesesperre

    ja

    ja

    ja

    Single-Thread-Sitzungen

    ja

    Jedes Funktionsmerkmal, das Sie wählen, hat auch Nachteile. 쐽

    Keine automatische Überprüfung oder Sperre. Wenn Sie dieses Optionsfeld wählen, werden keine Lese- oder Schreibzugriffe gesperrt oder auf korrekten Schutz überprüft. Sie sollten diese Option nur dann wählen, nachdem Sie eine vollständige Überprüfung durchgeführt haben und wissen, dass keine Fehler behoben werden müssen und alle Sperren programmgesteuert abgewickelt werden. Bei dieser Option ist die Systemleistung am höchsten.



    Vollständige Überprüfung. Wenn Sie dieses Optionsfeld wählen, werden alle nicht gesperrten Zugriffe gefunden. Sie sollten diese Option wählen, wenn Sie im Debug-Modus arbeiten. Bei dieser Option ist die Systemleistung herabgesetzt.



    Automatische Lesesperre. Wenn Sie dieses Optionsfeld wählen, werden alle Lesezugriffe gesperrt, und nicht gesperrte Schreibzugriffe lösen eine Fehlerbedingung aus. Auch diese Option setzt die Systemleistung deutlich herab.



    Single-Thread-Sitzungen. Wenn Sie dieses Optionsfeld wählen, muss die gesamte Abfrage beendet sein, bevor eine andere Abfrage für die gleiche Sitzung verarbeitet werden kann. Diese

    688

    CFLOCK

    Option kann je nach Abfragemuster Auswirkungen auf die Systemleistung haben. So kann sich z.B. die Antwortzeit erhöhen, wenn eine Anwendung mehrere Frames aufweist, die sofort aktualisiert werden können, so dass mehrere Abfragen bis zu ihrer Verarbeitung in einer Warteschlange verbringen müssen.

    Deadlocks CFLOCK verwendet Synchronisierungsobjekte auf Kernel-Ebene, die beim Timeout und/oder bei

    einem vorzeitigen Abbruch des zugehörigen Threads automatisch freigegeben werden. Aus diesem Grund kann ColdFusion bei der Verarbeitung eines CFLOCK-Tags nicht auf unbestimmte Zeit blockiert werden. Sehr hohe Timeout-Werte können jedoch Anfrage-Threads längere Zeit blockieren und deshalb den Durchsatz drastisch verringern. Verwenden Sie deshalb immer den geringstmöglichen Timeout-Wert. Ein anderer möglicher Grund für blockierte Abfrage-Threads ist ein inkonsistentes Verschachteln von CFLOCK-Tags sowie eine nicht durchgängige Benennung von Sperren. Wenn Sie Sperren verschachteln, müssen Ihre und alle anderen Anwendungen (CF-Templates), die auf die gesperrten Variablen zugreifen, die CFLOCK-Tags durchgängig in der gleichen Reihenfolge verschachteln. Halten sich nicht alle Anwendungen, die auf gesperrte Variablen zugreifen, an diese Konventionen, kann ein Deadlock (gegenseitige Blockierung) auftreten. Ein Deadlock ist ein Zustand, in dem es keiner Abfrage möglich ist, den gesperrten Abschnitt der Seite auszuführen. Daher werden sämtliche an den geschützten Abschnitt der Seite gerichteten Abfragen solange blockiert, bis eine Zeitüberschreitung (Timeout) auftritt. In den folgenden Tabellen werden zwei Szenarios beschrieben, die zu Deadlocks führen. Deadlock-Szenario mit zwei Benutzern Benutzer 1

    Benutzer 2

    Sperrt den Sitzungs-Gültigkeitsbereich.

    Sperrt den Anwendungs-Gültigkeitsbereich.

    Deadlock Versucht, den Anwendungs-Gültigkeitsbereich zu sperren; dieser Bereich ist jedoch bereits durch Benutzer 2 gesperrt worden.

    Deadlock: Versucht, den Sitzungs-Gültigkeitsbereich zu sperren; dieser Bereich ist jedoch bereits durch Benutzer 1 gesperrt worden.

    Deadlock-Szenario mit einem Benutzer Benutzer belegt den Sitzungs-Gültigkeitsbereich mit einer Lesesperre. Deadlock: Versucht, den Sitzungs-Gültigkeitsbereich mit einer exklusiven Sperre zu belegen, kann dies aber nicht tun, weil für diesen Bereich bereits eine Schreibschuz-Sperre (Read-only) festgelegt wurde.

    Das folgende Deadlock-Szenario könnte eintreten, wenn Sie versuchen, eine Schreibsperre nach einer Lesesperre zu schachteln, wie im folgenden Code-Beispiel:

    689

    ColdFusion-Tags

    ...............

    .........

    Ist ein Deadlock einmal eingetreten, kann kein Benutzer diesen auflösen, da die Ausführung ihrer Abfragen solange blockiert bleibt, bis der Deadlock durch einen für die Sperre festgelegten Timeout aufgelöst werden kann. Sie vermeiden Deadlocks dadurch, dass Sie und alle anderen mit dem Verschachteln von Sperren beauftragten Personen dabei nach einer genau definierten Reihenfolge vorgehen und bei der Zuweisung von Namen an Sperren auf Konsistenz achten. Insbesondere müssen Sie beim Sperren des Zugriffs auf die Bereiche Server, Anwendung und Sitzung eine ganz bestimmte Reihenfolge einhalten. 1.

    Sperren Sie den Sitzungsbereich. Kennzeichnen Sie im CFLOCK-Tag den Gültigkeitsbereich der Sperre, indem Sie für das SCOPE-Attribut den Wert »SESSION« angeben.

    2.

    Sperren Sie den Applikationsbereich. Kennzeichnen Sie im CFLOCK-Tag den Gültigkeitsbereich der Sperre, indem Sie für das SCOPE-Attribut den Wert »APPLICATION« angeben.

    3.

    Sperren Sie den Server-Bereich. Kennzeichnen Sie im CFLOCK-Tag den Gültigkeitsbereich der Sperre, indem Sie für das SCOPE-Attribut den Wert »SERVER« angeben.

    4.

    Heben Sie die Sperre des Server-Bereichs auf.

    5.

    Heben Sie die Sperre des Applikationsbereichs auf.

    6.

    Heben Sie die Sperre des Sitzungsbereichs auf.

    Hinweis Sie können aus diesem Schema jedes beliebige aus Sperre aktivieren/Sperre deaktivieren zusammengesetzte Schrittpaar herausnehmen, falls die Sperre eines bestimmten Gültigkeitsbereichs nicht erforderlich ist. So können Sie beispielsweise die Schritte 3 und 4 auslassen, falls Sie den Serverbereich nicht sperren müssen. Ähnliche Regeln gelten für Sperren, denen Namen zugewiesen werden.

    Beispiel







    691

    ColdFusion-Tags

    Beispiel für CFLOCK



    Beispiel für CFLOCK

    Danke für Ihren Besuch im virtuellen Laden von E-Rollkragen. Heute haben Sie einen Rollkragen in der Größe #form.groesse# und in der Farbe #form.farbe# gewählt.





    Der Schleifenindex lautet #ZaehlVar#.


    695

    ColdFusion-Tags

    Die Ergebnisse werden in einem Browser wie folgt angezeigt: Der Der Der Der Der

    Schleifenindex Schleifenindex Schleifenindex Schleifenindex Schleifenindex

    lautet lautet lautet lautet lautet

    1. 2. 3. 4. 5.

    Schleife über eine Abfrage Eine Schleife über eine Abfrage wird für jeden Datensatz in der Abfragedatensatzgruppe wiederholt. Die CFLOOP-Ergebnisse sind einem CFOUTPUT ähnlich. Während jedes Durchlaufs der Schleife stehen die Spalten der aktuellen Zeile zur Ausgabe zur Verfügung. Der Vorteil von CFLOOP anstelle von CFOUTPUT liegt darin, dass Sie innerhalb eines CFLOOP-Tags jedes CFML-Tag verwenden können.

    Syntax

    QUERY Zwingend erforderlich. Gibt die Abfrage an, die die Schleife steuert. STARTROW Optional. Gibt die erste Zeile der Abfrage an, die in die Schleife aufgenommen wird. ENDROW Optional. Gibt die letzte Zeile der Abfrage an, die in die Schleife aufgenommen wird.

    Beispiel 1 Im folgenden Beispiel wird ein CFLOOP-Tag gezeigt, das wie CFOUTPUT arbeitet und das QUERY-Attribut verwendet:

    SELECT Kommentar_id FROM Kommentare

    #Kommentar_ID#


    696

    CFLOOP

    Beispiel 2 CFLOOP ermöglicht außerdem eine Wiederholung über jede Datensatzgruppe mit dynamischen Startund Stoppunkten. Sie können also beispielsweise in der zehnten Zeile eine Abfrage beginnen und an der zwanzigsten Zeile enden. Mit dieser einfachen Methode werden die nächsten n Datensatzgruppen aus einer Abfrage abgerufen.

    Im folgenden Beispiel durchläuft die Schleife den Bereich der Datensätze von 10 bis 20, die von »MeineAbfrage« ausgegeben wurden:

    #MeineAbfrage.MeinSpaltenname#


    Die Schleife wird beendet, wenn keine weiteren Datensätze vorliegen oder der aktuelle Datensatz größer als der Wert des ENDROW-Attributs ist.

    Beispiel 3 Der Vorteil, eine Schleife über eine Abfrage auszuführen, liegt darin, daß Sie CFML-Tags verwenden können, die in CFOUTPUT nicht zulässig sind. Im folgenden Beispiel werden die Seiten, die von einer Abfrage in einer Liste von Seitennamen ausgegeben werden, mit Hilfe des CFINCLUDE-Tags zu einem einzigen Dokument kombiniert.

    SELECT VorlagenName FROM Vorlagen



    Schleife über eine Liste Das Ausführen einer Schleife über eine Liste bietet die Möglichkeit, Elemente zu durchlaufen, die in einer Variablen enthalten sind, oder Werte, die über einen Ausdruck erhalten werden. Bei einer Listenschleife gibt das INDEX-Attribut den Namen einer Variablen an, die als nächstes Element der Liste empfangen werden soll. Das LIST-Attribut enthält eine Liste oder eine Variable, die eine Liste enthält.

    697

    ColdFusion-Tags

    Syntax

    INDEX Zwingend erforderlich. Bei einer Listenschleife gibt das INDEX-Attribut den Namen einer Variablen an, die als nächstes Element der Liste empfangen werden soll. Das LIST-Attribut enthält eine Liste oder eine Variable, die eine Liste enthält. LIST Zwingend erforderlich. Die Listenelemente in der Schleife, die entweder direkt oder in einer Variablen geliefert werden. DELIMITERS Optional. Gibt das Trennzeichen an, das zum Trennen der Elemente in der LIST verwendet wird.

    Beispiel Die folgende Schleife zeigt die Namen aller Mitglieder der Beatles an:

    #ListenElement#


    Obwohl CFLOOP erwartet, dass die Elemente in einer Liste standardmäßig durch Kommas getrennt sind, können Sie in dem DELIMITER-Attribut andere Trennzeichen festlegen. Im folgenden wird die obenstehende Schleife erneut gezeigt. Dieses Mal verwendet CFLOOP Kommas, Doppelpunkte oder Schrägstriche als Trennzeichen für Listenelemente:

    #ListenElement#


    Trennzeichen müssen nicht in einer bestimmten Reihenfolge festgelegt werden. Beachten Sie, dass aufeinanderfolgende Trennzeichen als ein einziges Trennzeichen behandelt werden. Die beiden Doppelpunkte im obenstehenden Beispiel werden also als ein einziges Trennzeichen zwischen »George« und »Ringo« betrachtet.

    698

    CFLOOP

    Schleife über eine COM-Sammlung oder Struktur Das CFLOOP COLLECTION-Attribut ermöglicht die Ausführung einer Schleife über eine Struktur oder ein COM/DCOM-Sammlungsobjekt. 쐽

    Ein COM/DCOM-Sammlungsobjekt ist eine Menge ähnlicher Elemente, auf die als eine Gruppe und nicht einzeln verwiesen wird. So ist beispielsweise die Gruppe der offenen Dokumente in einer Anwendung eine Sammlung.



    Eine Struktur kann entweder eine verwandte Gruppe von Objekten enthalten oder als assoziatives Datenfeld verwendet werden. Eine Schleife ist besonders praktisch, wenn eine Struktur als assoziatives Datenfeld verwendet wird.

    Jedes Sammlungselement wird in CFLOOP über den Variablennamen angesprochen, den Sie im ITEMAttribut festlegen. Diese Art von Iteration wird normalerweise für den Zugriff auf Objekte in einer COM/DCOM-Sammlung oder auf Elemente in der Struktur verwendet. Die Schleife wird ausgeführt, bis auf alle Objekte zugegriffen wurde. Das COLLECTION-Attribut wird zusammen mit dem ITEM-Attribut in einem CFLOOP-Tag verwendet. Im folgenden Beispiel wird ITEM eine Variable mit der Bezeichnung datei2 zugewiesen, so dass mit jedem Durchlauf in CFLOOP auf jedes Objekt in der Sammlung verwiesen wird. Im CFOUTPUT-Abschnitt wird auf die Namenseigenschaft des Objekts datei2 für die Anzeige verwiesen.

    Beispiele Im folgenden Beispiel wird ein COM-Objekt zur Ausgabe einer Dateiliste verwendet. In diesem Beispiel ist FFUNC eine Sammlung der Objekte in datei2.



    #datei2.name#


    Dieses Beispiel zeigt eine Schleife über eine Struktur (als assoziatives Datenfeld verwendet): ...



    Beispiel für CFMAIL

    Beispiel für CFMAIL

    Dieses Beispiel zeigt die Verwendung von CFMAIL. Wenn Ihre CFAS-Maileinstellungen

    702

    CFMAILPARAM

    korrekt konfiguriert und die Kommentare entfernt worden sind, können Sie mit diesem Code E-Mail versenden.

    Beispiel für CFMAILPARAM

    Beispiel für CFMAILPARAM

    In diesem Beispiel wird CFMAILPARAM verwendet, um für eine Nachricht eine Kopfzeile festzulegen und zwei Dateien als Anhang zu benennen.



    704

    CFMODULE

    Lese bitte die Textdatei, und überprüfe das neue Logo. Lass uns wissen, was Du davon hältst.



    B.53 CFMODULE Mit CFMODULE rufen Sie ein benutzerdefiniertes Tag zur Verwendung in Ihren ColdFusion-Anwendungsseiten auf. Falls Sie einen potentiellen Konflikt bei Dateinamen zwischen Anwendungsseiten erwarten, bietet das CFMODULE-Tag eine erweiterte Syntax für die Pfad- und Namensauflösung. Verwenden Sie das TEMPLATE-Attribut, um eine ColdFusion-Seite anzugeben, die die Definition des benutzerdefinierten Tags einschließlich Pfad enthält. Verwenden Sie das NAME-Attribut, um auf das benutzerdefinierte Tag zu verweisen, indem Sie die Punktschreibweise verwenden, die die Position des benutzerdefinierten Tags im Stammverzeichnis der ColdFusion-Installation angibt.

    Syntax

    TEMPLATE Wird anstelle von NAME verwendet und legt den Pfad zu der Anwendungsseite (.cfm-Datei) fest, die das Tag implementiert. Relative Pfade werden aus der aktuellen Template erweitert. Physische Pfade sind nicht zulässig. Absolute Pfade werden unter Verwendung der ColdFusion-Zuordnungen erweitert. NAME Wird anstelle von TEMPLATE verwendet. Mit diesem Attribut legen Sie den Namen des benutzerdefinierten Tags im Format "Name.Name.Name..." fest. Dadurch kennzeichnen Sie im Hauptverzeichnis für benutzerdefinierte ColdFusion-Tags eindeutig das Unterverzeichnis, in dem die Seite des benutzerdefinierten Tags enthalten ist. Beispiel:

    Gibt die Seite GetUserOptions.cfm im Verzeichnis CustomTags\Allaire\Forums40 an, das im ColdFusion-Installationsverzeichnis enthalten ist.

    705

    ColdFusion-Tags

    ATTRIBUTECOLLECTION Optional. Eine Struktur mit einer Gruppe von Schlüsselwort/Wert-Paaren, die Attributnamen und deren Werte darstellen. Sie können so viele Schlüsselwort/Wert-Paare angeben, wie Sie benötigen. Sie können das ATTRIBUTECOLLECTION-Attribut jedoch nur einmal angeben. Weitere Informationen finden Sie im Abschnitt zur Verwendung des Tags. ATTRIBUTE_NAME Optional. Attribute, die in Ihrem benutzerdefinierten Tag verwendet werden sollen. Sie können so viele Attribute verwenden, wie Sie zum Festlegen der Parameter eines benutzerdefinierten Tags benötigen.

    Verwendung Sie können ATTRIBUTECOLLECTION und ATTRIBUTE im selben Aufruf verwenden. Innerhalb des Codes des benutzerdefinierten Tags werden die mit ATTRIBUTECOLLECTION übergebenen Attribute als unabhängige Attributwerte gespeichert. Hierbei wird nicht gekennzeichnet, ob die Attribute vom Aufrufer des benutzerdefinierten Tags in einer Struktur gruppiert wurden. Falls das benutzerdefinierte Tag zum Speichern seiner Attribute ein CFASSOCIATE-Tag verwendet, werden die mit ATTRIBUTECOLLECTION übergebenen Attribute ebenfalls als unabhängige Attributwerte gespeichert. Hierbei wird nicht gekennzeichnet, ob die Attribute vom Aufrufer des benutzerdefinierten Tags in eine Struktur gruppiert werden.

    Beispiel

    Dies ist der Code im benutzerdefinierten Tag.

    #HTMLCodeFormat("



    ")#







    Dieses Objekt enthält #obj.Count# Elemente.




    Ausführen einer Schleife über alle Objekte in der Sammlung:


    Nachname: #file2.lastname#


    ...

    CFOBJECT Type="CORBA" CFOBJECT ermöglicht den Aufruf von Methoden in CORBA-Objekten. Diese CORBA-Objekte müs-

    sen bereits existieren und zur Verwendung registriert sein.

    711

    ColdFusion-Tags

    Syntax

    CONTEXT Zwingend erforderlich. Legt eines der folgenden Objekte fest: 쐽

    IOR -- ColdFusion verwendet die Interoperable Object Reference (IOR), um auf den CORBAServer zuzugreifen.



    NameService -- ColdFusion verwendet den Namensdienst, um auf den Server zuzugreifen. Der Attributwert »NameService« ist nur zusammen mit einem Aufruf der getInitialContext-Methode eines VisiBroker ORB gültig.

    CLASS Zwingend erforderlich. Gibt abhängig von der CONTEXT-Spezifikation unterschiedliche Informationen an: 쐽

    CONTEXT = IOR – Gibt den Namen einer Datei an, die die Zeichenkettenversion der IOR enthält. Diese Datei muß von ColdFusion jederzeit gelesen werden können. Sie sollte auf dem ColdFusion-Server oder im Netzwerk in einem zugänglichen Verzeichnis gespeichert sein.



    CONTEXT = NameService – Gibt einen durch Punkte begrenzten Namenskontext für den Namensdienst an, wie zum Beispiel Allaire.Department.Doc.empobject.

    NAME Zwingend erforderlich. Geben Sie einen Namen für das Objekt ein. Ihre Applikation verwendet diesen Namen, um auf die Methoden und Attribute der CORBA-Objekte zu verweisen. LOCALE Optional. Setzt Argumente für einen Aufruf von init_orb(..). Die Verwendung dieses Attributs ist speziell für ORBs des Herstellers VisiBroker vorgesehen. Es ist derzeit für C++, Version 3.2 verfügbar. Der Wert sollte folgendes Format aufweisen: LOCALE=" -ORBagentAddr 199.99.129.33 -ORBagentPort 19000" Beachten Sie, daß jedes Typ-Wert-Paar mit einem führenden »-« beginnen muß.

    Verwendung ColdFusion Enterprise, Version 4.0 und höher unterstützt CORBA über die Schnittstellenspezifikation Dynamic Invocation Interface (DII). Um CFOBJECT mit CORBA-Objekten verwenden zu können, benötigen Sie entweder den Namen der Datei, die die Zeichenfolgenversion der IOR enthält, oder den Namenskontext des Objekts im Namensdienst. Sie müssen weiterhin wissen, welche Attribute, Methodennamen und Methodensignaturen das Objekt verwendet.

    712

    CFOBJECT

    Benutzerdefinierte Typen (z.B. Strukturen) werden nicht unterstützt.

    Beispiel

    CFOBJECT Type="JAVA" Mit CFOBJECT können Sie JAVA-Objekte und letztendlich auch EJB-Objekte erzeugen und einsetzen. Diese Funktion wird derzeit nur für NT unterstützt. In der nächsten Version ist auch die Erweiterung auf die Solaris-Plattform geplant.

    Syntax

    ACTION Zwingend erforderlich. Mit der Aktion »Create« wird das Java-Objekt oder das WebLogic Environment-Objekt erzeugt. TYPE Zwingend erforderlich. Gibt den Objekttyp an. In diesem Fall ist der Attributwert stets »Java«. CLASS Zwingend erforderlich. Gibt die Java-Klasse an. NAME Zwingend erforderlich. Der innerhalb von CFML benutzte Name für den Zugriff auf das Objekt.

    Verwendung Damit Java-CFXs (CFXs = ColdFusion-Erweiterungen) oder Java-Objekte aufgerufen werden können, benutzt ColdFusion eine in den Prozess eingebettete JVM. Das Laden der JVM sowie Speicherort und Einstellungen für die JVM werden mit Hilfe der ColdFusion Administrator-Seiten konfiguriert.

    713

    ColdFusion-Tags

    Jede in dem im ColdFusion Administrator angegebenen Klassenverzeichnis verfügbare Java-Klasse kann geladen und von ColdFusion aus mit Hilfe des CFOBJECT-Tags benutzt werden. Für den Zugriff auf Java-Methoden und -Felder gehen Sie nach den folgenden Schritten vor: 1.

    Rufen Sie CFOBJECT auf, um die Klasse zu laden (siehe Beispiel).

    2.

    Verwenden Sie die Init-Methode mit geeigneten Argumenten, um einen Konstruktor explizit aufzurufen. Beispiel:

    Das Aufrufen einer Public-Methode des Objekts ohne vorherigen Aufruf der Init-Methode führt zu einem impliziten Aufruf des Standardkonstruktors. Als Argumente und Rückgabewerte sind beliebige gültige Java-Typen (einfache Typen, Datenfelder, Objekte) möglich. ColdFusion führt die entsprechenden Konvertierungen durch, wenn Zeichenketten als Argumente übergeben werden. Dies gilt jedoch nicht, wenn die Zeichenketten als Rückgabewerte empfangen werden. Überladene Methoden werden unterstützt, falls die Anzahl der Argumente unterschiedlich ist. Im Zuge der geplanten Erweiterungen werden Sie künftig über cast-Funktionen (d.h. Funktionen für die Typumwandlung) verfügen, mit denen ein genauerer Aufbau von Methodensignaturen (Methodennamen und zugehörige Parametertypen) möglich ist.

    EJBs aufrufen Verwenden Sie CFOBJECT zum Erzeugen und Aufrufen der entsprechenden EJB-Objekte. Im Code des zweiten Beispiels wird vorausgesetzt, daß zum Registrieren und Finden von Instanzen des EJBHome-Objekts Weblogic JNDI eingesetzt wird.

    Beispiel für ein Java-Objekt





    Share value = #value#

    B.55 CFOUTPUT Zeigt die Ergebnisse einer Datenbankabfrage oder einer anderen Operation an. Wenn Sie CFOUTPUTTags verschachteln müssen, lesen Sie bitte die Informationen im Abschnitt »Verwendung«.

    Syntax

    QUERY Optional. Der Name der CFQUERY, aus der Sie die Daten für den Ausgabeabschnitt holen möchten. GROUP Optional. Gibt die Abfragespalte an, die benutzt werden soll, wenn Sie Datensätze zu Gruppen zusammenfassen. Verwenden Sie dieses Attribut, wenn Sie einen Datensatz abgerufen haben, der nach einer bestimmten Abfragespalte geordnet ist. Wenn Sie beispielsweise einen Datensatz haben, der nach »Kunden_ID« im CFQUERY-Tag geordnet ist, können Sie die Ausgabe nach »Kunden_ID« gruppieren. Das von der Groß-/Kleinschreibung abhängige GROUP-Attribut eliminiert aufeinanderfol-

    715

    ColdFusion-Tags

    gende Duplikate, wenn die Daten nach dem angegebenen Feld sortiert werden. In der Syntaxbeschreibung zum GROUPCASESENSITIVE-Attribut finden Sie Informationen zum Angeben einer von der Groß-/Kleinschreibung unabhängigen Gruppierung. GROUPCASESENSITIVE Optional. Boolescher Wert, der angibt, ob beim Gruppieren die Groß-/Kleinschreibung berücksichtigt werden muß. Die Voreinstellung ist YES; d.h. die Groß-/Kleinschreibung wird beim Gruppieren berücksichtigt. Falls das QUERY-Attribut ein Abfrageobjekt angibt, das von einer SQL-Abfrage ohne Berücksichtigung der Groß-/Kleinschreibung generiert wurde, setzen Sie das GROUPCASESENSITIVE Attribut auf NO, damit der Datensatz intakt bleibt. STARTROW Optional. Legt die Zeile fest, ab der die Ausgabe beginnen soll. MAXROWS Optional. Legt die maximale Anzahl an Zeilen fest, die im Ausgabeabschnitt angezeigt werden sollen.

    Verwendung Zum Verschachteln von CFOUTPUT-Blöcken müssen Sie die Attribute GROUP und QUERY auf der obersten Ebene und das GROUP-Attribut für alle inneren Blöcke außer dem innersten CFOUTPUT-Block angeben.

    Beispiel

    SELECT Abteilungs_ID, KursName, KursStufe FROM KursListe ORDER by Abteilungs_ID, KursStufe, KursName

    CFOUTPUT

    Beispiel für CFOUTPUT

    CFOUTPUT teilt meinem ColdFusion-Server mit, die Verarbeitung zu beginnen und die Steuerung der Seitenerstellung daraufhin an den Webserver zurückzugeben.

    Um beispielsweise das heutige Datum anzuzeigen, würden Sie #DateFormat("#Now()#") schreiben. Wenn Sie diesen Ausdruck in CFOUTPUT integrieren, erhalten Sie als Ergebnis #DateFormat(Now())#

    716

    CFPARAM

    .

    Mit CFOUTPUT können außerdem die Ergebnisse einer Abfrage oder ein Teilergebnis wie folgt angezeigt werden:

    Die Abfrage enthält insgesamt #KurseAbfragen.recordCount# Datensätze. Mit dem MAXROWS-Parameter können wir die Anzeige auf 4 Zeilen beschränken.



    #Abteilungs_ID# #KursName# #KursStufe#

    CFOUTPUT kann auch die Ergebnisse eines komplexeren Ausdrucks anzeigen, wie zum Beispiel das Abrufen des Wochentages für das aktuelle Datum. Hierzu müssen wir als erstes die ganze Zahl, die den Wochentag darstellt, aus der Serverfunktion Now() extrahieren und das Ergebnis auf die DayofWeekAsString-Funktion anwenden:
    Heute ist #DayofWeekAsString(DayofWeek(Now()))#
    Heute ist #DayofWeekAsString(DayofWeek(Now()))#



    B.56 CFPARAM CFPARAM testet, ob ein Parameter vorhanden ist. Als zusätzliche Option kann der Datentyp des Parameters überprüft und – falls nicht vorhanden – ein voreingestellter Typ zur Verfügung gestellt werden.

    Syntax

    DEFAULT="Wert">

    NAME Der Name des Parameters, den Sie testen (wie beispielsweise »Client.E-Mail« oder »Cookie.HintergrundFarbe«). Wenn Sie das DEFAULT-Attribut weglassen, tritt bei einem angegebenen aber nicht vorhandenen Parameter ein Fehler auf.

    717

    ColdFusion-Tags

    TYPE Optional. Der Typ des Parameters, der erforderlich ist. Der voreingestellte Wert ist »any«. Typwert

    Beschreibung

    any

    ein beliebiger Wert

    array

    ein beliebiger Datenfeldwert

    binary

    ein binärer Wert

    boolean

    ein Boolescher Wert

    date

    ein Datum-Uhrzeit-Wert

    numeric

    ein nummerischer Wert

    query

    ein Abfrageobjekt

    string

    eine Zeichenkette oder ein einzelnes Zeichen

    struct

    eine Struktur

    UUID

    Ein Universally Unique Identifier (UUID) mit dem Format 'XXXXXXXX-XXXX-XXXXXXXXXXXXXXXXXXX', wobei 'X' für eine hexadezimale Ziffer steht (0-9 oder A-F). Siehe CreateUUID.

    variableName

    ein gültiger Variablenname

    DEFAULT Optional. Standardwert, auf den der Parameter gesetzt wird, falls er nicht existiert.

    Verwendung CFPARAM kann auf dreierlei Arten verwendet werden: 쐽

    Zur Überprüfung, ob eine benötigte Variable vorhanden ist – Verwenden Sie CFPARAM nur mit dem NAME-Attribut, um zu festzustellen, ob eine benötigte Variable vorhanden ist. Falls die Variable nicht vorhanden ist, beendet der ColdFusion-Server die Verarbeitung der Seite, und es erscheint eine Fehlermeldung.



    Zur Überprüfung, ob eine benötigte Variable existiert und zu welchem Typ sie gehört -- Verwenden Sie CFPARAM mit dem NAME- und dem TYPE-Attribut, um festzustellen, ob eine benötigte Variable vorhanden ist und den angegebenen Typ hat.



    Zur Überprüfung, ob eine optionale Variable vorhanden ist – Verwenden Sie CFPARAM mit dem NAME- und dem DEFAULT-Attribut, um zu festzustellen, ob eine optionale Variable vorhanden ist. Falls die Variable existiert, wird die Verarbeitung fortgesetzt, und der Wert bleibt unverändert. Existiert die Variable nicht, wird sie erstellt und auf den Wert des DEFAULT-Attributs gesetzt.

    718

    CFPARAM

    Beispiel





    Beispiel für CFPARAM

    Beispiel für CFPARAM

    CFPARAM wird verwendet, um die Standardwerte so einzustellen, dass der Entwickler das Vorhandensein einer Variable nicht mit einer Funktion wie IsDefined feststellen muß.

    Der Standardwert unserer Variablen tempVar lautet "#StoreTempVar# "

    Beispiel für CFPOP

    Beispiel für CFPOP

    Mit CFPOP können Sie Mail in einer POP3-Mailbox abrufen und ändern. Dieses Beispiel zeigt, wie Sie ein Funktionsmerkmal eines Mail-Clients realisieren, mit der Sie die Mail-Kopfzeilen in einer POP3-Mailbox anzeigen können.

    Entfernen Sie die Kommentar-Markierungen aus dem Code und führen Sie ihn auf einem mit Mail ausgestatteten ColdFusion-Server aus, um diese Funktion auszuprobieren.





    Der Ausgabeparameterwert: '#foo#'


    Ergebnisinformationen #NAME#,#DATE_COL#




    Datensatzanzahl: #RS1.RecordCount#

    Spalten: #RS1.ColumnList#

    #col1#,#col2#,#col3#




    Datensatzanzahl: #RS3.RecordCount#

    Spalten: #RS3.ColumnList#

    Der Rückgabecode für die gespeicherte Prozedur lautet: "#CFSTOREDPROC.STATUSCODE#"


    ...

    B.60 CFPROCRESULT Das CFPROCRESULT-Tag ist in einem CFSTOREDPROC-Tag verschachtelt. Der NAME-Parameter dieses Tags gibt den Namen einer Ergebnismenge an, die von den ColdFusion-Tags CFOUTPUT und CFTABLE verwendet wird, um auf die Ergebnismenge zuzugreifen. Sie können damit auch wahlweise festlegen, welche der Ergebnismengen an die gespeicherte Prozedur zurückgegeben wird.

    Syntax

    727

    ColdFusion-Tags

    NAME Zwingend erforderlich. Der Name für die Abfrageergebnismenge. RESULTSET Optional. Geben Sie diesen Parameter an, um die gewünschte Ergebnismenge zu identifizieren, falls von der gespeicherten Prozedur mehrere Ergebnismengen zurückgegeben werden. Standardmäßig wird eine Zeile hinzugefügt. MAXROWS Optional. Gibt die maximale Anzahl an Zeilen an, die in der Ergebnisgruppe zurückgegeben werden. Standardmäßig werden alle Zeilen der Ergebnismenge zurückgegeben.

    Verwendung Geben Sie mindestens ein CFPROCRESULT-Tag an, um den Zugriff auf die von der gespeicherten Prozedur zurückgegebenen Daten zu ermöglichen. RESULTSET muss im Bereich des CFSTOREDPROC-Tags eindeutig sein. Wenn Sie dieselbe Ergebnismenge zweimal angeben, wird die erste von der zweiten überschrieben.

    Beispiel ...





    Beispiel für CFQUERY

    Beispiel für CFQUERY

    732

    CFQUERY

    SELECT PARKNAME, REGION, STATE FROM Parks ORDER BY ParkName, State





    Beispiel für CFQUERYPARAM

    Beispiel für CFQUERYPARAM

    736

    CFQUERYPARAM

    SELECT * FROM Kurse WHERE Kurs_ID=

    Kursnummer: #Nummer#
    Beschreibung: #Beschreibung#





    737

    ColdFusion-Tags

    Beispiel für CFQUERYPARAM

    CFQUERYPARAM-Beispiel mit ungültiger Zeichenketten-Eingabe

    SELECT * FROM Angestellte WHERE Nachname=

    Kursnummer: #Vorname# #Nachname# Beschreibung: #Abteilung#



    Das CFQUERYPARAM-Tag gibt die folgende Fehlermeldung zurück, wenn dieses Beispiel ausgeführt wird. VALUE Invalid data 'Peterson; DELETE employees WHERE LastName='Peterson'' value exceeds MAXLENGTH setting '17'.

    B.63 CFREGISTRY Das CFREGISTRY-Tag liest, schreibt und löscht Schlüssel und Werte in der Systemregistrierung. CFREGISTRY wird auf allen Plattformen, einschließlich Solaris und HP-UX, unterstützt.

    Hinweis Die im ColdFusion-Server vorhandenen grundlegenden Sicherheitseinstellungen verhindern möglicherweise, daß CFREGISTRY ausgeführt wird. Diese Einstellungen werden über die ColdFusion-Administratorseite BASISSICHERHEIT verwaltet. Damit das CFREGISTRY-Tag ausgeführt werden kann, muss es auf der Administratorseite BASISSICHERHEIT aktiviert werden.

    738

    CFREGISTRY



    CFREGISTRY-Themen



    CFREGISTRY ACTION="GetAll"



    CFREGISTRY ACTION="Get"



    CFREGISTRY ACTION="Set"



    CFREGISTRY ACTION="Delete"

    CFREGISTRY ACTION-Attribute Abhängig vom Wert, den Sie dem ACTION-Attribut von CFREGISTRY zuweisen, sind weitere Unterattribute vorhanden, die Sie einstellen können. Die nachfolgende Tabelle zeigt, welche Attribute Sie mit den einzelnen CFREGISTRY ACTIONs verwenden können. CFREGISTRY ACTION-Tag

    Attribute

    GetAll

    BRANCH TYPE NAME SORT

    Get

    BRANCH ENTRY TYPE VARIABLE

    Set

    BRANCH ENTRY TYPE VALUE

    Delete

    BRANCH ENTRY

    CFREGISTRY ACTION="GetAll" Verwenden Sie CFREGISTRY mit der Aktion »GetAll«, um alle Registrierungsschlüssel und Werte, die in einem Zweig definiert sind, zurückzugeben. Sie greifen auf diese Werte so, so wie auf jede andere Datensatzgruppe zu.

    Syntax

    739

    ColdFusion-Tags

    BRANCH Zwingend erforderlich. Der Name des Registrierungszweigs, der die Schlüssel oder Werte enthält, auf die Sie zugreifen. TYPE Optional. Der Datentyp, auf den Sie zugreifen. 쐽

    String. Zur Rückgabe von Zeichenkettenwerten (Standard).



    Dword. Zur Rückgabe von DWord-Werten.



    Key. Zur Rückgabe von Schlüsseln.



    Any. Zur Rückgabe von Schlüsseln und Werten.

    NAME Zwingend erforderlich. Der Name der Datensatzgruppe, die die zurückgegebenen Schlüssel und Werte enthalten soll. SORT Optional. Sortiert die Spaltendaten einer Abfrage (Groß-/Kleinschreibung wird nicht berücksichtigt). Sortiert den Text der Spalten Entry, Type und Value. Geben Sie eine beliebige Kombination von Spalten aus der Abfrageausgabe in einer kommagetrennten Liste an. Als Qualifizierer für Spaltennamen können ASC (aufsteigende Reihenfolge) oder DESC (absteigende Reihenfolge) angegeben werden. Standardwert ASC. Beispiel: Sort="value DESC, entry ASC"

    Verwendung CFREGISTRY gibt #Entry#, #Type# und #Value# in einer Datensatzgruppe zurück, auf die Sie mit Tags wie CFOUTPUT zugreifen können. Zur vollständigen Qualifizierung dieser Variablen verwenden Sie den Namen der Datensatzgruppe, der im NAME-Attribut angegeben ist.

    Wenn es sich bei #Type# um einen Schlüssel handelt, ist #Value# eine leere Zeichenkette. Wenn Sie für TYPE »Any« angeben, werden mit »GetAll« auch binäre Registrierungswerte zurückgegeben. Bei Binärwerten enthält die #Type#-Variable UNSUPPORTED und #Value# bleibt leer.

    Beispiel

    CFREGISTRY ACTION="Get"

    CFREGISTRY ACTION="Get"

    Der Java-KlassenPfad-Wert lautet #RegWert#



    CFREGISTRY ACTION="Set" Verwenden Sie CFREGISTRY mit der Set-Aktion, um einen Registrierungsschlüssel oder einen neuen Wert hinzuzufügen oder Wertdaten zu aktualisieren.

    Syntax

    BRANCH Zwingend erforderlich. Der Name des Registrierungszweigs, der den zu setzenden Schlüssel oder Wert enthält. ENTRY Zwingend erforderlich. Der zu setzende Schlüssel oder Wert. TYPE Optional. Der Datentyp, den Sie einstellen wollen. 쐽

    String. Festlegen eines Zeichenkettenwerts (Standard).



    DWord. Festlegen eines DWord-Werts.



    Key. Erstellen eines Schlüssels.

    742

    CFREGISTRY

    VALUE Optional. Die festzulegenden Wertdaten Wenn Sie dieses Attribut weglassen, erstellt CFREGISTRY die folgenden Standardwertdaten: 쐽

    String. Der Standardwert ist eine leere Zeichenfolge: »«



    DWord. Der Standardwert ist 0 (Null).

    Verwendung CFREGISTRY erstellt den Schlüssel oder Wert nur dann, wenn er existiert.

    Beispiel

    CFREGISTRY ACTION="Set"

    CFREGISTRY ACTION="Delete" Verwenden Sie CFREGISTRY mit der Delete-Aktion, um einen Registrierungsschlüssel oder -wert zu löschen.

    Syntax

    BRANCH Zwingend erforderlich. Legt eines der folgenden Objekte fest:

    743

    ColdFusion-Tags



    Beim Löschen eines Schlüssels – Der Name des Registrierungsschlüssels, der gelöscht werden soll. Um einen Schlüssel zu löschen, geben Sie ENTRY nicht an.



    Beim Löschen eines Wertes – Der Name des Registrierungszweigs, in dem der zu löschende Wert enthalten ist. Zum Löschen eines Werts müssen Sie ENTRY angeben.

    ENTRY Wird zum Löschen eines Werts benötigt. Der zu löschende Wert.

    Verwendung Wenn Sie einen Schlüssel löschen, werden mit CFREGISTRY auch die Werte und Unterschlüssel, die sich unterhalb des Schlüssels befinden, gelöscht.

    Beispiel

    Beispiel für CFREPORT

    CFREPORT-Tag

    CFREPORT ermöglicht, dass mit Crystal Reports Professional erstellte Berichte mit einer ColdFusion-Schnittstelle angezeigt werden können. Das CFREPORT-Tag setzt zur Ausführung den Namen des Berichts voraus. CFREPORT kann auch an die angezeigte Berichtdatei Informationen weitergeben, um die Ausgabebedingungen zu ändern.

    Dieses Beispiel führt einen Bericht namens "gewinn.rpt" aus und übergibt ihm eine optionale Filterbedingung, um nur die Informationen einer bestimmten Untermenge des Berichts anzuzeigen.

    745

    ColdFusion-Tags

    {Departments.Department} = "International"

    Ersetzen Sie die in diesem Code enthaltenen Berichtfilter und Filter durch Ihre eigenen, und platzieren Sie mit CFREPORT existierende Crystal Reports-Berichte auf Webseiten.

    B.65 CFRETHROW Gibt die aktuell aktive Ausnahmebedingung zurück. stellt die Ausnahmeinformationen bereit, die in den Abfangvariablen CFCATCH.TYPE und CFCATCH.TAGCONTEXT enthalten sind. Siehe auch CFTRY/CFCATCH.

    Syntax

    Verwendung Verwenden Sie das Tag innerhalb eines -Blocks. Dieses Tag leistet nützliche Dienste in Code für die Fehlerbehandlung, wenn die Fehlerbehandlungsroutine die ausgelöste Fehlermeldung nicht erfolgreich abwickeln kann.

    Beispiel



    746

    CFSCHEDULE

    SELECT * FROM Nachrichten



    Beispiel für CFSCHEDULE

    CFSCHEDULE-Beispiel

    CFSCHEDULE bietet eine programmgesteuerte Schnittstelle zur ColdFusion-Planungs-Engine. Sie können eine bestimmte Seite in festgelegten Intervallen ausführen und wahlweise statische HTML-Seiten erstellen. Hierdurch haben Benutzer Zugriff auf Seiten, auf denen Daten, z.B. Berichte, veröffentlicht werden, ohne dass sie auf den Abschluß eines Datenbankvorgangs warten müssen, um ihre Daten auf der Seite eingeben zu können.



    750

    CFSCRIPT

    B.67 CFSCRIPT Das CFSCRIPT-Tag schließt ein Codesegment ein, das CFScript enthält.

    Syntax

    Hier steht der CFScript-Code.

    Verwendung Verwenden Sie CFSCRIPT, um die Verarbeitung in CFScript anstatt in CFML durchzuführen. Beachten Sie folgendes zu CFScript: 쐽

    CFScript verwendet ColdFusion-Funktionen, -Ausdrücke und -Operatoren.



    Sie können in CFScript ColdFusion-Variablen lesen und schreiben.

    CFSCRIPT wird u.a. dazu verwendet, um eine Reihe von Zuordnungsfunktionen zu verpacken, für die sonst CFSET-Anweisungen verwendet werden müßten.

    Beispiel



    Beispiel für CFSEARCH

    Beispiel für CFSEARCH







    SELECT * FROM Nachrichten



    Beispiel für CFSET

    Beispiel für CFSET

    CFSET ermöglicht Ihnen, lokale und globale Variablen innerhalb einer ColdFusion-Vorlage festzulegen und ihnen Werte zuzuordnen.

    Zum Beispiel wurde die Variable AnzahlDatensaetze auf dieser Vorlage so deklariert, dass sie die von unserer Abfrage zurückgegebene Anzahl der Datensätze (#AnzahlDatensaetze#) aufnimmt.

    CFSET kann auch dazu verwendet werden, um Variablen von anderen Seiten weiterzugeben , wie in diesem Beispiel, das den URL-Parameter "Test" aus der folgenden Verbindung übernimmt (Hier klicken), um eine Nachricht anzuzeigen:

    #url.test#

    Die Variable url.test wurde von keiner anderen Seite weitergegeben.

    CFSET kann auch zur Auflistung von Umgebungsvariablen wie der Zeit, der IP-Adresse des Benutzers oder anderen in ColdFusion möglichen Funktionen und Ausdrücken verwendet werden.

    764

    CFSETTING

    ...

    B.73 CFSETTING CFSETTING wird verwendet, um verschiedene Aspekte der Seitenverarbeitung zu steuern, beispiels-

    weise die Ausgabe von HTML-Code in Ihren Seiten. Einer der Vorteile dieser Option liegt darin, dass Leerraum verarbeitet werden kann, der in ColdFusion-Ausgabeseiten vorhanden sein kann.

    Syntax

    ENABLECFOUTPUTONLY Zwingend erforderlich. Yes oder No. Bei Yes sperrt CFSETTING die Ausgabe des gesamten HTMLCodes, der sich außerhalb von CFOUTPUT-Tags befindet. SHOWDEBUGOUTPUT Optional. Yes oder No. Wenn SHOWDEBUGOUTPUT auf No eingestellt ist, werden am Ende der erstellten Seite keine Debugging-Informationen angezeigt. Standardwert Yes. CATCHEXCEPTIONSBYPATTERN Optional. Yes oder No. Wird dieses Attribut auf Yes gesetzt, hat diese Einstellung Vorrang vor der strukturierten Ausnahmebehandlung, die in Version 4.5 eingeführt wurde. Standardwert No.

    Hinweis Aus der strukturierten Ausnahmebehandlung ergibt sich eine fast unmerkliche Aufwärtsinkompatibilität. In Version 4.0.x wurde eine Ausnahme durch den ersten CFCATCH-Block abgewickelt, der über eine Behandlungsroutine (einen Handler) für diesen Ausnahmetyp verfügte. In Version 4.5 sucht dagegen der Manager für strukturierte Ausnahmebehandlung nach dem CFCATCH-Handler, der sich am besten für diese Aufgabe eignet.

    Verwendung Beim Verschachteln von CFSETTING-Tags muß jede Einstellung der Form ENABLECFOUTPUTONLY="Yes" genau einer Einstellung der Form ENABLECFOUTPUTONLY="No" entsprechen, damit normaler HTMLText für den Benutzer sichtbar ist. Wenn Sie z.B. fünf Anweisungen der Form ENABLECFOUTPUTONLY =Yes" haben, müssen als Entsprechung genau fünf Anweisungen der Form ENABLECFOUTPUTONLY="No" vorhanden sein, damit der HTML-Text erneut angezeigt wird.

    765

    ColdFusion-Tags

    Wenn zu irgendeinem Zeitpunkt die Ausgabe von normalem HTML-Text aktiviert ist (gleichgültig, wie oft ENABLECFOUTPUTONLY="No" verarbeitet wurde), sperrt die erste ENABLECFOUTPUTONLY="Yes"Anweisung die Ausgabe.

    Beispiel ...

    Dieser Text wird nicht angezeigt.

    Dieser Text wird nicht angezeigt.

    Text innerhalb von CFOUTPUT wird immer angezeigt.

    Text innerhalb von CFOUTPUT wird immer angezeigt.



    B.74 CFSILENT CFSILENT unterdrückt alle Ausgaben, die von der CFML innerhalb des Gültigkeitsbereichs des Tags erzeugt werden (siehe auch CFSETTING).

    Syntax

    Beispiel

    CFSILENT

    CFSILENT



    Beispiel für CFSLIDER

    Beispiel für CFSLIDER

    Wird CFSLIDER in einem CFFORM verwendet, erhalten Java-Browser zusätzliche Funktionalität.

    Verschieben Sie den Schieberegler, um die Veränderung der Werte in Echtzeit anzuzeigen. Übermitteln Sie daraufhin das Formular, um zu zeigen, wie CFSLIDER den Wert an eine neue ColdFusion-Vorlage weiterleitet.



    Der Schieberegler zeigt folgenden Wert an: #MeinSchieberegler# Versuchen Sie es noch einmal!

    1 100





    771

    ColdFusion-Tags

    B.76 CFSTOREDPROC Gespeicherte Prozeduren werden über eine ODBC- oder systemeigene Verbindung zu einer Serverdatenbank hauptsächlich mit Hilfe des CFSTOREDPROC-Tags ausgeführt. Legt Datenbankverbindungsinformationen und die gespeicherte Prozedur fest.

    Syntax

    PROCEDURE Zwingend erforderlich. Gibt den Namen der gespeicherten Prozedur auf dem Datenbankserver an. DATASOURCE Erforderlich. Der Name einer ODBC- oder systemeigenen Datenquelle, der auf die Datenbank zeigt, in der die gespeicherte Prozedur enthalten ist. USERNAME Optional. Falls angegeben, überschreibt USERNAME den im Datenquellen-Setup festgelegten Wert des Benutzernamens. PASSWORD Optional. Falls angegeben, überschreibt PASSWORD den im Datenquellen-Setup festgelegten Wert des Kennworts. DBSERVER Optional. Beim Einsatz systemeigener Datenbanktreiber wird der Name des Datenbankserver-Rechners angegeben. Falls angegeben, ersetzt DBSERVER den in der Datenquelle angegebenen Server. DBNAME Optional. Der Datenbankname (nur mit Sybase System 11-Treiber). Falls angegeben, ersetzt DBSERVER die in der Datenquelle angegebene Standarddatenbank. BLOCKFACTOR Optional. Gibt die maximale Anzahl an Zeilen an, die gleichzeitig vom Server abgerufen werden. Der Bereich liegt zwischen 1 (Standard) und 100. Der ODBC-Treiber kann den Blockfaktor während der Laufzeit dynamisch reduzieren.

    772

    CFSTOREDPROC

    PROVIDER Optional. COM-Provider (nur bei OLE-DB). PROVIDERDSN Optional. Der Datenquellenname für den COM-Provider (nur bei OLE-DB). DEBUG Optional. Yes oder No. Legt fest, ob auf Anweisungen Debug-Informationen aufgelistet werden. Standardwert »No«. RETURNCODE Optional. Yes oder No. Legt fest, ob das Tag CFSTOREDPROC.STATUSCODE mit dem von der gespeicherten Prozedur zurückgegebenen Statuscode auffüllt. Standardwert »No«.

    Verwendung Sie verwenden CFPROCRESULT und CFPROCPARAM innerhalb eines CFSTOREDPROC-Tags je nach Bedarf. Wenn Sie den ReturnCode-Parameter auf YES setzen, wird mit CFSTOREDPROC die Variable CFSTOREDPROC.STATUSCODE eingestellt, die den Statuscode für die gespeicherte Prozedur angibt. Der Statuscode von gespeicherten Prozeduren variiert je nach DBMS. In der Dokumentation zum jeweiligen DBMS werden die einzelnen Statuscodewerte beschrieben. CFSTOREDPROC gibt nicht nur einen Statuscode zurück, sondern setzt auch eine Variable namens CFSTOREDPROC.ExecutionTime. Diese Variable enthält die Anzahl der Millisekunden, die für die Aus-

    führung der gespeicherten Prozedur benötigt wurden. Gespeicherte Prozeduren sind eine erweiterte Funktion professioneller Datenbank-Managementsystemen. Sie sollten sich vor der Implementierung dieser Tags mit gespeicherten Prozeduren und ihrer Verwendung vertraut machen.

    Beispiel ...











    782

    CFTHROW

    Beispiel für CFTEXTINPUT

    Beispiel für CFTEXTINPUT CFTEXTINPUT kann zur einfachen Validierung von Textfeldern in CFFORM und zur Steuerung von Informationen über Textschriftarten für CFFORM-Textfelder verwendet werden. Das folgende Feld darf nicht leer bleiben. Es zeigt eine clientseitige Nachricht an.

    Sie haben #form.MeineEingabe# ins Textfeld eingegeben.





    B.80 CFTHROW Das CFTHROW-Tag löst eine vom Entwickler festgelegte Ausnahme aus, die mit den folgenden Einstellungen im TYPE-Attribut des CFCATCH-Tags aufgefangen werden kann: 쐽

    CFCATCH TYPE= "benutzerdefinierter_typ"



    CFCATCH TYPE= "APPLICATION"



    CFCATCH TYPE= "ANY"

    Syntax

    783

    ColdFusion-Tags

    TYPE Optional. Ein benutzerdefinierter Typ oder der vordefinierte Typ APPLICATION. Keiner der anderen vordefinierten Typen sollte angegeben werden, da diese Typen von ColdFusion-Anwendungen nicht generiert werden. Wenn Sie den Ausnahmetyp APPLICATION angeben, erübrigt sich die Angabe eines Typs für CFCATCH, da der Typ APPLICATION für CFCATCH die Voreinstellung ist. MESSAGE Optional. Eine Nachricht zur Beschreibung des Ausnahmeereignisses. DETAIL Optional. Eine detaillierte Beschreibung des Ereignisses. Der ColdFusion-Server fügt die Position des Fehlers an diese Beschreibung an. Der Server benutzt dann diesen Parameter, falls ein Fehler nicht von Ihrem Code abgefangen wird. ERRORCODE Optional. Ein benutzerdefinierter Fehlercode, den Sie bereitstellen. EXTENDEDINFO Optional. Ein benutzerdefinierter Fehlercode, den Sie bereitstellen.

    Verwendung Verwenden Sie CFTHROW innerhalb eines CFTRY-Blocks, um eine Fehlerbedingung auszulösen. Der CFCATCH-Block kann wie folgt auf alle begleitenden Informationen zugreifen: 쐽

    auf Nachrichten mit Hilfe von CFCATCH.message,



    auf Detailbeschreibungen mit Hilfe von CFCATCH.detail,



    auf Fehlercodes mit Hilfe von CFCATCH.errorcode.



    Sie erhalten zusätzliche Informationen, indem Sie die Punktnotation CFCATCH.TagContext verwenden. Die Variable TagContext erfaßt den Kontext der Ausnahme; d.h., Name und Position jedes Tags im Tag-Stapel und die vollständigen Pfadnamen der Dateien, in denen die Tags im Tag-Stapel vorkommen.

    Hinweis Sie können sich die von TagContext zurückgegebenen Informationen (Tag-Stapel) anzeigen lassen, indem Sie im ColdFusion-Administrator die CFML-Stackverfolgung aktivieren. Aktivieren Sie hierzu im ColdFusion-Administrator auf der Seite Debugging die Option »CFML-Stapelverfolgung aktivieren«.

    784

    CFTHROW

    Beispiel



    Sie haben eine Fehlerbedingungausgelöst.< /H3>



    Beispiel für CFTRANSACTION

    Beispiel für CFTRANSACTION

    CFTRANSACTION kann dazu verwendet werden, um mehrere mit CFQUERY erstellte Abfragen zu einem einzelnen Geschäftsereignis zu gruppieren. Ob die von diesen Abfragen angeforderten Datenänderungen in der Datenquelle tatsächlich vorgenommen werden, läßt sich mit Hilfe der Aktionen COMMIT und ROLLBACK in Abhängigkeit von Erfolg oder Mißerfolg der Abfrage entscheiden.

    Nachfolgend finden Sie eine Beispielauflistung (siehe Code im rechten Fensterbereich):

    787

    ColdFusion-Tags









    791

    ColdFusion-Tags





    CFTREE-Datenanzeige Klicken Sie auf die Ordner, um die verborgenen Informationen anzuzeigen.

    CFTREEITEM wird zur Erstellung der Ebenen der Struktur verwendet.











    ...

    B.83 CFTREEITEM Verwenden Sie CFTREEITEM, um ein mit CFTREE erstelltes Verzeichnisstruktur-Steuerelement mit einzelnen Einträgen aufzufüllen. Sie können die mit ColdFusion gelieferten IMG-Werte verwenden oder auf Ihre eigenen Symboldateien verweisen.

    Hinweis CFTREEITEM verwendet ein Java-Applet, so dass ein Browser Java-fähig sein muss, damit CFTREEITEM richtig funktioniert.

    793

    ColdFusion-Tags

    Syntax

    VALUE Zwingend erforderlich. Übergebener Wert bei Übermittlung von CFFORM . Wenn ein CFTREE mit Daten aus einer CFQUERY aufgefüllt wird, werden die Reihen durch Kommas voneinander getrennt in einer Liste aufgeführt. VALUE="AbtID,AngestID"

    DISPLAY Optional. Die Beschriftung für das Verzeichnisstruktur-Steuerelement. Standardwert VALUE. Beim Auffüllen von CFTREE mit Daten aus einer CFQUERY werden DISPLAY-Namen durch Kommas voneinander getrennt in einer Liste angegeben: DISPLAY="AbtName,AngestName"

    PARENT Optional. Wert für den übergeordneten Eintrag des Verzeichnisstruktur-Steuerelements. IMG Optional. Grafikname oder Dateiname für das Verzeichnisstruktur-Steuerelement. Beim Auffüllen von CFTREE mit Daten aus CFQUERY werden Grafik- oder Dateinamen für jede Strukturebene in einem kommagetrennten Listenformat angegeben. Der Standardgrafikname ist »Folder«. Mit ColdFusion werden eine Reihe von Grafiken mitgeliefert, die nur durch Angabe des Grafiknamens (ohne Dateinamenerweiterung) angegeben werden können: 쐽

    cd



    computer



    document



    element



    folder



    floppy



    fixed



    remote

    794

    CFTREEITEM

    Trennen Sie Grafiknamen entsprechend der Verzeichnisstruktur durch Kommata: IMG="folder,document" IMG=",document

    Um eine benutzerdefinierte Grafik zu verwenden, geben Sie den Pfad und die Dateinamenerweiterung an: IMG="../images/Seite1.gif"

    IMGOPEN Optional. Das für einen offenen Verzeichnisstruktureintrag gezeigte Symbol. Sie können die Symboldatei mit Hilfe eines relativen Pfades angeben. Wie bei IMG können Sie eine der mit ColdFusion gelieferten Grafiken verwenden. HREF Optional. Mit dem Verzeichnisstruktur-Steuerelement zu verknüpfender URL oder eine Abfragespalte für eine Verzeichnisstruktur, die aus einer Abfrage aufgefüllt wird. Wenn HREF eine Abfragespalte ist, wird der angezeigte HREF-Wert von der Abfrage aufgefüllt. Wenn HREF nicht als eine Abfragespalte erkannt wird, wird angenommen, daß der HREF-Text ein aktuelles HTML HREF-Tag ist. Beim Auffüllen von CFTREE mit Daten aus CFQUERY können HREFs in einer kommagetrennten Liste angegeben werden: HREF="http://abtlgs_server,http://angest_server"

    TARGET Optional. Zielattribut für HREF URL. Beim Auffüllen von CFTREE mit Daten aus CFQUERY können Ziele in einer kommagetrennten Liste angegeben werden: TARGET="FRAME_Text,_leer"

    QUERY Optional. Legt den Namen der Abfrage fest, aus der die Daten für das Verzeichnisstruktur-Steuerelement erzeugt werden. QUERYASROOT Optional. Yes oder No. Definiert die angegebene Abfrage als Stammebene. Wie in Beispiel 1 wird durch diese Option vermieden, ein weiteres übergeordnetes CFTREEITEM-Tag erstellen zu müssen. EXPAND Optional. Yes oder No. Bei Yes wird die Verzeichnisstruktur erweitert, um auch untergeordnete Struktureinträge anzuzeigen. Bei No werden die Struktureinträge minimiert dargestellt. Standard Yes.

    795

    ColdFusion-Tags

    Beispiel



    CFTREE-Datenanzeige Klicken Sie auf die Ordner, um die verborgenen Informationen anzuzeigen.

    CFTREEITEM wird zur Erstellung der Ebenen der Struktur verwendet.











    ...

    B.84 CFTRY – CFCATCH Wird das CFTRY-Tag zusammen mit CFCATCH-Tags verwendet, können Entwickler Ausnahmen in ColdFusion-Seiten feststellen und verarbeiten. Zu Ausnahmen zählen alle Ereignisse, die den normalen Fluss von Anweisungen auf einer ColdFusion-Seite stören, wie beispielsweise Datenbankvorgänge, fehlende Include-Dateien und von Entwicklern festgelegte Ereignisse.

    797

    ColdFusion-Tags

    Syntax

    ... Fügen Sie hier Code ein.

    ... Fügen Sie hier Code zur Verarbeitung von Ausnahmen ein.

    ... Weitere CFCATCH-Blöcke werden hier eingefügt.

    TYPE Optional. Legt den Ausnahmetyp fest, der vom CFCATCH-Block abgewickelt wird: 쐽

    APPLICATION (Voreinstellung)



    Database



    Template



    Security



    Object



    MissingInclude



    Expression



    Lock



    Benutzerdefinierter_Typ



    Any (Voreinstellung)

    Verwendung Sie müssen in einem CFTRY-Block mindestens ein CFCATCH-Tag angeben. Geben Sie CFCATCH-Tags am Ende des CFTRY-Blocks ein. ColdFusion testet CFCATCH-Tags in der Reihenfolge, in der sie auf der Seite auftreten. Wenn Sie CFCATCH TYPE="ANY" angeben, sollten Sie dies stets im letzten CFCATCH-Tag tun, so daß alle anderen Tests zuerst ausgeführt werden.

    Hinweis Wenn Sie TYPE="ANY" angeben, fängt der ColdFusion Application Server Ausnahmen von beliebigen CFML-Tags, Datenquellen oder externen Objekten auf, die Ihre Anwendung möglicherweise abwickeln kann. Anwendungen können zum Auslösen benutzerdefinierter Ausnahmen wahlweise das CFTHROW-Tag verwenden. Solche Ausnahmen werden mit einer der folgenden Typangaben abgefangen: 쐽

    TYPE="Benutzerdefinierter_Typ



    TYPE="APPLICATION"



    TYPE="ANY".

    798

    CFTRY – CFCATCH

    Benutzerdefinierter_Typ kennzeichnet den Namen eines vom Benutzer definierten Typs, der mit einem CFTHROW-Tag festgelegt wurde. CFCATCH verfügt über eine Verarbeitungsroutine, die einen benutzerdefinierten Ausnahmetyp durch Mustervergleich abfangen kann. Voraussetzung hierfür ist, daß dieser Typ ist als eine Folge von Strings definiert ist, die mit Punkten verkettet sind, wie in MeineApp.GeschäftsregelAusnahme.UngültigerAccount. CFCATCH beginnt beim Mustervergleich die Suche nach einem passenden benutzerdefinierten Typ beim String auf der untersten Ebene der TypDefinitionshierarchie und beendet sie beim String auf der obersten Ebene (d.h. die Suchrichtung verläuft vom Speziellen zum Allgemeinen). Sie könnten z.B. einen Typ folgendermaßen definieren:

    CFCATCH sucht zuerst nach dem gesamten Typ-String, der im CFTHROW-Tag definiert ist:

    Anschließend wird auf der nächsten allgemeineren Definitionsebene gesucht:

    Zum Schluß wird auf der allgemeinsten Definitionsebene gesucht:

    Die Reihenfolge, in der Sie CFCATCH-Tags codieren, die benutzerdefinierte Ausnahmetypen innerhalb einer Anwendung abfangen sollen, spielt keine Rolle. Bei einem CFCATCH-Tag ist die Suche nach benutzerdefinierten Ausnahmetypen vom Speziellen zum Allgemeinen gerichtet. Wenn Sie als Ausnahmetyp »APPLICATION« angeben, fängt das CFCATCH-Tag nur die benutzerdefinierten Ausnahmetypen ab, die im definierenden CFTHROW-Tag als Typ APPLICATION angegeben worden sind. Der Ausnahmetyp TYPE="TEMPLATE" wird von den Tags CFINCLUDE, CFMODULE und CFERROR ausgelöst. Eine in einem CFCATCH-Block ausgelöste Ausnahme wird nicht von dem CFTRY-Block verarbeitet, der unmittelbar an das CFCATCH-Tag grenzt. Sie können jedoch die aktuell aktive Ausnahme mit dem CFRETHROW-Tag erneut zurückgeben. Verwenden Sie die CFCATCH-Variable, um Ausnahmeinformationen abzurufen: 쐽

    Type. Der Ausnahmetyp, wie er in CFCATCH festgelegt ist.



    Message. Falls vorhanden, die Diagnosemeldung der Ausnahme. Falls keine Diagnosemeldung verfügbar ist, ist diese Zeichenkette leer.



    Detail. Eine ausführliche Meldung vom CFML-Übersetzer. Diese Nachricht enthält HTMLFormatierungen und kann verwendet werden, um festzulegen, von welchem Tag die Ausnahme ausgelöst worden ist.



    TagContext. Tag-Kontextstapel: Name und Position jedes Tags im Tag-Stapel sowie vollständiger Pfadname der Dateien, die die Tags im Tag-Stapel enthalten. Im Hinweis am Ende dieser Liste finden Sie weitere Informationen.



    NativeErrorCode. Nur bei TYPE=Database. Der systemeigene Fehlercode für diesen Ausdruck. Datenbanktreiber erteilen Fehlercodes, um die Diagnose fehlgeschlagener Datenbankvorgänge zu erleichtern. Wenn kein Fehlercode angegeben wird, ist der Wert von NativeErrorCode gleich -1.

    799

    ColdFusion-Tags



    SQLSTATE. Nur bei TYPE=Database. Der SQL-Status für diese Ausnahme. Datenbanktreiber erteilen Fehlercodes, um die Diagnose fehlgeschlagener Datenbankvorgänge zu erleichtern. Wenn kein SQL-Status angegeben wurde, lautet der Wert von SQLSTATE gleich -1.



    ErrNumber. TYPE=Expression (ausschließlich). Fehlernummer für internen Ausdruck.



    MissingFileName. TYPE=MissingInclude (ausschließlich). Der Name der nicht enthaltenen Datei.



    LockName. TYPE=Lock (ausschließlich). Der Name der betroffenen Sperre (wird auf »'anonym« gestellt, wenn die Sperre nicht benannt wurde).



    LockOperation. TYPE=Lock (ausschließlich). Die fehlgeschlagene Operation (auf Timeout, Create Mutex oder Unknown gesetzt).



    ErrorCode. Nur bei TYPE=Benutzerdefinierter_Typ. Ein String-Fehlercode.



    ExtendedInfo. Nur bei TYPE=APPLICATION und TYPE=Benutzerdefinierter_Typ. Eine benutzerdefinierte Fehlermeldung.

    Hinweis Sie können sich den von der Variablen TagContext zurückgegebenen Tag- Stapel anzeigen lassen, indem Sie im ColdFusion-Administrator die CFML- Stackverfolgung aktivieren. Aktivieren Sie hierzu im ColdFusion Administrator auf der Seite DEBUGGING die Option CFML-STAPELVERFOLGUNG AKTIVIEREN.

    Beispiel



    #CFCATCH.message#

    Es wurde eine Ausnahme vom Typ #CFCATCH.TYPE# abgefangen.

    Der Tag-Stapel hat folgenden Inhalt:




    #i# #sCurrent["ID"]# (#sCurrent["LINE"]#,#sCurrent["COLUMN"]#) #sCurrent["TEMPLATE"]#





    B.85 CFUPDATE Das CFUPDATE-Tag aktualisiert bestehende Datensätze in Datenquellen.

    Syntax

    801

    ColdFusion-Tags

    DATASOURCE Zwingend erforderlich. Der Name der Datenquelle, die Ihre Tabelle enthält. DBTYPE Optional. Die Art des Datenbanktreibers: 쐽

    ODBC (Standard). ODBC-Treiber.



    Oracle73. Systemeigener Oracle 7.3-Datenbanktreiber. Damit diese Option genutzt werden kann, muss auf dem ColdFusion-Servercomputer die Clientsoftware Oracle 7.3.4.0.0 (oder höher) installiert sein.



    Oracle80. Systemeigener Oracle 8.0-Datenbanktreiber. Damit diese Option genutzt werden kann, muss auf dem ColdFusion-Servercomputer die Oracle 8.0-Clientsoftware (oder höher) installiert sein.



    Sybase11. Systemeigener Sybase System 11-Datenbanktreiber. Damit diese Option genutzt werden kann, muss auf dem ColdFusion-Servercomputer die Sybase 11.1.1-Clientsoftware (oder höher) installiert sein. Sybase-Patch ebf 7729 wird empfohlen.



    OLEDB. OLE DB-Provider. Wird dieser Attributwert angegeben, hat der Datenbank-Provider Vorrang vor dem Treibertyp, der im ColdFusion-Administrator festgelegt wurde.



    DB2. Systemeigener DB2 5.2-Datenbanktreiber.



    Informix73. Systemeigener Informix73-Datenbanktreiber.

    DBSERVER Optional. Für systemeigene Datenbanktreiber und den SQLOLEDB-Provider wird der Name des Datenbankserver-Rechners angegeben. Falls angegeben, ersetzt DBSERVER den in der Datenquelle angegebenen Server. DBNAME Optional. Der Datenbankname (nur mit Sybase System 11-Treiber und SQLOLEDB-Provider). Falls angegeben, ersetzt DBSERVER die in der Datenquelle angegebene Standarddatenbank. TABLENAME Erforderlich. Der Name der Tabelle, die Sie aktualisieren möchten. Beachten Sie folgendes: 쐽

    ORACLE-Treiber. Diese Angabe muss in Großbuchstaben erfolgen.



    Sybase-Treiber. Bei dieser Angabe muss dieselbe Groß-/Kleinschreibung wie bei der Tabellenerstellung verwendet werden.

    TABLEOWNER Optional. Verwenden Sie dieses Feld bei Datenquellen, die eine Tabelleneigentümerschaft unterstützen (z.B. SQL Server, Oracle und Sybase SQL Anywhere), um den Eigentümer der Tabelle anzugeben.

    802

    CFUPDATE

    TABLEQUALIFIER Optional. Verwenden Sie dieses Feld bei Datenquellen, die Tabellenkennzeichner unterstützen, um den Kennzeichner für die Tabelle anzugeben. Der Zweck von Tabellenkennzeichnern variiert mit den verschiedenen Treibern. Bei SQL Server und Oracle bezeichnet der Qualifizierer den Namen der Daten, die die Tabelle enthält. Bei dem Intersolv dBase-Treiber bezeichnet der Qualifizierer das Verzeichnis, in dem sich die DBF-Dateien befinden. USERNAME Optional. Wenn angegeben, setzt USERNAME den Wert des Benutzernamens aus dem ODBC-Setup außer Kraft. PASSWORD Optional. Wenn angegeben, setzt PASSWORD den Kennwortwert aus dem ODBC-Setup außer Kraft. PROVIDER Optional. COM-Provider (nur bei OLE-DB). PROVIDERDSN Optional. Der Datenquellenname für den COM-Provider (nur bei OLE-DB). FORMFIELDS Optional. Eine kommagetrennte Liste der zu aktualisierenden Formularfelder. Wenn dieses Attribut nicht angegeben wird, werden alle Felder im Formular in den Vorgang eingeschlossen.

    Beispiel



    Gesamte Liste anzeigen

    Sie können den Inhalt dieses Datensatzes ändern und auf die Schaltfläche Abschicken klicken, um mit CFUPDATE die Datenbank zu ändern.

    Kursnummer

    Kursbeschreibung


    #KursInfoAbrufen.Beschreibung#





    CFWDDX-Tag

    CFML-Daten werden serialisiert...



    WDDX-Paket wird deserialisiert...



    Die Daten der Datensatzgruppe lauten:...



    #Nachrichten_ID# #Thread_ID# #Benutzername#



    806

    Stichwortverzeichnis Symbols .CFM 32

    A

    B 172

    Abfrage 55, 150 –, sortieren 134 Abfrage-Generator 107 Abfragen 118 ACTION 438 Administratorkennwort 76 Aggregatfunktionen 480 Aktion 169 Aktualisieren –, SQL 298 ALIGN 280 AND 126 Anker 266 Ansicht 100, 491 Anweisung –, bedingte 227 Anwendung 402 Anwendungsseite 32 Anzeigefunktionen 358 append 468 Applets 576 Application.cfm 403, 491 application.log 560 APPLICATIONTIMEOUT 417 Applikation 402 Applikationsvariablen 417 Arrays 393 ArraySet 396 ATTACHMENTS 345 Ausgaben 56, 252 Ausgabevariablen 56 Ausnahmeverarbeitung 572 AutoRespond 333 AutoWert 51 AVG 484

    Backend-Applikation 32 BCC 331 Bearbeitungsansicht 209 Bedingung –, zusammengesetzte 127 Benutzerberechtigungen 108 Berechtigungen 108 BETWEEN 129 BGCOLOR 261, 286, 292 BODY 345 BOLD 280 Boolesche Operatoren 125 Browser-Ansicht 210

    C

    CC 331, 345 CFABORT 574 CFAPPLET 576 CFAPPLICATION 578 CFASSOCIATE 581 CFAUTHENTICATE 582 CFBREAK 584 CFCACHE 585 cfcache.map 587 CFCASE 774 CFCATCH 797 CFCOL 588 CFCOLLECTION 438, 590 CFCONTENT 592 CFDEFAULTCASE 774 CFDIRECTORY 451, 470, 597 –, Attribute 470 CFELSE 231, 664 CFELSEIF 664 CFERROR 600 CFEXECUTE 604 CFEXIT 606 CFFILE 448, 608 –, lesen und schreiben 467

    807

    Stichwortverzeichnis CFFORM 172, 276, 623 –, Parameter 280 CFForm 201 CFFTP 627 CFGRID 319, 637 –, Parameter 320 CFGRIDCOLUMN 646 CFGRIDROW 651 CFGRIDUPDATE 321, 651 CFHEADER 654 CFHTMLHEAD 655 CFHTTP 656 CFHTTPPARAM 662 CFID 407, 411 CFIF 227, 664 CFIMPERSONATE 666 CFINCLUDE 41, 668 CFINDEX 438, 669 –, Parameter 439 CFINPUT 280, 672 CFINSERT 35, 111, 169, 180 CFLDAP 679 CFLOCATION 685 CFLOCK 686 CFLOOP 380, 388, 693 CFM 32 CFMAIL 328, 700 –, Parameter 331 CFML 43, 201 CFML-Tags –, Überblick 568 CFMODULE 705 CFOBJECT 708 CFOUTPUT 55, 56, 715 CFPARAM 413, 717 CFPOP 328, 343, 720 –, Mail löschen 345 CFPROCESSINGDIRECTIVE 724 CFPROCPARAM 725 CFPROCRESULT 727 CFQUERY 55, 729 CFQUERYPARAM 734 CFREGISTRY 738 CFREPORT 744 CFRETHROW 746 CFSCHEDULE 747

    808

    CFSCRIPT 751 CFSEARCH 435, 752 CFSELECT 286, 755 –, Parameter 289 CFSERVLET 758 CFSET 241, 382 CFSETTING 765 CFSILENT 766 CFSLIDER 277, 290, 767 –, Parameter 292 CFSTOREDPROC 496, 772 CFSWITCH 774 CFTABLE 253, 777 –, Textmodus 254 CFTEXTINPUT 285, 779 CFTEXTNPUT –, Parameter 286 CFTHROW 783 CFTOKEN 407, 411 CFTRANSACTION 786 CFTREE 313, 788 –, Parameter 316, 317 CFTREEITEM 313, 793 –, Parameter 317 CFTRY 797 CFUPDATE 169, 801 CFWDDX 804 CGI 37 CLIENT 411 Client 42 –, Gültigkeitsbereich 414 –, Statusverwaltung 407 –, Variablen 411, 578 Client/Server 43 CLIENTMANAGEMENT 408 ColdFusion –, einrichten 68 –, Fehler 156 –, Version 70 ColdFusion Administrator 77, 78 ColdFusion Express 73 ColdFusion Markup Language 43, 54 ColdFusion Server –, Varianten 73 ColdFusion Studio 69, 198 –, Komponenten 200

    Stichwortverzeichnis

    ColdFusion-Anmeldung 82 ColdFusion-Applikation 402 –, Aufbau 48 COLLECTION 393, 438 COLSPAN 261 Common Gateway Interface 37 COMPLETEPATH 317 Cookies 406, 418 COUNT 484 create 470 CreateDate() 369 CreateDateTime() 369 CreateTime() 369 creditcard 284 CRITERIA 435 CurrentRow 436 Custom1 436 Custom2 436

    D DATE 345 date 284 DateFormat() 358 Dateien 448 Dateiobjektvariablen 466 Dateiverwaltung 573 Daten –, gruppieren 262 –, importieren 111 Datenausgabe 572 Datenbank 31, 92 –, Datentypen 102 –, Entwurf 99 –, Kommunikation 44 –, Kreuzverweis 51 –, Schlüssel 51 –, Sicherheit 108 –, Tabellen 49 –, Web-Verbindung 48 –, Zeilen 50 Datenbankbearbeitung 572 Datenbankfelder 101 Datenbankoperationen –, SQL 298 Datenbanksoftware 92 Datenbanksuche 44 Datenbearbeitung 352

    Datenbeziehungen 51, 105 Dateneingaben 111 Datenfelder 393 Datenquelle 31, 52 –, aktualisieren 72 –, definieren 68 –, einrichten 146 –, überprüfen 83 Datenquellenname 81 Datensatz 50 Datumsfunktionen 369 DB-Verbindungen aufrechterhalten DB-Verbindungen begrenzen 82 Debugger –, interaktiver 558 Debugging 538 DecimalFormat() 360 DELETE 305 delete 470 DELIMITER 317 DESC 136 DESTINATION 453 DIRECTORY 470 DISPLAY 290 DISTINCT 136, 267 DollarFormat() 355, 360 Doppelkreuze 56 Drill-Down-Applikation 148 Druck-und-Fax-Formulare 526 DSN 52

    82

    E E-Commerce 502 –, Transaktionstypen 524 E-Commerce-Site 503 Einfügen –, SQL 298 Eingaben –, erweiterte 298 Eingabeseiten 276 Einkaufswagen 514 else 231 E-Mail 328 –, Header 343 –, Protokoll 328 E-Mail-Bestellung 525 ENABLECAB 279

    809

    Stichwortverzeichnis

    810

    G

    ENCTYPE 279 Enterprise Edition 73 Entwicklungszuordnung 210 Entwurfsansicht 210 erlaubte SQL-Operationen 82 error 454 eurodate 284

    GetClientVariablesList() 413 GetToken() 365 Großbuchstaben 366 GROUP 263, 332 GROUPCASESENSITIVE 332 Gültigkeitsbereiche 237, 414

    F

    H

    FAQ 334 Fehler –, ColdFusion 156 –, Web-Server 156 Fehlerbeseitigung 538 Fehlermeldungen 539, 544 Felder 31, 50 Feldnamen 50 FILEFIELD 453 Find() 365 FindNoCase() 365 float 284 Flußsteuerung 573 FONT 280 FONTSIZE 280 Footer 39 FORM 276 Formatfunktionen 358 formfields 180 Formularaktionen –, kombinieren 307 Formulare 35, 172 Formular-Tags 571 Frame-Assistent 215 Frames 201 Freigabe 145 FROM 331, 345 FTP-Server 205 Funktion 352 –, Anzeige 358 –, Begrenzer 357 –, Format 358 –, verschachteln 357 Funktionseingabe 356 Funktionsnamen 357 Fußbereich 39, 153

    Hash 56 Header 39, 343 HEIGHT 280 HIGHLIGHTREF 316 HitCount 411 Hochladen 448 HSPACE 280 HTML-Dokumente 31 HTML-Markup 43, 55 HTMLTABLE 255 HTMLTABLE-Modus 256 HTTPS 524

    I if-then-Konstrukt 228 IMG 292 IMGSTYLE 292 IN 129 Index 427 Index-Link 266 –, dynamisch 267 INSERT 300 Insert() 366 Installation 75 –, Probleme 77 integer 284 International Search Pack 431 Internetprotokoll-Tags 573 Intranet 34 IP-Adressen –, verfolgen 406 IsAuthenticated 583 IsDefined() 413 ITALIC 280

    Stichwortverzeichnis

    J Java 573 Join –, Tabelle

    484

    MESSAGENUMBER 345 MIMEATTACH 331, 339 MIN 484 MULTIPLE 290

    K

    N

    Kennwortschutz 234 Key 436 Kleinbuchstaben 366 Kommentar-Tags 149 Kopfbereich 39 Kreuzverweis 51

    NAMECONFLICT 455 –, Attribute 454 NotSUPPORTED 280 Now() 300 NumberFormat() 360

    L

    ODBC 52, 94 –, Quelle 44 –, Treiber 81 Offset 380 ONERROR 280, 290, 292 ONSUBMIT 279 ONVALIDATE 280, 292 Open Database Connectivity Operatoren –, AND 126 –, Boolesche 125 –, logische 125 –, relationale 123 Optionsfelder 281 OR 126 ORDER BY 133, 134 Ordner –, anlegen 145 –, freigeben 145 overwrite 454

    LABEL 292 LastVisit 411 LCase() 366 Len() 367 LIKE 132 Links 98, 266 list 470 ListAppend 383 Listen 201, 380 Listenelement 391 Listenwerte lesen 388 ListGetAt() 391 Löschen –, SQL 298 LTrim() 357, 368

    M Mail –, Anhang 339 –, Eingang 343 –, löschen 345 –, Protokoll 328 MAILERID 332 Mail-Server –, definieren 332 makeunique 454 Maske 358 MAX 484 MAXLENGTH 286 MAXROWS 331 MESSAGE 286, 290, 292

    O

    44, 52

    P ParagraphFormat() 361 PATH 438 Pfadname 53 POP3 343 PORT 332 Post Office Protocol 343 PRE 254 Primärschlüssel 104 Professional Edition 73 Protokolldateien 84, 560 Protokollierung 84

    811

    Stichwortverzeichnis

    Provider 69 Prozeduren –, gespeicherte

    495

    Q Quell-URL 215 QUERY 290, 331 QuickBar 201 QuotedValueList 399

    R

    RANGE 286, 292 RDS-Server 204 read 467 readbinary 467 RecordCount 397, 437 RecordsSearched 437 REFRESHLABEL 292 Remote Development Services 204 rename 470 RepeatString() 368 Replace() 368 REPLYTO 345 REQUIRED 286, 289 Ressourcenbereich 202 Ressourcen-Registerkarten 202 RTrim() 368

    S SCALE 292 Schablone 31 Schema 95 Schieberegler 277, 290 Schlüssel 51, 104 Schriftarten 201 Score 436 Secure Hypertext Protocol 524 Secure Socket Layer 524 Seite –, dynamisch 31 –, statisch 31 Seitenanker 266 Seitenindizes 266 SELECT-Abfrage 118 SELECT-Anweisung 119 SELECTED 290

    812

    Server 42 –, Optionen 79 server.log 560 SESSIONTIMEOUT 417 Setup –, überprüfen 77 Sicherheit –, Datenbank 108 Simple Mail Transfer Protocol 328 Sitzungsvariablen 415 SIZE 289 SMTP 328 social_security 284 Sortieren 134 Spaltenaliase 476 SQL 44, 53, 118 –, Ansichten 491 –, Editor 216 –, Einfügen, Aktualisieren, Löschen 298 –, Unterabfragen 488 SSL 524 STARTROW 332 Steuerzeichen 477 StructFind 393 Structured Query Language 44 Strukturen 391 Strukturschlüssel 391 SUBJECT 331, 345 SUM 484 Summary 436

    T

    Tabellen 49, 201 –, Ansicht 100 –, Assistent 213 –, Berechtigungen 108 –, Join 484 –, Sicherheit 108 –, Textmodus 254 TABLE 258 Tags 41 –, Abschluß 212 –, CF 54 –, Verarbeitung 43 –, Vorschau 211 –, Werkzeuge 211

    Stichwortverzeichnis

    TARGET 279 TD 260 telephone 284 Template 32, 54 –, aufbauen 148 –, Datei 31 TEXTCOLOR 286, 292 Textmodus 254 time 284 TimeCreated 411 TimeFormat() 363 TIMEOUT 332 Timeout 417 –, für DB-Anmeldungen 82 Title 436 TO 331, 345 TR 260 Transaktionstypen 524 Treiber 94 TYPE 331

    U

    UCase() 357, 366 Umgebungsvariablen 37 Unterabfragen 488 UPDATE 302, 304 Upload 448 upload 453 URL 436 –, Syntaxfehler 541 –, Token 411

    V

    Variablen 56, 226 –, definieren 241 –, Manipulation 573 –, Wertzuweisung 382 Verity 426 –, Datenbanken integrieren Verity-Sammlung 427 –, definieren 430 –, durchsuchen 433 Verknüpfungen 98 Verschachtelung 265 Version 70 VSPACE 280

    440

    W Web-Applikationsumgebungen Web-Eingabe 111 Web-Server –, Fehler 156 webserver.log 560 Web-Transaktionen 524 WHERE 122 WIDTH 280 Wildcard 59 write 467, 468

    574

    Y YesNoFormat()

    364

    Z Zeichenkettenfunktionen Zeilen 50 Zeitfunktionen 369

    365

    VALIDATE 286 VALUE 290, 292 ValueList 384

    813

    Angestellter Abt.
    #ParksAbrufen.CurrentRow# #ParkName# #Region# #State#