Enter your Sign on user name and password.

Forgot password?
Sign In | Subscribe
Start learning today, and be successful in your academic & professional career. Start Today!
Use Chrome browser to play professor video
Matthew M.

Matthew M.

Web Application Development

Slide Duration:

Table of Contents

Course Introduction

12m 13s

Intro
0:00
What Is PHP?
0:12
PHP Hypertext Preprocessor
0:13
Why Learn PHP?
1:09
Why Learn PHP?
1:10
Web Application: Educator Store
2:25
Web Application: Educator Store
2:26
Example of Web Application
3:18
PHP in the Educator Store
7:12
Dynamic Content Generation
7:22
Ease of Website Maintenance
7:55
Form Input Processing and Access to Advanced Functionality
9:00
What You Will Learn
9:36
What You Will Learn
9:37
Who Is This Course For?
10:56
Who Is This Course For?
10:57
How PHP & The Web Work

15m 32s

Intro
0:00
Lesson Overview
0:10
Lesson Overview
0:11
Client-Server Model
0:53
Client-Server Model
0:54
HTTP Protocol
2:15
Definition of Protocol
2:16
Hypertext Transfer Protocol (HTTP)
2:37
Uniform Resource Locators
3:46
Uniform Resource Locators (URLs)
3:47
Form of URLs
4:13
Accessing Webpages with URLs
5:13
Serving Webpages
6:14
Serving Webpages, Client Machine, and Server Machine
6:15
Static vs. Dynamic Webpages
8:30
Static Webpage
8:31
Dynamic Webpage
8:55
Server-Side Scripting
9:54
Server-Side Scripting
9:55
Static and Dynamic Webpage Coding Example
11:17
Static and Dynamic Webpage Coding Example
11:18
Serving Dynamic Webpages
13:07
Serving Dynamic Webpages
13:08
Setting Up Your Development Environment

33m 11s

Intro
0:00
Lesson Overview
0:08
Lesson Overview
0:09
Development Environments
1:04
Development Environments
1:05
Our Default Development Environment: Window 7
1:54
Remote Development
4:04
Development Machine & Remote Server
4:05
Local Development
6:54
Development Machine
6:55
Software Used In This Course
9:41
Firefox Web Browser & Firebug Add-On
9:42
XAMPP
12:15
PSPAD Text Editor
13:16
XAMPP Installation
13:49
XAMPP Installation
13:50
Verify XAMPP Install
16:26
Verify XAMPP Install
16:27
localhost
19:08
localhost and 127.0.0.1 'loopback' IP Address
19:09
Document Root
21:16
Document Root and Directory Name
21:17
Document Root for Apache in XAMPP: htdocs & Example
22:13
Text Editor Spectrum
26:12
Text Editor Spectrum: Barebones to IDE
26:13
PSPad & Example
27:02
Finding Help
30:26
Web Resources
30:27
Homework Challenge
31:36
Homework Challenge
31:37
Homework Challenge (cont.)
32:38
Homework Challenge (cont.)
32:39
Your First PHP Script

12m 41s

Intro
0:00
Lesson Overview
0:19
Lesson Overview
0:20
.php To HTML
1:00
.php To HTML
1:01
PHP Delimiters
2:20
PHP Delimiters: Opening & Closing PHP Tags
2:21
'Hello, World!' Example
4:34
Echo Statement & PHP Tags
4:35
Adding Second Heading
7:34
Homework Challenge
9:56
Homework Challenge
9:57
Basic PHP Syntax

40m 24s

Intro
0:00
Lesson Overview
0:09
Lesson Overview
0:10
PHP Delimiters
0:38
Long and Script Form
0:39
Short and ASP Style
1:33
Example
2:01
php.ini: PHP's Configuration
3:40
php.ini
3:41
Configuration Directives
3:48
Short and ASP Style: Enabled/Disabled
4:13
phpinfo()
7:58
Statements
14:28
PHP Statements
14:29
Example: PHP Statements
14:55
Comments
16:53
PHP Comments
16:55
Single-line Comments
17:37
Multi-line Comments
18:13
Example: PHP Comments
18:47
Coding Conventions
24:26
Coding Conventions
24:27
Example: PHP Coding Conventions
26:19
Homework Challenge #1
33:51
Homework Challenge #1
33:52
Homework Challenge #1 (cont.)
35:41
Homework Challenge #1 (cont.)
35:42
Homework Challenge #2
36:09
Homework Challenge #2
36:10
Homework Challenge #2 (cont.)
38:07
Homework Challenge #2 (cont.)
38:08
Variables & Numeric Data Types

16m 38s

Intro
0:00
Lesson Overview
0:10
Lesson Overview
0:12
Working With Data
0:48
8 Types of Data for PHP
0:49
Identifiers
1:40
Identifiers: Definition and Example
1:41
Variables
2:47
Variables Definition
2:48
Variables Syntax
3:06
Integer Data Type
4:44
Integer Data Type
4:45
Integer Literals
5:08
Examples
5:30
Float Data Type
6:26
Float Data Type
6:27
Float Literals
7:00
Example
7:21
Example: PHP Code Declaring Variables
8:06
Example: PHP Code Declaring Variables
8:07
var_dump() Function
9:59
var_dump()
10:00
Example: Code and Output
10:30
Example: var_dump() Function
11:19
Coding Conventions: Variables
12:32
Lower Camel Case Notation
12:33
Variable Name Lengths
13:54
Homework Challenge
14:54
Homework Challenge
14:55
String Data Type

18m 6s

Intro
0:00
Lesson Overview
0:12
Lesson Overview
0:13
String Data Type
0:29
String Data Type
0:30
Specifying String Literals
1:03
Single-Quoted Strings
1:53
Single-Quoted Strings
1:54
Escape Sequences
2:31
Escape Sequences
2:32
Example
2:46
Escape Sequences for Commonly Used Special Characters
4:32
Double-Quoted Strings
6:04
Double-Quoted Strings
6:05
Variable Interpolation
6:44
Coding Conventions: Strings
7:54
Coding Conventions: Strings
7:55
Homework Challenge
8:54
Homework Challenge
8:55
Include Files & Web Application Introduction

38m 43s

Intro
0:00
Lesson Overview
0:16
Lesson Overview
0:17
include Statement
0:47
include Statement: Definition
0:48
Include Statement: Syntax
2:05
include Statement: Example
2:25
include Path
6:32
Absolute and Relative Path
6:34
Specified Path
7:15
Not Specified Path
7:55
Code Reuse
9:35
Code Reuse
9:36
Example
11:11
require Statement
12:56
require Statement: Definition
12:57
require Statement: Syntax
13:32
Include versus Require
13:52
Coding Conventions
16:33
Coding Conventions
16:34
Introduction to Our Web Application
20:32
Introduction to Our Web Application
20:33
Updating Web Application
21:14
Web Application Example
22:59
Homework Challenge
35:33
Homework Challenge
35:34
Homework Challenge (cont.)
37:38
Homework Challenge (cont.)
37:39
Arrays

34m

