Writing a Multiscreen CGI Script
Problem
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.
Solution
Use a hidden field to encode the current screen.
Discussion
It is easy to generate sticky hidden fields with the CGI module. The
hidden
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
this one .State
so it won’t conflict with
any field we might have called State
(for
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 ...
Get Perl Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.