Advanced Higher Computing Science HTML Form Processing

advertisement
Advanced Higher Computing
Science
HTML Form Processing
HTML Forms
A form can be used to :
• sign up for a service
• send an email to an organisation
• upload data to a database
• query a database
• search a website
• edit a page on a content managed site
• several of the above things simultaneously
Account creation and comment submission
Database updates and queries
Content Managed websites
Content Managed sites
• Generate HTML pages using server-side scripting
(PHP) and a database (MySQL)
• Use forms to enable users to add content without
having to write HTML code
• Restrict users to a house style dictated by site
administrator (CSS)
• Use client-side and server-side validation to maintain
data integrity.
Content Managed sites
A content managed site will have users with different
privileges such as:
• Visitors who can only view the public pages on the
site
• Content managers who can add, edit and delete
content
• Administrators who can add or remove users change
user permissions and alter the structure and layout of
the site.
Content Managed sites
Forms used to:
• Build site
• Add users
• Create new content
• Update content
• Search site
• Contact administrators
HTML Forms: User view
User visits a web page that contains a form
Web browser displays the HTML form.
REPEAT
User completes the form and submits it.
IF any required fields are empty or fields are not
the required format THEN
User is informed of error
UNTIL fields contain correct data
Web browser displays response page
HTML forms: server view
• User requests HTML page containing a form
• Browser sends form page to client
• Form data is received from browser
• Form data is processed by script
 Database is updated AND/OR Email sent
 Browser sends response to client AND/OR