Intro
0:00
Lesson Overview
0:09
Lesson Overview
0:10
What is an Array?
0:42
What is an Array?
0:43
Arrays in PHP
1:44
Keys and Values
2:15
Types of Arrays
3:37
Indexed Arrays & Associative Arrays
3:38
array() Construct
6:47
Declaring Arrays
6:48
Defining Indexed Array
7:00
Defining Associative Arrays
7:43
Square Bracket Syntax
8:50
Square Bracket Syntax
8:51
Accessing Indexed Arrays
9:02
Accessing Associative Arrays
9:56
Arrays Example
10:41
Indexed Arrays Example
10:45
Associative Arrays Example
13:55
Multi-Dimensional Arrays
18:28
Multi-Dimensional Arrays
18:29
Multi-Dimensional Arrays Example
18:51
Multi-Dimensional Arrays in PHP File
20:34
Coding Conventions: Arrays
27:59
Coding Conventions: Arrays
28:00
Homework Challenge #1
29:20
Homework Challenge #1
29:21
Homework Challenge #2
30:38
Homework Challenge #2
30:39
Web Application Development

27m 38s

Intro
0:00
Versions
0:14
Version 3.0
1:23
Version 3.1
8:08
Version 3.2
11:42
Version 3.3
20:27
Homework Challenge
26:31
Homework Challenge
26:32
Script Input & The GET Method

30m 18s

Intro
0:00
Lesson Overview
0:15
Lesson Overview
0:16
Providing Input to PHP
0:39
GET Method, POST Method, and Cookies
0:40
Name/Value Pairs
1:22
GET Method
1:57
HTTP GET Method
1:58
Query String
2:52
GET Method Example
3:38
GET Method Example
3:39
Review of HTML Forms
8:16
HTML Forms
8:17
Input Control and Submitted Form
9:13
<form> Tag
10:07
<form> Tag
10:08
Method
10:34
Action
11:13
Input Control Examples
11:50
Input Control Examples
11:51
Common Input Controls
17:31
Common Input Controls
17:32
Query Strings
18:52
Query Strings
18:53
Query Strings Syntax
19:12
URL Encoding
20:01
URL Syntax
20:02
Examples
21:17
Simple Form Example
22:28
urlencode() Function
24:08
urlencode() Function
24:09
Example
25:03
urlEncoding Text Example
25:54
Simple Form Example
25:55
Homework Challenge
28:46
Homework Challenge
28:47
Accessing Form Data in PHP

32m 1s

Intro
0:00
Lesson Overview
0:17
Lesson Overview
0:18
$_GET Array
0:48
$_GET Array
0:49
Accessing the Value of a Name/Value Pair Submitted Via GET
1:04
Name Form Example
2:54
Name Form and the $_GET Array
2:55
Using Arrays with Input Controls
6:34
Using Arrays with Input Controls
6:35
Common Example
6:47
Indexed Array Form Example
8:16
Indexed Array Form Example
8:17
Associative Arrays with Input Controls
10:14
Associative Arrays with Input Controls
10:15
Associative Arrays Example
11:41
Associative Arrays Example
11:42
Echo Form Example
15:18
Echo Form Example
15:19
Outputting Arrays In String
23:42
Variable Interpolation
23:43
Outputting a Value in an Indexed Array Within a String
24:12
Simple' Syntax, 'Complex' Syntax, and 'Curly Brace' Syntax
25:00
Outputting Arrays In String Example
26:25
Outputting Arrays In String Example
26:26
Homework Challenge
29:39
Homework Challenge
29:40
Web Application Development

20m 20s

Intro
0:00
Lesson Overview
0:19
Lesson Overview
0:20
Version 3.3
0:38
Version 3.3
0:42
Version 4.0 Changelog
2:43
GET Query
2:45
Adding, Editing, and Removing
3:24
Version 4.0 Coding Example
3:55
item.php, itemID, and itemListing
4:00
Version 4.1 Changelog
10:36
Version 4.1 Changelog
10:37
Version 4.1 Coding Example
11:45
Adding Checkout and Thank You & Editing Footer and Store
11:46
Homework Challenge
18:45
Homework Challenge
18:46
Expression & Operators

31m 56s

Intro
0:00
Lesson Overview
0:10
Lesson Overview
0:11
Expressions
0:41
Expressions Definition
0:42
Example: Literals
0:55
Example: Variables
1:05
Operators
1:44
Operators Definition
1:45
Unary, Binary, and Ternary Operators
2:07
Assignment Operators
2:52
Assignment Operators
2:53
Array Assignment Operator
3:47
Arithmetic Operators
6:15
Operators for Common Arithmetic Operations
6:16
Modulus Operator
7:41
Arithmetic Operators Example
8:25
Increment/Decrement Operators
10:48
Increment/Decrement Operators
10:49
Pre- and Post- Increment/Decrement
12:43
Coding Example
15:14
Combined Assignment Operators
16:44
Combined Assignment Operators
16:45
Combined Assignment Operators Examples
18:23
Coding Example
19:39
String Operators
20:28
Concatenation Operator, String Variables, and String Literals
20:29
String Operators Example
22:41
Precedence & Associativity
23:40
Precedence & Associativity
23:41
Expression Containing Multiple Operations
23:58
Expression Containing Two Operations of Equal Precedence
25:55
Using Parentheses to Force Precedence
26:52
Precedence & Associativity Review
28:57
Homework Challenge
31:08
Homework Challenge
31:09
Web Application Development

20m 51s

Intro
0:00
Lesson Overview
0:15
Lesson Overview
0:16
Version 4.1 Review
0:33
Version 4.1 Review
0:34
Version 5.0 Changelog
1:05
Version 5.0 Changelog
1:06
Version 5.0 Example
2:19
Adding View Cart & Editing Checkout, Footer and Store
2:20
Version 5.1 Changelog
15:36
Version 5.1 Changelog
15:37
Version 5.1 Coding Example
17:33
Forwarding Order Total to Thank You Page
17:34
Homework Challenge
20:09
Homework Challenge
20:10
Boolean & Null Data Types

20m 11s

Intro
0:00
Lesson Overview
0:12
Lesson Overview
0:13
Boolean Data Type
0:38
Boolean Data Type
0:39
Two Boolean Literals
1:24
Boolean Example
1:50
Boolean Example
1:51
Comparison Operators
4:00
Comparison Operators Definition
4:01
Common Comparison Operators
4:40
Comparison Operators Example
6:49
Comparison Operators (Cont.)
10:10
Identical and Not Identical
10:11
Example: Identical and Not Identical
11:24
Null Data Type
13:36
Null Data Type Definition
13:37
Null Literal
14:08
Variable and Null Data Type
14:30
'==' Operator
15:24
Null Data Type Example
15:59
Coding Convention
18:41
Coding Convention
18:42
Homework Challenge
19:17
Homework Challenge
19:18
Type Casting

22m 41s

Intro
0:00
Lesson Overview
0:12
Lesson Overview
0:13
Type Juggling
0:54
Type Juggling
0:55
Automatic Conversion
2:23
Type Casting
3:53
Type Casting
3:54
Implicit and Explicit Type Casting
4:00
Explicitly 'cast' a Variable Example
4:16
Type Casting (cont.)
6:48
PHP Allows the Following Explicit Type Casts
6:49
The settype () Function
8:18
Type Casting Coding Example
9:00
Explicit Type Casts
9:01
String Conversions
14:52
String Conversions
15:05
Common Conversions to String
15:55
Numeric Conversions
18:18
Numeric Conversions
18:19
Boolean Conversions
20:29
Boolean Conversions
20:30
Homework Challenge
21:38
Homework Challenge
21:39
Introduction to Functions

