SlideShare a Scribd company logo
Form Processing in PHP
Dr. Charles Severance
www.wa4e.com
http://www.wa4e.com/code/forms
http://www.wa4e.com/code/forms.zip
PHP Global Variables
• Part of the goal of PHP is to make interacting with
HTTP and HTML as easy as possible.
• PHP processes the incoming HTTP request based on
the protocol specifications and drops the data into
various super global variables (usually arrays).
http://www.wa4e.com/code/arrays/get-01.php
(Review from Arrays)
Web Server Database Server
Time
Apache
PHP
MySql
Browser
JavaScri
pt
D
O
M
php
code
static
files
RRC/HTTP SQL
Parse
Respons
e
Parse
Reques
t
ind.ph
p
$_GET
get-01.php?x=2
Forms – User Input / Action
<p>Guessing game...</p>
<form>
<p><label for="guess">Input Guess</label>
<input type="text" name="guess" id="guess"/></p>
<input type="submit"/>
</form>
http://www.wa4e.com/code/forms/form1.php
Forms Submit Data
form1.php
<p>Guessing game...</p>
<form>
<p><label for="guess">Input Guess</label>
<input type="text" name="guess" id="guess"/></p>
<input type="submit"/>
</form>
<p>Guessing game...</p>
<form>
<p><label for="guess">Input Guess</label>
<input type="text" name="guess" id="guess"/></p>
<input type="submit"/>
</form>
<pre>
$_GET:
<?php
print_r($_GET);
?>
</pre>
form2.php
GET and POST with Forms
Web Server Database Server
Time
Apache
PHP
MySql
Browser
JavaScri
pt
D
O
M
php
code
static
files
RRC/HTTP SQL
Parse
Respons
e
Parse
Reques
t
form1.ph
p
$_POST
<p>Guessing game...</p>
<form method="post">
<p><label for="guess">Input Guess</label>
<input type="text" name="guess" size="40" id="guess"/></p>
<input type="submit"/>
</form>
<pre>
$_POST:
<?php
print_r($_POST);
?>
$_GET:
<?php
print_r($_GET);
?>
</pre>
form3.php
Forms GET vs. POST
Two ways the browser can send parameters to the web server
• GET - Parameters are placed on the URL which is retrieved.
• POST - The URL is retrieved and parameters are appended
to the request in the HTTP connection.
Passing Parameters to The
Server
GET /form1.php?guess=42
Accept: text/html
User-Agent: Lynx/2.4 libwww/2.14
POST /form3.php
Accept: text/html
User-Agent: Lynx/2.4 libwww/2.14
Content-type: application/x-www-form-urlencoded
Content-length: 13
guess=42
HTTP
Request
Browser
Web Server
<input type="text" name="guess" id="yourid" />
Web Server Database Server
Time
Apache
PHP
MySql
Browser
JavaScri
pt
D
O
M
php
code
static
files
RRC/HTTP SQL
Parse
Respons
e
Parse
Reques
t
form3.ph
p
$_POST
Rules of the POST/GET Choice
• POST is used when data is being created or modified.
• GET is used when you are reading or searching things.
• Web search spiders will follow GET URLs but generally not
POST URLs.
• GET URLs should be “idempotent” - the same URL should
give the “same thing” each time you access it.
• GET has an upper limit of the number of bytes of parameters
and values (think about 2K).
Form Input Types
Other Input Types
• Text
• Password
• Radio Button
• Check Box
• Select / Drop-Down
• Textarea
http://www.wa4e.com/code/forms/more.php
<p>Many field types...</p>
<form method="post" action="more.php">
<p><label for="inp01">Account:</label>
<input type="text" name="account" id="inp01" size="40" ></p>
<p><label for="inp02">Password:</label>
<input type="password" name="pw" id="inp02" size="40" ></p>
<p><label for="inp03">Nick Name:</label>
<input type="text" name="nick" id="inp03" size="40" ></p>
$_POST:
Array
(
[account] => Beth
[pw] => 12345
[nick] => BK
[when] => pm
...
)
more.php
<p>Preferred Time:<br/>
<input type="radio" name="when" value="am">AM<br>
<input type="radio" name="when" value="pm" checked>PM</p>
$_POST:
Array(
...
[nick] => BK
[when] => pm
[class] => si502
...
)
more.php
<p>Classes taken:<br/>
<input type="checkbox" name="class1" value="si502" checked>
SI502 - Networked Tech<br>
<input type="checkbox" name="class2" value="si539">
SI539 - App Engine<br>
<input type="checkbox" name="class3">
SI543 - Java<br> </p>
$_POST:
Array(
...
[when] => pm
[class1] => si502
[soda] => 0
...
)
$_POST:
Array(
...
[when] => pm
[class3] => on
[soda] => 0
...
)
<p><label for="inp06">Which soda:
<select name="soda" id="inp06">
<option value="0">-- Please Select --</option>
<option value="1">Coke</option>
<option value="2">Pepsi</option>
<option value="3">Mountain Dew</option>
<option value="4">Orange Juice</option>
<option value="5">Lemonade</option>
</select>
</p>
$_POST:
Array(
...
[class] => si502
[soda] => 0
[snack] => peanuts
...
)
The values can be any string, but numbers are used quite often.
more.php
<p><label for="inp07">Which snack:
<select name="snack" id="inp07">
<option value="">-- Please Select --</option>
<option value="chips">Chips</option>
<option value="peanuts" selected>Peanuts</option>
<option value="cookie">Cookie</option>
</select>
</p>
$_POST:
Array(
...
[class] => si502
[soda] => 0
[snack] => peanuts
...
)
more.php
<p><label for="inp08">Tell us about yourself:<br/>
<textarea rows="10" cols="40" id="inp08" name="about">
I love building web sites in PHP and MySQL.
</textarea>
</p>
$_POST:
Array(
...
[about] => I love
building web sites in PHP
and MySQL.
[dopost] => Submit
...
)
more.php
<p><label for="inp09">Which are awesome?<br/>
<select multiple="multiple" name="code[]" id="inp09">
<option value="python">Python</option>
<option value="css">CSS</option>
<option value="html">HTML</option>
<option value="php">PHP</option>
</select> $_POST:
Array(
...
[code] => Array
(
[0] => css
[1] => html
)
[dopost] => Submit
...
)
more.php
<p>
<input type="submit" name="dopost" value="Submit"/>
<input type="button"
onclick="location.href='http://www.wa4e.com/'; return false;"
value="Escape">
</p>
$_POST:
Array(
...
[dopost] => Submit
...
)
On submit input types, the text is both in the UI and in $_POST so we tend to look for the key, not the value.
more.php
HTML5 Input Types
• HTML5 defines new input types
• Not all browsers support all input types
• They fall back to type="text"
• http://www.w3schools.com/html/
html5_form_input_types.asp
Select your favorite color:
<input type="color" name="favcolor" value="#0000ff"><br/>
Birthday:
<input type="date" name="bday" value="2013-09-02"><br/>
E-mail:
<input type="email" name="email"><br/>
Quantity (between 1 and 5):
<input type="number" name="quantity"
min="1" max="5"><br/>
Add your homepage:
<input type="url" name="homepage"><br>
Transportation:
<input type="flying" name="saucer"><br>
http://www.wa4e.com/code/forms/html5.php
Validation happens when you press
submit.
Data Security / Integrity /
Validation
Persisting Form
Data
• When we submit forms and there
is an error, we just expect that the
data will remain in the form when
the page is redisplayed.
• The application needs to make
sure to put the previous values
back into the form.
<?php
$oldguess = isset($_POST['guess']) ? $_POST['guess'] : '';
?>
<p>Guessing game...</p>
<form method="post">
<p><label for="guess">Input Guess</label>
<input type="text" name="guess" id="guess"
size="40" value="<?= $oldguess ?>"/></p>
<input type="submit"/>
</form>
form4.php
Review: Ternary Operation
“Persisting”
Form Data
Across
Requests
<?= $oldguess ?>
<?php echo($oldguess); ?>
Hygiene Alert!
What happens when we use an HTML character in a form field
value?
<form method="post">
<p><label for="guess">Input Guess</label>
<input type="text" name="guess" id="guess
size="40" "value=""><b>DIE DIE</b>" /></p>
<input type="submit"/>
</form>
form4.php
To The Rescue: htmlentities()
<form method="post">
<p><label for="guess">Input Guess</label>
<input type="text" name="guess" id="guess"
size="40" value="<?= htmlentities($oldguess) ?>"/></p>
<input type="submit"/>
</form>
form5.php
<form method="post">
<p><label for="guess">Input Guess</label>
<input type="text" name="guess" id="guess"
size="40" value="<?= htmlentities($oldguess) ?>"/></p>
<input type="submit"/>
</form>
<input type="text" name="guess" id="guess"
value="&quot;&gt;&lt;b&gt;DIE DIE&lt;/b&gt;" /></p>
In-Server Data Validation
Web Server Database Server
Time
Apache
PHP
MySql
Browser
JavaScri
pt
D
O
M
php
code
static
files
RRC/HTTP SQL
Parse
Respons
e
Parse
Reques
t
form3.ph
p
$_POST
Incoming Data Validation
Making sure all user data is present and the correct
format before proceeding
• Non-empty strlen($var) > 0
• A number is_numeric($var)
• An email address strpos($var, '@') > 0
• Or filter_var($var, FILTER_VALIDATE_EMAIL) !== false
• ....
http://www.wa4e.com/code/forms/guess.php?guess=7
http://www.wa4e.com/code/forms/guess.php?guess=200
Convention: Model View
Controller (MVC)
Model-View-Controller
• A model that defines the elements of
a web application and how they
interact
• View – Produces output
• Model – Handles data
• Controller – Orchestration / Routing
https://en.wikipedia.org/wiki/Model-view-controller
Pattern: Processing POST
Data
• Many patterns
for handling
POST data
• No “rules”, just
“suggestions”
<?php
$guess = '';
$message = false;
if ( isset($_POST['guess']) ) {
// Trick for integer / numeric parameters
$guess = $_POST['guess'] + 0;
if ( $guess == 42 ) {
$message = "Great job!";
} else if ( $guess < 42 ) {
$message = "Too low";
} else {
$message = "Too high...";
}
}
?>
<html>
<head>
<title>A Guessing game</title>
</head>
<body style="font-family: sans-serif;">
<p>Guessing game...</p>
<?php
if ( $message !== false ) {
echo("<p>$message</p>n");
}
?>
<form method="post">
<p><label for="guess">Input Guess</label>
<input type="text" name="guess" id="guess" size="40"
<?php echo 'value="' . htmlentities($guess) . '"';
?>
/></p>
<input type="submit"/>
</form>
</body>
Completely
process incoming
data (if any) -
produce no output
Produce the page
output
guess_mvc.php
What about
frameworks?
<?php
$oldguess = '';
$message = false;
if ( isset($_POST['guess']) ) {
// Trick for integer / numeric parameters
$oldguess = $_POST['guess'] + 0;
if ( $oldguess == 42 ) {
$message = "Great job!";
} else if ( $oldguess < 42 ) {
$message = "Too low";
} else {
$message = "Too high...";
}
}
?>
<html>
<head>
<title>A Guessing game</title>
</head>
<body style="font-family: sans-serif;">
<p>Guessing game...</p>
<?php
if ( $message !== false ) {
echo("<p>$message</p>n");
}
?>
<form method="post">
<p><label for="guess">Input Guess</label>
<input type="text" name="guess" id="guess" size="40"
value="<?= htmlentities($oldguess) ?>"/></p>
<input type="submit"/>
</form>
</body>
Model
View
Controller
Context
guess_mvc.php
<?php
$oldguess = '';
$message = false;
if ( isset($_POST['guess']) ) {
// Trick for integer / numeric parameters
$oldguess = $_POST['guess'] + 0;
if ( $oldguess == 42 ) {
$message = "Great job!";
} else if ( $oldguess < 42 ) {
$message = "Too low";
} else {
$message = "Too high...";
}
}
?>
<html>
<head>
<title>A Guessing game</title>
</head>
<body style="font-family: sans-serif;">
<p>Guessing game...</p>
<?php
if ( $message !== false ) {
echo("<p>$message</p>n");
}
?>
<form method="post">
<p><label for="guess">Input Guess</label>
<input type="text" name="guess" id="guess" size="40"
value="<?= htmlentities($oldguess) ?>"/></p>
<input type="submit"/>
</form>
</body>
No
HTML
No
Database
Controller
Context
guess_mvc.php
<?php
$guess = '';
$message = false;
if ( isset($_POST['guess']) ) {
// Trick for integer / numeric parameters
$guess = $_POST['guess'] + 0;
if ( $guess == 42 ) {
$message = "Great job!";
} else if ( $guess < 42 ) {
$message = "Too low";
} else {
$message = "Too high...";
}
}
?>
<html>
<head>
<title>A Guessing game</title>
</head>
<body style="font-family: sans-serif;">
<p>Guessing game...</p>
<?php
if ( $message !== false ) {
echo("<p>$message</p>n");
}
?>
<form method="post">
<p><label for="guess">Input Guess</label>
<input type="text" name="guess" id="guess" size="40"
value="<?= htmlentities($oldguess) ?></p>
<input type="submit"/> <input type="submit"/>
</form>
</body>
<?php
$oldguess = '';
$message = false;
if ( isset($_POST['guess']) ) {
// Nifty trick
$oldguess = $_POST['guess'] + 0;
if ( $oldguess == 42 ) {
$message = "Great job!";
} else if ( $oldguess < 42 ) {
$message = "Too low";
} else {
$message = "Too high...";
}
}
?>
<html> ...
guess_mvc.php
<?php
$guess = '';
$message = false;
if ( isset($_POST['guess']) ) {
// Trick for integer / numeric parameters
$guess = $_POST['guess'] + 0;
if ( $guess == 42 ) {
$message = "Great job!";
} else if ( $guess < 42 ) {
$message = "Too low";
} else {
$message = "Too high...";
}
}
?>
<html>
<head>
<title>A Guessing game</title>
</head>
<body style="font-family: sans-serif;">
<p>Guessing game...</p>
<?php
if ( $message !== false ) {
echo("<p>$message</p>n");
}
?>
<form method="post">
<p><label for="guess">Input Guess</label>
<input type="text" name="guess" id="guess" size="40"
value="<?= htmlentities($oldguess) ?></p>
<input type="submit"/> <input type="submit"/>
</form>
</body>
...
?>
<html>
<head>
<title>A Guessing game</title>
</head>
<body style="font-family: sans-serif;">
<p>Guessing game...</p>
<?php
if ( $message !== false ) {
echo("<p>$message</p>n");
}
?>
<form method="post">
<p><label for="guess">Input Guess</label>
<input type="text" name="guess" id="guess" size="40"
value="<?= htmlentities($oldguess) ?>"></p>
<input type="submit"/>
</form>
</body>
<?php
$oldguess = '';
$message = false;
if ( isset($_POST['guess']) ) {
// Nifty trick
$oldguess = $_POST['guess'] + 0;
if ( $oldguess == 42 ) {
$message = "Great job!";
} else if ( $oldguess < 42 ) {
$message = "Too low";
} else {
$message = "Too high...";
}
}
?>
<html> ...
Note: This code is a little sloppy in terms of its data validation. guess_mvc.php
<html>
<head>
<title>A Guessing game</title>
</head>
<body style="font-family: sans-serif;">
<p>Guessing game...</p>
<?php
if ( $message !== false ) {
echo("<p>$message</p>n");
}
?>
<form method="post">
<p><label for="guess">Input Guess</label>
<input type="text" name="guess" id="guess" size="40"
value="<?= htmlentities($oldguess) ?>"></p>
<input type="submit"/>
</form>
</body> guess_mvc.php
Summary
• Forms, $_GET and $_POST
• Form fields
• New form fields in HTML5
• Sanitizing HTML
• Data Validation
• Model-View-Controller
Acknowledgements / Contributions
These slides are Copyright 2010- Charles R. Severance
(www.dr-chuck.com) as part of www.wa4e.com and made
available under a Creative Commons Attribution 4.0
License. Please maintain this last slide in all copies of the
document to comply with the attribution requirements of
the license. If you make a change, feel free to add your
name and organization to the list of contributors on this
page as you republish the materials.
Initial Development: Charles Severance, University of
Michigan School of Information
Insert new Contributors and Translators here including
names and dates
Continue new Contributors and Translators here

