| Acknowledgments |
|
xi | |
| Introduction |
|
xiii | |
|
Introduction to Web Publishing with FileMaker |
|
|
1 | (6) |
|
|
|
2 | (1) |
|
What's So Great about PHP? |
|
|
2 | (1) |
|
|
|
3 | (2) |
|
|
|
3 | (1) |
|
|
|
4 | (1) |
|
|
|
5 | (1) |
|
|
|
6 | (1) |
|
Setting Up Your Web Server |
|
|
7 | (16) |
|
What You Need to Write and Test Your PHP Pages |
|
|
8 | (1) |
|
|
|
8 | (1) |
|
Choosing a PHP Script Editor |
|
|
9 | (3) |
|
|
|
9 | (1) |
|
|
|
10 | (1) |
|
|
|
11 | (1) |
|
Setting Up IIS on Windows |
|
|
12 | (3) |
|
|
|
15 | (1) |
|
|
|
16 | (3) |
|
Testing Your PHP Installation |
|
|
19 | (2) |
|
|
|
21 | (2) |
|
Setting Up FileMaker Server |
|
|
23 | (22) |
|
Single Computer Installation of FileMaker Server 9 |
|
|
24 | (4) |
|
Multiple Computer Installation of FileMaker Server 9 |
|
|
28 | (6) |
|
|
|
28 | (3) |
|
|
|
31 | (3) |
|
|
|
34 | (6) |
|
Manually Installing the FileMaker API for PHP |
|
|
40 | (1) |
|
Testing Your Installation |
|
|
41 | (3) |
|
|
|
44 | (1) |
|
Configuring FileMaker Server Admin Console |
|
|
45 | (6) |
|
FileMaker Server Admin Console |
|
|
46 | (3) |
|
|
|
49 | (2) |
|
Preparing Your FileMaker Database for the Web |
|
|
51 | (30) |
|
Creating the Blog Database |
|
|
52 | (1) |
|
|
|
53 | (2) |
|
Creating the Fields for Each Table |
|
|
55 | (10) |
|
|
|
55 | (2) |
|
|
|
57 | (1) |
|
|
|
58 | (1) |
|
|
|
59 | (1) |
|
|
|
59 | (6) |
|
Adding Value Lists to the Database |
|
|
65 | (4) |
|
|
|
69 | (4) |
|
|
|
73 | (5) |
|
Setting Up the FileMaker Accounts |
|
|
78 | (2) |
|
|
|
80 | (1) |
|
|
|
81 | (46) |
|
|
|
81 | (1) |
|
What Do I Need to Get Started? |
|
|
82 | (1) |
|
|
|
82 | (40) |
|
Exercise 1---Adding a Title |
|
|
83 | (1) |
|
Exercise 2---Working with Headers |
|
|
84 | (2) |
|
Exercise 3---Text Manipulation |
|
|
86 | (4) |
|
Exercise 4---Adding Emphasis |
|
|
90 | (2) |
|
Exercise 5---Formatted Lists |
|
|
92 | (3) |
|
|
|
95 | (5) |
|
Exercise 7---Sending Emails with a Link |
|
|
100 | (2) |
|
Exercise 8---Anchors Aweigh! |
|
|
102 | (2) |
|
|
|
104 | (5) |
|
|
|
109 | (3) |
|
Creating Clickable Links in a Table |
|
|
112 | (1) |
|
|
|
113 | (1) |
|
Working with <rowspan> and <colspan> |
|
|
114 | (4) |
|
|
|
118 | (1) |
|
Changing Text and Background Colors of Cells |
|
|
119 | (3) |
|
I Never Meta Refresh I Didn't Like |
|
|
122 | (1) |
|
Sending Emails from the Web |
|
|
123 | (2) |
|
|
|
125 | (2) |
|
|
|
127 | (34) |
|
|
|
127 | (6) |
|
|
|
133 | (4) |
|
|
|
135 | (1) |
|
|
|
135 | (1) |
|
|
|
136 | (1) |
|
|
|
137 | (4) |
|
|
|
139 | (2) |
|
|
|
141 | (2) |
|
|
|
143 | (2) |
|
|
|
145 | (1) |
|
|
|
146 | (1) |
|
|
|
147 | (5) |
|
|
|
148 | (1) |
|
Repeating Background Images |
|
|
149 | (1) |
|
|
|
150 | (1) |
|
|
|
151 | (1) |
|
|
|
152 | (1) |
|
|
|
153 | (2) |
|
Combining Vertical and Horizontal Alignment |
|
|
154 | (1) |
|
|
|
155 | (1) |
|
|
|
156 | (3) |
|
|
|
159 | (2) |
|
|
|
161 | (28) |
|
|
|
161 | (1) |
|
|
|
162 | (1) |
|
|
|
163 | (1) |
|
|
|
163 | (14) |
|
|
|
164 | (2) |
|
Creating an Array with Keys |
|
|
166 | (1) |
|
Creating an Array by Specifying Each Index |
|
|
167 | (1) |
|
Replacing an Element in the Array |
|
|
168 | (1) |
|
Adding an Element to the End of the Array |
|
|
169 | (2) |
|
Removing an Element from the End of the Array |
|
|
171 | (1) |
|
Removing an Element from the Beginning of the Array |
|
|
172 | (1) |
|
Adding an Element to the Beginning of the Array |
|
|
173 | (1) |
|
Sorting an Array Ascending Alphabetically |
|
|
174 | (1) |
|
Sorting an Array Descending Alphabetically |
|
|
175 | (1) |
|
Separating and Printing the Array Elements as a Text String |
|
|
176 | (1) |
|
|
|
177 | (1) |
|
|
|
178 | (2) |
|
|
|
180 | (3) |
|
|
|
183 | (1) |
|
|
|
184 | (2) |
|
|
|
186 | (2) |
|
|
|
188 | (1) |
|
|
|
189 | (18) |
|
What Type of Navigation Should You Use? |
|
|
189 | (1) |
|
|
|
190 | (1) |
|
|
|
190 | (2) |
|
|
|
191 | (1) |
|
|
|
192 | (1) |
|
|
|
192 | (1) |
|
|
|
192 | (11) |
|
|
|
194 | (1) |
|
|
|
195 | (2) |
|
|
|
197 | (1) |
|
|
|
197 | (2) |
|
|
|
199 | (1) |
|
|
|
199 | (1) |
|
|
|
200 | (3) |
|
|
|
203 | (3) |
|
|
|
205 | (1) |
|
|
|
206 | (1) |
|
|
|
207 | (12) |
|
Validating the Existence of a Form Value |
|
|
208 | (4) |
|
Validating Empty Form Values |
|
|
212 | (2) |
|
|
|
214 | (1) |
|
|
|
215 | (1) |
|
|
|
216 | (2) |
|
|
|
218 | (1) |
|
|
|
219 | (6) |
|
|
|
219 | (2) |
|
|
|
221 | (1) |
|
Anatomy of the FileMaker API for PHP |
|
|
222 | (2) |
|
|
|
224 | (1) |
|
Creating the Blog and Performing a Simple Query |
|
|
225 | (18) |
|
|
|
225 | (1) |
|
Include File Structure of the Blog |
|
|
226 | (8) |
|
The Header and Footer Files |
|
|
227 | (2) |
|
|
|
229 | (2) |
|
|
|
231 | (1) |
|
Preparing the Connection Include Folder |
|
|
232 | (1) |
|
Creating a Connection Include File |
|
|
232 | (2) |
|
Constructing the Blog Index Page |
|
|
234 | (1) |
|
Adding a Find All Command to List Posts |
|
|
235 | (3) |
|
Displaying a Simple Result Set |
|
|
238 | (3) |
|
|
|
241 | (2) |
|
Creating New Records and Sorting |
|
|
243 | (14) |
|
|
|
243 | (1) |
|
|
|
244 | (1) |
|
|
|
245 | (1) |
|
Processing Form Data Correctly |
|
|
246 | (2) |
|
Understanding the Post and Get Functions |
|
|
248 | (2) |
|
|
|
250 | (2) |
|
Sorting with the FileMaker API |
|
|
252 | (1) |
|
Adding Sorting to the Home Page |
|
|
253 | (2) |
|
|
|
255 | (2) |
|
Database Searches and Limits |
|
|
257 | (22) |
|
|
|
257 | (1) |
|
There Is Also a Find Any Command |
|
|
258 | (3) |
|
|
|
261 | (2) |
|
About Find Parameters and Logical Operators |
|
|
262 | (1) |
|
Important Field Name Limitations |
|
|
263 | (1) |
|
Creating a Blog Search Form |
|
|
263 | (3) |
|
Creating the Results Page |
|
|
266 | (2) |
|
Adding Limits to the Search Results |
|
|
268 | (5) |
|
Using Skip Record Parameters |
|
|
268 | (1) |
|
Integrating Limits and Skip to Achieve Paging |
|
|
268 | (5) |
|
Exact Searches and Other Modifiers |
|
|
273 | (1) |
|
Adding a View Blog Post Link |
|
|
274 | (1) |
|
Viewing a Single Blog Post Record |
|
|
275 | (2) |
|
|
|
277 | (2) |
|
Editing and Deleting Records |
|
|
279 | (14) |
|
Overview of the Record Object |
|
|
279 | (1) |
|
Linking to a Single Editable Record |
|
|
280 | (3) |
|
|
|
283 | (2) |
|
Building the Edit Post Script |
|
|
285 | (4) |
|
|
|
289 | (2) |
|
|
|
291 | (2) |
|
Working with Data Portals |
|
|
293 | (26) |
|
Reviewing Related Records and Portals |
|
|
294 | (1) |
|
Related Record Portal Web Requirements |
|
|
294 | (1) |
|
|
|
295 | (1) |
|
Portal Workflow within PHP |
|
|
296 | (1) |
|
Accessing a Related Set of Data |
|
|
297 | (4) |
|
Adding a New Related Record |
|
|
301 | (5) |
|
Isolating a Related Record |
|
|
306 | (1) |
|
Creating a Related Record Edit Link |
|
|
306 | (2) |
|
Isolating the Linked Related Record |
|
|
308 | (5) |
|
|
|
313 | (2) |
|
Deleting a Related Record |
|
|
315 | (2) |
|
|
|
317 | (2) |
|
|
|
319 | (38) |
|
What Are FileMaker Value Lists? |
|
|
319 | (1) |
|
Why Use FileMaker Value Lists on the Web? |
|
|
320 | (1) |
|
Requirements for Value Lists |
|
|
321 | (1) |
|
HTML Drop-downs, Radio Buttons, and Check Boxes |
|
|
321 | (5) |
|
Retrieving a Value List from the Database |
|
|
326 | (7) |
|
Building a Dynamic Value List Drop-down |
|
|
327 | (3) |
|
Building a Dynamic Value List Radio Button Set |
|
|
330 | (2) |
|
Building a Dynamic Value List Check Box Set |
|
|
332 | (1) |
|
Adding Empty Default Values |
|
|
333 | (2) |
|
Creating a Value List Driven Form |
|
|
335 | (9) |
|
Processing Form Results for Drop-downs and Radio Buttons |
|
|
340 | (2) |
|
Processing Form Results for Check Boxes |
|
|
342 | (2) |
|
Taking It to the Next Level --- Selecting Values with PHP |
|
|
344 | (9) |
|
Creating the Commenter Find Request and Basic Form |
|
|
345 | (3) |
|
Selecting Drop-down Values |
|
|
348 | (2) |
|
Selecting Radio Button Values |
|
|
350 | (1) |
|
Selecting Checked Check Boxes |
|
|
351 | (2) |
|
Implementing the Edit Command |
|
|
353 | (2) |
|
Limitations of FileMaker Value Lists on the Web |
|
|
355 | (1) |
|
|
|
356 | (1) |
|
|
|
357 | (8) |
|
|
|
357 | (1) |
|
|
|
358 | (1) |
|
|
|
359 | (1) |
|
Session Example --- Remembering Form Data |
|
|
360 | (3) |
|
Testing the Session Form Flow |
|
|
363 | (1) |
|
|
|
364 | (1) |
|
Creating Login Authentication Schemes |
|
|
365 | (16) |
|
|
|
366 | (2) |
|
Table-based Authentication |
|
|
366 | (1) |
|
Account-based Authentication |
|
|
367 | (1) |
|
Table-based Authentication --- Building the Login Form |
|
|
368 | (4) |
|
Table-based Authentication --- Building a Protected Page |
|
|
372 | (1) |
|
Account-based Authentication --- Implementation |
|
|
373 | (3) |
|
Detailed Overview of accountLogin Function |
|
|
376 | (2) |
|
Other Authentication Methods --- Active Directory |
|
|
378 | (1) |
|
Troubleshooting Authentication Schemes |
|
|
379 | (1) |
|
|
|
380 | (1) |
|
File Uploads with PHP and FileMaker |
|
|
381 | (10) |
|
How Do File Uploads Work? |
|
|
381 | (1) |
|
Preparing a Form for a File Upload |
|
|
382 | (3) |
|
Accessing the File Upload with PHP |
|
|
385 | (2) |
|
Debugging File Uploads --- Error Codes Explained |
|
|
387 | (1) |
|
Connecting Uploaded Files to FileMaker Data |
|
|
388 | (1) |
|
|
|
389 | (1) |
|
|
|
389 | (2) |
|
|
|
391 | (20) |
|
|
|
391 | (1) |
|
Requirements for Sending Email from PHP |
|
|
392 | (2) |
|
|
|
394 | (3) |
|
Adding a Proper From Address |
|
|
395 | (1) |
|
CC and BCC Address Headers |
|
|
395 | (1) |
|
|
|
396 | (1) |
|
|
|
397 | (1) |
|
Custom Character Encodings |
|
|
398 | (1) |
|
Email Security and Post Data |
|
|
399 | (2) |
|
|
|
401 | (3) |
|
Adding an ``Email a Post'' Option to the Blog |
|
|
404 | (5) |
|
|
|
409 | (2) |
|
Debugging Connectivity Issues |
|
|
411 | (8) |
|
Common Connectivity Issues |
|
|
411 | (1) |
|
Printing Debugging Information |
|
|
412 | (3) |
|
Checking the Database Authentication Credentials |
|
|
414 | (1) |
|
Investigating Specific Error Codes |
|
|
415 | (1) |
|
|
|
416 | (1) |
|
|
|
416 | (1) |
|
|
|
417 | (1) |
|
DNS Issues and Dynamic IPs |
|
|
417 | (1) |
|
When in Doubt, Search the Web |
|
|
418 | (1) |
|
|
|
418 | (1) |
|
|
|
419 | (4) |
|
What Wildcards Are Available? |
|
|
419 | (1) |
|
Entering Literal Wildcard Characters |
|
|
420 | (1) |
|
Replacing Wildcards through a Regular Expression |
|
|
420 | (1) |
|
|
|
421 | (1) |
|
|
|
422 | (1) |
|
|
|
423 | (6) |
|
|
|
423 | (1) |
|
Things to Know before Continuing |
|
|
424 | (2) |
|
|
|
426 | (1) |
|
|
|
427 | (2) |
| Appendix A FileMaker Error Codes |
|
429 | (10) |
| Appendix B Additional Resources |
|
439 | (8) |
| Index |
|
447 | |