HTML Forms
An HTML form is used to collect user input. The user input can then be sent to a server for processing.
The <form> Element
The HTML <form>
element defines a form that is used to
collect user input:
<form>
.
form elements
.
</form>
An HTML form contains form elements.
Form elements are different types of input elements, like: text fields, checkboxes, radio buttons, submit buttons, and more.
The <input> Element
The <input>
element is the most important form element.
The <input>
element is displayed in several ways, depending on the type
attribute.
Here are some examples:
Type | Description |
---|---|
<input type="text"> | Defines a single-line text input field |
<input type="radio"> | Defines a radio button (for selecting one of many choices) |
<input type="submit"> | Defines a submit button (for submitting the form) |
You will learn a lot more about input types later in this tutorial.
Text Fields
<input type="text">
defines a single-line input field for
text input.
Example
A form with two text input fields:
<form>
<label for="fname">First name:</label><br>
<input
type="text" id="fname" name="fname"><br>
<label for="lname">Last
name:</label><br>
<input type="text" id="lname" name="lname">
</form>
Try it Yourself »
This is how it will look like in a browser:
Note: The form itself is not visible. Also note that the default width of an input field is 20 characters.
The <label> Element
Notice the use of the <label>
element in the
example above.
The <label>
tag defines a label for many
form elements.
The <label>
element is useful for
screen-reader users, because the screen-reader will read out loud the label when
the user is focused on the input element.
The <label>
element also help users who have
difficulty clicking on very small regions (such as radio buttons or checkboxes)
- because when the user clicks the text within the <label> element, it toggles
the radio button/checkbox.
The for
attribute of the <label> tag should
be equal to the id
attribute of the <input>
element to bind them together.
Radio Buttons
<input type="radio">
defines a radio button.
Radio buttons let a user select ONE of a limited number of choices.
Example
A form with radio buttons:
<form>
<input type="radio" id="male" name="gender"
value="male">
<label for="male">Male</label><br>
<input
type="radio" id="female" name="gender" value="female">
<label
for="female">Female</label><br>
<input type="radio" id="other"
name="gender" value="other">
<label for="other">Other</label>
</form>
Try it Yourself »
This is how the HTML code above will be displayed in a browser:
The Submit Button
<input type="submit">
defines a button for
submitting the form data to a form-handler.
The form-handler is typically a page on the server with a script for processing input data.
The form-handler is specified in the form's action attribute.
Example
A form with a submit button:
<form action="/action_page.php">
<label for="fname">First
name:</label><br>
<input type="text" id="fname" name="fname"
value="John"><br>
<label for="lname">Last name:</label><br>
<input type="text" id="lname" name="lname" value="Doe"><br><br>
<input type="submit" value="Submit">
</form>
Try it Yourself »
This is how the HTML code above will be displayed in a browser:
The Action Attribute
The action
attribute defines the action to be performed when the form is submitted.
Usually, the form data is sent to a page on the server when the user clicks on the submit button.
In the example above, the form data is sent to a page on the server called "/action_page.php". This page contains a server-side script that handles the form data:
<form action="/action_page.php">
If the action
attribute is omitted, the action is set to the current page.
The Target Attribute
The target
attribute specifies if the submitted result will open in a new
browser tab, a frame, or in the current window.
The default value is "_self
" which means the form will be submitted in the current window.
To make the form result open in a new browser tab, use the value "_blank
".
Example
Here, the submitted result will open in a new browser tab:
<form action="/action_page.php" target="_blank">
Try it Yourself »
Other legal values are "_parent
", "_top
", or a name representing the name of an iframe.
The Method Attribute
The method
attribute specifies the HTTP method (GET or
POST) to be used when submitting the form data.
Example
Use the GET method when submitting the form:
<form action="/action_page.php" method="get">
Try it Yourself »
or:
Example
Use the POST method when submitting the form:
<form action="/action_page.php" method="post">
Try it Yourself »
When to Use GET?
The default HTTP method when submitting form data is GET.
However, when GET is used, the form data will be visible in the page's address field:
/action_page.php?firstname=John&lastname=Doe
Notes on GET:
- Appends form-data into the URL in name/value pairs
- The length of a URL is limited (2048 characters)
- Never use GET to send sensitive data! (will be visible in the URL)
- Useful for form submissions where a user wants to bookmark the result
- GET is better for non-secure data, like query strings in Google
When to Use POST?
Always use POST if the form data contains sensitive or personal information. The POST method does not display the form data in the page address field.
Notes on POST:
- POST has no size limitations, and can be used to send large amounts of data.
- Form submissions with POST cannot be bookmarked
The Name Attribute
Each input field must have a name
attribute to be submitted.
If the name
attribute is omitted, the data of that input field will not be sent at all.
Example
This example will not submit the value of the "First name" input field:
<form action="/action_page.php">
<label for="fname">First
name:</label><br>
<input type="text" id="fname" value="John"><br><br>
<input type="submit" value="Submit">
</form>
Try it Yourself »
HTML Exercises
Here is the list of all <form>
attributes:
Attribute | Description |
---|---|
accept-charset | Specifies the charset used in the submitted form (default: the page charset). |
action | Specifies an address (url) where to submit the form (default: the submitting page). |
autocomplete | Specifies if the browser should autocomplete the form (default: on). |
enctype | Specifies the encoding of the submitted data (default: is url-encoded). |
method | Specifies the HTTP method used when submitting the form (default: GET). |
name | Specifies a name used to identify the form (for DOM usage: document.forms.name). |
novalidate | Specifies that the browser should not validate the form. |
target | Specifies the target of the address in the action attribute (default: _self). |
You will learn more about the form attributes in the next chapters.