More Related Content

PPT
PHP-04-Forms.ppt
NatureLifearabhi
 
PPTX
5. Formshcfsjhfajkjsfjsjfjksafjsfjkjfhjsafjsajkgfjskafkjas.pptx
berihun18
 
PPT
Web forms and html lecture Number 4
Mudasir Syed
 
PPTX
Unit - III.pptxbgffhjxfjdfjfgjnsnsnshdhsjsksjsjsjsjsjsjsjsjsldksk
cpbloger553
 
PPT
PHP - Introduction to PHP Forms
Vibrant Technologies & Computers
 
PPTX
2-Chapter Edit.pptx debret tabour university
alemunuruhak9
 
PPTX
Working with data.pptx
SherinRappai
 
ODP
Form Processing In Php
Harit Kothari
 
PHP-04-Forms.ppt
NatureLifearabhi
 
5. Formshcfsjhfajkjsfjsjfjksafjsfjkjfhjsafjsajkgfjskafkjas.pptx
berihun18
 
Web forms and html lecture Number 4
Mudasir Syed
 
Unit - III.pptxbgffhjxfjdfjfgjnsnsnshdhsjsksjsjsjsjsjsjsjsjsldksk
cpbloger553
 
PHP - Introduction to PHP Forms
Vibrant Technologies & Computers
 
