Contents
■About the Author ....................................................................................................... xiv
■About the Technical Reviewer.................................................................................... xv
■Acknowledgments..................................................................................................... xvi
■Introduction.............................................................................................................. xvii
■Chapter 1: Setting Up the PHP Development Environment...........................................3
Why You Need Apache, MySQL, and PHP................................................................................3
Drilling Down on PHP........................................................................................................3
Stable/Production vs. Development Releases ............................................................4
How PHP Works ..........................................................................................................4
Server-Side vs. Client-Side Scripting .........................................................................4
What Apache Does......................................................................................................5
Store Info with MySQL ......................................................................................................5
Installing PHP, Apache, and MySQL (the Hard Way)................................................................6
Installation Made Easy......................................................................................................6
Installing XAMPP...............................................................................................................6
Step 1: Download XAMPP ...........................................................................................7
Step 2: Open the Installer and Follow the Instructions...............................................7
Step 3: Test XAMPP to Ensure Proper Installation ....................................................11
Choosing a Development Kit .................................................................................................15
Benefiting from SDKs and IDEs.......................................................................................15
Choosing the Right SDK..................................................................................................18
The Eclipse Foundation and PDT ..............................................................................18
Installing and Using the Eclipse PDT .....................................................................................18
Step 1: Downloading the PDT .........................................................................................19
Step 2: Unpacking the PDT Archive ................................................................................19
Step 3: Choosing Your Project Workspace .....................................................................20
Step 4: Creating Your First Project .................................................................................23
More free ebooks : http://fast-file.blogspot.com
■ CONTENTS
vi
Step 5: Creating a File ....................................................................................................26
Step 6: Writing Your First Script .....................................................................................27
Summary...............................................................................................................................28
■Chapter 2: Understanding PHP: Language Basics......................................................29
Embedding PHP Scripts.........................................................................................................29
Alternative Delimiters .....................................................................................................30
Short Tags ................................................................................................................31
HTML <script> Tags and ASP-Style Delimiters........................................................31
Variables and Datatypes........................................................................................................32
What Is a Variable? .........................................................................................................32
Storing Values in a Variable............................................................................................32
Understanding Strings ..............................................................................................33
Understanding Integers ............................................................................................37
Understanding Floating Point Numbers ....................................................................37
Understanding Boolean Values .................................................................................37
Understanding Arrays ...............................................................................................38
Sending Data to the Browser as Output ................................................................................41
The Different Output Commands ....................................................................................41
The print() Statement................................................................................................41
The echo() Statement ...............................................................................................42
The printf() Statement...............................................................................................43
The sprintf() Statement.............................................................................................45
Commenting Your Code.........................................................................................................46
Inline vs. Block Comments .............................................................................................46
Other Comment Styles....................................................................................................47
Operators...............................................................................................................................47
Arithmetic Operators ......................................................................................................48
Arithmetic Assignment Operators...................................................................................48
Comparison Operators....................................................................................................50
Error Control Operators...................................................................................................51
Incrementing/Decrementing Operators ..........................................................................52
Logical Operators............................................................................................................52
String Operators .............................................................................................................54
Control Structures .................................................................................................................54
More free ebooks : http://fast-file.blogspot.com
■ CONTENTS
vii
if, else, and else if ..........................................................................................................55
while and do-while .........................................................................................................56
for 58
foreach............................................................................................................................59
break...............................................................................................................................60
switch .............................................................................................................................61
continue..........................................................................................................................62
return..............................................................................................................................63
include, include_once, require, and require_once .........................................................63
goto.................................................................................................................................65
User-Defined .........................................................................................................................66
Returning Values from Functions .............................................................................67
Summary...............................................................................................................................68
■Chapter 3: Passing Information with PHP..................................................................69
Superglobal Arrays................................................................................................................69
Variable Scope................................................................................................................70
$GLOBALS.......................................................................................................................73
$_SERVER.......................................................................................................................74
$_GET .............................................................................................................................77
URL Encoding............................................................................................................78
Accessing URL Variables ..........................................................................................78
$_POST ...........................................................................................................................82
$_REQUEST.....................................................................................................................84
$_FILES...........................................................................................................................85
$_SESSION .....................................................................................................................89
Using session_destroy()............................................................................................92
$_COOKIE........................................................................................................................93
Summary...............................................................................................................................95
■Chapter 4: Working with Databases...........................................................................97
The Basics of MySQL Data Storage.......................................................................................97
Manipulating Data in MySQL Tables......................................................................................98
Creating and Deleting Databases ...................................................................................99
Deleting Databases Using DROP...............................................................................99
Creating Databases Using CREATE .........................................................................100
More free ebooks : http://fast-file.blogspot.com
■ CONTENTS
viii
The CREATE TABLE Statement......................................................................................100
Data Types in MySQL..............................................................................................102
Understanding PRIMARY KEY..................................................................................102
Understanding AUTO_INCREMENT..........................................................................102
Indexes in MySQL ...................................................................................................103
The INSERT Statement..................................................................................................103
The SELECT Statement .................................................................................................105
The UPDATE Statement.................................................................................................107
The JOIN Statement......................................................................................................108
The DELETE Statement .................................................................................................109
Opening a Connection .........................................................................................................109
PHP’s MySQL Extension................................................................................................109
The MySQLi Extension ..................................................................................................111
Using Prepared Statements ....................................................................................111
Using MySQLi..........................................................................................................112
Using Prepared Statements with MySQLi ...............................................................113
PHP Data Objects (PDO) ................................................................................................116
Rewriting Your Example in PDO..............................................................................116
Table Structure and a Crash Course in Planning.................................................................118
Planning Database Tables ............................................................................................118
The Shortcut Selector (*) .............................................................................................122
Summary.............................................................................................................................122
Recommended Reading................................................................................................122
■Chapter 5: Building the Entry Manager ....................................................................125
Planning the Entry Database Table .....................................................................................125
Creating the Entry Input Form .............................................................................................128
Create a Script to Process the Form Input ..........................................................................132
Performing the Initial Verification .................................................................................133
Connect to the Database ..............................................................................................134
Keeping Database Credentials Separate ................................................................134
Connecting to the Database in update.inc.php.......................................................135
Save the Entry to the Database ....................................................................................135
Retrieve the Entry’s Unique ID and Display the Entry to the User.................................136
Displaying the Saved Entries...............................................................................................138
More free ebooks : http://fast-file.blogspot.com
■ CONTENTS
ix
Planning Our Scripts .....................................................................................................139
Separation of Logic in Programming ......................................................................139
Mapping Your Functions to Output Saved Entries ..................................................140
Writing the Database Functions..............................................................................141
Writing the Business Function ................................................................................148
Writing the Presentation Code ................................................................................149
Fix the Redirect ...................................................................................................................155
Summary.............................................................................................................................156
■Chapter 6: Adding Support for Multiple Pages.........................................................157
Add a page Column to the entries Table .............................................................................157
Modify Your Functions to Accept Page Parameters ............................................................158
Accepting Page Information in the URL ........................................................................158
Using the Page Information to Filter Entries .................................................................159
Modifying admin.php to Save Page Associations................................................................165
Saving Page Associations ...................................................................................................168
Using .htaccess to Create Friendly URLs.............................................................................170
What .htaccess Does ....................................................................................................170
Using Regular Expressions ...........................................................................................171
Creating Your .htaccess File .........................................................................................171
Step 1: Turn on URL Rewriting................................................................................171
Step 2: Declare the Base-Level Folder for Rewriting..............................................172
Step 3: Set Up a Rule to Stop Rewriting for Certain File Types ..............................172
Step 4: Set Up a Rule for Admin Page Access ........................................................173
Step 5: Set Up a Rule for Page-Only URLs ..............................................................174
Step 6: Set Up a Rule for Page-and-Entry URLs .....................................................174
Trying It Out ............................................................................................................175
Creating Friendly URLs Automatically...........................................................................175
Step 1: Add a url Column to the entries Table ........................................................176
Step 2: Modify functions.inc.php to Handle URLs...................................................176
Step 3: Modify index.php to Handle URLs...............................................................178
Step 4: Write a Function to Create Friendly URLs Automatically ............................180
Step 5. Modify update.inc.php to Save URLs in the Database................................182
Adding a Menu ....................................................................................................................184
Creating Different Viewing Styles for the Pages .................................................................185
Summary.............................................................................................................................186
More free ebooks : http://fast-file.blogspot.com
■ CONTENTS
x
■Chapter 7: Updating and Deleting Entries ................................................................187
Creating Administrative Links .............................................................................................187
Displaying Administrative Links ..........................................................................................188
Passing URL Values to admin.php with .htaccess...............................................................190
Modifying the Original Admin Rule ...............................................................................190
The New Admin Rule ....................................................................................................191
Populating Your Form with the Entry to Be Edited ..............................................................191
Updating Entries in the Database........................................................................................194
Handling Entry Deletion.......................................................................................................197
Confirming Your Choice to Delete an Entry .........................................................................200
Handling Your Submitted Confirmation Form ...............................................................201
Removing Deleted Entries from the Database ....................................................................203
Summary.............................................................................................................................205
■Chapter 8: Adding the Ability to Upload Images ......................................................207
Adding a File Input to the Admin Form................................................................................207
Accessing the Uploaded File ...............................................................................................208
A Quick Refresher on the $_FILES Superglobal Array ..................................................208
Object-Oriented Programming......................................................................................211
Drill Down on Objects .............................................................................................211
Why Objects Are Useful ..........................................................................................212
Writing the Image Handling Class .......................................................................................218
Saving the Image..........................................................................................................219
Checking for Errors Using Exceptions.....................................................................221
Saving the File ........................................................................................................223
Modifying update.inc.php to Save Images....................................................................225
Using try...catch with Exceptions ...........................................................................226
Creating a New Folder ..................................................................................................228
Renaming the Image.....................................................................................................236
Determining the File Extension...............................................................................237
Storing and Retrieving Images from the Database .............................................................240
Modifying the entries Table ..........................................................................................241
Modifying update.inc.php to Save Images....................................................................241
Modifying retrieveEntries() to Retrieve Images ............................................................244
Modifying index.php to Display Images........................................................................246
More free ebooks : http://fast-file.blogspot.com
■ CONTENTS
xi
Adding a Function to Format Images for Output.....................................................246
Resizing Images ..................................................................................................................248
Determining the New Image Dimensions .....................................................................249
Adding a Property for Maximum Dimensions .........................................................249
Creating the Method to Determine New Width and Height.....................................250
Determining Which Image Functions to Use.................................................................252
Resampling the Image at the Proper Size ....................................................................254
Adding Your New Method to processUploadedImage() ..........................................258
Summary.............................................................................................................................260
■Chapter 9: Syndicating the Blog...............................................................................263
What Is RSS?.......................................................................................................................263
What Is XML?................................................................................................................264
Creating an RSS Feed .........................................................................................................264
Describing Your Feed....................................................................................................265
Creating Feed Items......................................................................................................266
Using Existing Functions to Minimize Effort ...........................................................266
What Is a GUID? ......................................................................................................271
What Is a Publishing Date? .....................................................................................272
Publishing Your Feed ..........................................................................................................278
Adding the Feed to the Blog .........................................................................................278
Using the <link> Tag to Signify an RSS Feed.........................................................278
Adding an RSS Link ................................................................................................279
Summary.............................................................................................................................281
■Chapter 10: Adding a Commenting System to Your Blog ........................................283
Creating a comments Table in the Database ......................................................................283
Building a Comments Class.................................................................................................285
Building the Comment Entry Form ......................................................................................286
Modifying index.php to Display the Comment Form.....................................................287
Storing New Comments in the Database ............................................................................289
Modifying update.inc.php to Handle New Comments...................................................291
Retrieving All Comments for a Given Entry .........................................................................293
Displaying Comments for a Given Entry ..............................................................................296
Modifying index.php to Display Entry Comments .........................................................302
More free ebooks : http://fast-file.blogspot.com
■ CONTENTS
xii
Deleting Comments.............................................................................................................304
Creating a Confirmation Form ......................................................................................305
Removing the Comment from the Database.................................................................306
Modifying update.inc.php to Handle Comment Deletion ..............................................307
Summary.............................................................................................................................310
■Chapter 11: Adding Password Protection to Administrative Links ..........................311
Adding an admin Table to the Database .............................................................................311
Adding Administrators in the Database...............................................................................312
Building an HTML Form ................................................................................................312
Saving New Administrators in the Database ................................................................315
Dealing with Passwords .........................................................................................316
Saving the Admin....................................................................................................316
Hiding Controls from Unauthorized Users ...........................................................................318
Modifying index.php .....................................................................................................318
Modifying comments.inc.php .......................................................................................323
Modifying admin.php ....................................................................................................325
Creating a Login Form.........................................................................................................328
Displaying Controls to Authorized Users .............................................................................330
Logging Users Out ...............................................................................................................337
Adding a Log Out Link...................................................................................................337
Modifying update.inc.php to Log Out Users..................................................................339
Summary.............................................................................................................................340
■Chapter 12: Finishing Touches.................................................................................341
Email Validation...................................................................................................................341
Adding a Method to Validate Email...............................................................................342
Validating Email Addresses ..........................................................................................343
Saving Comments in Sessions .....................................................................................344
Displaying the Stored Comment Information..........................................................345
Adding Error Messages.................................................................................................348
Identifying Errors in saveComment() ......................................................................348
Modifying update.inc.php .......................................................................................349
Matching Error Codes in showCommentForm()......................................................350
Basic Spam Prevention .......................................................................................................353
Creating a Basic Logic Question ...................................................................................354
More free ebooks : http://fast-file.blogspot.com
■ CONTENTS
xiii
Generating Random Numbers.................................................................................354
Obfuscating the Values...........................................................................................354
Adding the Math Question to the Form...................................................................355
Adding the Challenge Question to the Form .................................................................356
Verifying the Correct Answer........................................................................................358
Adding the Verification into saveComment()...........................................................359
“Post to Twitter” Link..........................................................................................................362
Creating a Shortened Link with http://bit.ly................... ... ................363
Generating an Automatic Status Update for Twitter .....................................................365
Displaying the Link on Entries ................................................................................366
Summary.............................................................................................................................368
■Index ........................................................................................................................369