home—lects—hws
D2L—zoom (snow day)
form-handling
and html sanitizing
due
Sep.25 (Wed.)
in class
Submit on D2L, and hardcopy
Deliverable:
Your form must be viewable on-line at
https://php.radford.edu/~yourUserID/itec325/hw03/okaymon-form.php.
Submit hardcopy of
utils.php, utils-test.php,
the form, the form-handler (named “okaymon-handle.php”),
and at least three “okaymon-handle-test-N.php” files.
On D2L submit all your files (as individual files, not a .tar).
You have been hired to help develop the game Okaymon -- a crowdsourced
game of evolving monsters!
You need to develop a web form with the information below;
when the form is submitted, the user is shown a page which simply
re-caps the submitted information.
In this homework, we will
(A) add more utility helper-functions for producing html to utils.php,
and then
(B) write a form with a
simple form-handler which just
displays the information received by the form.
Part A
Write the following functions in php:
- (10pts) dropdown : string, string[] → string, which produces the html for a
drop-down menu.
(To think about: the array is what to have as the options for the drop-down.
What is the string for?
This will be clearer after you make a test case for a usable drop-down.)
Note that half the points are for having good tests, on this problem and others.
Then, modify your function to
include an additional, optional input,
of type boolean-or-string:
A true indicates to include “select one” as the
first entry in the drop-down;
it wouldn't correspond to a meaningful choice.
Providing a string is similar, except that
instead of the words “select one”,
use the provided string.
Finally, false indicates to not include any such item.
The default value should be true, if it's not explicitly passed in.
-
In class, we wrote part of radioTable.
We'll complete that here.
-
We will want the all the inputs to get grouped together into a single array,
contained inside $_POST.
For example, if a radio table lets you enter information about whether fifty different
foods
are yucky, meh, or yummy,
we'd want something like
$_POST["food-tastes"] === array( "Snickers" => "yummy", "Bananas" => "meh", … )
$_POST["food-tastes"]["Snickers"] === "yummy"
|
You'll need to think what input-names you'd want, to be able to create this.
-
(10pts) Write radioTableRow : string, string[] → string
which produces a bank of radio-buttons
inside of a table-row.
For example, radioTableRow( "clover", array("weak-to","neutral","resistant") )
would return the first row of the table in the screenshot below.
(The name attribute of buttons in that row would be “clover”.)
Note that this function does not return an entire table,
just a single table-row (tr).
Hint: For full credit, call one of your functions from
the previous homework solution,
as a helper!
Extra credit:
(2pts)
Include a parameter for naming the entire table, used to group the results.
Grouping the entire table's inputs into a single array is certainly the proper data-representation;
the actual lecture-notes on how to do this are on the schedule for the lecture before
this hw is due:
grouping web-inputs into arrays.
- (4pts)
As we wrote (part of) together in lecture,
write radioTable : string, string[], string[] → string
which returns the html for a table of radio-buttons
(including the column-headers, taken from the first array).
This function will naturally call radioTableRow.
You must have test-cases for it.
Using name-attributes with square-brackets,
the results from each row should be grouped together in an array, in $_POST.
Part B
Make a form (10pts) and a form-handler (10pts) for entering new species of Okaymon
(not an individual Okaymon),
including tests — see “handle-test” below.
Your forms don't need to look exactly like the above,
but should have the same information
(and look respectable).
-
The units for weight should
be kg and lbs.
-
You should have the five energy-type resistances listed in their own section.
-
No data-validation is required, but
when you print the results you must sanitize the html:
the information must render as the user entered it.
(See next item.)
-
In order to test your form, you must also have three files
“okaymon-handle-test-N.php” (for N = 0,1,2)
which populate $_POST with (respectively): (0) no information, (1) typical inputs, and (2) input
where each input includes characters like
“>”
or
“'”
or
“\n”.
-
For the copyright notice,
use a label tag, so that
the user can click on the text to as well as the checkbox itself.
-
Use an array to hold the various energy-types:
if we add twenty more energy-types, you shouldn't need to change anything but that array,
and everything else should work.
Of course, you should call functions from part (a) appropriately,
and write any additional functions (and tests) as appropriate.
Unlike
our first version of
silly-page.php,
your form and form-handler can use the implicit php echo’ing,
and only enter <?php …> mode when needing to call php code
(whew!).
home—lects—hws
D2L—zoom (snow day)
This page licensed CC-BY 4.0 Ian Barland Page last generated | Please mail any suggestions (incl. typos, broken links) to ibarlandradford.edu |
|