2-Chapter Edit.pptx debret tabour university
alemunuruhak9
 
Working with data.pptx
SherinRappai
 
Form Processing In Php
Harit Kothari
 

Similar to PHP-04-Forms PHP-04-Forms PHP-04-Forms PHP-04-Forms (20)

PDF
WIT UNIT-4.pdf
jashmithakakavakam
 
PDF
Cmsc 100 (web forms)
MaeEstherMaguadMaralit
 
PDF
Web app development_php_07
Hassen Poreya
 
PDF
Introduction to php web programming - get and post
baabtra.com - No. 1 supplier of quality freshers
 
PPT
Lecture7 form processing by okello erick
okelloerick
 
PDF
03 the htm_lforms
IIUM
 
PPTX
Quick beginner to Lower-Advanced guide/tutorial in PHP
Sanju Sony Kurian
 
PPTX
Web Application Development using PHP Chapter 5
Mohd Harris Ahmad Jaal
 
PPT
Web forms and html (lect 4)
Salman Memon
 
PPTX
forms.pptx
asmabagersh
 
PDF
web2_lec6.pdf
ssuser893014
 
PPT
PHP-08-POST-Redirect-Authn-Slideshare.ppt
chelmisillie
 
PDF
phptut2
tutorialsruby
 
PDF
phptut2
tutorialsruby
 
