If you want to use the function oriented interface for CGI, you need to
import the functions:

See:
http://search.cpan.org/~lds/CGI.pm-3.33/CGI.pm#PROGRAMMING_STYLE

example:

http://search.cpan.org/~lds/CGI.pm-3.33/CGI.pm#A_COMPLETE_EXAMPLE_OF_A_S
IMPLE_FORM-BASED_SCRIPT


>>-----Original Message-----
>>From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
>>Sent: Tuesday, February 19, 2008 6:46 PM
>>To: beginners-cgi@perl.org
>>Subject: Undefined subroutine: if (param('admin') eq "y")
>>
>>I'm using the Web Developer Server Suite - Community Edition pretty
>>much out of the box on WindowsXP.  This script worked fine on a LAMP
>>system although I am not sure what Apache modules were loaded.  I am
>>beginning to wonder if I am missing some configuration to allow:
>>
>>if (param('admin') eq "y")
>>
>>ERROR
>>
>>Software error:
>>Undefined subroutine &main::param called at C:/www/vhosts/localhost/
>>cgi-bin/stafio.pl line 33.
>>
>>SCRIPT
>>
>>#!C:/www/perl/bin/perl.exe
>>use CGI::Carp qw(fatalsToBrowser);
>>#  organizational In/Out board
>>
>># configuration data
>>
>>require 'C:/www/perl/lib/datapath/stafio.ph';
>>
>># turn debugging output on and off with parameter
>>#$debugging = (param('debug')) ? 1 : 0;
>>
>>#print header;
>>
>># Do refresh and css in header as is proper
>>#print start_html(-title=>"Staff In/Out for $Organization",
>>#-style=>{'src'=>"C:/www/Apache22/manual/style/css/manual.css"},
>>#-head=>meta({-http_equiv=>'refresh',-content=>'60'})
>>#);
>>
>># get user information into memory
>>%users = &get_users();
>>
>>if (param('admin') eq "y")
>>{
>>  # admin interface.  add/delete users
>>  if (param('apswd'))
>>  {
>>    # got a password.  validate it
>>    if (param('apswd') eq $AdminPass)
>>    {
>>      # good password, check for add or delete
>>      if (param('userID'))
>>      {
>>      &put_a_user( param('userID'),
>>                   param('pswd'),
>>                   param('name'),
>>                   param('extension'),
>>                   param('location'),
>>             param('return'),
>>                   param('email'),
>>                   param('locstring'),
>>                   param('aim'));
>>        %users = &get_users();
>>        &display_inOut_board( %users );
>>      }
>>      else
>>      {
>>      @val = param('delme');
>>      foreach (@val)
>>      {
>>        $FILE = "$Datapath/$_.$Ext";
>>        unlink( $FILE );
>>      }
>>        %users = &get_users();
>>        &display_inOut_board( %users );
>>      }
>>    }
>>    else
>>    {
>>      # report invalid administrative password
>>      print <<"EOF"
>>      <H1>Invalid Password</H1>
>>      The password entered is incorrect.  Use your browser's back
>>function
>>      to try again.
>>EOF
>>    }
>>  }
>>  else
>>  {
>>    # put up form to do something, including getting admin password
>>    &admin( );
>>  }
>>}
>>else
>>{
>>  if (param('userID'))
>>  {
>>    if (param('pswd'))
>>    {
>>      # we were sent a password, validate it and change status
>>      if (isValidPswd($users{param('userID')}{'pswd'},param('pswd')))
>>      {
>>        # change status
>>        &put_a_user( param('userID'),
>>                           $users{param('userID')}{'pswd'},
>>                   $users{param('userID')}{'name'},
>>                   $users{param('userID')}{'extension'},
>>             param('location'),
>>                   param('return'),
>>                   $users{param('userID')}{'email'},
>>                   param('locstring'),
>>                   $users{param('userID')}{'aim'} );
>>        %users = &get_users();
>>        &display_inOut_board( %users );
>>      }
>>      else
>>      {
>>        # report invalid password
>>        print <<"EOF"
>>        <H1>Invalid Password</H1>
>>        The password entered is incorrect.  Use your browser's back
>>function
>>        to try again.
>>EOF
>>      }
>>    }
>>    elsif (param('newpswd'))
>>    {
>>      if (param('newpswd2'))
>>      {
>>        # we've got new password, confirm and rewrite
>>        if (isValidPswd($users{param('userID')}
>>{'pswd'},param('oldpswd')))
>>        {
>>          # check new passwords match
>>        if (param('newpswd') eq param('newpswd2'))
>>        {
>>          # rewrite user record
>>          &put_a_user( param('userID'),
>>                               param('newpswd'),
>>                       param('name'),
>>                       param('extension'),
>>             param('location'),
>>                       param('return'),
>>                       param('email'),
>>                       param('aim') );
>>            %users = &get_users();
>>          &display_inOut_board( %users );
>>          }
>>        else
>>        {
>>          # report mismatched new passwords
>>          print <<"EOF"
>>      <H1>Mismatched New Passwords</H1>
>>      The new passwords do not match.  Use your browser's back
>>function
>>      to try again.
>>EOF
>>        }
>>        }
>>        else
>>        {
>>          # report invalid password
>>        print <<"EOF"
>>      <H1>Invalid Password</H1>
>>      The old password is incorrect.  Use your browser's back function
>>      to try again.
>>EOF
>>        }
>>      }
>>      else
>>      {
>>        # put up form to get a new password for the user
>>        &change_password( param('userID'),
>>                        $users{param('userID')}{'pswd'},
>>                        $users{param('userID')}{'name'},
>>                        $users{param('userID')}{'extension'},
>>              $users{param('userID')}{'location'},
>>                        $users{param('userID')}{'return'},
>>                        $users{param('userID')}{'email'},
>>                        $users{param('userID')}{'aim'} );
>>      }
>>    }
>>    else
>>    {
>>      # no password, just a userID, so we need to put up a form
>>      # to let user change location and return
>>      &change_status(param('userID'), $users{param('userID')}
>>{'email'});
>>    }
>>  }
>>  else
>>  {
>>    &display_inOut_board( %users );
>>  }
>>} #end if (admin)...else
>>print end_html;
>>
>>exit;
>>
>>### subroutines ###
>>
>>sub admin
>># administration form, add/delete users
>>{
>>#  my(  ) = @_;
>>
>>  ## Add a user
>>  print start_form(-method=>"post", -action=>"stafio.pl");
>>
>>  print <<"EOF";
>>  <INPUT TYPE="hidden" NAME="admin" VALUE="y">
>>  <INPUT TYPE="hidden" NAME="do" VALUE="add">
>>
>>  <TABLE>
>>  <TR><TH>Add a User</TH><TD>Admin Password:<INPUT TYPE="password"
>>NAME="apswd" VALUE="" SIZE=20 MAXLENGTH=20></TD></TR>
>>  <TR><TD ALIGN=RIGHT>User ID</TD><TD><INPUT TYPE="text" NAME="userID"
>>VALUE="$userID" SIZE=25></TD></TR>
>>  <TR><TD ALIGN=RIGHT>User Name</TD><TD><INPUT TYPE="text" NAME="name"
>>VALUE="$name" SIZE=25></TD></TR>
>>  <TR><TD ALIGN=RIGHT>Phone Extension</TD><TD><INPUT TYPE="text"
>>NAME="extension" VALUE="$extension" SIZE=10></TD></TR>
>>  <TR><TD ALIGN=RIGHT>AIM Address</TD><TD><INPUT TYPE="text"
>>NAME="aim" VALUE="$aim" SIZE=25></TD></TR>
>>  <TR><TD ALIGN=RIGHT>Email Address</TD><TD><INPUT TYPE="text"
>>NAME="email" VALUE="$email" SIZE=25></TD></TR>
>>  <TR><TD ALIGN=RIGHT>Password</TD><TD><INPUT TYPE="password"
>>NAME="pswd" VALUE="" SIZE=20 MAXLENGTH=20></TD></TR>
>>  <TR><TD ALIGN=RIGHT>Location</TD><TD> <SELECT NAME="location">
>>EOF
>>  foreach( @Locations )
>>  {
>>    print "<OPTION> $_\n";
>>  }
>>  print <<"EOF";
>>  </SELECT></TD></TR>
>>  <TR><TD ALIGN=RIGHT>Other Location Text</TD><TD><INPUT TYPE="text"
>>NAME="locstring" VALUE="" SIZE=25></TD></TR>
>>  <TR><TD ALIGN=RIGHT>Return by</TD><TD><INPUT TYPE="text"
>>NAME="return" VALUE="" SIZE=10></TD></TR>
>>  </TABLE>
>>  <INPUT TYPE="submit" NAME="submit" VALUE="    OK    ">
>>  </FORM>
>>EOF
>>
>>  ## Delete a user
>>  print start_form(-method=>"post", -action=>"stafio.pl");
>>
>>  print <<"EOF";
>>  <INPUT TYPE="hidden" NAME="admin" VALUE="y">
>>  <INPUT TYPE="hidden" NAME="do" VALUE="del">
>>
>>  <TABLE>
>>  <TR><TH>Delete</TH><TD>Admin Password:<INPUT TYPE="password"
>>NAME="apswd" VALUE="" SIZE=20 MAXLENGTH=20></TD></TR>
>>EOF
>>  foreach $usr ( sort keys %users )
>>  {
>>    print <<"EOF";
>>  <tr>
>>    <TD><INPUT TYPE=CHECKBOX NAME="delme" VALUE="$usr"></TD><TD>
>>$users{$usr}{'name'}</TD>
>>  </tr>
>>EOF
>>  }
>>  print <<"EOF";
>>  </TABLE>
>>  <INPUT TYPE="submit" NAME="submit" VALUE="    OK    ">
>>  </FORM>
>>EOF
>>
>>} # end admin
>>
>>sub change_password
>># user gets a form to change password
>>{
>>  my ($userID, $pswd, $name, $extension, $location, $return, $email,
>>$aim) = @_;
>>
>>  print h1("Change Password");
>>
>>  print start_form(-method=>"post", -action=>"stafio.pl");
>>
>>  print <<"EOF";
>>  <INPUT TYPE="hidden" NAME="userID" VALUE="$userID">
>>  <INPUT TYPE="hidden" NAME="name" VALUE="$name">
>>  <INPUT TYPE="hidden" NAME="extension" VALUE="$extension">
>>  <INPUT TYPE="hidden" NAME="aim" VALUE="$aim">
>>  <INPUT TYPE="hidden" NAME="location" VALUE="$location">
>>  <INPUT TYPE="hidden" NAME="return" VALUE="$return">
>>  <INPUT TYPE="hidden" NAME="email" VALUE="$email">
>>
>>  <TABLE>
>>  <TR><TD ALIGN=RIGHT>Old Password</TD><TD><INPUT TYPE="password"
>>NAME="oldpswd" VALUE="" SIZE=20 MAXLENGTH=20></TD></TR>
>>  <TR><TD ALIGN=RIGHT>New Password</TD><TD><INPUT TYPE="password"
>>NAME="newpswd" VALUE="" SIZE=20 MAXLENGTH=20></TD></TR>
>>  <TR><TD ALIGN=RIGHT>Confirm Password</TD><TD><INPUT TYPE="password"
>>NAME="newpswd2" VALUE="" SIZE=20 MAXLENGTH=20></TD></TR>
>>  </TABLE>
>>  <INPUT TYPE="submit" NAME="submit" VALUE="    OK    ">
>>  </FORM>
>>EOF
>>} # end change_password
>>
>>sub change_status
>># user gets form to change location and/or return time
>>{
>>  my ($userID, $email) = @_;
>>
>>  print h1("Change Status");
>>
>>  print "<a href=\"stafio.pl?userID=$userID&newpswd=1\">Change
>>Password</a>\n";
>>
>>  print start_form(-method=>"post", -action=>"stafio.pl");
>>
>>  print <<"EOF";
>>  <INPUT TYPE="hidden" NAME="userID" VALUE="$userID">
>>  <INPUT TYPE="hidden" NAME="email" VALUE="$email">
>>  <TABLE>
>>  <TR><TD ALIGN=RIGHT>User</TD><TD><B>$userID<B></TD></TR>
>>  <TR><TD ALIGN=RIGHT>Password</TD><TD><INPUT TYPE="password"
>>NAME="pswd" VALUE="" SIZE=20 MAXLENGTH=20></TD></TR>
>>  <TR><TD ALIGN=RIGHT>Location</TD><TD> <SELECT NAME="location">
>>EOF
>>  foreach( @Locations )
>>  {
>>    print "<OPTION> $_\n";
>>  }
>>  print <<"EOF"
>>  </SELECT></TD></TR>
>>  <TR><TD ALIGN=RIGHT>Other Location Text</TD><TD><INPUT TYPE="text"
>>NAME="locstring" VALUE="" SIZE=25></TD></TR>
>>  <TR><TD ALIGN=RIGHT>Return by</TD><TD><INPUT TYPE="text"
>>NAME="return" VALUE="" SIZE=10></TD></TR>
>>  </TABLE>
>>  <INPUT TYPE="submit" NAME="submit" VALUE="    OK    ">
>>  </FORM>
>>EOF
>>} # end change_status
>>
>>sub display_inOut_board
>># display table of user data
>>{
>>  my %users = @_;
>>
>>
>>#
>>#  print "<meta http-equiv=\"Refresh\" content=\60\">\n";
>>#  print "</HEAD>\n";
>>#
>>#
>>
>>  print "<center>\n";
>>  print h1("$Organization Staff I/O Board");
>>#  print h1("$Organization"),
>>#    h2("In / Out Board" );
>>  print <<"EOF";
>>  <table width="90%">
>>  <tr>
>>    <th>Name</th>
>>    <th width=12>Extension</th>
>>    <th>Location</th>
>>    <th>Returning</th>
>>    <th>AIM</th>
>>  </tr>
>>EOF
>>
>>  foreach $usr ( sort keys %users )
>>  {
>>    print <<"EOF";
>>  <tr>
>>    <td><a href="mailto:$users{$usr}{'email'}">$users{$usr}{'name'}</
>>a></td>
>>    <td align=center>$users{$usr}{'extension'}</td>
>>    <td><a href="stafio.pl?userID=$usr">$users{$usr}{'location'}</a></
>>td>
>>    <td align=center>$users{$usr}{'return'}</td>
>>    <td align=center>$users{$usr}{'aim'}</td>
>>  </tr>
>>EOF
>>  }
>>
>>#
>>  print "</table>\n";
>>  print "<BR>\n";
>>  print h2("<A HREF=\"http://www.xxxxxxx/\";>Staff directory</A>\n");
>>#
>>
>>  print "</center>\n";
>>} # end display_inOut_board
>>
>>sub get_a_user
>># retrieve data for one user
>>{
>>  my( $file ) = @_;
>>  my ($userID, $pswd, $name, $extension, $loc, $time, $email, $aim);
>>
>>  $FILE = "$Datapath/$file";
>>  open( IN, "<$FILE" )
>>    || &try_later(1);
>>  foreach( <IN> )
>>  {
>>    ($userID) = ($file =~ /(.*)\.$Ext/);
>>    ($pswd, $name, $extension, $loc, $time, $email, $aim) =
>>split( $Delim, $_ );
>>  }
>>  close( IN );
>>  return( $userID, $pswd, $name, $extension, $loc, $time, $email,
>>$aim );
>>} # end get_a_user
>>
>>sub get_users
>># get user data into a hash of hashes, keyed on userID
>>{
>>  my( %u ) = ();
>>  my ( @files, $file, $userID, $pswd, $name, $extension, $loc, $time,
>>$email, $aim );
>>
>>  opendir DATADIR, $Datapath
>>    || &try_later(2);
>>  @files = grep /$Ext$/, readdir DATADIR;
>>  closedir DATADIR;
>>  foreach $file (@files)
>>  {
>>    ( $userID, $pswd, $name, $extension, $loc, $time, $email, $aim ) =
>>&get_a_user( $file );
>>    $u{$userID}{'pswd'}      = $pswd;
>>    $u{$userID}{'name'}      = $name;
>>    $u{$userID}{'extension'} = $extension;
>>    $u{$userID}{'location'}  = $loc;
>>    $u{$userID}{'return'}    = $time;
>>    $u{$userID}{'email'}     = $email;
>>    $u{$userID}{'aim'}       = $aim;
>>  }
>>  return( %u );
>>} # end get_users
>>
>>sub isValidPswd
>># validate password against userID
>># return 1 (true) if password is valid
>>{
>>  my( $u, $p ) = @_;
>>  my( $return ) = 0;
>>
>>  if ($p eq $BossPass)
>>  {
>>    $return = 1;
>>  }
>>  else
>>  {
>>    $return = ($u eq $p) ? 1 : 0;
>>  }
>>  return( $return );
>>} # end isValidPswd
>>
>>sub put_a_user
>># write new data for one user
>>{
>>  my( $userID, $pswd, $name, $extension, $loc, $return, $email,
>>$locstr, $aim ) = @_;
>>
>>  $locstr =~ tr/ / /s;
>>  $locstr = "unknown" unless (length( $locstr ) > 1);
>>  $loc = $locstr if ($loc eq "Other");
>>  $return = " - " unless ($return);
>>
>>  $FILE = "$Datapath/$userID.$Ext";
>>  open( OUT, ">$FILE")
>>    || &try_later(3);
>>  print OUT "$pswd$Delim$name$Delim$extension$Delim$loc$Delim$return
>>$Delim$email$Delim$aim";
>>  close( OUT );
>>} # end put_a_user
>>
>>sub try_later
>># minimal error handling
>>{
>>  local($errnum) = @_;
>>
>>  print h2("Unable to open $FILE for reading: $!") if $errnum == 1;
>>  print h2("Unable to find data files: $!")        if $errnum == 2;
>>  print h2("Unable to open $FILE for writing: $!") if $errnum == 3;
>>
>>  print h2("Please try again later.");
>>
>>  print end_html;
>>  exit;
>>} # end try_later
>>
>>
>>--
>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>For additional commands, e-mail: [EMAIL PROTECTED]
>>http://learn.perl.org/
>>



-----Message Disclaimer-----

This e-mail message is intended only for the use of the individual or
entity to which it is addressed, and may contain information that is
privileged, confidential and exempt from disclosure under applicable law.
If you are not the intended recipient, any dissemination, distribution or
copying of this communication is strictly prohibited. If you have
received this communication in error, please notify us immediately by
reply email to [EMAIL PROTECTED] and delete or destroy all copies of
the original message and attachments thereto. Email sent to or from the
Principal Financial Group or any of its member companies may be retained
as required by law or regulation.

Nothing in this message is intended to constitute an Electronic signature
for purposes of the Uniform Electronic Transactions Act (UETA) or the
Electronic Signatures in Global and National Commerce Act ("E-Sign")
unless a specific statement to the contrary is included in this message.

While this communication may be used to promote or market a transaction
or an idea that is discussed in the publication, it is intended to provide
general information about the subject matter covered and is provided with
the understanding that The Principal is not rendering legal, accounting,
or tax advice. It is not a marketed opinion and may not be used to avoid
penalties under the Internal Revenue Code. You should consult with
appropriate counsel or other advisors on all matters pertaining to legal,
tax, or accounting obligations and requirements.


--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to