FAQ - Frequently asked questions about FormMagick

- NAME
- HOW DO I...

- How do I check that my XML is valid?
- How do I customise the look and feel of my forms?
- How do I make my own validation routines?
- How do I add translations into another language?
- How do I do extra processing when a user clicks ``Next''?
- How do I choose which page to go to based on user input?

- TROUBLESHOOTING

- General troubleshooting tips
- Why isn't my data preserved from one page to the next?

# NAME

FormMagick FAQ - Frequently asked questions about FormMagick

# HOW DO I...

## How do I check that my XML is valid?

## How do I customise the look and feel of my forms?

Use cascading style sheets. Take a look at the HTML source output by FormMagick, and you'll see that most things have a ``label'' attribute to make CSS easier.

## How do I make my own validation routines?

Simply create a routine in your CGI script which accepts the data to validate as an argument. Have it return ``OK'' on success or a detailed error message on failure.

        sub my_validation {
            my $data = shift;
            if ($data =~ /$some_pattern/) {
                return "OK";
            } else {
                return "That looks wrong to me.";
            }
        }

## How do I add translations into another language?

Use the `add_lexicon()` method:

        $f->add_lexicon("fr", { "Yes" => "Oui", "No" => "Non" });

## How do I do extra processing when a user clicks ``Next''?

Use a POST-EVENT on the PAGE element. Create a subroutine that does what you want:

        sub process_credit_card {
            my $cgi = shift;
            my $cardnum = $cgi->param("cardnum");
            my $response = do_processing($cardnum);
            print "<p>$response</p>";
        }

## How do I choose which page to go to based on user input?

Use a PAGE POST-EVENT and set the value of the ``wherenext'' CGI parameter:

        sub my_post_page_event {
            my $cgi = shift;
            if ($cgi->param("foo") eq "bar") {
                $cgi->param(-name => "wherenext", -value => "GoToThisPageName")
            } elsif ($cgi->param("had_enough") eq "Yes") {
                $cgi->param(-name => "wherenext", -value => "Finish")
            }
        }

# TROUBLESHOOTING

## General troubleshooting tips

Try turning on debugging when you invoke FormMagick:

        my $f = new CGI::FormMagick( DEBUG => 1 );

## Why isn't my data preserved from one page to the next?

You probably need to make your `session-tokens` directory writable and executable by the web server. Either:

        chown www session-tokens
           (assuming your webserver runs as the www user)
        chmod 700 session-tokens

Or...

        chown 777 session-tokens