You want to write a single CGI script that can return several different pages to the browser. For instance, you want a single CGI script for administering a database of products. The script will be called to display the form to add a product, to process the add-product form, to display a list of products to delete, to process the delete-product form, to display a list of product to edit, to display a form of the product’s attributes for the user to change, and to process the edit-product form. You can use these multiscreen CGI scripts to form an elementary shopping-cart-type application.
Use a hidden field to encode the current screen.
It is easy to generate sticky hidden fields with the CGI module. The
function returns HTML for a hidden widget and will use the
widget’s current value if you only give
hidden the widget name:
use CGI qw(:standard); print hidden("bacon");
To determine which page (“display product list”,
“display all items in shopping cart”, “confirm
order”) to display, use another hidden field. We’ll call
.State so it won’t conflict with
any field we might have called
instance, in credit card billing information). To let the user move
from page to page, use submit buttons that set
.State to the name of the page to go to. For
instance, to make a button to take the user to the
“Checkout” page, use:
print submit(-NAME => ".State", -VALUE => "Checkout");
We wrap this in a function to make ...