Monday, November 2, 2009

16.2 Application Overview











 < Day Day Up > 









16.2 Application Overview







The winestore application was

developed to meet the requirements outlined in the previous section.

It is a complete PHP and MySQL web database application, and uses

PEAR ITX templates and PEAR DB to abstract HTML presentation and the

database layer. It was developed on a Linux platform using the MySQL

4.1 DBMS and PHP 4.3, but works in the Microsoft Windows and Mac OS X

environments.





It has been tested with PHP 5.0.0 beta (b2). At the time of writing,

PEAR DB does not work with PHP5 and MySQL 4.1. This will likely be

fixed when PHP5 is released, and we'll provide

updated code on our book's web site http://www.webdatabasebook.com.





The winestore has many components of a typical web database

application, including:





  • Maintainable web pages generated with templates, and populated with

    data from a database.

  • User-driven querying and browsing, in which the user provides the

    parameters that limit the searching or browsing of the database. This

    includes one-component querying.

  • Data entry and validation.

  • User tracking with session management techniques.

  • User authentication and management.

  • SQL querying that requires table locking.

  • Receipt pages that avoid the reload problem.

  • Robust error handling with a custom error module.

  • Email- and browser-based receipts.





The

application has five separate modules that we discuss in the next

four chapters:
















Customer management







Becoming a member and amending membership details. The scripts that

implement this functionality are in Chapter 17.






Shopping cart







Adding wines to a shopping cart, deleting items from the cart,

adjusting quantities, and emptying the cart. The shopping cart is

discussed in Chapter 18.






Ordering and shipping







Processing the cart so that it becomes an order, validating a credit

card, confirming shipping details by email, and confirming shipping

details with an HTML receipt. These scripts are the subject of Chapter 19.






Browsing and searching







Searching and browsing the wines using user-supplied parameters.

Outlined in Chapter 20.






Authentication







Logging in, logging out, and changing passwords. Also discussed in

Chapter 20.









The application also has a set of common components, including PEAR

ITX template extensions, authentication functions, a custom error

handler, validation functions, and general purpose functions and

constants. With the exception of the authentication functions, these

common components are discussed later in this chapter. The

general-purpose authentication functions are discussed in Chapter 20.









16.2.1 Winestore Scripts





Figure 16-1 and Figure 16-2



show the

scripts developed for the winestore application and how they

interact. Scripts are shown as boxes. Solid boxes indicate scripts

that generate HTML, while dashed boxes don't produce

output but instead redirect to other scripts. Lines with arrows show

how the scripts call each other, and dashed lines indicate the path

is followed when validation fails or an error occurs. The three key

user interface scripts, index.php,

customer/details.php, and

cart/showcart.php, are

shown in both figures.









16.2.1.1 Functional overview








Figure 16-1. The winestore application architecture







The main or home page of the online winestore is shown in Figure 16-1 and Figure 16-2 and is

labeled index.php



. This page allows the user

to add bottles and cases of the three selected "hot

new wines" to his shopping cart and to access the

other parts of the application. The shopping cart functionality is

shown by the double-ended arrow to the add-to-cart script labeled

cart/addtocart.php



. The

cart/addtocart.php script

is shown as a dashed rectangle in Figure 16-1,

indicating that it's a one-component query module

that has no output and instead redirects to the calling page.





The home page also allows the user to view his shopping cart by

clicking on the cart icon at the top of the page or the View Cart

button at the bottom of the page. View-the-cart functionality is

provided by the

cart/showcart.php script

introduced later in this section. Three other actions are also

possible from the home page:





  • Searching the wines using the script

    search/sea

    rchform.php

  • Becoming a member or changing customer details using the

    customer/details.php



    script

  • Logging in or logging out using the scripts

    auth/login.php and

    auth/logout.php, respectively



Figure 16-1 and Figure 16-2 show

the cart, customer, authentication, password change, searching,

ordering, and shipping scripts. In detail, the features are:










































Customer details management







This is provided by the

customer/details.php



