The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

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