52m 20s

Intro
0:00
Lesson Overview
0:10
Lesson Overview
0:11
What are Functions?
0:51
Definition of Faction
0:52
PHP and Function Call
1:53
Function Calls
2:42
Function Calls
2:43
Function Arguments
3:17
Return Values
4:56
Return Values
4:57
Function Chaining
6:29
Function Chaining
6:30
PHP.net Function Reference
8:23
PHP.net & Function Prototypes
8:24
PHP.net Function Reference Example
9:29
Optional Function Arguments
12:28
Optional Function Arguments
12:29
String Functions
14:57
strtoupper() and strtolower()
14:58
implode (), str_replace(), explode(), strpos(), substr(), and strlen()
18:31
Array Functions
25:48
count()
25:49
in_array() and array_key_exists()
26:06
sort() and ksort()
26:37
Example: count() and in_array()
27:50
Example: array_key_exists()
29:53
Example: sort() and ksort()
31:20
Date & Time Functions
33:38
date() and time()
33:39
getdate()
34:49
mktime()
35:01
Date & Time Functions
35:12
Example: date() and time()
35:58
Example: getdate()
42:15
Example: mktime()
43:15
Homework Challenge #1
44:31
Homework Challenge #1
44:32
Homework Challenge #1 (Cont.)
45:28
Homework Challenge #1 (Cont.)
45:29
Homework Challenge #2
46:34
Homework Challenge #2
46:34
Homework Challenge #2 (Cont.)
48:06
Homework Challenge #2 (Cont.)
48:07
Homework Challenge #2 (Cont.)
49:17
Homework Challenge #2 (Cont.)
49:18
Homework Challenge #3
50:08
Homework Challenge #3
50:09
Constants

19m 24s

Intro
0:00
Lesson Overview
0:09
Lesson Overview
0:10
Constants vs. Variables
0:55
Constants vs. Variables
0:56
Constant Identifiers
2:28
Constant Identifiers Definition and Examples
2:29
Declaring Constants
3:47
Two Ways of Declaring Constants
3:48
Syntaxes
4:10
Major Difference in the Two Forms
4:48
Using Constants Example
6:25
Using Constants Example
6:26
Coding Conventions
11:08
Constant Names
11:09
define () Function
11:42
Meaningful Names
12:00
$_SERVER Superglobal
12:23
$_SERVER
12:24
$_SERVER ['DOCUMENT_ROOT']
13:15
$_SERVER Superglobal Example
13:52
Homework Challenge
17:40
Homework Challenge
17:41
Web Application Development

26m 29s

Intro
0:00
Lesson Overview
0:13
Lesson Overview
0:14
Version 6.0
1:13
Version 6.0 & Version 5.1 Review
1:14
Version 6.0 Changelog
11:24
Version 6.0 Changelog
11:25
Version 6.1 Changelog
12:00
Version 6.1 Changelog
12:01
Version 6.1 Coding Example
12:42
Version 6.1 Coding Example
12:43
Version 6.2 Changelog
15:18
Version 6.2 Changelog
15:19
Version 6.2 Coding Example
18:19
Version 6.2 Coding Example
18:20
Homework Challenge
25:24
Homework Challenge
25:25
Conditional Control Structures

18m 58s

Intro
0:00
Lesson Overview
0:26
Lesson Overview
0:27
Statement Groups
0:57
Statement Groups
0:58
Example
1:10
Conditional Control Structures
1:38
Conditional Control Structures
1:39
PHP Control Structures
1:56
if Statement
2:32
if Statement
2:33
if Statement (cont.)
3:49
if Statement Coding Example
3:50
else Statement
7:26
else Statement
7:27
if/else Statement Coding Example
8:50
isset() Construct
9:59
isset() Construct
10:00
isset() Construct Coding Example
12:00
Coding Conventions
15:13
Coding Conventions
15:14
Coding Conventions (Cont.)
16:39
Coding Conventions (Cont.)
16:40
Homework Challenge
17:25
Homework Challenge
17:26
Error Handling

19m 8s

Intro
0:00
Lesson Overview
0:09
Lesson Overview
0:10
Error Handling in PHP
0:41
Error Handling in PHP
0:42
Coding Example
1:45
error_reporting() Function
7:02
error_reporting() Function
7:03
Coding Example
8:04
Additional Error Directives
9:02
display_errors
9:13
log_errors
9:37
error_log
9:50
track_errors
10:12
Coding Examples
10:29
Error Control Operator
13:38
Error Control Operator & Coding Example
13:39
Homework Challenge
16:19
Homework Challenge
16:20
Homework Challenge (cont.)
17:58
Homework Challenge (cont.)
17:59
Logical & Ternary Operators

23m 22s

Intro
0:00
Lesson Overview
0:17
Lesson Overview
0:18
Logical Operators
0:49
Logical Operators Definition
0:50
NOT (!)
1:08
OR ( ||, or)
1:35
AND (&&, and)
2:08
XOR (xor)
2:30
Logical Operators (cont.)
2:54
The OR and AND Logical Operators
2:55
Precedence of Logical Operators
3:35
Logical Operators Coding Example
3:58
Logical Operators Coding Example
3:59
Short-Circuit Operators
9:54
Short-Circuit Operators
9:55
Coding Example
10:49
Ternary Operator
14:07
Ternary Operator
14:08
Syntax and Example
14:24
Coding Conventions
17:36
Coding Conventions
17:37
Homework Challenge
19:08
Homework Challenge
19:09
Homework Challenge (cont.)
20:26
Homework Challenge (cont.)
20:27
Web Application Development

19m 27s

Intro
0:00
Lesson Overview
0:12
Lesson Overview
0:13
Version 6.2 Review
0:26
Version 6.2 Review
0:27
Version 7.0 Changelog
2:39
Version 7.0 Changelog
2:40
Version 7.0 Coding Example
4:35
Version 7.0 Coding Example
4:36
Version 7.1 Changelog
12:43
Version 7.1 Changelog
12:44
Version 7.1 Coding Example
13:52
Version 7.1 Coding Example
13:53
Homework Challenge
17:42
Homework Challenge
17:43
More Conditional Control Structure

20m 49s

Intro
0:00
Lesson Overview
0:13
Lesson Overview
0:14
elseif Statement
0:45
elseif Statement
0:46
elseif Statement Coding Example
1:22
Multiple elseif Statements
2:16
Multiple elseif Statements
2:17
Multiple elseif Statements Coding Example
3:07
Adding an else Statement
5:44
Adding an else Statement Overview
5:45
Adding an else Statement Coding Example
6:50
switch() Statement
8:07
switch() Statement
8:08
switch() Statement (Cont.)
9:14
switch() Statement (Cont.)
9:15
switch() Statement Coding Example
11:09
default Case
14:20
default Case
14:21
default Case Coding Example
15:13
Coding Conventions
15:57
Coding Conventions
15:58
Coding Conventions (cont.)
17:10
Coding Conventions (cont.)
17:11
Homework Challenge
18:06
Homework Challenge
18:07
Homework Challenge (cont.)
19:18
Homework Challenge (cont.)
19:19
Nested Conditional Control Structures