PDF
phptut2
tutorialsruby
 
PDF
phptut2
tutorialsruby
 
PPTX
WorkingwithFormsinPHPpptx__2024_10_17_19_07_07 2.pptx
harleensingh985
 
PPTX
Chapter 9: Forms
Steve Guinan
 
PPTX
html forms and server side scripting
bantamlak dejene
 
PPT
Chapter 07 php forms handling
Dhani Ahmad
 
WIT UNIT-4.pdf
jashmithakakavakam
 
Cmsc 100 (web forms)
MaeEstherMaguadMaralit
 
Web app development_php_07
Hassen Poreya
 
Introduction to php web programming - get and post
baabtra.com - No. 1 supplier of quality freshers
 
Lecture7 form processing by okello erick
okelloerick
 
03 the htm_lforms
IIUM
 
Quick beginner to Lower-Advanced guide/tutorial in PHP
Sanju Sony Kurian
 
Web Application Development using PHP Chapter 5
Mohd Harris Ahmad Jaal
 
Web forms and html (lect 4)
Salman Memon
 
forms.pptx
asmabagersh
 
web2_lec6.pdf
ssuser893014
 
PHP-08-POST-Redirect-Authn-Slideshare.ppt
chelmisillie
 
phptut2
tutorialsruby
 
phptut2
tutorialsruby
 
phptut2
tutorialsruby
 
phptut2
tutorialsruby
 
WorkingwithFormsinPHPpptx__2024_10_17_19_07_07 2.pptx
harleensingh985
 
Chapter 9: Forms
Steve Guinan
 
html forms and server side scripting
bantamlak dejene
 
Chapter 07 php forms handling
Dhani Ahmad
 
Ad

More from ZahraWaheed9 (15)

PPT
Chapter 5 SE Chapter 5 SE.pptChapter 5 SE.ppt
ZahraWaheed9
 
PPTX
Ch 14_Web Mining.pptxCh 14_Web Mining.pptx
ZahraWaheed9
 
PPTX
Open URL in Chrome Browser from Python.pptx
ZahraWaheed9
 
PPTX
Lecture 5 & 6 Advance CSS.pptx for web
ZahraWaheed9
 
PPT
php introduction to the basic student web
ZahraWaheed9
 
PPTX
ch 3 of C# programming in advanced programming
ZahraWaheed9
 
PPTX
Responsive Web Designing for web development
ZahraWaheed9
 