,

customer/validate.php

, and

customer/receipt.php



scripts that implement the

become-a-member and change details features. The scripts show how to

build a real-world data entry, validation, and receipt module using

the techniques we discuss in Chapter 6

through Chapter 9.





The script customer/details.php presents an

empty customer form to new customers. The form allows entry of all

customer details, including an email address that is used as the

login name of the user and a password for future visits to the site.

The customer/validate.php script validates

customer data and, on success, writes to the database and redirects

to the customer receipt script

customer/receipt.php.





On validation failure, customer/validate.php

redirects to customer/details.php, where the

validation errors are reported as batch errors that are interleaved

with the form widgets.





For customers who are amending their details, the password and email

input widgets are omitted from the customer form.






Password management







This is provided by the

auth/password.php



and

auth/changepassword.php



scripts. The scripts show

how to build part of a real-world authentication module using the

techniques discussed in Chapter 10 and

Chapter 11, in conjunction with the basic

techniques of Chapter 6 through Chapter 9.





Logged in users can change their passwords by clicking on the Change

Password button at the bottom of the Change Details page which then

calls the auth/password.php script.





To change their password, users are required to enter their current

password to reduce the risk of an unauthorized change, and then to

enter the new password twice to minimize the chance of a typing

error. The password change is validated by the authorization script

auth/changepassword.php. A receipt is shown for

a successful change by redirecting the user to the customer details

page customer/details.php, which then displays a

confirmation message; we chose not to add a receipt page to this

module because it's unnecessary when

there's no information that the user needs to

record.





An unsuccessful password change attempt redirects the user to

auth/password.php where error messages are

displayed.






Authentication







The remaining three authorization

scripts auth/login.php,

auth/logincheck.php, and

auth/logout.php are shown in Figure 16-2. These scripts continue our real-world

examples of building an authentication module.





The auth/login.php



script produces a form for

the user to enter their email address and password. The

auth/logincheck.php



script validates the email

address and password, and checks if a matching user is a member. If

so, the script logs the user into the application and redirects the

user to the index.php main page script, where

their login status is displayed at the top of the page. If the login

process fails, they're returned to

auth/login.php and errors are displayed.





The script

auth/logout.php



logs the user out of the

application and redirects her to the main page

index.php; the logout script

doesn't produce output. Figure 16-2

also shows the three scripts from Figure 16-1 that

interact with the login and logout process.













Figure 16-2. More winestore application architecture




































Shopping Cart







The shopping cart scripts

cart/showcart.php



,

cart/updatecart.php



, and

cart/emptycart.php are shown in Figure 16-1. These scripts show you how to build a

scalable database-based shopping cart using the techniques described

in Chapter 5 and Chapter 8, along with the sessions techniques in

Chapter 10 and the basic web database querying

techniques of Chapter 6.





The script cart/showcart.php shows the user the

contents of his shopping cart. If the cart contains items, the

quantities are presented in a form environment that allows the user

to change them. The view cart script

cart/showcart.php also allows the user to return

to the home page, search, log in, and log out.





To update changes in quantities, the

cart/updatecart.php script is requested by

clicking the Update Quantities button; this script redirects to

cart/showcart.php, and either shows the user the

correctly updated quantities or reports an error describing why the

update failed.





The user can also empty his cart completely by clicking on a button

that requests the cart/emptycart.php script.






Ordering and Shipping







The ordering and shipping

processes are implemented in the scripts

order/order-step1.php

,

order/order-step2.php,



order/order-step3.php,

order/order-step4.php

,

order/order-step5.php, and

order/receipt.php

. These scripts show all

aspects of data entry, querying, writing to databases using locks,

validation, and receipts, and they make use of most of the techniques

discussed in Chapter 5 through Chapter 10.





Users who are logged in place orders by clicking on the Make Purchase

button in the view cart screen. When the button is clicked, the

script

order/order-step1.php is

requested and a form is presented that requires the user to enter

their credit card number and expiration date, as well as any optional

