Chapter 12
Need Feedback? Create a Form!
CONTENTS
-
What Is a Form, Anyway?
-
Creating Forms
-
Making It Go: The Submit Button
-
Starting Over: The Reset Button
-
Using Text Boxes for Single-Line Text
-
Using Text Areas for Multi-Line Text
-
Toggling an Option On and Off with Check Boxes
-
Multiple Choice Options: Radio Buttons
-
Selecting From Lists
- Oh
Say, Can You CGI?
-
Ask Your Provider
-
The Hire-a-Nerd Route
-
Check Out the Web's CGI Resources
-
The Least You Need to Know
Back in Chapter 7
"Making the Jump to Hyperspace: Adding Links," I showed you how to use
hypertext links to add a semblance of interactivity to your pages. However,
beyond this basic level of interaction lies a whole genre of Web pages
called forms.
|
Where, Oh Where Are This Chapter's Examples? |
Because the book's disk had already
shipped to production by the time I wrote this chapter, none of these
form examples will be on the disk. However, all is not lost. I'll put
all the examples on my Web site and you'll be able to pick them up
from there. Here's where to go:
http://www.logophilia.com/Books/CIGHtml/examples.html
|
Most modern programs
will toss a dialog box in your face if they need to extract some information
from you. For example, selecting a program's "Print" command will most
likely result in some kind of "Print" dialog box showing up. The purpose of
this dialog box will be to pester you for information such as the number of
copies you want, the pages you want to print, and so on.
A form is simply the
Web-page equivalent of a dialog box. It's a page populated with text boxes,
drop-down lists, and command buttons to get information from the reader. For
example, the picture below shows a form from my Web site. This is a "guest
book" that people "sign" when they visit my Web abode. Although most new
browsers can handle forms, some older browsers may choke on them.
Of course, guest
books are only the beginning of what you can do with forms. If you put out a
newsletter or magazine, you can use forms to gather information from
subscribers; if your Web site includes pages with restricted access, you can
use a form to get a person's user name and password for verification; if you
have information in a database, you can use a form to have people specify
what type of information they want to access.
You create forms
using special HTML tags, and it's pretty easy to set up a form. (The
problem, however, is getting hold of the information that the reader types
into the form. Unfortunately, this requires some programming, so it's well
beyond the scope of a humble book such as this. So what's a poor,
programming-challenged Web wizard to do? Check out the section titled "Oh
Say, Can You CGI?" later on in this chapter.)
To get started, enter
the <FORM> and </FORM> tags. These can be inserted anywhere inside the body
of the page. You place all the other form-related tags (which I'll show you
in the rest of this chapter) between <FORM> and </FORM>.
The <FORM> tag always
includes a couple of extra goodies that tell the Web server how to process
the form. Here's the general format:
<FORM ACTION="url" METHOD=METHOD>
</FORM>
Here, the ACTION
attribute tells the browser where to send the form's data. This will almost
always be a program (or script, as they're often called) that
processes the data and then performs some kind of action (hence the name).
The url part is the URL of the Web page that contains the program.
The METHOD attribute
tells the browser how to send the form's data to the URL specified with
ACTION. You have two choices here for METHOD: POST and GET. Although
both work in most cases, GET tends to cause errors in large forms.
Therefore, you should always use the POST method.
Let's bring all this
gobbledygook down to earth with a concrete example. You can test your forms
by using one of the NCSA's public scripts. There's one for the POST method
and one for the GET method. Here's how to use the POST method version:
<FORM ACTION="http://hoohoo.ncsa.uiuc.edu/htbin-post/post-query" METHOD=POST>
Here's how to use the
GET method version:
<FORM ACTION="http://hoohoo.ncsa.uiuc.edu/htbin/query" METHOD=GET>
You can try this out
once you build yourself a working form. Speaking of which, the next few
sections take you through the basic form elements.
Most dialog boxes, as
you probably know from hard-won experience, have an OK button. Selecting
this button says, in effect, "All right, I've made my choices. Now go put
everything into effect." Forms also have command buttons, and they come in
two flavors: "submit" buttons and "reset" buttons.
A submit button (I'll
talk about the reset button in the next section) is the form equivalent of
an OK dialog box button. When the reader clicks on the submit button, the
form data is shipped out to the program specified by the <FORM> tag's ACTION
attribute. Here's the simplest format for the submit button:
<INPUT TYPE=SUBMIT>
As you'll see, most
form elements use some variation on the <INPUT> tag and, as I said before,
you place all these tags between <FORM> and </FORM>. In this case, the
TYPE=SUBMIT attribute tells the browser to display a command button labeled
Submit Query (or, on some browsers, Submit or Send).
Note that each form can have just one submit button.
If the standard
Submit Query label is a bit too stuffy for your needs, you can make up
your own label, as follows:
<INPUT TYPE=SUBMIT VALUE="Label">
Here,
Label
is the label that will appear on the button. In the following example (SUBMIT.HTM),
I've inserted a submit button with the label "Make It So!", and the
following figure shows how it looks in a browser.
<HTML>
<HEAD>
<TITLE>Submit Button Custom Label Example</TITLE>
</HEAD>
<BODY>
<H3>An example of a custom label for a submit button:</H3>
<FORM ACTION="http://hoohoo.ncsa.uiuc.edu/htbin-post/post-query" METHOD=POST>
<INPUT TYPE=SUBMIT VALUE="Make It So!">
</FORM>
</BODY>
</HTML>
If you plan on
creating fairly large forms, you can do your readers a big favor by
including a reset button somewhere on the form. A reset button clears all
the data from the form's fields and re-enters any default values that you
specified in the fields. (I'll explain how to set up default values for each
type of field as we go along.) Here's the tag you use to include a reset
button:
<INPUT TYPE=RESET>
This creates a
command button labeled "Reset." Yes, you can create a custom label by
tossing the VALUE attribute into the <INPUT> tag, as in the following
example:
<INPUT TYPE=RESET VALUE="Start From Scratch">
For simple text
entries, such as a person's name or address, use text boxes. These are just
rectangles within which the reader can type whatever he or she likes. Here's
the basic format for a text box:
<INPUT TYPE=TEXT NAME="Field Name">
In this case,
Field Name is a name you assign to the field that's unique among the
other fields in the form. For example, to create a text box the reader can
use to enter their first name (let's call it "First"), you'd enter the
following:
<INPUT TYPE=TEXT NAME="First">
For clarity, you'll
also want to precede each text box with a label that tells the reader what
kind of information to type in. For example, the following line precedes a
text box with "First Name:" so the reader knows to type in their first name:
First Name: <INPUT TYPE=TEXT NAME="First">
Here's some HTML code
(TEXTBOX.HTM) that utilizes a few text boxes to gather some information from
the reader:
<HTML>
<HEAD>
<TITLE>Text Box Example</TITLE>
</HEAD>
<BODY>
<H3>Please tell me about yourself:</H3>
<FORM ACTION="http://hoohoo.ncsa.uiuc.edu/htbin-post/post-query" METHOD=POST>
First Name: <INPUT TYPE=TEXT NAME="First">
<P>
Last Name: <INPUT TYPE=TEXT NAME="Last">
<P>
Nickname: <INPUT TYPE=TEXT NAME="Nickname">
<P>
Stage Name: <INPUT TYPE=TEXT NAME="Stage">
<P>
<INPUT TYPE=SUBMIT VALUE="Just Do It!">
<INPUT TYPE=RESET VALUE="Just Reset It!">
</FORM>
</BODY>
</HTML>
The following figure
shows how it looks in Netscape:
If you run this form
(that is, if you select the Just Do It! button), the data is sent to the
NCSA's public server. Why? Because I included the following line:
<FORM ACTION="http://hoohoo.ncsa.uiuc.edu/htbin-post/post-query" METHOD=POST>
You'd normally
replace this ACTION attribute with one that points to a program that will do
something to the data. You don't have such a program right now, so it's safe
just to use the NCSA's server for testing purposes. Remember that this
server doesn't do much of anything except send your data back to you. If
everything comes back okay (i.e., there are no error messages), then you
know your form is working properly. Just so you know what to expect, the
following figure shows the page that gets returned to you. Notice how the
page shows the names of the fields followed by the value the user entered.
Text boxes also come
with the following bells and whistles:
Setting the
default value If you'd like to put some pre-fab text into the field,
include the VALUE attribute in the <INPUT> tag. For example, suppose you
want to know the URL of the reader's home page. To include http://
in the field (since most URLs begin with this), you'd use the following
tag:
<INPUT TYPE=TEXT NAME="URL" VALUE="http://">
Setting the size
of the box To determine the length of the text box, use the SIZE
attribute. (Note that this attribute affects only the size of the box, not
the length of the entry; for the latter, see the MAXLENGTH attribute,
below.) For example, the following tag displays a text box that's 40
characters long:
<INPUT TYPE=TEXT NAME="Address" SIZE=40>
Limiting the
length of the text In a standard text box, the reader can type away
until their fingers are numb. If you'd prefer to restrict the length of
the entry, use the MAXLENGTH attribute. For example, the following text
box is used to enter a person's age and restricts the length of the entry
to 3 characters:
<INPUT TYPE=TEXT NAME="Age" MAXLENGTH=3>
If you want to give
your readers lots of room to type their hearts out, or if you need
multi-line entries (such as an address), you're better off using a text
area than a text box. A text area is also a rectangle that accepts text
input, but text areas can display two or more lines at once. Here's how they
work:
<TEXTAREA NAME="Field Name" ROWS=TotalRows COLS=TotalCols WRAP>
</TEXTAREA>
Here,
Field Name
is a unique name for the field, TotalRows
specifies the total number of lines displayed, and
TotalCols
specifies the total number of columns displayed. The WRAP attribute tells
the browser to wrap the text onto the next line whenever the user's typing
hits the right edge of the text area. (The WRAP attribute is supported by
most browsers, but not all of them.) Note, too, that the <TEXTAREA> tag
requires the </TEXTAREA> end tag. (If you want to include default values in
the text area, just enter them-on separate lines, if necessary-between <TEXTAREA>
and </TEXTAREA>.)
The following HTML
tags (TEXTAREA.HTM) show a text area in action, and the following figure
shows how it looks in a browser.
<HTML>
<HEAD>
<TITLE>Text Area Example</TITLE>
</HEAD>
<BODY>
<H3>Today's Burning Question</H3>
<HR>
<FORM ACTION="http://hoohoo.ncsa.uiuc.edu/htbin-post/post-query" METHOD=POST>
First Name: <INPUT TYPE=TEXT NAME="First Name">
<P>
Last Name: <INPUT TYPE=TEXT NAME="Last Name">
<P>
Today's <I>Burning Question</I>: <B>Why is Jerry Lewis so popular in France?</B>
<P>
Please enter your answer in the text area below:
<BR>
<TEXTAREA NAME="Answer" ROWS=10 COLS=60 WRAP>
</TEXTAREA>
<P>
<INPUT TYPE=SUBMIT VALUE="I Know!">
<INPUT TYPE=RESET>
</FORM>
</BODY>
</HTML>
If you want to elicit
yes/no or true/false information from your readers, check boxes are a lot
easier than having the user type in the required data. Here's the general
format for an HTML check box:
<INPUT TYPE=CHECKBOX NAME="Field Name">
As usual,
Field
Name
is a unique name for the field. You can also add the attribute CHECKED to
the <INPUT> tag, which tells the browser to display the check box
"pre-checked." Here's an example:
<INPUT TYPE=CHECKBOX NAME="Species" CHECKED>Human
Notice in the above
example that I placed some text beside the <INPUT> tag. This text is used as
a label that tells the reader what the check box represents. Here's a longer
example (CHECKBOX.HTM) that uses a whole mess of check boxes. The following
figure shows how it looks (I've checked a few of the boxes so you can see
how they appear):
<HTML>
<HEAD>
<TITLE>Check Box Example</TITLE>
</HEAD>
<BODY>
<H3>Welcome to Hooked On Phobics!</H3>
<HR>
<FORM ACTION="http://hoohoo.ncsa.uiuc.edu/htbin-post/post-query" METHOD=POST>
What's <I>your</I> phobia? (Please check all that apply):
<P>
<INPUT TYPE=CHECKBOX NAME="Ants">Myrmecophobia (Fear of ants)<BR>
<INPUT TYPE=CHECKBOX NAME="Bald">Peladophobia (Fear of becoming bald)<BR>
<INPUT TYPE=CHECKBOX NAME="Beards">Pogonophobia (Fear of beards)<BR>
<INPUT TYPE=CHECKBOX NAME="Bed">Clinophobia (Fear of going to bed)<BR>
<INPUT TYPE=CHECKBOX NAME="Chins">Geniophobia (Fear of chins)<BR>
<INPUT TYPE=CHECKBOX NAME="Flowers">Anthophobia (Fear of flowers)<BR>
<INPUT TYPE=CHECKBOX NAME="Flying">Aviatophobia (Fear of flying)<BR>
<INPUT TYPE=CHECKBOX NAME="Purple">Porphyrophobia (Fear of the color purple)<BR>
<INPUT TYPE=CHECKBOX NAME="Teeth">Odontophobia (Fear of teeth)<BR>
<INPUT TYPE=CHECKBOX NAME="Thinking">Phronemophobia (Fear of thinking)<BR>
<INPUT TYPE=CHECKBOX NAME="Vegetables">Lachanophobia (Fear of vegetables)<BR>
<INPUT TYPE=CHECKBOX NAME="Fear">Phobophobia (Fear of fear)<BR>
<INPUT TYPE=CHECKBOX NAME="Everything">Pantophobia (Fear of everything)<BR>
<P>
<INPUT TYPE=SUBMIT VALUE="Submit">
<INPUT TYPE=RESET>
</FORM>
</BODY>
</HTML>
Instead of yes/no
choices, you might want your readers to have a choice of three or four
options. In this case, radio buttons are your best bet. With radio buttons,
the user gets two or more options, but they can pick only one. Here's the
general format:
<INPUT TYPE=RADIO NAME="Field Name" VALUE="Value">
Field
Name
is the usual field name, except in this case you supply the same name to
all the radio buttons. That way, the browser knows which buttons are
grouped together. Value
is a unique text string that specifies the value of the option when it's
selected. In addition, you can also add CHECKED to one of the buttons to
have the browser activate the option by default. The following HTML document
(RADIOBTN.HTM) puts a few radio buttons through their paces, as shown in the
following figure.
<HTML>
<HEAD>
<TITLE>Radio Button Example</TITLE>
</HEAD>
<BODY>
<H3>Survey</H3>
<HR>
<FORM ACTION="http://hoohoo.ncsa.uiuc.edu/htbin-post/post-query" METHOD=POST>
Which of the following best describes your current salary level:
<UL>
<INPUT TYPE=RADIO NAME="Salary" VALUE="Salary1" CHECKED>Below the poverty line<BR>
<INPUT TYPE=RADIO NAME="Salary" VALUE="Salary2">Living wage<BR>
<INPUT TYPE=RADIO NAME="Salary" VALUE="Salary2">Comfy<BR>
<INPUT TYPE=RADIO NAME="Salary" VALUE="Salary2">DINK (Double Income, No Kids)<BR>
<INPUT TYPE=RADIO NAME="Salary" VALUE="Salary2">Rockefellerish<BR>
</UL>
Which of the following best describes your political leanings:
<UL>
<INPUT TYPE=RADIO NAME="Politics" VALUE="Politics1" CHECKED>So far left, I'm right<BR>
<INPUT TYPE=RADIO NAME="Politics" VALUE="Politics2">Yellow Dog Democrat<BR>
<INPUT TYPE=RADIO NAME="Politics" VALUE="Politics3">Right down the middle<BR>
<INPUT TYPE=RADIO NAME="Politics" VALUE="Politics4">Country Club Republican<BR>
<INPUT TYPE=RADIO NAME="Politics" VALUE="Politics5">So far right, I'm left<BR>
</UL>
<P>
<INPUT TYPE=SUBMIT VALUE="Submit">
<INPUT TYPE=RESET>
</FORM>
</BODY>
</HTML>
Radio buttons are a
great way to give your readers multiple choices, but they get unwieldy if
you have more than about five or six options. For longer sets of options,
you're better off using lists, or selection lists as they're called
in the HTML world. Selection lists are a wee bit more complex than the other
form tags we've looked at, but not by much. Here's the general format:
<SELECT NAME="Field Name" SIZE=Items>
<OPTION>First item text</OPTION>
<OPTION>Second item text</OPTION>
<OPTION>And so on...</OPTION>
</SELECT>
As I'm sure
you've guessed by now,
Field Name is the
unique name for the list. For the SIZE attribute,
Items
is the number of items you want the browser to display. If you omit SIZE,
the list becomes a drop-down list. If SIZE is 2 or more, the list becomes a
rectangle with scroll bars for navigating the choices. Also, you can insert
the MULTIPLE attribute into the <SELECT> tag. This tells the browser to
allow the user to select multiple items from the list.
Between the <SELECT>
and </SELECT> tags are the <OPTION></OPTION> tags; these define the list
items. If you add the SELECTED attribute to one of the items, the browser
selects that item by default.
To get some examples
on the table, the following document (LISTS.HTM) defines no less than three
selection lists. The following figure shows what the Netscape browser does
with them.
<HTML>
<HEAD>
<TITLE>Selection List Example</TITLE>
</HEAD>
<BODY>
<H3>Putting On Hairs: Reader Survey</H3>
<HR>
<FORM ACTION="http://hoohoo.ncsa.uiuc.edu/htbin-post/post-query" METHOD=POST>
Select your hair color:<BR>
<SELECT NAME="Color">
<OPTION>Black</OPTION>
<OPTION>Blonde</OPTION>
<OPTION SELECTED>Brunette</OPTION>
<OPTION>Red</OPTION>
<OPTION>Something neon</OPTION>
<OPTION>None</OPTION>
</SELECT>
<P>
Select your hair style:<BR>
<SELECT NAME="Style" SIZE=7>
<OPTION>Bouffant</OPTION>
<OPTION>Mohawk</OPTION>
<OPTION>Page Boy</OPTION>
<OPTION>Permed</OPTION>
<OPTION>Shag</OPTION>
<OPTION SELECTED>Straight</OPTION>
<OPTION>Style? What style?</OPTION>
</SELECT>
<P>
Hair products used in the last year:<BR>
<SELECT NAME="Products" SIZE=5 MULTIPLE>
<OPTION>Gel</OPTION>
<OPTION>Grecian Formula</OPTION>
<OPTION>Mousse</OPTION>
<OPTION>Peroxide</OPTION>
<OPTION>Shoe black</OPTION>
</SELECT>
<P>
<INPUT TYPE=SUBMIT VALUE="Hair Mail It!">
<INPUT TYPE=RESET>
</FORM>
</BODY>
</HTML>
All this form
folderol is fine, but what good is a form if it doesn't really do much of
anything? That is, why bother building a fancy form if you have no way to
get the data? Unfortunately, as I mentioned earlier, grabbing form data and
manipulating it is a programmer's job. Specifically, you have to use
something called the Common Gateway Interface, or CGI for short. CGI
is a method of transferring form data in a manner that makes it relatively
easy to incorporate into a program and then massage it all you need. Easy,
that is, if you have the requisite nerdskills.
Well, I may not have
room to teach you how to program forms, and you may not have the inclination
in any case, but that doesn't mean you're totally stuck. The next few
sections give you some ideas for getting your forms to do something useful.
Many people want to
add simple guest books and feedback mechanisms to their sites, but they
don't want to have to bother with the programming aspect. So, in response to
their customers' needs, most Web hosting providers make some simple CGI
scripts (programs) available to their customers. For example, one common
type of script grabs form data, extracts the field names and values, and
sends them to an e-mail address you specify. Check with the provider's
administrator or webmaster to see if they have any CGI scripts that you can
use. And if you haven't settled on a provider yet, you should ask in advance
if they have CGI programs available.
A more expensive
alternative is to hire the services of a CGI wizard to create a custom
program for you. Most Web hosting providers will be only too happy to put
together a nice little program tailored to your needs. There's also no
shortage of hired guns on the Web who'll create programs to your
specifications. As a starting point, check out some of the resources
mentioned in the next section.
If your service
provider or Web hosting provider doesn't have ready-to-run CGI programs that
you can use, there's no shortage of sites on the Net that are only too happy
to either teach you CGI or supply you with programs. This section runs
through a list of some of these sites:
|
Mind Your CGI Program Ps and Qs |
Bear in mind that if you grab a program or two to use, you'll need to
contact your service provider's administrator to get the full lowdown
on how to set up the program. In most cases, the administrator will
want to examine the program code to make sure it's up to snuff. If it
passes muster, they'll put it in a special directory (usually called
cgi-bin) and you can then refer to the program in your form.
|
LPAGE Internet
Services Home Page CGI tutorials, a "CGI school," example programs, and
even a guest-book program that you can use simply by adding a couple of
links to your page! (You have to register with LPAGE for the latter; it
doesn't cost anything, but LPAGE asks that businesses sign on as sponsors
for the guest book to help defray the costs.) Here's the URL of the LPAGE
home page:
http://lpage.com/cgi/
Matt's Script
Archive Matt Wright has written tons of CGI scripts and graciously
offers them gratis to the Web community. He has scripts for a guest book,
random link generator, animation, and lots more. It's a great site and a
must for would-be CGI mavens. Here's the URL:
http://www.worldwidemart.com/scripts/
NCSA - The Common
Gateway Interface This is the place on the Web for CGI info.
NCSA (the same folks who made the original Mosaic browser) has put together
a great collection of tutorials, tips, and sample programs. Here's the
locale:
http://hoohoo.ncsa.uiuc.edu/cgi/
Usenet A
great spot for CGI tips and tricks, or just to hang around with fellow Web
programmers, is the following Usenet newsgroup:
comp.infosystems.www.authoring.cgi.
Windows CGI 1.1
Description Some Web servers run on Windows machines, so you can use
Visual Basic to program CGI. This site was put together by Robert Denny, the
fellow who invented Windows CGI. It describes Windows CGI, has example
programs, and more. Here's where to find it:
http://www.city.net/win-httpd/httpddoc/wincgi.htm
This chapter
introduced you to the fabulous world of forms. Here's a fond look back at
what great fun we had (!):
- A form is a page
that's populated with dialog box-like doo-dads-such as text boxes, check
boxes, and command buttons-that are used to get information from the
reader.
- The basic form is
contained in <FORM></FORM>, where the <FORM> tag includes the ACTION and
METHOD attributes.
- To enable
the user to send the form data, use a submit button:
<INPUT
TYPE=SUBMIT VALUE="Label">
- To enable
the user to clear the form data and start over, use a reset button:
<INPUT
TYPE=RESET VALUE="Label">
- Use text
boxes when you need the reader to type simple text entries:
<INPUT TYPE=TEXT NAME="Field
Name">
- For longer
or multi-line text entries, use a text area:
<TEXTAREA NAME="Field
Name" ROWS=TotalRows
COLS=TotalCols
WRAP>
</TEXTAREA>
- For yes/no
or true/false info, use a check box:
<INPUT TYPE=CHECKBOX NAME="Field
Name">Type
a label here
- If you want
to give the reader several options, use radio buttons:
<INPUT TYPE=RADIO NAME="Field
Name" VALUE="Value">Type
a label here
- For a large
number of options, use a selection list:
<SELECT
NAME="Field Name" SIZE=Items>
<OPTION>First item text</OPTION>
<OPTION>Second item text</OPTION>
<OPTION>And so on...</OPTION>
</SELECT>
|