page content is updated
HTTP protocol: GET
Client requests web page on port 80
->
GET /index.html HTTP/1.0
HTTP server sends response code
<-
HTTP/1.0 200 OK Date: Fri, 31 Dec …..etc
HTTP server sends requested page
<-
<html><head><script type="text/javascript"
src="script.js"></script> <meta name="description"
content="Main Page."> <meta name=" ………… etc ……… <html>
HTTP server closes socket
HTTP protocol: GET
Client requests search page on port 80
->
GET /search.html HTTP/1.0?=http+protocol
HTTP server sends response code
<-
HTTP/1.0 200 OK Date: Fri, 31 Dec …..etc
HTTP server sends requested search results
<-
<html>itemscope="" itemtype="http://schema.org/WebPage"
lang="en-GB"><head> ………… etc ……… <html>
HTTP server closes socket
Basic structure of an HTML form
<html>
<head>
<title>Basic form</title>
</head>
<body>
<form name="commentForm" method="" action="" >
<label for="comment">Enter your comment here</label>
<input type="text" name="comment" value="" />
<input type="submit" name="submit" id="Submit" value="Submit" />
</form>
</body>
</html>
Basic structure of an HTML form
<form name="commentForm" method="" action="">
<label for="comment">Enter your comment here</label>
<input type="text" name="comment" value="" />
<input type="submit" name="submit" id="Submit" value="Submit"/>
</form>
The <form> element
name is a unique identifier for the form
method will be how the data is transmitted to the processing script
action will be the URL of the processing script on the server
Basic structure of an HTML form
<form name="commentForm" method="" action="">
<label for="comment">Enter your comment here</label>
<input type="text" name="comment" value="enter comment here"/>
<input type="submit" name="submit" value="Submit" />
</form>
The <input> element:
type="text" specifies that the browser should display a single line text input box
name="comment" means that when the form is submitted the contents of this input will be referred to
as comment
value="" Value specifies a value to place in the text box when the form is created
Optional attributes:
maxlength="60" gives the text box a maximum number of characters that it can hold
size="40" the size of the text box as it appears in the web page
Basic structure of an HTML form
<form name="commentForm" method="" action="">
<label for="comment">Enter your comment here</label>
<input type="text" name="comment" value="" />
<input type="submit" name="submit" value="Submit" />
</form>
The <input> element (button)
type="submit" creates a button that sends the forms contents for processing
name="submit" uniquely identifies the button
value="Submit" value specifies the text to display on the button
Optional attributes
Value="reset" creates a reset button that clears the values entered in the form
<input type="reset" name="reset" value="Clear form" />
Form elements
• Text box:
• Text area:
• Button:
• Checkbox:
• Radio Button:
• List selection:
single line text box
multi line text area
clickable button to perform an action
multiple selection (on/off)
single selection (on/off)
dropdown list (text)
Form Field Verification
Not the same thing as validation!
Client side validation: HTML5
maxlength can limit the number of characters
The pattern attribute is a method of declaring rules to match
string contents
required means that the field cannot be empty
<input type="text" name="username" maxlength="40"
pattern="^[A-Za-z0-9]+$" required />
Input patterns can be used to validate specific input formats such as
telephone numbers, credit card numbers, IP addresses etc.
Client side validation: HTML5
• HTML5 offers some (limited) input validation.
• Results may be browser dependent
<input
<input
<input
<input
<input
type="number" min="1" max="10">
type ="email">
type ="url">
type ="date">
type ="time">
Client side validation: HTML5
<input type="text" name="name" id="name" pattern="[A-Za-z-09]+\s[A-Za-z-'0-9]+" title="firstname lastname"/>
<input type="text" name="firstname" required />
Client side validation: HTML5
<input type="number" min="1" max="9" name="number"/>
<input type="time" name="time"
/>
<input type="date" name="date"/>
Client side validation: HTML5
<input type="url" name="url" />
<input type="email" name="email" />
Client-side validation: CSS3
CSS3 cannot validate input on a form, but it can be used to format invalid
and valid input to help the user.
<style type="text/css">
input:invalid {
border-color: red;
background:hsl (0, 50%, 90%)
}
input:valid {
border-color: green;
background:hsl (120, 50%, 90%)
}
</style>
Client-side validation: HTML5
HTML form validation is supported by all the latest
desktop browsers, and most mobile browsers.
HTML form validation is not supported on versions of IE
prior to IE10, iOS, Safari, or the default Android browser.
If you want to use form validation on these browsers
you need to use JavaScript
Client-side validation: Fallback
If people viewing your web page do not have the latest version of their browser
installed, then there needs to be some system which detects this and directs them
to a page which still provides client-side validation.
When a browser requests a page, it will provide the HTTP server with its name and
version number.
https://www.whatismybrowser.com/
This is usually done using JavaScript code which detects the browser version and
then sends the user to a page which uses JavaScript for client-side validation.
Examples are:
• Modernizer which tests for HTML5 and CSS3 features
• Yepnope will load scripts conditionally depending on the results from
Modernizer
Client-side validation: JavaScript
A simple input validation script:
function checknumber(){
var numbertocheck = usernumber.value;
while (numbertocheck < 1 || numbertocheck >100){
alert("sorry that number is out of range, please re-enter");
document.getElementById('usernumber').value = null;
document = initDocument;
}
You can see more JavaScript examples here:
http://www.codecademy.com/courses/web-beginner-en-8l45k/1/1
Client-side validation: JavaScript
Although JavaScript can be embedded inline on a web page,
or in the <head> section of a web page, like CSS
formatting it is best to implement it as an external file. This
means that its code can be used by more than one page.
<head>
<script type="text/javascript" src="script.js"></script>
</head>
Front-end Frameworks
Frameworks are packages made up of HTML, CSS and
JavaScript code which can be used to build the user
interface of a website. They will include tools for
creating code to:
• scale pages in response to the platform being used
• build HTML forms
• set up style definitions for HTML elements
• set up CSS grids for element positioning
• deal with browser incompatibility
Front-end Frameworks
Popular front-end frameworks:
• Bootstrap
• Foundation 3
• Grids system
Sending form data to a script: GET
The values from the form are visible in the URL so are
insecure. The string on values starts with "?"
• appends form data into the URL in name/value pairs
(delimitated by &);
• the length of a URL is limited (to roughly 3000 characters);
• not suitable for sensitive information because the data is
visible in the URL;
• useful for instances where the data will be part of a
bookmark/link to a page;
• useful when debugging because the values passed to the
processing script are visible.
Sending form data to a script: POST
The POST method adds the form data inside the body of
the HTTP request to the processing script so the data is not
visible in the URL. This is generally more secure than the
GET method.
• adds the form data to the HTTP request to the processing
script
• has no size limitations on the amount of data that can be
submitted
• form submissions with POST cannot be bookmarked
Sending form data to a script
<form name="commentForm" method="POST" action="sendmail.php">
<label for="comment">Enter your comment here</label>
<input type="text" name="comment" value="" />
<input type="submit" name="submit" value="Submit" />
</form>
Two possible methods are available: GET and POST
The GET method adds the list of values from the form to the URL of the processing
script.
The POST method adds the form data inside the body of the HTTP request to the
processing script so the data is not visible in the URL. This is generally more secure
than the GET method.
The action is the name of the script which processes the data
The sendmail.php script
<?php
// get data from form
$comment = $_POST['comment'];
//send email
$to = "queries@mycompany.co.uk"
$subject = "user comment";
$header = "From: Comment form";
$body = $comment;
mail( $to,$subject,$body,$header);
//send response
echo "Your comment has been sent, thank you for your
response.";
?>
PHP essentials
• PHP code is always enclosed inside this tag: <?php
• PHP variable names are prefixed with a $ symbol.
• Every statement must end with a semicolon ";"
• Comments start with //
?>
Retrieving data from a database
<?php
//connect to mysql server
$mysqli = new mysqli( "server" , "username" , "password",
"database");
// setting up the MySQL
query$sql = "SELECT * FROM table1";
// get data
$result = mysql_query($sql);
//setting up table and printing two column headings
print "<table width = 50% border=1>"; print"<tr><td><b>Forename</b></td><td><b>Surname</b></td></tr>";
//while there is data to retrieve
while ( $db_field = mysql_fetch_assoc($result) ) {
//print row with two cells
print "<tr> <td>";
print $db_field['forename']. "</td><td>";
print $db_field['surname']. "</td></tr>"; }
print"</table>";
?>
Sending form data to a database
<form name="addData" method="POST" action="addData.php">
<label for="forename">Enter your forename here</label>
<input type="text" name="forename" value="" />
<label for="surname">Enter your surname here</label>
<input type="text" name="surname" value="" />
<input type="submit" name="submit" value="Submit" />
</form>
The addData.php script
<?php
//get data from form
$forename = $_POST['forename'];
$surname =
$_POST['surname'];
//connect to mysql server
$mysqli = new mysqli( "server" , "username" , "password",
"database");
//SQL code to add data to database
$sql ="INSERT INTO test1(forename,surname)VALUES('$forename','$surname')";
$result = $mysqli->query($sql);
?>
Form security: Code Injection
This attack is when a weakness in poorly written
code is used by an attacker to inject code into a
vulnerable script and change the execution of the
script.
Attackers will paste SQL or HTML code into a web
form to extract unauthorised data from the database
or control the MySQL server
http://info.varonis.com/web-security-fundamentals
Form security: Cross site scripting
A type of attack carried out on web applications. It allows
hackers to inject client-side script into a web page that others
can view. Cross-site scripting uses gaps in the security of web
applications to allow malicious content to be delivered from a
compromised site. When the user visits the compromised
page information can be harvest by the attacker.
Server-side validation: sanitization
• Sanitization is the removal of illegal characters from the
form data, to protect against code injection attacks
$name =filter_var($_GET['name'],FILTER_SANITIZE_STRING);
Server-side validation: PHP validation
function validate_form ($username, $email) {
if(!ctype_alnum($username)||!filter_var($email, FILTER_VALIDATE_EMAIL)){
return false;
}
return true;
}
This function uses the PHP type ctype_alnum to validate the username because this
requires that $username be alphanumeric only. The PHP filter.
FILTER_VALIDATE_EMAIL
is used for the email address. Should either of these be invalid then a value of false is
returned from the function. If they are valid then true is returned.
Past paper questions
• Computing Science Specimen Paper Q 2
• Information Systems 2015 Q11b
• Information Systems 2014 Q11b
• Information Systems 2013 Q13e
• Information Systems 2012 Q16e
Specimen Paper Q 2
What method of processing would be used in line 1? Explain your answer.
GET Because the search text is included in the URL
Specimen Paper Q 2
State the missing contents of the type and value attributes needed to complete line 5.
type="text"
value="Search or enter catalogue number"
State the missing contents of the name attribute needed to complete line 6
name="searchbox"
2015 Q11b
When members first use one of the kiosks, they are asked to provide the
additional information required using this HTML form:
The structure of this HTML form includes a form element and several input
elements.
(i) Describe, in detail, the purpose of the form element.
2015 Q11b
The structure of this HTML form includes a form element and
several input elements.
(i) Describe, in detail, the purpose of the form element.
• the form element creates a form to gather input from
the user which is then processed using a script
• the action element refers to the name of the script that
will receive the data entered into the form and the
method element refers to how the form data will be
transmitted.
2015 Q11b
(ii) One of the Return Date Notifications from the form shown
on the opposite page is displayed below.
Write the HTML code to generate this Return Date
Notification option.
You should clearly indicate the contents of the type, name
and value attributes.
<input type = “radio” name = “preferred date” value = “2
days prior to due date”>
2014 Q11b
A system will enable customers to book tickets from home via the Internet
and then collect them from the kiosks at each venue.
Customers must enter their details into an online form as shown here:
2014 Q11b
Some of the HTML code for this form is provided below:
(i)
State what is missing from line 1 of the code above.
There is no action attribute.
(ii) The textarea element is used for obtaining the customer’s address.
Explain why an input element would not be suitable.
The input element does not allow multiple lines of text.
2014 Q11b
(iii) Change the code for line 5 so that a button labelled
‘SEND’ is produced
<button type="submit"> send </button>
or
<input type = “submit” value = “send”>
2013 Q13e
A motel allows guests to upload photographs taken during their stay. An HTML
form is used for this purpose.
The HTML form element for the Photo Upload Form is provided below.
< form action = “guest_photo.asp” method = “get” >
Explain the purpose of the action attribute.
The action attribute specifies the page on the server that will receive any
images submitted by guests.
Complete the type attribute of the input element for the button used to
browse for the photo to be uploaded.
< input type="file" >
2012 Q16e
The online database can be accessed using a web browser. Part of the HTML code for
the logon screen is shown below.
<form method= “post” action=“dblogin.php”>
<p> Username <input name=“username” type=“text”
value=“******” /></p>
<p> Password <input name=“Password1” type=“password”
value = “*******”/> </p>
</form>
(i) Produce a sketch to show what will be displayed by this code in the web browser
before the user starts to log on.
2012 Q16e
<form method= “post” action=“dblogin.php”>
<p> Username <input name=“username” type=“text”
value=“******” /></p>
<p> Password <input name=“Password1” type=“password”
value = “*******”/> </p>
</form>
ii) Explain the purpose of the action attribute in the above code.
The data entered in the form will be sent to the dblogin.php page .
Download