delivery instructions. The application supports the fictional

SurchargeCard credit card, which is validated according to the Luhn

algorithm discussed in Chapter 9.





When the user submits the credit card form, the script

order/order-step2.php

is requested to perform

validation. If the card validates, then the script redirects to

order/order-step3.php otherwise the script

returns to order/order-step1.php and shows error

messages.





The complex database processing used to finalize an order is

performed by order/order-step3.php. If the

ordering process fails, the script redirects to

order-step1.php, where

errors are reported. If the ordering process succeeds, it redirects

to order/order-step4.php. This script sends the

user an email receipt of his order and redirects to

order/receipt.php which shows the user the same

receipt as an HTML page. From order/receipt.php,

the user can return to the home page.






Searching and Browsing







Searching and browsing is

implemented in the scripts

search/searchform.php

and

search/search.php

. These scripts show an

advanced example of embedding links in an HTML document and creating

drop-down lists using the techniques from Chapter 6. They also show how to add validation and

sessions to a querying module with the techniques of Chapter 9 and Chapter 10.





The search/searchform.php script shows a form

that allows the user to enter wine search criteria. The users can

choose to browse a specific wine type (such as red or white) and a

specific region (such as Margaret River). They can also choose to

browse all wine types or all regions. When the user submits the

form, the script

search/search.php is requested. The search

criteria are saved using sessions for when the user revisits the

page.





The search/search.php script shows the wines

that match the search criteria in pages of 12 wines each, and the

user can traverse the pages using previous and next links, or click

on a page number link to jump to a specific page. Bottles or cases of

wine can be added to the shopping cart by clicking on a link that

requests and passes parameters to the

cart/addtocart.php script.





As on the other main pages, the user can also click on buttons to

view his cart, login or logout, return to the home page, or start a

new search with different criteria.

















16.2.1.2 Using and accessing the source code




The

winestore application can be used at this

book's web site or on your local server, if you have

followed the instructions to install the examples in Appendix A to Appendix C. The source

code can also be viewed at the book's web site and

(if the installation instructions have been followed) can be edited

and viewed in the directory

/usr/local/apache2/htdocs/wda2-winestore/ on your local

Unix server, in C:\Program

Files\EasyPHP1-7\www\wda2-winestore
under Microsoft

Windows, or in

/Library/WebServer/Documents/wda2-winestore on

Mac OS X. A summary of the winestore scripts, and functions is shown

in Table 16-1.







Table 16-1. The winestore scripts and functions


Script





Function





index.php





Main page and hot new wines panel





templates/index.tpl





Main page template





VERSION





Application version information for developers





license.txt





Application licensing information



  


includes/authenticate.inc





Authentication functions





auth/login.php





User login form





auth/logincheck.php





User login authentication





auth/logout.php





User logout





auth/password.php





User password change form





auth/changepassword.php





Password change validation and update



  


cart/addtocart.php





Add an item to the shopping cart





cart/empty.php





Empty the shopping cart





cart/showcart.php





Show the user the cart contents





templates/showcart.tpl





Cart template





cart/updatecart.php





Update cart quantities



  


customer/details.php





Enter or amend user details





customer/validate.php





Validate and update amended user details





customer/receipt.php





User update receipt





templates/custreceipt.tpl





User update receipt template



  


order/order-step1.php





Collect credit card details and delivery instructions





order/order-step2.php





Validate credit card details





order/order-step3.php





Finalize order





order/order-step4.php





Send email receipt





order/receipt.php





Show HTML order receipt





search/searchform.php





Collect search criteria





search/search.php





Browse wines





templates/search.tpl





Browse wines template



  


includes/customHandler.inc





Custom error handler





templates/winestore.tpl





Skeleton template for all winestore pages





templates/details.tpl





Template for most winestore form pages





includes/validate.inc





Validation functions





includes/winestore.inc





General-purpose functions and define( )

statements





includes/db.inc





DBMS credentials




























     < Day Day Up > 



    No comments:

    Post a Comment