Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

testing for the zero length string (blank value) in cgi fields

by scratch (Sexton)
on Oct 24, 2001 at 17:41 UTC ( [id://121104]=perlquestion: print w/replies, xml ) Need Help??

scratch has asked for the wisdom of the Perl Monks concerning the following question:

Hello all,

I'm using CGI.pm to collect some user info through a series of web pages. I've been just writing the captured data out to a file, but now I'm trying to write to a database. For the most part this is working well, but for a few fields I'm trying to test for a value of 'blank' or 'no data' (this would be for fields left unanswered). By default perl seems to convert these to a value of 0, but I'd like to convert them to -1.

My problem is in testing for this blank value. I've tried lots of things, all of them more or less like this:

@negs = qw ( foo bar baz ); foreach $neg (@negs) { if (param('$neg') eq "") { param(-name=>"$neg", -value=>-1) ; } }

This, however, replaces *all* values of foo, bar, and baz with -1, not just the blank values.

Is there a way I can test for the blank value? Is there a better way to achieve my goal of not allowing fields to be left blank by users, but recording a value of -1 in the database for these fields?

Thanks as always,

scratch

Replies are listed 'Best First'.
Re: testing for the zero length string (blank value) in cgi fields
by Masem (Monsignor) on Oct 24, 2001 at 17:49 UTC
    This line:
    if (param('$neg') eq "")
    is checking the param named "'$neg'"; that is, there is no expansion of the variable going on with single quotes, so you're not checking what you think you are checking.

    Ditch the quotes:

    if (param($neg) eq "")
    and it should work.

    -----------------------------------------------------
    Dr. Michael K. Neylon - mneylon-pm@masemware.com || "You've left the lens cap of your mind on again, Pinky" - The Brain
    "I can see my house from here!"
    It's not what you know, but knowing how to find it if you don't know that's important

Re: testing for the zero length string (blank value) in cgi fields
by davorg (Chancellor) on Oct 24, 2001 at 18:35 UTC

    A number of people have pointed out your problems with quotes, but no-one has yet simplified your test. If you change it to

    if (param($neg)) {

    then you'll cover the case where the value isn't set, but also the case where the input doesn't exist.

    Update: blakem is absolutely right!

    --
    <http://www.dave.org.uk>

    "The first rule of Perl club is you don't talk about Perl club."

      That's inverted... I think you mean:
      unless (param($neg)) { # or if (!param($neg)) {

      -Blake

Re: testing for the zero length string (blank value) in cgi fields
by jj808 (Hermit) on Oct 24, 2001 at 17:52 UTC
    I think you may have a problem with your quotes. The line
    if (param('$neg') eq "") {
    will not interpolate the value of $neg, so unless you have a parameter called '$neg' (with the dollar symbol) then this will always evaluate to true, hence trashing the values of your other parameters.

    Try it like this instead:

    if (param($neg) eq "") {
    Cheers,

    JJ

    Update: Must learn to type as quickly as Masem :-)

Re: testing for the zero length string (blank value) in cgi fields
by tommyw (Hermit) on Oct 24, 2001 at 17:52 UTC

    Ahem! You're testing param('$neg') (ie a parameter with the four character name $neg), but resetting the param(-name=>"$neg") (ie. one of foo, bar or baz).

    Change the quotes and the problem goes away.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://121104]
Approved by root
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others musing on the Monastery: (3)
As of 2024-04-24 18:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found