PPTX
Color Theory for web development class for students to understand good websites
ZahraWaheed9
 
PPT
C# wrokig based topics for students in advanced programming
ZahraWaheed9
 
PPT
CSharp POWERPOINT SLIDES C# VISUAL PROGRAMMING
ZahraWaheed9
 
PPT
visual programming GDI presentation powerpoint
ZahraWaheed9
 
PPT
Visual programming Chapter 3: GUI (Graphical User Interface)
ZahraWaheed9
 
PPTX
Review Presentation on develeopment of automated quality
ZahraWaheed9
 
PPTX
Cross-Modal Scene Understanding presntation
ZahraWaheed9
 
PPTX
Web Minnig and text mining presentation
ZahraWaheed9
 
Chapter 5 SE Chapter 5 SE.pptChapter 5 SE.ppt
ZahraWaheed9
 
Ch 14_Web Mining.pptxCh 14_Web Mining.pptx
ZahraWaheed9
 
Open URL in Chrome Browser from Python.pptx
ZahraWaheed9
 
Lecture 5 & 6 Advance CSS.pptx for web
ZahraWaheed9
 
php introduction to the basic student web
ZahraWaheed9
 
ch 3 of C# programming in advanced programming
ZahraWaheed9
 
Responsive Web Designing for web development
ZahraWaheed9
 
Color Theory for web development class for students to understand good websites
ZahraWaheed9
 
C# wrokig based topics for students in advanced programming
ZahraWaheed9
 
CSharp POWERPOINT SLIDES C# VISUAL PROGRAMMING
ZahraWaheed9
 
visual programming GDI presentation powerpoint
ZahraWaheed9
 
Visual programming Chapter 3: GUI (Graphical User Interface)
ZahraWaheed9
 
Review Presentation on develeopment of automated quality
ZahraWaheed9
 
Cross-Modal Scene Understanding presntation
ZahraWaheed9
 
Web Minnig and text mining presentation
ZahraWaheed9
 
Ad

Recently uploaded (20)

PPTX
vedic maths in python:unleasing ancient wisdom with modern code
mistrymuskan14
 
PDF
The Minister of Tourism, Culture and Creative Arts, Abla Dzifa Gomashie has e...
nservice241
 
PPTX
TEF & EA Bsc Nursing 5th sem.....BBBpptx
AneetaSharma15
 
PPTX
Congenital Hypothyroidism pptx
AneetaSharma15
 
PDF
Sunset Boulevard Student Revision Booklet
jpinnuck
 
PPTX
Software Engineering BSC DS UNIT 1 .pptx
Dr. Pallawi Bulakh
 
PPTX
Introduction and Scope of Bichemistry.pptx
shantiyogi
 
PPTX
Tips Management in Odoo 18 POS - Odoo Slides
Celine George
 
PPTX
PPTs-The Rise of Empiresghhhhhhhh (1).pptx
academysrusti114
 
PPTX
How to Manage Leads in Odoo 18 CRM - Odoo Slides
Celine George
 
PPTX
Cardiovascular Pharmacology for pharmacy students.pptx
TumwineRobert
 
PDF
High Ground Student Revision Booklet Preview
jpinnuck
 
PPTX
HISTORY COLLECTION FOR PSYCHIATRIC PATIENTS.pptx
PoojaSen20
 
PDF
Phylum Arthropoda: Characteristics and Classification, Entomology Lecture
Miraj Khan
 
PDF
Arihant Class 10 All in One Maths full pdf
sajal kumar
 
PDF
1.Natural-Resources-and-Their-Use.ppt pdf /8th class social science Exploring...
Sandeep Swamy
 
PDF
Mga Unang Hakbang Tungo Sa Tao by Joe Vibar Nero.pdf
MariellaTBesana
 
PPTX
ACUTE NASOPHARYNGITIS. pptx
AneetaSharma15
 
PPTX
Open Quiz Monsoon Mind Game Final Set.pptx
Sourav Kr Podder
 
PDF
UTS Health Student Promotional Representative_Position Description.pdf
Faculty of Health, University of Technology Sydney
 
vedic maths in python:unleasing ancient wisdom with modern code
mistrymuskan14
 
The Minister of Tourism, Culture and Creative Arts, Abla Dzifa Gomashie has e...
nservice241
 
TEF & EA Bsc Nursing 5th sem.....BBBpptx
AneetaSharma15
 
Congenital Hypothyroidism pptx
AneetaSharma15
 
Sunset Boulevard Student Revision Booklet
jpinnuck
 
Software Engineering BSC DS UNIT 1 .pptx
Dr. Pallawi Bulakh
 
Introduction and Scope of Bichemistry.pptx
shantiyogi
 
Tips Management in Odoo 18 POS - Odoo Slides
Celine George
 
PPTs-The Rise of Empiresghhhhhhhh (1).pptx
academysrusti114
 
How to Manage Leads in Odoo 18 CRM - Odoo Slides
Celine George
 
Cardiovascular Pharmacology for pharmacy students.pptx
TumwineRobert
 
High Ground Student Revision Booklet Preview
jpinnuck
 
HISTORY COLLECTION FOR PSYCHIATRIC PATIENTS.pptx
PoojaSen20
 
Phylum Arthropoda: Characteristics and Classification, Entomology Lecture
Miraj Khan
 
Arihant Class 10 All in One Maths full pdf
sajal kumar
 
