SECOND EDITIONLearning PHP, MySQL, JavaScript, and CSS Robin Nixon Beijing • Cambridge • Farnham • Köln • Sebastopol • Tokyo
Learning PHP, MySQL, JavaScript, and CSS, Second Editionby Robin NixonCopyright © 2012 Robin Nixon. All rights reserved.Printed in the United States of America.Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472.O’Reilly books may be purchased for educational, business, or sales promotional use. Online editionsare also available for most titles (http://my.safaribooksonline.com). For more information, contact ourcorporate/institutional sales department: 800-998-9938 or [email protected]: Andy Oram Indexer: Ellen Troutman ZaigProduction Editor: Iris Febres Cover Designer: Karen MontgomeryCopyeditor: Rachel Head Interior Designer: David FutatoProofreader: Kiel Van Horn Illustrator: Robert RomanoAugust 2012: Second Edition.Revision History for the Second Edition: 2012-08-10 First releaseSee http://oreilly.com/catalog/errata.csp?isbn=9781449319267 for release details.Nutshell Handbook, the Nutshell Handbook logo, and the O’Reilly logo are registered trademarks ofO’Reilly Media, Inc. Learning PHP, MySQL, JavaScript, and CSS, the image of sugar gliders, and relatedtrade dress are trademarks of O’Reilly Media, Inc.Many of the designations used by manufacturers and sellers to distinguish their products are claimed astrademarks. Where those designations appear in this book, and O’Reilly Media, Inc., was aware of atrademark claim, the designations have been printed in caps or initial caps.While every precaution has been taken in the preparation of this book, the publisher and authors assumeno responsibility for errors or omissions, or for damages resulting from the use of the information con-tained herein.ISBN: 978-1-449-31926-7[LSI]1344626556
For Julie
Table of ContentsPreface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii1. Introduction to Dynamic Web Content . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1HTTP and HTML: Berners-Lee’s Basics 2The Request/Response Procedure 2The Benefits of PHP, MySQL, JavaScript, and CSS 5Using PHP 5Using MySQL 6Using JavaScript 7Using CSS 9The Apache Web Server 9About Open Source 10Bringing It All Together 10Test Your Knowledge 122. Setting Up a Development Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13What Is a WAMP, MAMP, or LAMP? 13Installing a WAMP on Windows 14Testing the Installation 22Alternative WAMPs 24Installing a MAMP on OS X 24Configuring MySQL 25Testing the Installation 28Installing a LAMP on Linux 31Working Remotely 31Logging In 32Using FTP 32Using a Program Editor 33Using an IDE 34Test Your Knowledge 36 v
3. Introduction to PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37Incorporating PHP Within HTML 37Calling the PHP Parser 38This Book’s Examples 39The Structure of PHP 40Using Comments 40Basic Syntax 41Understanding Variables 42Operators 46Variable Assignment 49Multiple-Line Commands 51Variable Typing 54Constants 54The Difference Between the echo and print Commands 56Functions 56Variable Scope 57Test Your Knowledge 624. Expressions and Control Flow in PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65Expressions 65Literals and Variables 66Operators 67Operator Precedence 68Associativity 70Relational Operators 71Conditionals 75The if Statement 75The else Statement 76The elseif Statement 78The switch Statement 78The ? Operator 81Looping 82while Loops 83do…while Loops 85for Loops 85Breaking Out of a Loop 87The continue Statement 88Implicit and Explicit Casting 89PHP Dynamic Linking 90Dynamic Linking in Action 90Test Your Knowledge 91vi | Table of Contents
5. PHP Functions and Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93PHP Functions 94Defining a Function 95Returning a Value 96Returning an Array 97Passing by Reference 98Returning Global Variables 99Recap of Variable Scope 100Including and Requiring Files 100The include Statement 100Using include_once 101Using require and require_once 101PHP Version Compatibility 102PHP Objects 102Terminology 103Declaring a Class 104Creating an Object 105Accessing Objects 105Constructors 108Writing Methods 109Declaring Properties 110Declaring Constants 111Property and Method Scope in PHP 5 112Inheritance 114Test Your Knowledge 1176. PHP Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119Basic Access 119Numerically Indexed Arrays 119Associative Arrays 121Assignment Using the array Keyword 122The foreach...as Loop 122Multidimensional Arrays 124Using Array Functions 127is_array 127count 127sort 128shuffle 128explode 128extract 129compact 130reset 131end 131 Table of Contents | vii
Test Your Knowledge 1327. Practical PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133Using printf 133Precision Setting 134String Padding 136Using sprintf 137Date and Time Functions 137Date Constants 140Using checkdate 140File Handling 141Checking Whether a File Exists 141Creating a File 141Reading from Files 143Copying Files 143Moving a File 144Deleting a File 144Updating Files 145Locking Files for Multiple Accesses 146Reading an Entire File 147Uploading Files 148System Calls 153XHTML 154The Benefits of XHTML 155XHTML Versions 155What’s Different? 155HTML 4.01 Document Types 156The HTML5 Document Type 157XHTML 1.0 Document Types 157XHTML Validation 158Test Your Knowledge 1598. Introduction to MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161MySQL Basics 161Summary of Database Terms 162Accessing MySQL via the Command Line 162Starting the Command-Line Interface 163Using the Command-Line Interface 166MySQL Commands 168Data Types 172Indexes 181Creating an Index 182Querying a MySQL Database 187viii | Table of Contents
Joining Tables Together 196 Using Logical Operators 198MySQL Functions 199Accessing MySQL via phpMyAdmin 199 Windows Users 199 OS X Users 201 Linux Users 201 Using phpMyAdmin 201Test Your Knowledge 2029. Mastering MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205Database Design 205Primary Keys: The Keys to Relational Databases 206Normalization 207First Normal Form 208Second Normal Form 210Third Normal Form 212When Not to Use Normalization 214Relationships 215One-to-One 215One-to-Many 216Many-to-Many 216Databases and Anonymity 218Transactions 218Transaction Storage Engines 219Using BEGIN 220Using COMMIT 220Using ROLLBACK 221Using EXPLAIN 221Backing Up and Restoring 223Using mysqldump 223Creating a Backup File 224Restoring from a Backup File 226Dumping Data in CSV Format 226Planning Your Backups 227Test Your Knowledge 22710. Accessing MySQL Using PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229Querying a MySQL Database with PHP 229The Process 229Creating a Login File 230Connecting to MySQL 231A Practical Example 236 Table of Contents | ix
The $_POST Array 238 Deleting a Record 239 Displaying the Form 239 Querying the Database 240 Running the Program 241Practical MySQL 242 Creating a Table 242 Describing a Table 243 Dropping a Table 244 Adding Data 244 Retrieving Data 245 Updating Data 246 Deleting Data 246 Using AUTO_INCREMENT 247 Performing Additional Queries 248 Preventing SQL Injection 249 Preventing HTML Injection 252Test Your Knowledge 25411. Form Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255Building Forms 255Retrieving Submitted Data 256register_globals: An Old Solution Hangs On 258Default Values 258Input Types 259Sanitizing Input 266An Example Program 267Test Your Knowledge 27012. Cookies, Sessions, and Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271Using Cookies in PHP 271Setting a Cookie 273Accessing a Cookie 273Destroying a Cookie 274HTTP Authentication 274Storing Usernames and Passwords 277Salting 277Using Sessions 281Starting a Session 281Ending a Session 284Session Security 286Test Your Knowledge 289x | Table of Contents
13. Exploring JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291JavaScript and HTML Text 291Using Scripts Within a Document Head 293Older and Nonstandard Browsers 293Including JavaScript Files 294Debugging JavaScript Errors 295Using Comments 297Semicolons 297Variables 298String Variables 298Numeric Variables 298Arrays 299Operators 299Arithmetic Operators 300Assignment Operators 300Comparison Operators 301Logical Operators 301Variable Incrementing and Decrementing 301String Concatenation 302Escaping Characters 302Variable Typing 303Functions 303Global Variables 304Local Variables 304The Document Object Model (DOM) 305But It’s Not That Simple 307Using the DOM 308Test Your Knowledge 30914. Expressions and Control Flow in JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311Expressions 311Literals and Variables 312Operators 313Operator Precedence 314Associativity 314Relational Operators 315The with Statement 318Using onerror 318Using try...catch 319Conditionals 320The if Statement 320The switch statement 321The ? Operator 323 Table of Contents | xi
Looping 323 while Loops 323 do…while Loops 324 for Loops 324 Breaking Out of a Loop 325 The continue Statement 326 327Explicit Casting 327Test Your Knowledge15. JavaScript Functions, Objects, and Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329JavaScript Functions 329Defining a Function 329Returning a Value 331Returning an Array 333JavaScript Objects 333Declaring a Class 333Creating an Object 335Accessing Objects 335The prototype Keyword 336JavaScript Arrays 338Numeric Arrays 338Associative Arrays 339Multidimensional Arrays 340Using Array Methods 341Test Your Knowledge 34516. JavaScript and PHP Validation and Error Handling . . . . . . . . . . . . . . . . . . . . . . . . . . 347Validating User Input with JavaScript 347The validate.html Document (Part One) 348The validate.html Document (Part Two) 350Regular Expressions 353Matching Through Metacharacters 353Fuzzy Character Matching 354Grouping Through Parentheses 355Character Classes 355Some More Complicated Examples 356Summary of Metacharacters 359General Modifiers 360Using Regular Expressions in JavaScript 361Using Regular Expressions in PHP 361Redisplaying a Form After PHP Validation 362Test Your Knowledge 367xii | Table of Contents
17. Using Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369What Is Ajax? 369Using XMLHttpRequest 370Implementing Ajax via POST Requests 372The readyState Property 374The Server Half of the Ajax Process 375Using GET Instead of POST 377Sending XML Requests 379About XML 381Why Use XML? 383Using Frameworks for Ajax 383Test Your Knowledge 38318. Introduction to CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385Importing a Style Sheet 386Importing a Style Sheet from Within HTML 386Embedded Style Settings 387Using IDs 387Using Classes 387CSS Rules 388Using Semicolons 388Multiple Assignments 388Using Comments 389Style Types 390Default Styles 390User Styles 390External Style Sheets 390Internal Styles 391Inline Styles 391CSS Selectors 392The Type Selector 392The Descendant Selector 392The Child Selector 393The Adjacent Sibling Selector 394The ID Selector 395The Class Selector 395The Attribute Selector 396The Universal Selector 396Selecting by Group 397The CSS Cascade 398Style Sheet Creators 398Style Sheet Methods 398Style Sheet Selectors 399 Table of Contents | xiii
The Difference Between <div> and <span> 401Measurements 402Fonts and Typography 404 404 font-family 405 font-style 406 font-size 406 font-weight 407Managing Text Styles 407 Decoration 407 Spacing 408 Alignment 408 Transformation 408 Indenting 408CSS Colors 409 Short Color Strings 410 Gradients 411Positioning Elements 411 Absolute Positioning 412 Relative Positioning 412 Fixed Positioning 412 Comparing Positioning Types 413Pseudoclasses 415Pseudoelements 416Shorthand Rules 416The Box Model and Layout 417 Setting Margins 418 Applying Borders 419 Adjusting Padding 420 Object Contents 421Test Your Knowledge19. Advanced CSS with CSS3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423Attribute Selectors 423Matching Parts of Strings 424The box-sizing Property 425CSS3 Backgrounds 425The background-clip Property 426The background-origin Property 426The background-size Property 428Multiple Backgrounds 428CSS3 Borders 430The border-color Property 430The border-radius Property 431xiv | Table of Contents
Box Shadows 434Element Overflow 435Multicolumn Layout 435Colors and Opacity 436 437 HSL Colors 437 HSLA Colors 438 RGB Colors 438 RGBA Colors 438 The opacity Property 439Text Effects 439 The text-shadow Property 439 The text-overflow Property 440 The word-wrap Property 440Web Fonts 441 Google Web Fonts 441Transformations 444Transitions 444 Properties to Transition 444 Transition Duration 444 Transition Delay 445 Transition Timing 445 Shorthand Syntax 447Test Your Knowledge20. Accessing CSS from JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449Revisiting the getElementById Function 449The O Function 449The S Function 450The C Function 451Including the Functions 452Accessing CSS Properties from JavaScript 453Some Common Properties 453Other Properties 455Inline JavaScript 456The this Keyword 457Attaching Events to Objects in a Script 457Attaching to Other Events 458Adding New Elements 459Removing Elements 460Alternatives to Adding and Removing Elements 461Using Interrupts 462Using setTimeout 462Canceling a Timeout 463 Table of Contents | xv
Using setInterval 463 Using Interrupts for Animation 465Test Your Knowledge 46721. Bringing It All Together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469Designing a Social Networking Site 469On the Website 470functions.php 470The Functions 470header.php 472setup.php 474index.php 475signup.php 475Checking for Username Availability 476checkuser.php 478login.php 479profile.php 481Adding the “About Me” Text 482Adding a Profile Image 482Processing the Image 482Displaying the Current Profile 483members.php 485Viewing a User’s Profile 486Adding and Dropping Friends 486Listing All Members 486friends.php 488messages.php 491logout.php 493styles.css 495A. Solutions to the Chapter Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499B. Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513C. MySQL’s FULLTEXT Stopwords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517D. MySQL Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533xvi | Table of Contents
PrefaceThe combination of PHP and MySQL is the most convenient approach to dynamic,database-driven web design, holding its own in the face of challenges from integratedframeworks—such as Ruby on Rails—that are harder to learn. Due to its open sourceroots (unlike the competing Microsoft .NET framework), it is free to implement and istherefore an extremely popular option for web development.Any would-be developer on a Unix/Linux or even a Windows/Apache platform willneed to master these technologies. At the same time, JavaScript is important, as it pro-vides in-browser dynamic functionality and, through Ajax, hidden communicationwith the web server to create seamless interfaces. In conjunction with CSS, these tech-nologies integrate to provide a formidable array of powerful web-development tools.AudienceThis book is for people who wish to learn how to create effective and dynamic websites.This may include webmasters or graphic designers who are already creating static web-sites but wish to take their skills to the next level, as well as high school and collegestudents, recent graduates, and self-taught individuals.In fact, anyone ready to learn the fundamentals behind the Web 2.0 technology knownas Ajax will obtain a thorough grounding in all of these core technologies: PHP, MySQL,JavaScript, and CSS.Assumptions This Book MakesThis book assumes that you have a basic understanding of HTML and can at least puttogether a simple, static website, but it does not assume that you have any prior knowl-edge of PHP, MySQL, JavaScript, or CSS. That said, if you do, your progress throughthe book will be even quicker. xvii
Organization of This BookThe chapters in this book are written in a specific order, first introducing all of the coretechnologies it covers and then walking you through their installation on a web devel-opment server, so that you will be ready to work through the examples.In the following section, you will gain a grounding in the PHP programming language,covering the basics of syntax, arrays, functions, and object-oriented programming.Then, with PHP under your belt, you will move on to an introduction to the MySQLdatabase system, where you will learn everything from how MySQL databases arestructured up to how to generate complex queries.After that, you will learn how you can combine PHP and MySQL to start creating yourown dynamic web pages by integrating forms and other HTML features. You will thenspend some time looking at ways to speed up your web development using Smartytemplates.In the next three chapters you will get down to the nitty-gritty practical aspects of PHPand MySQL development, learning about a variety of useful functions, how to managecookies and sessions, and how to maintain a high level of security.In the following four chapters you will gain a thorough grounding in JavaScript, fromsimple functions and event handling to accessing the Document Object Model and in-browser validation and error handling.With an understanding of all three of these core technologies, you will then learn howto make behind-the-scenes Ajax calls and turn your websites into highly dynamicenvironments.Finally, you’ll spend two chapters learning all about using CSS to style and lay out yourweb pages, and then you’ll put together everything you’ve learned in a complete set ofprograms that together constitute a fully working social networking website.Along the way, you’ll also find plenty of pointers and advice on good programmingpractices and tips that could help you find and solve hard-to-detect programming er-rors. There are also plenty of links to websites containing further details on the topicscovered.Supporting BooksOnce you have learned to develop using PHP, MySQL, and JavaScript you will be readyto take your skills to the next level using the following reference books: • Dynamic HTML: The Definitive Reference (http://oreil.ly/dynamic_html ) by Danny Goodman (O’Reilly) • PHP in a Nutshell (http://oreil.ly/PHP_nutshell) by Paul Hudson (O’Reilly) • MySQL in a Nutshell (http://oreil.ly/MySQL_nutshell) by Russell Dyer (O’Reilly)xviii | Preface
• JavaScript: The Definitive Guide (http://oreil.ly/JS_Definitive) by David Flanagan (O’Reilly) • CSS: The Definitive Guide (http://oreil.ly/CSS_Definitive) by Eric A. Myer (O’Reilly)Conventions Used in This BookThe following typographical conventions are used in this book:Italic Indicates new terms, URLs, email addresses, filenames, and file extensions.Constant width Used for program listings, as well as within paragraphs to refer to program elements such as variable or function names, databases, data types, environment variables, statements, and keywords.Constant width bold Shows commands or other text that should be typed literally by the user.Constant width italic Shows text that should be replaced with user-supplied values or by values deter- mined by context. This icon signifies a tip, suggestion, or general note. This icon indicates a warning or caution.Using Code ExamplesThis book is here to help you get your job done. In general, you may use the code inthis book in your programs and documentation. You do not need to contact us forpermission unless you’re reproducing a significant portion of the code. For example,writing a program that uses several chunks of code from this book does not requirepermission. Selling or distributing a CD-ROM of examples from O’Reilly books doesrequire permission. Answering a question by citing this book and quoting examplecode does not require permission. Incorporating a significant amount of example codefrom this book into your product’s documentation does require permission.We appreciate, but do not require, attribution. An attribution usually includes the title,author, publisher, and ISBN. For example: “Learning PHP, MySQL, JavaScript & Preface | xix
CSS, Second Edition, by Robin Nixon. Copyright 2012 Robin Nixon,978-1-4493-1926-7.”If you feel your use of code examples falls outside fair use or the permission given here,feel free to contact us at [email protected]® Books Online Safari Books Online (www.safaribooksonline.com) is an on-demand digital library that delivers expert content in both book and video form from the world’s leading authors in technology and business.Technology professionals, software developers, web designers, and business and cre-ative professionals use Safari Books Online as their primary resource for research,problem solving, learning, and certification training.Safari Books Online offers a range of product mixes and pricing programs for organi-zations, government agencies, and individuals. Subscribers have access to thousandsof books, training videos, and prepublication manuscripts in one fully searchable da-tabase from publishers like O’Reilly Media, Prentice Hall Professional, Addison-WesleyProfessional, Microsoft Press, Sams, Que, Peachpit Press, Focal Press, Cisco Press, JohnWiley & Sons, Syngress, Morgan Kaufmann, IBM Redbooks, Packt, Adobe Press, FTPress, Apress, Manning, New Riders, McGraw-Hill, Jones & Bartlett, Course Tech-nology, and dozens more. For more information about Safari Books Online, please visitus online.How to Contact UsPlease address comments and questions concerning this book to the publisher: O’Reilly Media, Inc. 1005 Gravenstein Highway North Sebastopol, CA 95472 800-998-9938 (in the United States or Canada) 707-829-0515 (international or local) 707-829-0104 (fax)We have a web page for this book, where we list errata, examples, and any additionalinformation. You can access this page at http://bit.ly/PHP_MySQL_JS_CSS2.There is also a companion website to this book, where you can see all the exampleswith color-highlighted syntax, available online at http://lpmj.net.To comment or ask technical questions about this book, send email [email protected] | Preface
For more information about our books, courses, conferences, and news, see our websiteat http://www.oreilly.com.Find us on Facebook: http://facebook.com/oreillyFollow us on Twitter: http://twitter.com/oreillymediaWatch us on YouTube: http://www.youtube.com/oreillymediaAcknowledgmentsA huge thank you goes to my editor, Andy Oram, who always has great ideas for betterexplaining tricky subjects; Rachel Head for an excellent job of tidying up my manu-script; Iris Febres and Rachel Steely, who oversaw production meticulously; RobertRomano for the easy-to-follow illustrations in both editions; Ellen Troutman Zaig forcreating a thoroughly comprehensive index; Karen Montgomery for the great sugarglider front cover; David Futato for the clear and easy-to-read interior design; and allthe other dedicated people at O’Reilly who worked so hard on this book, and withoutwhom it simply wouldn’t be the same.I would also like to thank my technical reviewers from the first edition, Derek DeHart,Christoph Dorn, Tomislav Dugandzic, Becka Morgan, Harry Nixon, Alan Solis, andDemian Turner, and Albert Wiersch for his invaluable input and advice on the CSSsection new to this edition. Finally, thanks to the first edition readers who spotted typosand sent in errata and suggestions for improving the book, all of whom have helped tobring this revised, updated, and improved web development tutorial to fruition. Preface | xxi
CHAPTER 1Introduction to Dynamic Web ContentThe World Wide Web is a constantly evolving network that has already traveled farbeyond its conception in the early 1990s, when it was created to solve a specific prob-lem. State-of-the-art experiments at CERN (the European Laboratory for Particle Phys-ics—now best known as the operator of the Large Hadron Collider) were producingincredible amounts of data—so much that the data was proving unwieldy to distributeto the participating scientists who were spread out across the world.At this time, the Internet was already in place, with several hundred thousand com-puters connected to it. Tim Berners-Lee (a CERN fellow) devised a method of navi-gating between them using a hyperlinking framework, which came to be known as theHyper Text Transfer Protocol, or HTTP. He also created a markup language calledHTML, or Hyper Text Markup Language. To bring these together, he wrote the firstweb browser and web server.We now take these tools for granted, but back then, the concept was revolutionary.The most connectivity so far experienced by at-home modem users was dialing up andconnecting to a bulletin board that was hosted by a single computer, where you couldcommunicate and swap data only with other users of that service. Consequently, youneeded to be a member of many bulletin board systems in order to effectively commu-nicate electronically with your colleagues and friends.But Berners-Lee changed all that in one fell swoop, and by the mid-1990s there werethree major graphical web browsers competing for the attention of five million users.It soon became obvious, though, that something was missing. Yes, pages of text andgraphics with hyperlinks to take you to other pages was a brilliant concept, but theresults didn’t reflect the instantaneous potential of computers and the Internet to meetthe particular needs of each user with dynamically changing content. Using the Webwas a very dry and plain experience, even if we did now have scrolling text and animatedGIFs!Shopping carts, search engines, and social networks have clearly altered how we usethe Web. In this chapter, we’ll take a brief look at the various components that makeup the Web, and the software that helps make it a rich and dynamic experience. 1
It is necessary to start using some acronyms more or less right away. I have tried to clearly explain them before proceeding, but don’t worry too much about what they stand for or what these names mean, because the details will all become clear as you read on.HTTP and HTML: Berners-Lee’s BasicsHTTP is a communication standard governing the requests and responses that takeplace between the browser running on the end user’s computer and the web server.The server’s job is to accept a request from the client and attempt to reply to it in ameaningful way, usually by serving up a requested web page—that’s why the termserver is used. The natural counterpart to a server is a client, so that term is appliedboth to the web browser and the computer on which it’s running.Between the client and the server there can be several other devices, such as routers,proxies, gateways, and so on. They serve different roles in ensuring that the requestsand responses are correctly transferred between the client and server. Typically, theyuse the Internet to send this information.A web server can usually handle multiple simultaneous connections and—when notcommunicating with a client—spends its time listening for an incoming connectionrequest. When one arrives, the server sends back a response to confirm its receipt.The Request/Response ProcedureAt its most basic level, the request/response process consists of a web browser askingthe web server to send it a web page and the server sending back the page. The browserthen takes care of displaying the page (see Figure 1-1).These are the steps in the request and response sequence: 1. You enter http://server.com into your browser’s address bar. 2. Your browser looks up the IP address for server.com. 3. Your browser issues a request for the home page at server.com. 4. The request crosses the Internet and arrives at the server.com web server. 5. The web server, having received the request, looks for the web page on its hard disk. 6. The server retrieves the web page and returns it to the browser. 7. Your browser displays the web page.For an average web page, this process takes place once for each object within the page:a graphic, an embedded video or Flash file, and even a CSS template.In step 2, notice that the browser looked up the IP address of server.com. Every machineattached to the Internet has an IP address—your computer included. But we generallyaccess web servers by name, such as google.com. As you probably know, the browser2 | Chapter 1: Introduction to Dynamic Web Content
Figure 1-1. The basic client/server request/response sequenceconsults an additional Internet service called the Domain Name Service (DNS) to findthe server’s associated IP address and then uses that to communicate with the com-puter.For dynamic web pages, the procedure is a little more involved, because it may bringboth PHP and MySQL into the mix (see Figure 1-2).Here are the steps: 1. You enter http://server.com into your browser’s address bar. 2. Your browser looks up the IP address for server.com. 3. Your browser issues a request to that address for the web server’s home page. 4. The request crosses the Internet and arrives at the server.com web server. 5. The web server, having received the request, fetches the home page from its hard disk. 6. With the home page now in memory, the web server notices that it is a file incor- porating PHP scripting and passes the page to the PHP interpreter. 7. The PHP interpreter executes the PHP code. 8. Some of the PHP contains MySQL statements, which the PHP interpreter now passes to the MySQL database engine. HTTP and HTML: Berners-Lee’s Basics | 3
Figure 1-2. A dynamic client/server request/response sequence 9. The MySQL database returns the results of the statements back to the PHP inter- preter.10. The PHP interpreter returns the results of the executed PHP code, along with the results from the MySQL database, to the web server.11. The web server returns the page to the requesting client, which displays it.Although it’s helpful to be aware of this process so that you know how the three ele-ments work together, in practice you don’t really need to concern yourself with thesedetails, because it all happens automatically.HTML pages returned to the browser in each example may well contain JavaScript,which will be interpreted locally by the client, and which could initiate anotherrequest—the same way embedded objects such as images would.4 | Chapter 1: Introduction to Dynamic Web Content
The Benefits of PHP, MySQL, JavaScript, and CSSAt the start of this chapter, I introduced the world of Web 1.0, but it wasn’t long beforethe rush was on to create Web 1.1, with the development of such browser enhance-ments as Java, JavaScript, JScript (Microsoft’s slight variant of JavaScript), and ActiveX.On the server side, progress was being made on the Common Gateway Interface (CGI)using scripting languages such as Perl (an alternative to the PHP language) and server-side scripting (dynamically inserting the contents of one file—or the output of a systemcall—into another one).Once the dust had settled, three main technologies stood head and shoulders abovethe others. Although Perl was still a popular scripting language with a strong following,PHP’s simplicity and built-in links to the MySQL database program had earned it morethan double the number of users. And JavaScript, which had become an essential partof the equation for dynamically manipulating CSS (Cascading Style Sheets), now tookon the even more muscular task of handling the client side of the Ajax process. UnderAjax (described in “Using JavaScript” on page 7), web pages perform data handlingand send requests to web servers in the background—without the web user being awarethat this is going on.No doubt the symbiotic nature of PHP and MySQL helped propel them both forward,but what attracted developers to them in the first place? The simple answer has to bethe ease with which you can use these technologies to quickly create dynamic elementson websites. MySQL is a fast and powerful yet easy-to-use database system that offersjust about anything a website might need in order to find and serve up data to browsers.When PHP allies with MySQL to store and retrieve this data, you have the fundamentalparts required for the development of social networking sites and the beginnings ofWeb 2.0.And when you bring JavaScript and CSS into the mix too, you have a recipe for buildinghighly dynamic and interactive websites.Using PHPWith PHP, it’s a simple matter to embed dynamic activity in web pages. When you givepages the .php extension, they have instant access to the scripting language. From adeveloper’s point of view, all you have to do is write code such as the following: <?php echo \"Hello World. Today is \".date(\"l\").\". \"; ?> How are you?The opening <?php tells the web server to allow the PHP program to interpret all thefollowing code up to the ?> command. Outside of this construct, everything is sent tothe client as direct HTML. So, the text “How are you?” is simply output to the browser; The Benefits of PHP, MySQL, JavaScript, and CSS | 5
within the PHP tags, the built-in date function displays the current day of the weekaccording to the server’s system time.The final output of the two parts looks like this: Hello World. Today is Wednesday. How are you?PHP is a flexible language, and some people prefer to place the PHP construct directlynext to PHP code, like this: Hello World. Today is <?php echo date(\"l\"); ?>. How are you?There are also other ways of formatting and outputting information, which I’ll explainin the chapters on PHP. The point is that with PHP, web developers have a scriptinglanguage that, although not as fast as compiling your code in C or a similar language,is incredibly speedy and that also integrates seamlessly with HTML code. If you intend to type in the PHP examples in this book to work along with me, you must remember to add <?php in front and ?> after them to ensure that the PHP interpreter processes them. To facilitate this, you may wish to prepare a file called example.php with those tags in place.Using PHP, you have unlimited control over your web server. Whether you need tomodify HTML on the fly, process a credit card, add user details to a database, or fetchinformation from a third-party website, you can do it all from within the same PHPfiles in which the HTML itself resides.Using MySQLOf course, there’s not a lot of point to being able to change HTML output dynamicallyunless you also have a means to track the changes that users make as they use yourwebsite. In the early days of the Web, many sites used “flat” text files to store data suchas usernames and passwords. But this approach could cause problems if the file wasn’tcorrectly locked against corruption from multiple simultaneous accesses. Also, a flatfile can get only so big before it becomes unwieldy to manage—not to mention thedifficulty of trying to merge files and perform complex searches in any kind of reason-able time.That’s where relational databases with structured querying become essential. AndMySQL, being free to use and installed on vast numbers of Internet web servers, risessuperbly to the occasion. It is a robust and exceptionally fast database managementsystem that uses English-like commands.The highest level of MySQL structure is a database, within which you can have one ormore tables that contain your data. For example, let’s suppose you are working on atable called users, within which you have created columns for surname, firstname, and6 | Chapter 1: Introduction to Dynamic Web Content
Search
Read the Text Version
- 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
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 513
- 514
- 515
- 516
- 517
- 518
- 519
- 520
- 521
- 522
- 523
- 524
- 525
- 526
- 527
- 528
- 529
- 530
- 531
- 532
- 533
- 534
- 535
- 536
- 537
- 538
- 539
- 540
- 541
- 542
- 543
- 544
- 545
- 546
- 547
- 548
- 549
- 550
- 551
- 552
- 553
- 554
- 555
- 556
- 557
- 558
- 559
- 560
- 561
- 562
- 563
- 564
- 565
- 566
- 567
- 568
- 569
- 570
- 571
- 572
- 573
- 574
- 575
- 576
- 577
- 578
- 579
- 580
- 581
- 582
- 1 - 50
- 51 - 100
- 101 - 150
- 151 - 200
- 201 - 250
- 251 - 300
- 301 - 350
- 351 - 400
- 401 - 450
- 451 - 500
- 501 - 550
- 551 - 582
Pages: