in reply to Re: Re: Clean URLs and CGI.pm
in thread Clean URLs and CGI.pm

If you want your CGI called with "search.pl?term" that's fine... all you have to do is $q->param(keywords) in your CGI to access whatever follows the "?" in your URL. If someone calls your script like this "search.pl?field1=term" then the "term" value will appear in $q->param(field1). Just set some if/then's to decide which is which, maybe like this:
if ($q->param(keywords)) { $field = $q->param(keywords); } else { $field = $q->param(field1); }
Or maybe I don't understand what you want. The 3 main ways of getting data into CGI.pm are via ISINDEX, POST, and GET. Since POST and GET both boil down to key/value pairs they are (to CGI.pm at least) interchangeable. ISINDEX is just a value without a key and is handled in param(keywords). Now why can't you use param again?

Gary Blackburn
Trained Killer

Replies are listed 'Best First'.
Re: Re: Re: Re: Clean URLs and CGI.pm
by swiftone (Curate) on Jun 11, 2001 at 22:21 UTC
    Just set some if/then's to decide which is which,

    Which would be the code I posted originally. Please look at it, I _AM_ using param. I was just saying I can't assume I'm in only one mode.

    I was really asking if anyone else had done this (I'm not so original as to be the first to do this), and if I was leaving myself open to any security holes and the like, or missing any features of CGI or common idioms to do this.

      Trimbach is politely trying to point out that you are missing both a common idiom and a feature of CGI.pm, namely that a query string without ampersands is treated as an ISINDEX search and the values can be retrieved with the keywords() method, though from my reading it's a list you'll need to join.

      A small change to your code would make it work. I expect something more elegant could be done with a [0], but not by me :(

      $page->param('field',join('',$page->keywords)) unless $page->param('field');
        Ah, a few things weren't clear. For one, the documentation doesn't mention that keywords() returns false when a non ISINDEX style is used.

        How about:

        $page->param('Field',[$page->keywords()]->[0]) if $page->keywords();