24m 49s

Intro
0:00
Lesson Overview
0:10
Lesson Overview
0:11
Nested Control Structures
0:36
Nested Control Structures
0:37
Nested Control Structures Coding Example
2:08
Coding Conventions
6:34
Nested vs. Not Nested Control Structures
6:35
Debugging Control Structures
7:51
Debugging Control Structures
7:52
Incorrectly Specified Test Conditions and Forgetting a Break Statement
8:32
Incorrectly Placing an Opening or Closing Curly Brace
12:14
Debugging Tips
16:24
Tracing the Execution of Your Code
16:25
Adding Echo Statement
17:15
Homework Challenge
21:41
Homework Challenge
21:42
Homework Challenge (cont.)
23:08
Homework Challenge (cont.)
23:09
Web Application Development

28m 20s

Intro
0:00
Lesson Overview
0:13
Lesson Overview
0:14
Version 7.1 Review
0:46
Version 7.1 Review
0:47
empty () Construct
1:38
empty () Construct
1:39
empty () Construct Coding Example
2:37
Version 8.0
5:32
Version 8.0 Overview
5:33
Version 8.0 Coding Example
7:08
Version 8.0 Coding Example
7:09
Version 8.1
16:13
Version 8.1 Overview
16:14
Version 8.1 Coding Example
19:48
Version 8.1 Coding Example
19:49
Homework Challenge
26:19
Homework Challenge
26:20
Sending Email Using PHP

43m 50s

Intro
0:00
Lesson Overview
0:14
Lesson Overview
0:15
Built-in Mail Extension
1:28
Built-in Mail Extension
1:29
SMTP Overview
2:04
SMTP Overview
2:05
SMTP - Windows
3:08
SMTP - Windows
3:09
SMTP - Linux/UNIX
4:58
SMTP - Linux/UNIX
4:59
Mail Configuration Directives
6:35
Mail Configuration Directives
6:36
Coding Example
7:48
Mail Server Authentication
10:20
Mail Server Authentication
10:21
fake sendmail Program
12:27
fake sendmail for Windows
12:28
Main 'add-on' feature
13:03
Username & Password
13:25
SMTP - XAMPP for Windows
14:07
SMTP - XAMPP for Windows
14:08
Sendmail Example
16:19
Sendmail Example
16:20
mail() Function
18:39
mail() Function
18:40
additional_headers
19:45
'From' Header
20:12
mail() Function Coding Example
21:09
mail() Function Coding Example
21:40
Web Application Development
31:43
Version 9.0 Changelog
31:44
ContactUs.php
32:52
ContactUs.php
32:53
contactInfo
33:45
Version 9.0 Coding Example
34:31
Version 9.0 Coding Example
34:32
Homework Challenge
41:32
Homework Challenge
41:33
User-Defined Functions

56m

Intro
0:00
Lesson Overview
0:16
Lesson Overview
0:17
Defining Functions
1:29
Four Parts of Defining a Function
1:30
Functions Example 1
2:29
Function Parameters
5:29
Function Parameters
5:30
Functions Example 2
8:20
Return Statements
12:53
Return Statements
12:54
Functions Example 3
14:20
Where to Define Functions
20:34
Where to Define Functions
20:35
include_once Construct
22:10
include_once Construct
22:11
include_once Coding Example
23:55
Reasons to Use Functions
27:44
Take Advantage of Code Reuse
27:45
Improve Code Readability
29:56
Use Instead of 'content' Include Files
32:12
Web Application Development
34:42
Version 10.0 Changelog
34:43
Version 10.0 Coding Example
37:55
Version 10.0 Coding Example
37:56
Outputting HTML in Functions
47:04
Outputting HTML in Functions
47:05
Example
49:02
Coding Conventions
53:16
Coding Conventions
53:17
Homework Challenge
54:33
Homework Challenge
54:34
Variable Scope

31m 37s

Intro
0:00
Lesson Overview
0:09
Lesson Overview
0:10
What is Variable Scope?
0:57
Variable Scope
0:58
Global Scope
1:15
Local Function Scope
1:50
Variable Scope Coding Example
2:26
Variable Scope Coding Example
2:27
global Keyword
8:52
global Keyword Overview
8:53
global Keyword Example
9:25
Superglobals
12:34
Superglobals
12:35
Superglobals Example
14:53
Pitfalls of Global Variables
18:34
Pitfalls of Global Variables
18:35
When to Define Variables
22:09
When to Define Variables
22:10
Putting It All Together
22:56
Putting It All Together Example
22:57
Function Scope
28:56
Function Scope
28:57
Homework Challenge
29:41
Homework Challenge
29:42
Homework Challenge (cont.)
30:59
Homework Challenge (cont.)
31:00
Web Application Development

28m 27s

Intro
0:00
Lesson Overview
0:12
Lesson Overview
0:13
Version 11.0 Changelog
0:56
Version 11.0 Changelog
0:57
processGetVar()
1:42
processGetVar() Overview
1:43
processGetVar() Example
2:25
emailComments()
6:35
emailComments() Overview
6:36
emailComments() Example
7:14
outputItemLink()
11:19
outputItemLink() Overview
11:20
outputItemLink() Example
11:45
calcCartTotal()
19:25
calcCartTotal() Overview
19:26
calcCartTotal() Example
21:14
Homework Challenge
25:56
Homework Challenge
25:57
Optional Parameters

19m 35s

Intro
0:00
Lesson Overview
0:10
Lesson Overview
0:11
Optional Parameters
0:26
Optional Parameters Definition
0:27
Default Values
0:53
Optional Parameters Coding Example
3:26
More on Optional Parameters
6:55
Multiple Optional Parameters
6:56
Coding Example
8:05
Homework Challenge
16:18
Homework Challenge
16:19
Web Application Development

23m 7s

Intro
0:00
Lesson Overview
0:13
Lesson Overview
0:14
Version 12.0 Changelog
0:55
Version 12.0 Changelog
0:56
Update to outputLink()
1:44
Update to outputLink()
1:45
outputLink() Coding Example
2:40
outputImg()
13:57
outputImg() Overview
13:58
outputImg() Coding Example
15:35
Homework Challenge
22:05
Homework Challenge
22:06
Introduction to Conditional Loops

57m 20s

Intro
0:00
Lesson Overview
0:08
Lesson Overview
0:09
while Loop
0:48
Definition
0:49
Syntax and Usage
1:12
Coding Example
3:33
Looping Over Arrays
13:16
Looping Over Arrays
13:17
Coding Example
13:53
Looping Over Arrays (cont.)
16:43
Internal Array Pointer
16:44
Array Traversal Functions
17:29
current ()
17:30
next () and prev ()
18:16
reset () and end ()
19:25
key ()
19:40
Indexed Arrays: Using current () and next ()
20:40
Indexed Arrays: Using current () and next ()
20:41
Associative Arrays: Using key (), current (), and next ()
24:06
Associative Arrays: Using key (), current (), and next ()
24:07
Array Traversal Functions (cont.)
29:41
list () Construct and Example
30:07
each () Construct and Example
34:40
Lopping Over Arrays Using list(), each()
42:13
Lopping Over Arrays Using list(), each()
42:14
Control Structure Scope
50:37
Definition and Example
50:38
Control Structure Scope Coding Example
51:59
Coding Conventions
54:20
Coding Conventions
54:21
Homework Challenge
54:58
Homework Challenge
54:49
More on Conditional Loops

