Table Of ContentFileMaker(cid:1) Web
Publishing
A Complete Guide to Using
the API for PHP
Allyson Olm, Stephen Knight,
and Michael Petrov
Wordware Publishing, Inc.
LibraryofCongressCataloging-in-PublicationData
Olm,Allyson.
FileMakerWebpublishing:acompleteguidetousingtheAPIforPHP/byAllysonOlm,
StephenKnight,andMichaelPetrov.
p.cm.
Includesindex.
ISBN-13:978-1-59822-041-4
ISBN-10:1-59822-041-1
1. FileMaker(Computerfile). 2. Webpublishing. 3. PHP(Computerprogramlanguage).
I. Knight,Stephen,1968- II. Petrov,Michael. III. Title.
TK5105.888.O4652007
005.75'65--dc22 2007026436
©2008,WordwarePublishing,Inc.
AllRightsReserved
1100SummitAvenue,Suite102
Plano,Texas75074
Nopartofthisbookmaybereproducedinanyformorbyanymeans
withoutpermissioninwritingfromWordwarePublishing,Inc.
PrintedintheUnitedStatesofAmerica
ISBN-13:978-1-59822-041-4
ISBN-10:1-59822-041-1
10987654321
0707
FileMakerisaregisteredtrademarkofFileMaker,Inc.intheU.S.andothercountries.
AllofthelogosinAppendixBareusedwiththepermissionoftheirrespectiveowners.Otherbrandnamesand
productnamesmentionedinthisbookaretrademarksorservicemarksoftheirrespectivecompanies.Anyomission
ormisuse(ofanykind)ofservicemarksortrademarksshouldnotberegardedasintenttoinfringeonthepropertyof
others.Thepublisherrecognizesandrespectsallmarksusedbycompanies,manufacturers,anddevelopersasa
meanstodistinguishtheirproducts.
Thisbookissoldasis,withoutwarrantyofanykind,eitherexpressorimplied,respectingthecontentsofthisbook
andanydisksorprogramsthatmayaccompanyit,includingbutnotlimitedtoimpliedwarrantiesforthebook’s
quality,performance,merchantability,orfitnessforanyparticularpurpose.NeitherWordwarePublishing,Inc.norits
dealersordistributorsshallbeliabletothepurchaseroranyotherpersonorentitywithrespecttoanyliability,loss,or
damagecausedorallegedtohavebeencauseddirectlyorindirectlybythisbook.
AllinquiriesforvolumepurchasesofthisbookshouldbeaddressedtoWordwarePublishing,
Inc.,attheaboveaddress.Telephoneinquiriesmaybemadebycalling:
(972)423-0090
Contents
Acknowledgments. . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii
Chapter1 Introduction to Web Publishing with FileMaker . . . . . . . 1
WhyPHPandFileMaker?. . . . . . . . . . . . . . . . . . . . . . . . 2
What’sSoGreataboutPHP? . . . . . . . . . . . . . . . . . . . . . . 2
Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Macintosh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
InterfaceDifferences . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Chapter2 Setting Up Your Web Server . . . . . . . . . . . . . . . . . 7
WhatYouNeedtoWriteandTestYourPHPPages . . . . . . . . . . 8
LocalorRemoteTesting. . . . . . . . . . . . . . . . . . . . . . . . . 8
ChoosingaPHPScriptEditor. . . . . . . . . . . . . . . . . . . . . . 9
Dreamweaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
TextWrangler . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Nvu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
SettingUpIISonWindows . . . . . . . . . . . . . . . . . . . . . . 12
SettingUpApacheonMac. . . . . . . . . . . . . . . . . . . . . . . 15
PHPInstallationOptions. . . . . . . . . . . . . . . . . . . . . . . . 16
TestingYourPHPInstallation . . . . . . . . . . . . . . . . . . . . . 19
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Chapter3 Setting Up FileMaker Server . . . . . . . . . . . . . . . . 23
SingleComputerInstallationofFileMakerServer9. . . . . . . . . 24
MultipleComputerInstallationofFileMakerServer9 . . . . . . . 28
TheWorkerComputer . . . . . . . . . . . . . . . . . . . . . . . 28
TheMasterComputer . . . . . . . . . . . . . . . . . . . . . . . 31
DeploymentAssistant . . . . . . . . . . . . . . . . . . . . . . . . . 34
ManuallyInstallingtheFileMakerAPIforPHP . . . . . . . . . . . 40
TestingYourInstallation . . . . . . . . . . . . . . . . . . . . . . . . 41
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Chapter4 Configuring FileMaker Server Admin Console . . . . . . . 45
FileMakerServerAdminConsole. . . . . . . . . . . . . . . . . . . 46
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
iii
Contents
Chapter5 Preparing Your FileMaker Database for the Web . . . . . 51
CreatingtheBlogDatabase . . . . . . . . . . . . . . . . . . . . . . 52
CreatingtheTables. . . . . . . . . . . . . . . . . . . . . . . . . . . 53
CreatingtheFieldsforEachTable . . . . . . . . . . . . . . . . . . 55
ThePostsTable . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
TheCommentersTable. . . . . . . . . . . . . . . . . . . . . . . 57
TheCommentsTable . . . . . . . . . . . . . . . . . . . . . . . . 58
TheCategoriesTable . . . . . . . . . . . . . . . . . . . . . . . . 59
TheRelationships . . . . . . . . . . . . . . . . . . . . . . . . . . 59
AddingValueListstotheDatabase . . . . . . . . . . . . . . . . . . 65
LayoutMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Portals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
SettingUptheFileMakerAccounts. . . . . . . . . . . . . . . . . . 78
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Chapter6 HTML Basics . . . . . . . . . . . . . . . . . . . . . . . . . 81
HTMLReview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
WhatDoINeedtoGetStarted?. . . . . . . . . . . . . . . . . . . . 82
WebsiteFolderSetup. . . . . . . . . . . . . . . . . . . . . . . . . . 82
Exercise1—AddingaTitle . . . . . . . . . . . . . . . . . . . . 83
Exercise2—WorkingwithHeaders . . . . . . . . . . . . . . . 84
Exercise3—TextManipulation. . . . . . . . . . . . . . . . . . 86
Exercise4—AddingEmphasis . . . . . . . . . . . . . . . . . . 90
Exercise5—FormattedLists . . . . . . . . . . . . . . . . . . . 92
Exercise6—Images . . . . . . . . . . . . . . . . . . . . . . . . 95
Exercise7—SendingEmailswithaLink . . . . . . . . . . . . 100
Exercise8—AnchorsAweigh!. . . . . . . . . . . . . . . . . . 102
Exercise9—Tables. . . . . . . . . . . . . . . . . . . . . . . . 104
ManipulatingCellData . . . . . . . . . . . . . . . . . . . . . 109
CreatingClickableLinksinaTable . . . . . . . . . . . . . . 112
AddingImagestoTables . . . . . . . . . . . . . . . . . . . . 113
Workingwith<rowspan>and<colspan> . . . . . . . . . . 114
NestedTables . . . . . . . . . . . . . . . . . . . . . . . . . . 118
ChangingTextandBackgroundColorsofCells. . . . . . . . 119
INeverMetaRefreshIDidn’tLike . . . . . . . . . . . . . . . . . 122
SendingEmailsfromtheWeb . . . . . . . . . . . . . . . . . . . . 123
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Chapter7 CSS Basics. . . . . . . . . . . . . . . . . . . . . . . . . . 127
CascadingStyleSheets . . . . . . . . . . . . . . . . . . . . . . . . 127
Fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
FontSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
FontWeight. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
FontStyle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
iv
Contents
Margins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
TopandBottomMargins. . . . . . . . . . . . . . . . . . . . . . 139
Alignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
TextDecoration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
CommentingYourCode. . . . . . . . . . . . . . . . . . . . . . . . 145
Backgrounds. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
BackgroundImages . . . . . . . . . . . . . . . . . . . . . . . . . . 147
FixedBackgroundImages. . . . . . . . . . . . . . . . . . . . . 148
RepeatingBackgroundImages . . . . . . . . . . . . . . . . . . 149
Repeat-x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Repeat-y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
BackgroundPosition . . . . . . . . . . . . . . . . . . . . . . . . . 152
VerticalAlignment . . . . . . . . . . . . . . . . . . . . . . . . . . 153
CombiningVerticalandHorizontalAlignment. . . . . . . . . . 154
BackgroundProperty . . . . . . . . . . . . . . . . . . . . . . . . . 155
MultipleStyleSheets. . . . . . . . . . . . . . . . . . . . . . . . . 156
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Chapter8 PHP Basics . . . . . . . . . . . . . . . . . . . . . . . . . 161
PHPScripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
DisplayingText . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
HipHipArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
CreatingaSimpleArray. . . . . . . . . . . . . . . . . . . . . . 164
CreatinganArraywithKeys . . . . . . . . . . . . . . . . . . . 166
CreatinganArraybySpecifyingEachIndex. . . . . . . . . . . 167
ReplacinganElementintheArray . . . . . . . . . . . . . . . . 168
AddinganElementtotheEndoftheArray . . . . . . . . . . . 169
RemovinganElementfromtheEndoftheArray . . . . . . . . 171
RemovinganElementfromtheBeginningoftheArray . . . . 172
AddinganElementtotheBeginningoftheArray. . . . . . . . 173
SortinganArrayAscendingAlphabetically . . . . . . . . . . . 174
SortinganArrayDescendingAlphabetically. . . . . . . . . . . 175
SeparatingandPrintingtheArrayElementsasaTextString . 176
PHPFunctions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Includes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Quotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
SpecialCharacters. . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
v
Contents
Chapter9 Links and Forms . . . . . . . . . . . . . . . . . . . . . . 189
WhatTypeofNavigationShouldYouUse? . . . . . . . . . . . . . 189
GETandPOST . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
RelativeLinks . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
AbsoluteLinks . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
SendingDatainaLink. . . . . . . . . . . . . . . . . . . . . . . 192
Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
TypesofFormElements. . . . . . . . . . . . . . . . . . . . . . 194
Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Hidden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
RadioButtons . . . . . . . . . . . . . . . . . . . . . . . . . . 197
CheckBoxes. . . . . . . . . . . . . . . . . . . . . . . . . . . 199
SelectLists . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
TextAreas. . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
TheResponsePage . . . . . . . . . . . . . . . . . . . . . . . . . . 203
ViewingthePassedData . . . . . . . . . . . . . . . . . . . . . 205
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Chapter10Validation. . . . . . . . . . . . . . . . . . . . . . . . . . 207
ValidatingtheExistenceofaFormValue . . . . . . . . . . . . . . 208
ValidatingEmptyFormValues . . . . . . . . . . . . . . . . . . . . 212
ValidatingNumbers . . . . . . . . . . . . . . . . . . . . . . . . . . 214
ValidatingStringLength . . . . . . . . . . . . . . . . . . . . . . . 215
ValidatingEmailFormat . . . . . . . . . . . . . . . . . . . . . . . 216
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Chapter11What Is the API for PHP?. . . . . . . . . . . . . . . . . . 219
WhatIsanAPI? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
ALittleBitofHistory. . . . . . . . . . . . . . . . . . . . . . . . . 221
AnatomyoftheFileMakerAPIforPHP. . . . . . . . . . . . . . . 222
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Chapter12Creating the Blog and Performing a Simple Query. . . . 225
WhatIsaBlog? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
IncludeFileStructureoftheBlog . . . . . . . . . . . . . . . . . . 226
TheHeaderandFooterFiles . . . . . . . . . . . . . . . . . . . 227
CascadingStyleSheets . . . . . . . . . . . . . . . . . . . . . . 229
TheAboutBlobSection . . . . . . . . . . . . . . . . . . . . . . 231
PreparingtheConnectionIncludeFolder . . . . . . . . . . . . 232
CreatingaConnectionIncludeFile. . . . . . . . . . . . . . . . 232
ConstructingtheBlogIndexPage . . . . . . . . . . . . . . . . . . 234
AddingaFindAllCommandtoListPosts. . . . . . . . . . . . . . 235
DisplayingaSimpleResultSet. . . . . . . . . . . . . . . . . . . . 238
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
vi
Contents
Chapter13Creating New Records and Sorting . . . . . . . . . . . . 243
RecordCreationProcess . . . . . . . . . . . . . . . . . . . . . . . 243
NewRecordCommand . . . . . . . . . . . . . . . . . . . . . . . . 244
BuildingtheInputForm . . . . . . . . . . . . . . . . . . . . . . . 245
ProcessingFormDataCorrectly. . . . . . . . . . . . . . . . . . . 246
UnderstandingthePOSTandGETFunctions . . . . . . . . . . . 248
CreatingtheNewRecord. . . . . . . . . . . . . . . . . . . . . . . 250
SortingwiththeFileMakerAPI . . . . . . . . . . . . . . . . . . . 252
AddingSortingtotheHomePage . . . . . . . . . . . . . . . . . . 253
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Chapter14Database Searches and Limits. . . . . . . . . . . . . . . 257
BeyondtheFindAll. . . . . . . . . . . . . . . . . . . . . . . . . . 257
ThereIsAlsoaFindAnyCommand. . . . . . . . . . . . . . . . . 258
AnatomyofaFind. . . . . . . . . . . . . . . . . . . . . . . . . . . 261
AboutFindParametersandLogicalOperators. . . . . . . . . . 262
ImportantFieldNameLimitations . . . . . . . . . . . . . . . . 263
CreatingaBlogSearchForm. . . . . . . . . . . . . . . . . . . . . 263
CreatingtheResultsPage . . . . . . . . . . . . . . . . . . . . . . 266
AddingLimitstotheSearchResults. . . . . . . . . . . . . . . . . 268
UsingSkipRecordParameters . . . . . . . . . . . . . . . . . . 268
IntegratingLimitsandSkiptoAchievePaging . . . . . . . . . 268
ExactSearchesandOtherModifiers. . . . . . . . . . . . . . . . . 273
AddingaViewBlogPostLink . . . . . . . . . . . . . . . . . . . . 274
ViewingaSingleBlogPostRecord. . . . . . . . . . . . . . . . . . 275
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Chapter15Editing and Deleting Records . . . . . . . . . . . . . . . 279
OverviewoftheRecordObject. . . . . . . . . . . . . . . . . . . . 279
LinkingtoaSingleEditableRecord . . . . . . . . . . . . . . . . . 280
BuildingEditableForms . . . . . . . . . . . . . . . . . . . . . . . 283
BuildingtheEditPostScript. . . . . . . . . . . . . . . . . . . . . 285
DeletingRecords . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Chapter16Working with Data Portals. . . . . . . . . . . . . . . . . 293
ReviewingRelatedRecordsandPortals. . . . . . . . . . . . . . . 294
RelatedRecordPortalWebRequirements. . . . . . . . . . . . . . 294
NotableLimitations. . . . . . . . . . . . . . . . . . . . . . . . . . 295
PortalWorkflowwithinPHP . . . . . . . . . . . . . . . . . . . . . 296
AccessingaRelatedSetofData . . . . . . . . . . . . . . . . . . . 297
AddingaNewRelatedRecord . . . . . . . . . . . . . . . . . . . . 301
IsolatingaRelatedRecord . . . . . . . . . . . . . . . . . . . . . . 306
CreatingaRelatedRecordEditLink. . . . . . . . . . . . . . . . . 306
IsolatingtheLinkedRelatedRecord. . . . . . . . . . . . . . . . . 308
vii
Contents
EditingaRelatedRecord . . . . . . . . . . . . . . . . . . . . . . . 313
DeletingaRelatedRecord . . . . . . . . . . . . . . . . . . . . . . 315
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Chapter17FileMaker Value Lists. . . . . . . . . . . . . . . . . . . . 319
WhatAreFileMakerValueLists? . . . . . . . . . . . . . . . . . . 319
WhyUseFileMakerValueListsontheWeb?. . . . . . . . . . . . 320
RequirementsforValueLists. . . . . . . . . . . . . . . . . . . . . 321
HTMLDrop-downs,RadioButtons,andCheckBoxes. . . . . . . 321
RetrievingaValueListfromtheDatabase . . . . . . . . . . . . . 326
BuildingaDynamicValueListDrop-down. . . . . . . . . . . . 327
BuildingaDynamicValueListRadioButtonSet . . . . . . . . 330
BuildingaDynamicValueListCheckBoxSet. . . . . . . . . . 332
AddingEmptyDefaultValues . . . . . . . . . . . . . . . . . . . . 333
CreatingaValueListDrivenForm. . . . . . . . . . . . . . . . . . 335
ProcessingFormResultsforDrop-downsandRadioButtons . 340
ProcessingFormResultsforCheckBoxes. . . . . . . . . . . . 342
TakingIttotheNextLevel—SelectingValueswithPHP . . . . 344
CreatingtheCommenterFindRequestandBasicForm . . . . 345
SelectingDrop-downValues. . . . . . . . . . . . . . . . . . . . 348
SelectingRadioButtonValues . . . . . . . . . . . . . . . . . . 350
SelectingCheckedCheckBoxes . . . . . . . . . . . . . . . . . 351
ImplementingtheEditCommand . . . . . . . . . . . . . . . . . . 353
LimitationsofFileMakerValueListsontheWeb. . . . . . . . . . 355
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
Chapter18PHP Sessions . . . . . . . . . . . . . . . . . . . . . . . . 357
WhatAreSessions?. . . . . . . . . . . . . . . . . . . . . . . . . . 357
WhyUseSessions? . . . . . . . . . . . . . . . . . . . . . . . . . . 358
UsingSessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
SessionExample—RememberingFormData . . . . . . . . . . . 360
TestingtheSessionFormFlow . . . . . . . . . . . . . . . . . . . 363
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Chapter19Creating Login Authentication Schemes. . . . . . . . . . 365
AuthenticationMethods . . . . . . . . . . . . . . . . . . . . . . . 366
Table-basedAuthentication . . . . . . . . . . . . . . . . . . . . 366
Account-basedAuthentication. . . . . . . . . . . . . . . . . . . 367
Table-basedAuthentication—BuildingtheLoginForm. . . . . . 368
Table-basedAuthentication—BuildingaProtectedPage . . . . . 372
Account-basedAuthentication—Implementation . . . . . . . . . 373
DetailedOverviewofaccountLoginFunction. . . . . . . . . . . . 376
OtherAuthenticationMethods—ActiveDirectory . . . . . . . . 378
TroubleshootingAuthenticationSchemes. . . . . . . . . . . . . . 379
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
viii
Contents
Chapter20File Uploads with PHP and FileMaker . . . . . . . . . . . 381
HowDoFileUploadsWork? . . . . . . . . . . . . . . . . . . . . . 381
PreparingaFormforaFileUpload. . . . . . . . . . . . . . . . . . 382
AccessingtheFileUploadwithPHP. . . . . . . . . . . . . . . . . 385
DebuggingFileUploads—ErrorCodesExplained. . . . . . . . . 387
ConnectingUploadedFilestoFileMakerData . . . . . . . . . . . 388
ImportantLimitations. . . . . . . . . . . . . . . . . . . . . . . . . 389
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
Chapter21Sending Emails with PHP. . . . . . . . . . . . . . . . . . 391
AnatomyofanEmail . . . . . . . . . . . . . . . . . . . . . . . . . 391
RequirementsforSendingEmailfromPHP. . . . . . . . . . . . . 392
BasicEmailfromPHP . . . . . . . . . . . . . . . . . . . . . . . . 394
AddingaProperFromAddress . . . . . . . . . . . . . . . . . . 395
CCandBCCAddressHeaders . . . . . . . . . . . . . . . . . . 395
Reply-ToAddressHeaders . . . . . . . . . . . . . . . . . . . . 396
SendingHTMLEmails . . . . . . . . . . . . . . . . . . . . . . . . 397
CustomCharacterEncodings . . . . . . . . . . . . . . . . . . . . 398
EmailSecurityandPostData. . . . . . . . . . . . . . . . . . . . . 399
BuildingaFeedbackForm . . . . . . . . . . . . . . . . . . . . . . 401
Addingan“EmailaPost”OptiontotheBlog . . . . . . . . . . . . 404
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
Chapter22Debugging Connectivity Issues. . . . . . . . . . . . . . . 411
CommonConnectivityIssues . . . . . . . . . . . . . . . . . . . . 411
PrintingDebuggingInformation . . . . . . . . . . . . . . . . . . . 412
CheckingtheDatabaseAuthenticationCredentials . . . . . . . 414
InvestigatingSpecificErrorCodes. . . . . . . . . . . . . . . . . . 415
LocalFirewalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
RoutersandISPs . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
SecureConnections. . . . . . . . . . . . . . . . . . . . . . . . . . 417
DNSIssuesandDynamicIPs. . . . . . . . . . . . . . . . . . . . . 417
WheninDoubt,SearchtheWeb . . . . . . . . . . . . . . . . . . . 418
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
Chapter23Wildcards . . . . . . . . . . . . . . . . . . . . . . . . . . 419
WhatWildcardsAreAvailable?. . . . . . . . . . . . . . . . . . . . 419
EnteringLiteralWildcardCharacters . . . . . . . . . . . . . . . . 420
ReplacingWildcardsthroughaRegularExpression . . . . . . . . 420
UsageExamples. . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
Chapter24Going Beyond the Basics. . . . . . . . . . . . . . . . . . 423
OnlytheBeginning . . . . . . . . . . . . . . . . . . . . . . . . . . 423
ThingstoKnowbeforeContinuing . . . . . . . . . . . . . . . . . 424
ix
Description:FileMaker Web Publishing: A Complete Guide to Using the API for PHP, offers an unparalleled development strategy for database managers, web designers, and programmers who are interested in getting the most out of FileMaker databases on the web. The book introduces the basics of HTML, cascading style