1.Natural-Resources-and-Their-Use.ppt pdf /8th class social science Exploring...
Sandeep Swamy
 
Mga Unang Hakbang Tungo Sa Tao by Joe Vibar Nero.pdf
MariellaTBesana
 
ACUTE NASOPHARYNGITIS. pptx
AneetaSharma15
 
Open Quiz Monsoon Mind Game Final Set.pptx
Sourav Kr Podder
 
UTS Health Student Promotional Representative_Position Description.pdf
Faculty of Health, University of Technology Sydney
 

PHP-04-Forms PHP-04-Forms PHP-04-Forms PHP-04-Forms

  • 1. Form Processing in PHP Dr. Charles Severance www.wa4e.com http://www.wa4e.com/code/forms http://www.wa4e.com/code/forms.zip
  • 2. PHP Global Variables • Part of the goal of PHP is to make interacting with HTTP and HTML as easy as possible. • PHP processes the incoming HTTP request based on the protocol specifications and drops the data into various super global variables (usually arrays).
  • 4. Web Server Database Server Time Apache PHP MySql Browser JavaScri pt D O M php code static files RRC/HTTP SQL Parse Respons e Parse Reques t ind.ph p $_GET get-01.php?x=2
  • 5. Forms – User Input / Action <p>Guessing game...</p> <form> <p><label for="guess">Input Guess</label> <input type="text" name="guess" id="guess"/></p> <input type="submit"/> </form> http://www.wa4e.com/code/forms/form1.php
  • 6. Forms Submit Data form1.php <p>Guessing game...</p> <form> <p><label for="guess">Input Guess</label> <input type="text" name="guess" id="guess"/></p> <input type="submit"/> </form>
  • 7. <p>Guessing game...</p> <form> <p><label for="guess">Input Guess</label> <input type="text" name="guess" id="guess"/></p> <input type="submit"/> </form> <pre> $_GET: <?php print_r($_GET); ?> </pre> form2.php
  • 8. GET and POST with Forms
  • 9. Web Server Database Server Time Apache PHP MySql Browser JavaScri pt D O M php code static files RRC/HTTP SQL Parse Respons e Parse Reques t form1.ph p $_POST
  • 10. <p>Guessing game...</p> <form method="post"> <p><label for="guess">Input Guess</label> <input type="text" name="guess" size="40" id="guess"/></p> <input type="submit"/> </form> <pre> $_POST: <?php print_r($_POST); ?> $_GET: <?php print_r($_GET); ?> </pre> form3.php
  • 11. Forms GET vs. POST Two ways the browser can send parameters to the web server • GET - Parameters are placed on the URL which is retrieved. • POST - The URL is retrieved and parameters are appended to the request in the HTTP connection.
  • 12. Passing Parameters to The Server GET /form1.php?guess=42 Accept: text/html User-Agent: Lynx/2.4 libwww/2.14 POST /form3.php Accept: text/html User-Agent: Lynx/2.4 libwww/2.14 Content-type: application/x-www-form-urlencoded Content-length: 13 guess=42 HTTP Request Browser Web Server <input type="text" name="guess" id="yourid" />
  • 13. Web Server Database Server Time Apache PHP MySql Browser JavaScri pt D O M php code static files RRC/HTTP SQL Parse Respons e Parse Reques t form3.ph p $_POST
  • 14. Rules of the POST/GET Choice • POST is used when data is being created or modified. • GET is used when you are reading or searching things. • Web search spiders will follow GET URLs but generally not POST URLs. • GET URLs should be “idempotent” - the same URL should give the “same thing” each time you access it. • GET has an upper limit of the number of bytes of parameters and values (think about 2K).
  • 16. Other Input Types • Text • Password • Radio Button • Check Box • Select / Drop-Down • Textarea http://www.wa4e.com/code/forms/more.php
  • 17. <p>Many field types...</p> <form method="post" action="more.php"> <p><label for="inp01">Account:</label> <input type="text" name="account" id="inp01" size="40" ></p> <p><label for="inp02">Password:</label> <input type="password" name="pw" id="inp02" size="40" ></p> <p><label for="inp03">Nick Name:</label> <input type="text" name="nick" id="inp03" size="40" ></p> $_POST: Array ( [account] => Beth [pw] => 12345 [nick] => BK [when] => pm ... ) more.php
  • 18. <p>Preferred Time:<br/> <input type="radio" name="when" value="am">AM<br> <input type="radio" name="when" value="pm" checked>PM</p> $_POST: Array( ... [nick] => BK [when] => pm [class] => si502 ... ) more.php
  • 19. <p>Classes taken:<br/> <input type="checkbox" name="class1" value="si502" checked> SI502 - Networked Tech<br> <input type="checkbox" name="class2" value="si539"> SI539 - App Engine<br> <input type="checkbox" name="class3"> SI543 - Java<br> </p> $_POST: Array( ... [when] => pm [class1] => si502 [soda] => 0 ... ) $_POST: Array( ... [when] => pm [class3] => on [soda] => 0 ... )
  • 20. <p><label for="inp06">Which soda: <select name="soda" id="inp06"> <option value="0">-- Please Select --</option> <option value="1">Coke</option> <option value="2">Pepsi</option> <option value="3">Mountain Dew</option> <option value="4">Orange Juice</option> <option value="5">Lemonade</option> </select> </p> $_POST: Array( ... [class] => si502 [soda] => 0 [snack] => peanuts ... ) The values can be any string, but numbers are used quite often. more.php
  • 21. <p><label for="inp07">Which snack: <select name="snack" id="inp07"> <option value="">-- Please Select --</option> <option value="chips">Chips</option> <option value="peanuts" selected>Peanuts</option> <option value="cookie">Cookie</option> </select> </p> $_POST: Array( ... [class] => si502 [soda] => 0 [snack] => peanuts ... ) more.php
  • 22. <p><label for="inp08">Tell us about yourself:<br/> <textarea rows="10" cols="40" id="inp08" name="about"> I love building web sites in PHP and MySQL. </textarea> </p> $_POST: Array( ... [about] => I love building web sites in PHP and MySQL. [dopost] => Submit ... ) more.php
  • 23. <p><label for="inp09">Which are awesome?<br/> <select multiple="multiple" name="code[]" id="inp09"> <option value="python">Python</option> <option value="css">CSS</option> <option value="html">HTML</option> <option value="php">PHP</option> </select> $_POST: Array( ... [code] => Array ( [0] => css [1] => html ) [dopost] => Submit ... ) more.php
  • 24. <p> <input type="submit" name="dopost" value="Submit"/> <input type="button" onclick="location.href='http://www.wa4e.com/'; return false;" value="Escape"> </p> $_POST: Array( ... [dopost] => Submit ... ) On submit input types, the text is both in the UI and in $_POST so we tend to look for the key, not the value. more.php
  • 25. HTML5 Input Types • HTML5 defines new input types • Not all browsers support all input types • They fall back to type="text" • http://www.w3schools.com/html/ html5_form_input_types.asp
  • 26. Select your favorite color: <input type="color" name="favcolor" value="#0000ff"><br/> Birthday: <input type="date" name="bday" value="2013-09-02"><br/> E-mail: <input type="email" name="email"><br/> Quantity (between 1 and 5): <input type="number" name="quantity" min="1" max="5"><br/> Add your homepage: <input type="url" name="homepage"><br> Transportation: <input type="flying" name="saucer"><br> http://www.wa4e.com/code/forms/html5.php Validation happens when you press submit.
  • 27. Data Security / Integrity / Validation
  • 28. Persisting Form Data • When we submit forms and there is an error, we just expect that the data will remain in the form when the page is redisplayed. • The application needs to make sure to put the previous values back into the form.
  • 29. <?php $oldguess = isset($_POST['guess']) ? $_POST['guess'] : ''; ?> <p>Guessing game...</p> <form method="post"> <p><label for="guess">Input Guess</label> <input type="text" name="guess" id="guess" size="40" value="<?= $oldguess ?>"/></p> <input type="submit"/> </form> form4.php Review: Ternary Operation “Persisting” Form Data Across Requests <?= $oldguess ?> <?php echo($oldguess); ?>
  • 30. Hygiene Alert! What happens when we use an HTML character in a form field value?
  • 31. <form method="post"> <p><label for="guess">Input Guess</label> <input type="text" name="guess" id="guess size="40" "value=""><b>DIE DIE</b>" /></p> <input type="submit"/> </form> form4.php
  • 32. To The Rescue: htmlentities() <form method="post"> <p><label for="guess">Input Guess</label> <input type="text" name="guess" id="guess" size="40" value="<?= htmlentities($oldguess) ?>"/></p> <input type="submit"/> </form> form5.php
  • 33. <form method="post"> <p><label for="guess">Input Guess</label> <input type="text" name="guess" id="guess" size="40" value="<?= htmlentities($oldguess) ?>"/></p> <input type="submit"/> </form> <input type="text" name="guess" id="guess" value="&quot;&gt;&lt;b&gt;DIE DIE&lt;/b&gt;" /></p>
  • 35. Web Server Database Server Time Apache PHP MySql Browser JavaScri pt D O M php code static files RRC/HTTP SQL Parse Respons e Parse Reques t form3.ph p $_POST
  • 36. Incoming Data Validation Making sure all user data is present and the correct format before proceeding • Non-empty strlen($var) > 0 • A number is_numeric($var) • An email address strpos($var, '@') > 0 • Or filter_var($var, FILTER_VALIDATE_EMAIL) !== false • ....
  • 40. Model-View-Controller • A model that defines the elements of a web application and how they interact • View – Produces output • Model – Handles data • Controller – Orchestration / Routing https://en.wikipedia.org/wiki/Model-view-controller
  • 41. Pattern: Processing POST Data • Many patterns for handling POST data • No “rules”, just “suggestions” <?php $guess = ''; $message = false; if ( isset($_POST['guess']) ) { // Trick for integer / numeric parameters $guess = $_POST['guess'] + 0; if ( $guess == 42 ) { $message = "Great job!"; } else if ( $guess < 42 ) { $message = "Too low"; } else { $message = "Too high..."; } } ?> <html> <head> <title>A Guessing game</title> </head> <body style="font-family: sans-serif;"> <p>Guessing game...</p> <?php if ( $message !== false ) { echo("<p>$message</p>n"); } ?> <form method="post"> <p><label for="guess">Input Guess</label> <input type="text" name="guess" id="guess" size="40" <?php echo 'value="' . htmlentities($guess) . '"'; ?> /></p> <input type="submit"/> </form> </body> Completely process incoming data (if any) - produce no output Produce the page output guess_mvc.php What about frameworks?
  • 42. <?php $oldguess = ''; $message = false; if ( isset($_POST['guess']) ) { // Trick for integer / numeric parameters $oldguess = $_POST['guess'] + 0; if ( $oldguess == 42 ) { $message = "Great job!"; } else if ( $oldguess < 42 ) { $message = "Too low"; } else { $message = "Too high..."; } } ?> <html> <head> <title>A Guessing game</title> </head> <body style="font-family: sans-serif;"> <p>Guessing game...</p> <?php if ( $message !== false ) { echo("<p>$message</p>n"); } ?> <form method="post"> <p><label for="guess">Input Guess</label> <input type="text" name="guess" id="guess" size="40" value="<?= htmlentities($oldguess) ?>"/></p> <input type="submit"/> </form> </body> Model View Controller Context guess_mvc.php
  • 43. <?php $oldguess = ''; $message = false; if ( isset($_POST['guess']) ) { // Trick for integer / numeric parameters $oldguess = $_POST['guess'] + 0; if ( $oldguess == 42 ) { $message = "Great job!"; } else if ( $oldguess < 42 ) { $message = "Too low"; } else { $message = "Too high..."; } } ?> <html> <head> <title>A Guessing game</title> </head> <body style="font-family: sans-serif;"> <p>Guessing game...</p> <?php if ( $message !== false ) { echo("<p>$message</p>n"); } ?> <form method="post"> <p><label for="guess">Input Guess</label> <input type="text" name="guess" id="guess" size="40" value="<?= htmlentities($oldguess) ?>"/></p> <input type="submit"/> </form> </body> No HTML No Database Controller Context guess_mvc.php
  • 44. <?php $guess = ''; $message = false; if ( isset($_POST['guess']) ) { // Trick for integer / numeric parameters $guess = $_POST['guess'] + 0; if ( $guess == 42 ) { $message = "Great job!"; } else if ( $guess < 42 ) { $message = "Too low"; } else { $message = "Too high..."; } } ?> <html> <head> <title>A Guessing game</title> </head> <body style="font-family: sans-serif;"> <p>Guessing game...</p> <?php if ( $message !== false ) { echo("<p>$message</p>n"); } ?> <form method="post"> <p><label for="guess">Input Guess</label> <input type="text" name="guess" id="guess" size="40" value="<?= htmlentities($oldguess) ?></p> <input type="submit"/> <input type="submit"/> </form> </body> <?php $oldguess = ''; $message = false; if ( isset($_POST['guess']) ) { // Nifty trick $oldguess = $_POST['guess'] + 0; if ( $oldguess == 42 ) { $message = "Great job!"; } else if ( $oldguess < 42 ) { $message = "Too low"; } else { $message = "Too high..."; } } ?> <html> ... guess_mvc.php
  • 45. <?php $guess = ''; $message = false; if ( isset($_POST['guess']) ) { // Trick for integer / numeric parameters $guess = $_POST['guess'] + 0; if ( $guess == 42 ) { $message = "Great job!"; } else if ( $guess < 42 ) { $message = "Too low"; } else { $message = "Too high..."; } } ?> <html> <head> <title>A Guessing game</title> </head> <body style="font-family: sans-serif;"> <p>Guessing game...</p> <?php if ( $message !== false ) { echo("<p>$message</p>n"); } ?> <form method="post"> <p><label for="guess">Input Guess</label> <input type="text" name="guess" id="guess" size="40" value="<?= htmlentities($oldguess) ?></p> <input type="submit"/> <input type="submit"/> </form> </body> ... ?> <html> <head> <title>A Guessing game</title> </head> <body style="font-family: sans-serif;"> <p>Guessing game...</p> <?php if ( $message !== false ) { echo("<p>$message</p>n"); } ?> <form method="post"> <p><label for="guess">Input Guess</label> <input type="text" name="guess" id="guess" size="40" value="<?= htmlentities($oldguess) ?>"></p> <input type="submit"/> </form> </body>
  • 46. <?php $oldguess = ''; $message = false; if ( isset($_POST['guess']) ) { // Nifty trick $oldguess = $_POST['guess'] + 0; if ( $oldguess == 42 ) { $message = "Great job!"; } else if ( $oldguess < 42 ) { $message = "Too low"; } else { $message = "Too high..."; } } ?> <html> ... Note: This code is a little sloppy in terms of its data validation. guess_mvc.php
  • 47. <html> <head> <title>A Guessing game</title> </head> <body style="font-family: sans-serif;"> <p>Guessing game...</p> <?php if ( $message !== false ) { echo("<p>$message</p>n"); } ?> <form method="post"> <p><label for="guess">Input Guess</label> <input type="text" name="guess" id="guess" size="40" value="<?= htmlentities($oldguess) ?>"></p> <input type="submit"/> </form> </body> guess_mvc.php
  • 48. Summary • Forms, $_GET and $_POST • Form fields • New form fields in HTML5 • Sanitizing HTML • Data Validation • Model-View-Controller
  • 49. Acknowledgements / Contributions These slides are Copyright 2010- Charles R. Severance (www.dr-chuck.com) as part of www.wa4e.com and made available under a Creative Commons Attribution 4.0 License. Please maintain this last slide in all copies of the document to comply with the attribution requirements of the license. If you make a change, feel free to add your name and organization to the list of contributors on this page as you republish the materials. Initial Development: Charles Severance, University of Michigan School of Information Insert new Contributors and Translators here including names and dates Continue new Contributors and Translators here

Editor's Notes

  • #49: Note from Chuck. Please retain and maintain this page as you remix and republish these materials. Please add any of your own improvements or contributions.