35m 50s

Intro
0:00
Lesson Overview
0:08
Lesson Overview
0:09
do-while Loop
0:42
do-while Loop
0:43
Simple do-while Loop Example
1:51
Another do-while Loop Example
4:09
continue Statement
10:46
continue Statement
10:47
For Example
11:07
continue Statement Coding Example
12:44
break Statement Re-Visited
18:10
break Statement Re-Visited
18:11
break Statement In while Loops Example
19:38
Infinite Loops
23:26
Infinite Loops
23:27
Coding Example
24:57
Common Loop Pitfalls
25:59
Counter Initialization Occurs in Loop
26:30
Counter Not Incremented in Loop
29:30
Unreachable Break Statement
30:50
Coding Conventions
33:48
Do-while Statements Coding Conventions
33:49
Homework Challenge
34:28
Homework Challenge
34:29
Web Application Development

22m 7s

Intro
0:00
Lesson Overview
0:10
Lesson Overview
0:11
Version 13.0 Changelog
0:48
Updating 'viewCart.php' and calcCartTotal()
0:49
Creating isValidCart()
9:22
Adding Three New Item to the Store & Links
15:56
Version 13.1 Changelog
17:20
Updating outputItemLink() to Remove Its Global Dependency on $itemCatalog
17:21
Homework Challenge
20:34
Homework Challenge
20:35
For & Foreach Loops

29m 28s

Intro
0:00
Lesson Overview
0:11
Lesson Overview
0:12
for Loops
0:45
for Loops
0:46
Expression 1
1:22
Expression 2
1:47
Expression 3
2:01
Simple Example
2:27
Simple Example
2:28
Notes on for Loops
8:56
Notes on for Loops
8:57
Ending Loop Using Test Condition and Break Statement
10:06
Ending Loop Using Test Condition and Break Statement
10:07
foreach Loops
12:03
foreach Loops
12:04
Indexed Array Syntax
14:10
Syntax
14:11
Example
15:23
Associative Array Syntax
18:31
Syntax
18:32
Example
19:47
Coding Conventions
25:05
for Loops
25:06
foreach Loops
25:58
Homework Challenge
26:52
Homework Challenge
26:53
Web Application Development

25m 58s

Intro
0:00
Lesson Overview
0:12
Lesson Overview
0:13
Version 14.0 Changelog
1:19
Version 14.0 Changelog
1:20
Version 14.0 Coding Example
1:57
Version 14.0 Coding Example
1:59
Version 14.1 Changelog
5:39
Version 14.1 Changelog
5:40
Version 14.1 Coding Example
7:06
Version 14.1 Coding Example
7:07
Version 14.2 Changelog
15:37
Version 14.2 Changelog
15:38
Version 14.2 Coding Example
16:25
Version 14.2 Coding Example
16:26
Homework Challenge
23:35
Homework Challenge
23:36
Conditional Loop Wrap-Up

23m 12s

Intro
0:00
Lesson Overview
0:09
Lesson Overview
0:10
Nested Conditional Loops
0:39
Nested Conditional Loops
0:40
Coding Example
1:10
continue & break Re-Visited
5:17
Continue Statements and Coding Example
5:30
Break Statements and Coding Example
11:34
Loop Debugging Tips
15:16
Add Short Debug Statement At the Very Beginning
15:17
Output a Counter Variable
18:10
Add Debug Statement At the Very End
19:20
Homework Challenge
20:20
Homework Challenge
20:21
Homework Challenge (cont.)
22:00
Homework Challenge (cont.)
22:01
Variable-Length Parameter Lists

22m 16s

Intro
0:00
Lesson Overview
0:09
Lesson Overview
0:10
Variable-Length Parameter Lists
0:34
Variable-Length Parameter Lists
0:35
Coding Example
1:51
Variable-Length Parameter Lists (cont.)
5:21
When a Parameter List is Defined For the Functions
5:22
Coding Example
6:32
Variable Type Functions
9:54
is_int (), is_float (), is_string (), and is_bool()
9:55
is_ array ()
10:50
is_null ()
11:01
Variable Type Functions Coding Example 1
11:27
is_numeric() and Example
15:57
Variable Type Functions Coding Example 2
17:12
Homework Challenge
19:35
Homework Challenge
19:36
Homework Challenge (cont.)
20:52
Homework Challenge (cont.)
20:53
Web Application Development

38m 36s

Intro
0:00
Lesson Overview
0:10
Lesson Overview
0:11
Version 15.0 Changelog
0:33
outputLink (), outputImg (), is_array () and is_string ()
0:34
Version 15.0 Coding Example
1:31
Version 15.0 Coding Example
1:32
Version 15.1 Changelog
7:55
Removing Redundant Code and Adding New Function Called outputHtmlTag ()
7:56
Version 15.1 Coding Example
8:37
Version 15.1 Coding Example
8:38
Version 16.0 Changelog
14:55
Creating emailOrder() Using New Constants ORDER_EMAIL_FROM and ORDER_EMAIL_SUBJECT
14:56
Version 16.0 Coding Example
16:30
Version 16.0 Coding Example
16:31
Version 16.1 Changelog
32:21
Creating formatAsDollars ()
32:22
Version 16.1 Coding Example
32:57
Version 16.1 Coding Example
32:58
Homework Challenge
36:27
Homework Challenge
36:28
Miscellaneous Topics

31m 49s

Intro
0:00
Lesson Overview
0:10
Lesson Overview
0:11
register_globals Directive
0:58
register_globals
0:59
Coding Example
2:04
$_GET vs. $HTTP_GET_VARS
4:07
$_GET vs. $HTTP_GET_VARS
4:08
register_long_arrays Directive Coding Example
5:44
Magic Constants
7:30
Magic Constants
7:31
__LINE__, __FILE__, __FIR__, and __FUNCTION__
8:16
Coding Example
9:06
exist() & die()
13:19
exist() & die()
13:20
Coding Example
14:08
Execution Operator
16:23
Execution Operator
16:24
Coding Example
17:27
Array Operators
18:23
Equality (==) and Inequality (!=, <>)
18:43
Identity (===) and Non-Identity (!==)
19:13
Union (+) Operator
19:41
Array Operators Coding Example
20:07
Variable Variables
24:13
Variable Variables
24:14
Coding Example
26:07
Variable Functions
28:02
Variable Functions
28:03
Coding Example
29:13
Loading...
Educator®

Please sign in to participate in this lecture discussion.

Sign-In OR Create Account

Enter your Sign-on user name and password.

Forgot password?

Start Learning Now

Our free lessons will get you started (Adobe Flash® required).
Get immediate access to our entire library.

Sign up for Educator.com

Membership Overview

  • Unlimited access to our entire library of courses.
  • Search and jump to exactly what you want to learn.
  • *Ask questions and get answers from the community and our teachers!
  • Practice questions with step-by-step solutions.
  • Download lesson files for programming and software training practice.
  • Track your course viewing progress.
  • Download lecture slides for taking notes.
