Here's an example of forms handling, combining much of what we've seen previously, and adding in a couple new items. The form below has no PHP code: that's in the program that processes the form. I called the form "sem.html":
<HTML> <HEAD> <TITLE>Test Form</TITLE> </HEAD> <H1>Test Form</H1> <FORM METHOD="POST" ACTION="sem.php3"> <INPUT TYPE=HIDDEN NAME="Request" VALUE="Book"> <P>You are: <blockquote> <INPUT TYPE="RADIO" NAME="Status" VALUE="Blue"> Blue <BR><INPUT TYPE="RADIO" NAME="Status" VALUE="Yellow"> Yellow <BR><INPUT TYPE="RADIO" NAME="Status" VALUE="Green"> Green </blockquote> <PRE> Your Name: <INPUT NAME="Name" SIZE="30"> Email: <INPUT NAME="Email" Size="30"> Pick a date: <SELECT NAME="Month"> <option>January <option>February <option>March <option>April <option>May <option>June <option>July <option>August <option>September <option>October <option>November <option>December </SELECT> Day: <input name="Day" size="2" maxlength="2"> </pre> <HR ALIGN=CENTER WIDTH =60%> <DD>Any comments: <CENTER><TEXTAREA NAME="Comments" ROWS=5 COLS=50 WRAP=PHYSICAL> </TEXTAREA></CENTER> <BR> <CENTER><INPUT TYPE="SUBMIT" NAME="SUBMIT" VALUE="Send Request"> <INPUT TYPE="RESET" NAME="RESET" VALUE="Clear this form"></CENTER> </FORM> <HR> </BODY> </HTML> |
This is a standard form with several different elements, the only unusual thing about it is the choice of form handler: "sem.php3". CGI is usually used to handle forms, and it's usually written in Perl. Here is the "sem.php3" code:
<HTML> <HEAD> <TITLE>Form Output</TITLE> </HEAD> <BODY> <P>Hi <?php echo $Name?>. <?php /* The form returns the following information: Request (embedded) Status (required) Name Email Month Day (required) Comments */ $GoodToGo=TRUE; $ErrorMessage=""; if (ereg("^[[:blank:]]*$", "$Status")) { $GoodToGo=FALSE; $ErrorMessage = $ErrorMessage . "<LI>You need to give us something to work with here - what colour are you?"; } if (($Day <= 0) || ($Day >= 32)) { $GoodToGo=FALSE; $ErrorMessage = $ErrorMessage . "<LI>What kind of day is that? Try something between 1 and 31."; } if ($GoodToGo) { mail ("you@mail.university.edu", "$Request Request", " $Request Request ---------------------------------------------- Name: $Name (E-mail: $Email) With Colour: $Status ---------------------------------------------- Chose: $Month $Day Comments: $Comments "); echo "<P>Thanks. Your Request has been submitted."; echo "<P>If you have further requests to make, you can hit the Back "; echo "button in your browser to be returned to the form. You can change "; echo "the data and resubmit. "; echo "<HR>"; } else { echo "<P>Your request cannot be processed for the following reasons:"; echo "<TABLE BORDER=0 CELLPADDING=5 CELLSPACING=5>"; echo "<TR><TD BGCOLOR=\"#FFFACD\"><UL>"; echo "<P>$ErrorMessage <BR>"; echo "</UL></TD></TR></TABLE>"; echo "<P><B>Please hit the BACK button in your browser to fill out the rest of the details in your form. Thanks.</B><BR>"; echo "<HR>"; } ?> </BODY> </HTML> |
Note that all the variables from the form are available to this new page, and the output is a combination of HTML and PHP. "If" uses a regular expression to check if $Status is blank:
ereg("^[[:blank:]]*$", "$Status") |
"ereg" returns a true or false, based on whether it finds the first string it is supplied with in the second string given to it. This is a extended regular expression meaning "if $Status consists of nothing at all, or only tabs and spaces, return true." If it returns true, we add a note about it to the $ErrorMessage variable. This is followed by a check to make sure that we have a reasonable date. The check tests if the date is less than 1 or (using "||" which is logical OR) greater than 31. If we have an unreasonable date, we add a comment to the error message. In both cases, if there is a problem, $GoodToGo is set to FALSE.
The program now checks if $GoodToGo is TRUE - if it is, the program sends mail using the mail function:
mail (string to, string subject, string message) |
and a message of acknowledgement is displayed in the client's browser. Note that the "mail" command is carried over several lines, ending only when it's closed with "); .
If $GoodToGo is FALSE, no mail is sent, and the $ErrorMessage that was built up is displayed.