Hi Monolith-0, you sound (understandably) frustrated. I'll try and clear things up a little.

First, you need to have the CGI.pm module installed. You almost certainly do already, as it comes as standard (I believe).

Second, you need to use it as part of your script. There are two ways of doing this, the object-oriented style, and the 'normal' style. I'll show you examples of both.

You need to make your HTML form. This is just a normal form, so I won't go into it - except to say that the action of the form should be the URL of your script.

Now, examples. The CGI.pm docs are here:
http://search.cpan.org/doc/LDS/CGI.pm-2.78/CGI.pm
Here are the examples at the top of that file, in 'normal' format:

use CGI qw/:standard/; print header, start_html('A Simple Example'), h1('A Simple Example'), start_form, "What's your name? ",textfield('name'),p, "What's the combination?", p, checkbox_group(-name=>'words', -values=>['eenie','meenie','minie','moe'], -defaults=>['eenie','minie']), p, "What's your favorite color? ", popup_menu(-name=>'color', -values=>['red','green','blue','chartreuse']),p, submit, end_form, hr; if (param()) { print "Your name is",em(param('name')),p, "The keywords are: ",em(join(", ",param('words'))),p, "Your favorite color is ",em(param('color')), hr; }
and OO format:
#!/usr/local/bin/perl -w use CGI; # load CGI routines $q = new CGI; # create new CGI object print $q->header, # create the HTTP header $q->start_html('hello world'), # start the HTML $q->h1('hello world'), # level 1 header $q->end_html; # end the HTML
I prefer the OO format, but you can use either. Note also that you don't have to use the output functions (e.g. $q->h1('hello world') in order to use the input functions (e.g.$q->param('foo'))

So, the most basic example of parsing form input would be:

my $query = new CGI; my $cheese = $query->param('cheese');
assuming that the HTML form has an input field called "cheese", e.g. <input type="text" name="cheese">

If you need to copy your parameters into a hash, then have a look at this part of the CGI.pm documentation:
http://search.cpan.org/doc/LDS/CGI.pm-2.78/CGI.pm#FETCHING_THE_PARAMETER_LIST_AS_A_HASH_.
NB: you need to pay special attention to what this says about 'multivalued CGI parameters', i.e. if there's more than one input tag in the form which has the same name, as in the case of checkboxes. Note also that if you're not using the OO style, then in order to use the  Vars() function, you need to use CGI ':cgi-lib'; (instead of the normal qw(:standard) ) at the start of your script.

Further answers can be found in the CGI.pm documentation and in O'Reilly's CGI Programming with Perl (Scott Guelich et al).

Hope that helps,
andy.


In reply to Re: How do I get data from a web form (the correct way)? by andye
in thread How do I get data from a web form (the correct way)? by Monolith-0

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.