This is a quick preview of the lesson. For full access, please Log In or Sign up.
For more information, please see full course syllabus of Introduction to PHP
  • Discussion

  • Study Guides

  • Download Lecture Slides

  • Table of Contents

  • Transcription

  • Related Services

Start Learning Now

Our free lessons will get you started (Adobe Flash® required).
Get immediate access to our entire library.

Sign up for Educator.com

Membership Overview

  • Unlimited access to our entire library of courses.
  • Search and jump to exactly what you want to learn.
  • *Ask questions and get answers from the community and our teachers!
  • Practice questions with step-by-step solutions.
  • Download lesson files for programming and software training practice.
  • Track your course viewing progress.
  • Download lecture slides for taking notes.
  • Learn at your own pace... anytime, anywhere!

Web Application Development

  • empty() is a PHP construct used to determine if a variable is ‘empty’.
  • It returns FALSE if the variable passed to it is ‘empty’, where a variable is considered ‘empty’ if it has not been declared yet OR if its value is:
    • the empty string, ‘’
    • the integer 0
    • the float 0.0
    • the string ‘0’
    • FALSE
    • NULL
    • an empty array
  • Additional Resources:

Web Application Development

Lecture Slides are screen-captured images of important points in the lecture. Students can download and print out these lecture slide images to do practice problems as well as take notes while watching the lecture.

  • Intro 0:00
  • Lesson Overview 0:13
    • Lesson Overview
  • Version 7.1 Review 0:46
    • Version 7.1 Review
  • empty () Construct 1:38
    • empty () Construct
    • empty () Construct Coding Example
  • Version 8.0 5:32
    • Version 8.0 Overview
  • Version 8.0 Coding Example 7:08
    • Version 8.0 Coding Example
  • Version 8.1 16:13
    • Version 8.1 Overview
  • Version 8.1 Coding Example 19:48
    • Version 8.1 Coding Example
  • Homework Challenge 26:19
    • Homework Challenge

Transcription: Web Application Development

Hello again, and welcome back to Educator.com's Introduction to PHP course.0000

In today's lesson, we are going to be continuing developing of our web application,0005

incorporating what we have learned about nested control structures to improve the application.0008

Specifically, we are going to review what was the state of the application as far as the last version, which was version 7.1.0015

We are also going to introduce a new construct, called empty,0022

which is useful for form validation and making sure that data was provided to a form as needed.0027

And then, we are going to go over two new versions of our web application, versions 8.0 and 8.1,0034

in which you are going to use nested control structures to add some features.0042

First, as we talk about 7.1: in 7.1, we added some simple GET input validation.0047

And what we did was: we just used the isset method to check whether a particular GET variable we were going to use was supplied or not.0055

However, we didn't really go any farther than that, as far as validating that the data that was input was valid,0063

and was what we needed, and was the right type of data.0068

So, that is what we are going to expand on in this version 8.0.0072

For example, in our checkout form, we are going to make sure that at least one item was selected in the Shopping Cart.0078

And when we go to our thankYou page, when we go to complete our order,0084

we are going to make sure that the user provided all of the necessary shipping and billing information.0089

Before we do that, I do want to talk about the empty construct, though.0094

This is a built-in PHP construct that is used to determine if a variable is "empty."0100

And it is useful, as I mentioned, for processing form data, to make sure0107

that specific GET variables were provided to a script, and that they actually had a value.0112

What it does is: it takes a variable in as its argument, and it returns a boolean value, either true or false,0120

based on whether the variable is considered empty or not.0126

So, the empty construct will consider a variable to be empty if 1) it has not been declared (kind of like the isset statement),0129

or if it has been declared, but it has a value of any of these values: if it's equal to the empty string,0142

the integer or float equal to 0, the string 0, false, null, or an empty array.0149

Let's take a quick look at a script here called empty.php that shows the use of the empty construct.0158

Here, we have a ternary operation, and we run the empty construct on the variable tmp.0165

As we just mentioned, empty returns a true or false boolean value, as to whether or not the variable is empty.0173

As you can see, up here we have commented out the declaration of tmp.0180

So, when empty runs on it, it should return false, because the variable hasn't even been declared yet,0186

because we know, with the ternary operator, that if this evaluates to false, the third operand is going to be output.0193

So, what this variable result does is: it is our way of storing a formatted output of the empty variable,0199

because the empty variable returns a boolean value, in that a true converts to a string (to a 1), and false converts to the empty string.0207

If we just output the result of empty($tmp) directly, it wouldn't look that pretty.0216

So, what we are going to do is: based on whether empty returns true or false,0225

we are going to set the output string result to be either the value true or false.0229

So, if we run this script with this variable tmp not declared (and let's open a new link), when we go to empty.php, we can see empty($tmp) is equal to true.0233

And that is because we haven't declared the variable yet, which means it's empty.0251

Let's go ahead and declare it, but it still doesn't have a value; so in this case, empty should still return true, because it doesn't hold any value.0257

If we go and refresh the page, we should get the same output; and we do.0269

Now, if we go ahead and set empty equal to 200, for example, it is no longer going to be empty, because it has been declared,0274

and it has a value that is not equal to one of those empty values we mentioned.0283

And if we save the script and reload it, we should now get that empty is equal to false.0287

However, let's say we go back and set tmp equal to 0; or actually, let's set it equal to the empty string,0293

which sometimes happens when users submit a form and don't provide any data in a text input field.0303

So, it's the empty string, which we know is one of the empty values considered to be empty by the empty construct.0311

We should get, now, that the value of empty($tmp) is equal to true.0316

So, if we refresh the page, we can see, "OK, tmp is considered empty, because it contains the empty string."0324

So now, we are going to talk about the changes we are going to make to version 8.0.0334

As it mentioned, we don't have that great validation of GET input data validation going on in 7.1.0339

So, we are going to add some validation to make sure that at least one item is in a user's Shopping Cart.0346

I'm going to add that to checkout.php; to thankYou.php, we are also going to add some validation, to ensure that0352

any necessary shipping and billing information was provided--making sure they provided a first name and a last name0360

and all of the parts of the address, except for the apartment number, because not everybody has an apartment number.0366

And the validation--we are going to make use of the empty construct that we just learned about0370

to make sure that 1) all of the shipping information inputs were provided, and also that they weren't left as empty.0375

because they might be returned as a blank, as an empty string; and isset would return true,0383

but it would be considered empty, because no value was provided.0391

The other thing that we are going to do is: we are going to be introducing two variables, a boolean error flag0395

(and a "flag" often refers to just a boolean variable that flags a certain condition),0401

and then we are also going to define a variable that holds an error message.0406

And we are going to add that to our three scripts, checkout.php, item.php, and thankYou.php.0412

What that is going to do is make our error processing more efficient--for example, when we find an error0418

because a GET value wasn't provided, or if a GET value was provided, but it wasn't validated as we needed.0422

Let's go take a look at some of the scripts from this web application.0429

For example, if we look at...this is checkout.php from version 7.1, which is our last version...if you can see, at the beginning,0437

it processes the GET variable; it creates a short form of it.0445

And then, what it does is: it goes right into...as long as the GET variable is not null, which means as long as some item value was provided,0448

it is going to go ahead and start calculating the total or the subtotal.0458

Now, that doesn't really provide any validation to items, making sure that valid input was provided.0463

So, we are going to take a step further, because...one reason is: why bother calculating the total of a cart,0468

for example, if the user did not add any items to the cart?--for example, if all the items were selected at quantity 0?0474

What we are going to do is: we are going to nest an if statement in here that is also going to check0482

to make sure that at least one of the quantities is greater than 0.0487

So, if you go look at our new checkout.php version, 8.0, we can see, we have the same processing of the GET variable at the beginning.0491

We can ignore this error section for now; we'll talk about that in a second.0500

We have the same if statement that checks to make sure that cartItems was at least provided.0504

But then, we have nested another if statement that has another test condition that must be met.0509

And that says that at least one of the items in the cart (either 1001, 1002, or 1003) has a quantity greater than 0.0514

And if that is the case, then it goes ahead and executes this section, which calculates the total.0522

If this condition is not met (meaning that all of the values were 0, or the quantity was 0 for all of the items in the cart),0527

we are going to end up using this error code; it is going to output a message that says, "You need to add at least one item to your cart."0535

Now, what we have done up here is: in this data processing section, we have added two variables.0543

We have added an error flag, and we initially set it to false.0548

And what that is going to do is: any time we encounter an error, such as a GET variable was not passed in at all,0552

or it was provided invalid data, we are going to set error to true.0558

And then, we also are defining a variable errorMsg and setting it to empty string,0563

which is going to allow us to create a custom error message that we can use to output.0571

And the reason for creating these variables is because, at different points in these nested if statements,0577

we are going to have the possibility of generating errors.0582

Let's say, for example, one thing that we do when we generate an error is: we want to set the page title equal to error.0586

Now, if we went down here, and we did that every time we encounter an error, we would have to, in this else statement, write pageTitle=error.0593

And then, we would have to also repeat that down here, and do that for each error.0607

And as our pages get more complicated, and there are more error conditions, we might be doing this four or five times throughout a page.0615

That gives us four or five times to have an opportunity to maybe misspell error.0621

And we know that, any time we have code that is being used in multiple places,0625

we want to see if we can reuse it by putting it in one spot.0632

So, instead of having these page titles here, every time an error is generated, we set error equal to true.0635

In this case, it was true, because the cart was empty.0645

And then, in this case, we are also adding a custom error message that says "You must add at least one item to your cart before you can check out."0651

Down here, this else statement corresponds to if cartItems was equal to null, which means it wasn't supplied at all, so it was a GET error.0659

In that case, we just want to output what is our default message, which is "You have reached this page in error."0667

What we do is: we don't need to define a custom error message, like we did up here.0672

We can just set the error value equal to true, and then once we are out of the data processing section, or towards the end of it,0676

we have added a little section of code that is going to allow us to, for example, define this page title all in one spot.0683

It is going to, if error is true (meaning that an error condition happened), define the title for the HTML title tag to error.0690

And then, what it is going to do is: if the error message is equal to the empty string,0697

meaning that a custom error message wasn't set (because up here, for example, we set a custom error message),0704

then it is going to output a default error message that says "You have reached this page in error."0710

Now, what we have also done in our code is: in our previous version of checkout.php, when we got to the Output HTML section,0715

we just checked to see if our GET value was equal to null.0723

If it wasn't, we output the checkout form, as would be expected.0727

And then, if there was a problem, we would say, "You have reached this page in error."0733

Well, now what we are going to do is: instead of comparing it to whether cartItems is equal to null, we are just going to say, "Did an error occur?"0737

"And if an error did not occur (we are using the NOT operator), then go ahead and output the checkout form, as expected."0744

Then, we have an else statement that says, if an error did occur, to output the error message.0751

Now, as we saw up above, the error message can be either set to the default error message (and is, in one of the examples) or a custom error message.0757

By using this one error message variable to hold either a default message or a custom message,0765

we can simplify this to one line of code down here to output our error message.0772

We also did this for thankYou.php; for thankYou.php (and this is the new version, 8.0), as you can see,0777

we have added this error flag and this errorMsg variable to the data processing section, just as we had done in our new version of checkout.php.0789

This is the same code that we had in version 7, that just tests to make sure that the GET data, customer data, and order total were provided.0801

But then, we have added a nested if statement that is going to further validate our input.0808

Basically, we have an if statement here that says, "It is only going to enter the if block," which in this case,0814

just sets the page title equal to thankYou, meaning that there is no error--"it is only going to do that if all of these conditions are met."0822

Using the empty function, if customer data's firstName was not empty (and we say not with this NOT operator),0830

AND if their lastName was not empty...and we do that for city, street, state, and zipCode--0837

the only one we don't include is apartment, because not everybody has an apartment number...0843

we are only going to output the Thank You message if the user entered all of the appropriate information,0846

which is everything except for the apartment number.0853

If not, in the else statement, we are going to set an error, and it is going to set the custom error message,0855

"You did not provide all of the necessary billing and shipping information."0862

And then, here again, we are making use of this error message and error flag functionality by...0869

this section is reached if neither of these GET variables were provided.0877

And that is just going to output the default error, which is "You have reached this page in error."0883

Here we have the same error processing section we did on checkout.php.0887

It is going to set the page title to error in the HTML title tag.0891

If no custom error message was created, meaning that errorMsg is still equal to the empty string, then we say, "You have reached this page in error."0896

Now again, when we get to our HTML output section, we test the condition "did an error occur?"0905

If no error occurred, then we go ahead and output the Thank You message, as we normally would on a correctly-entered form.0910

If not, we go ahead and output the error message, which would either be0919

"You have reached this page in error" or "You did not enter all of the appropriate data into the form."0922

And we also had done this for item.php, as well, in that we added the error flag and the errorMsg to process the error.0933

In this case, the only error that occurs in this file is if the currentItemID is not equal to null,0946

because we are not doing any other validation on the itemID, whereas in the checkout, we validated0951

to make sure the cart had at least one item in it, and the thankYou page--we validated that all of the shipping information was provided.0957

But we did update item.php, as well.0965

Let's close some of these down.0969

So now, to version 8.1: what we are going to do is: we are going to be altering checkout.php,0974

so it not only handles the requesting of the shipping and billing information0981

that happens when a user says Check Out from the viewCart page,0986

but we are also going to have it output the Thank You message0991

So, we are actually going to get rid of the thankYou.php page altogether, and we are going to have checkout.php do that.0993

The way we can do that is: now that we have conditional control structures and have nested control structures,1000

we are going to create a GET variable called action that we can provide to checkout.php.1006

And based on that variable, we can determine what function we are going to perform, and what we are going to output.1011

In our case, if the action variable is set to checkout, we are going to know that the cart was just submitted.1018

We are going to calculate the total in the cart, and then output the shipping information.1026

The other option that we have for the action variable is Complete Order.1031

After the shipping information has been output, and that form is loaded from the viewCart.php page,1038

what is going to happen is: checkout.php is going to submit the shipping and billing information to itself,1046

so the action attribute of its form tag is going to change.1053

Whereas, before, it forwarded that information on to thankYou.php, now it is going to forward it to itself.1058

It is going to append to that form an action variable that says completeOrder, and then it is going to know to say,1063

"OK, now I am processing a Thank You message," and process the data accordingly and output a Thank You message.1070

All we are doing is taking all of that functionality out of the thankYou.php page and putting it in checkout.php.1077

And there are different schools of thought on this: this is a common way of doing things--1084

by providing an action GET variable to a script that lets it complete different actions,1091

based on what you specified as the action you want completed.1098

The other way is to just, instead of having multiple actions be completed on each page, where you conditionally output HTML1103

based on the action that was specified--you can have one page just forward the information to another, and on to another.1110

So, for example, viewCart forwards to checkout.php, which would forward it on to thankYou.php.1116

In this case, we are having checkout.php forward the shipping information to itself.1122

And as you will see in the advanced course, when we push things out even further,1128

after you submit shipping information, then it is going to want to request credit card information, for example.1132

We are going to have a different action for checkout.php that is going to allow us to process that, as well.1138

And so, some people like doing each one on a separate page; some people like having an action GET variable1143

that allows you to specify the different actions all in one page.1148

And the reason I am showing it and doing this way is 1) it can be useful and 2) it is something that is used out there often.1153

And as you will see when we start introducing our own user-defined functions, these incredibly long scripts that we have because,1160

for example, if we have three different actions that occur on the same script, we have three different sections of HTML to output.1167

So, that means we have three if, elseif statements to go through.1174

You have the content of three pages in one script; that can get kind of lengthy.1177

When we create user-defined functions, it is going to make things a little bit cleaner,1181

and there is not going to be so much code in all of these pages.1186

Let's go and take a look at the change that we made.1189

This is our old checkout.php from the version we just did, version 8.0.1194

At the beginning, it has one GET variable that it processes, cartItems.1202

And then, it does the check to see if it's null and to see if at least one item in the cart had a quantity greater than 0.1209

And then, it outputs the HTML accordingly--either outputs an error message or outputs the shipping form.1219

In our new checkout.php, we have a new GET variable called action that we are going to process up here, using our ternary operator.1224

And what we have done here is: because now, this checkout.php form is going to perform both the check out operation,1237

and it is going to perform the thank you operation, it is going to be accepting not only the cartItems' GET data when the action is check out,1244

but when we go to thank you, which is specified by the setting action to completeOrder,1253

we are going to need to have access to the customer data and the order total,1259

which is the information provided by that shipping and billing form that we have.1262

So, at the top of this page, we have added two extra short GET variables.1266

Additionally, when we get to our global data processing center, because now we have to do two sets of data processing1275

(we have to process the data if a cart was submitted from viewCart.php and calculate the total,1282

and if the shipping information was entered and now forwarded to checkout.php, we have to be able to process that1289

and make sure that data was valid), what we do is: we create a set of if, elseif statements that look at the action GET variable.1296

And if it's checkout, it is going to perform all of the operations that were already in our checkout.php to begin with.1308

It is going to check that the cartItems is not equal to null; it is going to check that at least one item in the cart had a quantity greater than 0.1312

But we are adding another elseif statement that is going to say, "If action is equal to completeOrder," which means1320

that checkout.php is going to submit its shipping information to itself, then everything that was on that thankYou page,1328

all the data processing that was involved there, is going to happen here.1336

So, it is going to verify that customer data and order total were provided.1339

And earlier in the script, we saw that we have added those short GET variables to our script.1344

And then, it is going to perform the same data validation that thankYou.php had provided in version 8.0,1350

which is to make sure that all of the required fields for a shipping and billing address aren't empty.1355

And then, it is going to set the page title flag to Thank You.1360

You can see that we have used the same error handling mechanism that we had done before, where if an error occurs--1363

in this case, you did not provide all of the necessary shipping information--it is going to set it to true,1370

and it is going to set a custom message.1375

And as you can see, in this code, because we have even more nested statements, there are going to be more error situations that can occur.1377

So, we would have a lot of redundant code if we output pageTitle=error in each error section.1388

So now, we see the value of declaring this error boolean flag, and then the error message,1396

because it allows us to put a simple message error=true when an error has occurred.1401

And that will know to default to the output message.1407

Additionally, when we set it equal to true for all the errors, when it reaches this error processing code, it is going to set the page title equal to error.1409

The other thing is: we are going to add one more depth to the Output HTML section, as well.1420

We have the same check as before if no error occurred; so if no errors occurred, OK, I am going to output HTML, as normal.1425

But which HTML am I going to output? Am I going to output the shipping and billing address form to request the shipping and billing information?1432

Or am I going to output the Thank You message?1440

So, if action equals checkout, then you output the shipping and billing information form.1444

If action equals completeOrder, which means it is completing the order and going to the thankYou page, you are going to output the Thank You message.1451

And down here, you can see that, if neither of these occur, we are going to output an error message,1460

stating that a correct action wasn't provided, or that the Shopping Cart was entered, but it didn't have at least one item in it,1465

or that not all of the necessary shipping information was provided.1477

One thing to note is that, in our earlier version of checkout.php, in our form that contained the table with text fields1483

for our shipping and billing information, we had the form action set to thankYou.php, so it forwarded all of that data to thankYou.php.1499

Well, thankYou.php doesn't exist anymore, so we are going to change that value to itself, to checkout.php.1507

So, if we look at checkout.php, and we look at the HTML Output section for that, we can see that we have changed that to checkout.php.1515

Now, one other change that we have also made is: because the checkout.php form now has an action variable1523

that gets passed to it, when we submit data from the viewCart.php form,1529

we also have to submit an action variable that says what action I am completing.1536

From the viewCart, it is going to be checkout; so if we go and look at viewCart.php in our version 8.1,1540

here is the form that outputs all of the item information.1551

If we look at the very bottom, by the Submit button, we have added a hidden field.1555

What that is going to do is pass an action to the checkout page, and it is going to say, "Tell the checkout.php to perform the action checkout."1561

And so, that is how the viewCart communicates to checkout.php what to do.1570

For a homework challenge, as usual, I just want to make sure you understand the different things that we have done in this code.1580

It has definitely gotten a lot more complicated, as we have added a lot more control structures, and especially nested control structures.1586

So, you are going to want to take a look at the code and make sure you are understanding how the flow of the code works--1593

essentially, how now we have input validation that nests everything one level deeper than before,1600

because before we were just validating that GET data was provided; now we are validating that the GET data is valid.1609

So, that gives us two nested if statements and the chance for two different errors,1617

one error being "You have reached this page in error," because no GET data was provided, or 2) the GET data you provided was invalid.1622

So, one of the things I want to make sure you understand is this empty construct we have introduced.1630

We will be using that a bunch, because it is used to process form data and make sure that form data was provided as needed.1633

And then, also, just review the concept of sending an action variable to a script,1641

in order to get that script to conditionally execute sections of the code.1648

As you can see, in our checkout.php today, the action variable determined 1) what sort of data processing occurred1652

at the top of the script, meaning whether you were processing the data for a checkout, which would be calculating the Shopping Cart total,1660

or whether you were validating that all of the appropriate shipping information was provided.1668

And then, also, we used that to conditionally output the proper HTML.1674

So, if it is a checkout, we are going to output the shipping and billing form.1680

And then, if it is completing the order, we are going to output the thankYou message.1686

That conditionally outputs the HTML.1691

That ends today's lesson; thank you for watching Educator.com--I look forward to seeing you next time.1695