Web Analytics Made Easy -
StatCounter Sorry....Cant run from here! - CodingForum

Announcement

Collapse
No announcement yet.

Sorry....Cant run from here!

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Sorry....Cant run from here!

    I've downloaded an email form to use as an order form, but I'm having trouble configuring it. I changed what I needed in the html form file and the cgi file (changed it to a .pl) and then uploaded it. I keep getting the message 'Sorry....Cant run from here!'
    I don't have too much knowledge on cgi and was wondering if could someone could tell me what's wrong with my code.

    Code:
    #!/usr/bin/perl
    
    
    #required:    comma delimited list of required entry fields
    #data_order:  comma delimited list indicating what fields to actually
    #             print and in what order.
    #outputfile:  the name of the file to save the data in if using a file.
    #             the file will automatically be named ending with .bout
    #emailfile:   the name of the file to hold only the sender e-mail address
    #             the file will automatically be named ending with .bemf
    #ok_url:      URL to go to if successful
    #not_ok_url   URL to go to if unsuccessful
    #submit_to:   email address of person to input receive data by mail
    #             this can be a comma seperated list of e-mail addresses
    #cc_to:       email address of Cc Recipient
    #             this can be a comma seperated list of e-mail addresses
    #submit_by:   email address of person completing form
    #autorespond: NO LONGER USED AS OF JAN 31, 2000
    #automessage: text to print for autoconfirmation e-mail
    #             the file will automatically be named ending with .baut
    #form_id:     name of form for e-mail subject
    #countfile:   name of file for serial number counter
    #             the file will automatically be named ending with .bcnt
    #okaydomains: prevents calling the script from other sites,
    #             without restricting e-mail addresses.
    #             replaces $SECURE_NAME from earlier versions.
    #             use only lower case letters.
    #SMTP_SERVER: the full host name of the server providing e-mail
    #             gateway service
    ##################################################################
    
    
    ## MAIN ##########################################################
    
    # uncomment the line below, and change bignosebird to your domain
    # name if you wish to make is so the script can only be called
    # from your site.
    
    @okaydomains=("http://www.gothamcityheartattack.com");     
    
    #SMTP_SERVER: indicates the name of the host acting as the e-mail
    #             gateway. "localhost" should work on most systems.
    
    $SMTP_SERVER="localhost";
    
    #OR IF SMTP IS UNAVAILABLE TO YOU, USE SEND_MAIL-
    # BUT NOT BOTH!
    
    #$SEND_MAIL="/usr/lib/sendmail -t";
    
    $lockfile="/tmp/bnbform.lck";
    
       $SD=&sys_date;
       $ST=&sys_time;
    
       &decode_vars;
    
       &valid_page;
    
       if ($fields{'countfile'} ne "") { &get_number; }
    
       &valid_data;
    
       &write_data;
    
       if ($fields{'automessage'} ne "") { &answer_back; }
    
       if ($fields{'ok_url'} ne ""){
         print "Location: $fields{'ok_url'}\n\n"; exit;
       }
         else { &thank_you; }
    
    ##################################################################
    sub write_data
    {
    
       if ($fields{'submit_by'} ne "") {
           if (&valid_address == 0) {
              &bad_email;
              exit;
           }
       }
       
       if ($fields{'submit_by'} ne "" && $fields{'emailfile'} ne "") {
          open (EMF,">>$fields{'emailfile'}");
          print EMF "$fields{'submit_by'}\n";
          close (EMF);
       }
    
       if ($fields{'submit_to'} ne "") {
         $msgtext="";
         $msgtext .= "On $SD at $ST,\n";
         $msgtext .=  "The following information was submitted:\n";
         $msgtext .=  "From Host: $ENV{'REMOTE_ADDR'}\n";
       }
    
       if ($fields{'outputfile'} ne "") { 
          &get_the_lock; 
          open(OUT_FILE,">>$fields{'outputfile'}"); 
       }
    
       foreach $to_print (@sortlist) {
          if ($fields{'outputfile'} ne "")
           { print OUT_FILE "$fields{$to_print}\|"; }
          if ($fields{'submit_to'} ne "")
           { $msgtext .= "$to_print = $fields{$to_print}\n"; }
       }
       if ($fields{'outputfile'} ne "") {
         print OUT_FILE "$SD\|$ST\|\n";
         close(OUT_FILE);
         &drop_the_lock;
       }
    
       foreach $to_get (@recipients) {
          $mailresult=&sendmail($fields{submit_by}, $fields{submit_by}, $to_get, $SMTP_SERVER, $fields{form_id}, $msgtext);
          if ($mailresult ne "1") {
           print "Content-type: text/html\n\n";
           print "MAIL NOT SENT. SMTP ERROR: $mailcodes{'$mailresult'}\n";
           exit
          }
        }
       foreach $to_cc (@cc_tos) {
          $mailresult=&sendmail($fields{submit_by}, $fields{submit_by}, $to_cc, $SMTP_SERVER, $fields{form_id}, $msgtext);
          if ($mailresult ne "1") {
           print "Content-type: text/html\n\n";
           print "MAIL NOT SENT. SMTP ERROR: $mailcodes{'$mailresult'}\n";
           exit
          }
        }
    
    }
    
    ##################################################################
    sub decode_vars
     {
      $i=0;
      read(STDIN,$temp,$ENV{'CONTENT_LENGTH'});
      @pairs=split(/&/,$temp);
      foreach $item(@pairs) {
        ($key,$content)=split(/=/,$item,2);
        $content=~tr/+/ /;
        $content=~s/%(..)/pack("c",hex($1))/ge;
        $content=~s/\t/ /g;
        $content=~s/\0//g; #strip nulls
        $fields{$key}=$content;
        if ($key eq "data_order") {
           $content=~s/\012//g;
           $content=~s/\015//g;
           $content=~s/ //g;
           $content=~s/ //g;
           @sortlist=split(/,/,$content);
        }
        if ($key eq "required") {
           $content=~s/\012//g;
           $content=~s/\015//g;
           $content=~s/ //g;
           @mandatory=split(/,/,$content);
        }
        if ($key eq "submit_to") {
           $content=~s/\012//g;
           $content=~s/\015//g;
           $content=~s/ //g;
           @recipients=split(/,/,$content);
        }
        if ($key eq "cc_to") {
           $content=~s/\012//g;
           $content=~s/\015//g;
           $content=~s/ //g;
           @cc_tos=split(/,/,$content);
        }
    
       }
        if  (
         ( ($fields{automessage}=~ /^([-\/\w.]+)$/ || $fields{automessage} eq "") &&
          ($fields{countfile}=~ /^([-\/\w.]+)$/ || $fields{countfile} eq "") &&
          ($fields{emailfile}=~ /^([-\/\w.]+)$/ || $fields{emailfile} eq "") &&
          ($fields{outputfile}=~ /^([-\/\w.]+)$/ || $fields{outputfile} eq "") )
        ) {$donothing=0;}
        else {
           print "Content-type: text/html\n\n sorry, invalid characters...\n";
           exit;
        }
       if ($fields{automessage} ne "") {$fields{automessage} .= ".baut";}
       if ($fields{countfile} ne "") {$fields{countfile} .= ".bcnt";}
       if ($fields{emailfile} ne "") {$fields{emailfile} .= ".bemf";}
       if ($fields{outputfile} ne "") {$fields{outputfile} .= ".bout";}
    }
    
    ##################################################################
    sub valid_data
      {
       if ($fields{'data_order'} eq "")    #make sure we have work to do!
        {
          print "Content-type: text/html\n\n"; 
          print <<__W1__;
    
          <H1>NO data_order list SPECIFIED!</H1>
    
    __W1__
          exit;
        }
    
       foreach $to_check (@mandatory) #test all required fields, bail on 1st bad
        {                             
          if ($fields{$to_check} eq "") {
              if ($fields{'not_ok_url'} ne "") { 
                  print "Location: $fields{'not_ok_url'}\n\n";
                  exit;
              }
                 else { &try_again; }
          }
       }
    
      }
    
    ##################################################################
    sub thank_you
      {
     print "Content-type: text/html\n\n"; 
     print <<__W2__;
       <BODY BGCOLOR="#FFFFFF">
       <CENTER>
       <TABLE WIDTH=550 BORDER=1>
        <TR>
         <TD>
          <H1>Thank you!</H1>
          Your information has been sent and I will be in touch
          with you as soon as I can
          <P>
          Here is the information you provided:
          <P>
    __W2__
    
      foreach $itm (@sortlist) {
       print <<__W2A__;
       $itm: $fields{$itm}
       <BR>
    __W2A__
      }
    
     print <<__W2B__;
      </TD>
      </TR>
     </TABLE>
    
    __W2B__
    
          exit;
      }
    
    ##################################################################
    sub try_again
      {
          print "Content-type: text/html\n\n"; 
          print <<__W3__;
    
          <H1>Missing Data!</H1>
          <B>Please press the back button and fill in
          all required fields!<P></B>
    
    __W3__
          exit;
      }
    
    ##################################################################
    sub answer_back
     {
    
       $subject = "Thank you";
       $msgtext="";
      if ($fields{'automessage'} ne "") {
        open (AM,"< $fields{'automessage'}");
        while (<AM>) {
          chop $_;
          $msgtext .= "$_\n";
        } 
        close(AM);
      }
        else {
          $msgtext =<<__W4__;
    
    Thank you for your submission. I will be
    getting in touch with you soon.
    
    __W4__
        }
      $replyaddr=$recipients[0];
      $mailresult=&sendmail($replyaddr, $replyaddr, $fields{submit_by}, $SMTP_SERVER, $subject, $msgtext);
     }
    
    ##################################################################
    
    sub get_number
     {
       $newnum=0;
       open(COUNTER,"<$fields{'countfile'}");
       while($thisnum=<COUNTER>) {
          if ($thisnum eq "") { $thisnum = 0;}
          $newnum = $thisnum + 1;
       }
       close(COUNTER);
       open(COUNTER,">$fields{'countfile'}");
       print COUNTER "$newnum";
       close (COUNTER);
       $fields{'counter'}=$newnum
     }
    
    ##################################################################
    sub valid_address 
     {
      $testmail = $fields{'submit_by'};
      if ($testmail =~/ /)
       { return 0; }
      if ($testmail =~ /(@.*@)|(\.\.)|(@\.)|(\[email protected])|(^\.)/ ||
      $testmail !~ /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/)
       { return 0; }
       else { return 1; }
    }
    
    ##################################################################
    sub bad_email
    {
    print <<__STOP_OF_BADMAIL__;
    Content-type: text/html
    
    <FONT SIZE="+1">
    <B>
    SORRY! Your request could not be processed because of an
    improperly formatted e-mail address. Please use your browser's 
    back button to return to the form entry page.
    </B>
    </FONT>
    __STOP_OF_BADMAIL__
    }
    
    sub get_the_lock
    {
      local ($endtime);                                   
      $endtime = 60;                                      
      $endtime = time + $endtime;                         
      while (-e $lockfile && time < $endtime) 
       {
        # Do Nothing                                    
       }                                                   
       open(LOCK_FILE, ">$lockfile");                     
    }
    
    sub drop_the_lock
    {
      close($lockfile);
      unlink($lockfile);
    }
    
    
    ##################################################################
    sub valid_page
     {
      if (@okaydomains == 0)
         {return;}
      $DOMAIN_OK=0;
      $RF=$ENV{'HTTP_REFERER'};
      $RF=~tr/A-Z/a-z/;
      foreach $ts (@okaydomains) {
         if ($RF =~ /$ts/)
          { $DOMAIN_OK=1; }
      }
      if ( $DOMAIN_OK == 0) {
          print "Content-type: text/html\n\n Sorry....Cant run from here!";    
          exit;
      }
     }
    
    
    ###################################################################
    ###################################################################
    sub sendmail  {
    
    # error codes below for those who bother to check result codes <gr>
    
    # 1 success
    # -1 $smtphost unknown
    # -2 socket() failed
    # -3 connect() failed
    # -4 service not available
    # -5 unspecified communication error
    # -6 local user $to unknown on host $smtp
    # -7 transmission of message failed
    # -8 argument $to empty
    #
    #  Sample call:
    #
    # &sendmail($from, $reply, $to, $smtp, $subject, $message );
    #
    #  Note that there are several commands for cleaning up possible bad inputs - if you
    #  are hard coding things from a library file, so of those are unnecesssary
    #
    
        my ($fromaddr, $replyaddr, $to, $smtp, $subject, $message) = @_;
    
        $to =~ s/[ \t]+/, /g; # pack spaces and add comma
        $fromaddr =~ s/.*<([^\s]*?)>/$1/; # get from email address
        $replyaddr =~ s/.*<([^\s]*?)>/$1/; # get reply email address
        $replyaddr =~ s/^([^\s]+).*/$1/; # use first address
        $message =~ s/^\./\.\./gm; # handle . as first character
        $message =~ s/\r\n/\n/g; # handle line ending
        $message =~ s/\n/\r\n/g;
        $smtp =~ s/^\s+//g; # remove spaces around $smtp
        $smtp =~ s/\s+$//g;
    
        if (!$to)
        {
    	return(-8);
        }
    
     if ($SMTP_SERVER ne "")
      {
        my($proto) = (getprotobyname('tcp'))[2];
        my($port) = (getservbyname('smtp', 'tcp'))[2];
    
        my($smtpaddr) = ($smtp =~
    		     /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)
    	? pack('C4',$1,$2,$3,$4)
    	    : (gethostbyname($smtp))[4];
    
        if (!defined($smtpaddr))
        {
    	return(-1);
        }
    
        if (!socket(MAIL, AF_INET, SOCK_STREAM, $proto))
        {
    	return(-2);
        }
    
        if (!connect(MAIL, pack('Sna4x8', AF_INET, $port, $smtpaddr)))
        {
    	return(-3);
        }
    
        my($oldfh) = select(MAIL);
        $| = 1;
        select($oldfh);
    
        $_ = <MAIL>;
        if (/^[45]/)
        {
    	close(MAIL);
    	return(-4);
        }
    
        print MAIL "helo $SMTP_SERVER\r\n";
        $_ = <MAIL>;
        if (/^[45]/)
        {
    	close(MAIL);
    	return(-5);
        }
    
        print MAIL "mail from: <$fromaddr>\r\n";
        $_ = <MAIL>;
        if (/^[45]/)
        {
    	close(MAIL);
    	return(-5);
        }
    
        foreach (split(/, /, $to))
        {
    	print MAIL "rcpt to: <$_>\r\n";
    	$_ = <MAIL>;
    	if (/^[45]/)
    	{
    	    close(MAIL);
    	    return(-6);
    	}
        }
    
        print MAIL "data\r\n";
        $_ = <MAIL>;
        if (/^[45]/)
        {
    	close MAIL;
    	return(-5);
        }
    
       }
    
      if ($SEND_MAIL ne "")
       {
         open (MAIL,"| $SEND_MAIL");
       }
    
        print MAIL "To: $to\n";
        print MAIL "From: $fromaddr\n";
        print MAIL "Reply-to: $replyaddr\n" if $replyaddr;
        print MAIL "X-Mailer: Perl Powered Socket Mailer\n";
        print MAIL "Subject: $subject\n\n";
        print MAIL "$message";
        print MAIL "\n.\n";
    
     if ($SMTP_SERVER ne "")
      {
        $_ = <MAIL>;
        if (/^[45]/)
        {
    	close(MAIL);
    	return(-7);
        }
    
        print MAIL "quit\r\n";
        $_ = <MAIL>;
      }
    
        close(MAIL);
        return(1);
    }
    
    sub sys_date
    {
     %mn = ('Jan','01', 'Feb','02', 'Mar','03', 'Apr','04',
            'May','05', 'Jun','06', 'Jul','07', 'Aug','08',
            'Sep','09', 'Oct','10', 'Nov','11', 'Dec','12' );
     $sydate=localtime(time);
     ($day, $month, $num, $time, $year) = split(/\s+/,$sydate);
        $zl=length($num);
        if ($zl == 1)
          { $num = "0$num";}
     $yyyymmdd="$year\-$mn{$month}\-$num";
     return $yyyymmdd;
    }
    
    
    sub sys_time
    {
     $sydate=localtime(time);
     ($day, $month, $num, $time, $year) = split(/\s+/,$sydate);
     return $time;
    }

    and the html

    Code:
    <HTML>
    <style type="text/css">
    <!--
    .style2 {
    	font-family: Verdana, Arial, Helvetica, sans-serif;
    	font-size: 10px;
    }
    a:link {
    	color: #000000;
    	text-decoration: underline;
    }
    a:visited {
    	color: #000000;
    	text-decoration: underline;
    }
    a:hover {
    	color: #000000;
    	text-decoration: none;
    }
    a:active {
    	color: #000000;
    	text-decoration: underline;
    }
    body,td,th {
    	color: #000000;
    }
    body {
    	background-color: #FFFFFF;
    }
    .style3 {color: #FFFFFF}
    -->
    </style>
    <BODY>
    <CENTER class="style2">
    </CENTER>
    <FORM ACTION="/cgi-bin/bnbform.pl" METHOD="POST" enctype="multipart/form-data" class="style2">
      <fieldset><p><strong><br> 
      ORDER FORM<br>
      <br>
      Please do not bother sending us ****. </strong><br>
        <br>
        <strong>Name:    
        </strong>
        <INPUT TYPE="TEXT" NAME="name" SIZE=15 MAXLENGTH=50>
      </p>
      <p><strong>Surname:</strong>    
        <INPUT NAME="surname" TYPE="TEXT" id="surname" SIZE=15 MAXLENGTH=50>
    </p>
      <p align="left"><strong>Address:</strong><br>
        <br>
        <textarea name="address" cols="25" rows="3" id="address"></textarea>
        <br>
        <br>
        <br>
        <strong>State:</strong>
        <INPUT NAME="state" TYPE="TEXT" id="state" SIZE=15 MAXLENGTH=50>
        <br>
        <br>
        <strong>Postcode:</strong>
        <INPUT NAME="postcode" TYPE="TEXT" id="postcode" SIZE=8 MAXLENGTH=50>
        <br>    
        <br>
        <strong>Country:</strong>    <INPUT TYPE="TEXT" NAME="country" SIZE=20 MAXLENGTH=50>
        <br>
        <br>
        <strong>E-Mail Address:</strong>    <INPUT TYPE="TEXT" NAME="submit_by" SIZE=30 MAXLENGTH=50>
        <br>
        <strong><br>
        Merch:</strong><br>
        <br>
        <label><br>
        <input class="item" type="checkbox" name="item1" value="White Noise EP"/> 
        White Noise EP </label>
        <label></label><label></label>
        <strong><span class="style3">..............................</span>Qty:</strong>
        <INPUT NAME="qty1" TYPE="TEXT" id="postcode3" SIZE=5 MAXLENGTH=50>
        <br>
        <br>
        <label>
        <input class="item" type="checkbox" name="item2" value="Gotham Tee [Red print on White]" /> 
        Gotham Tee [Red print on White]<span class="style3">.....</span></label><strong>Qty:</strong>
        <INPUT NAME="qty2" TYPE="TEXT" id="qty2" SIZE=5 MAXLENGTH=50> 
        <br>
        <br>                      
        <label>
        <input class="item" type="checkbox" name="item3" value="Gotham Tee [Green print on Black]" /> 
        Gotham Tee [Green print on Black] </label>
        <span class="style3">..</span><strong></strong><strong>Qty:</strong>
        <INPUT NAME="qty3" TYPE="TEXT" id="qty3" SIZE=5 MAXLENGTH=50>
      </p>
      <script type="text/javascript">
    function getElementsByTagAndClassName(tag,cname) {
     var tags=document.getElementsByTagName(tag);
     var cEls=new Array();
     for (i=0; i<tags.length; i++) {
      var rE = new RegExp("(^|\\s)" + cname + "(\\s|$)");
       if (rE.test(tags[i].className)) {
       cEls.push(tags[i]);
       }
      }
     return cEls;
    }
    function fillBox(tag, cname, target) {
    var boxes=getElementsByTagAndClassName(tag,cname)
    for (j=0; j<boxes.length; j++) {
    	boxes[j].onclick=function() {
    			document.getElementById(target).innerHTML="";
    			for (k=0; k<boxes.length; k++) {
    				if (boxes[k].checked==true) {
    				var item=document.createTextNode(boxes[k].value+"\r");
    				document.getElementById(target).appendChild(item);
    				}
    			}
    		}
    	}
    }
    
    window.onload=function() {fillBox('input','item','order')};
    </script>
      <strong>Size:</strong><br>
      [If buying more than one tshirt and need to select more than one size, hold down Ctrl]<br>
      <br>
      <select name="select2" size="6" multiple>
        <option>Boys Small</option>
        <option>Boys Medium</option>
        <option>Boys Large</option>
        <option>Girls Small [8]</option>
        <option>Girls Medium [10]</option>
        <option>Girls Large [12]</option>
      </select>    
      <br>
      <br>
      <br>
      
      <strong>Your order:</strong><br> 
    <textarea name="order" cols="30" rows="4" id="order" type="text" />
    </textarea>
    <label><br>
    <br>
    <br>
    Payment Method:
    <select name="select">
      <option selected>Cash</option>
      <option>Cheque</option>
      <option>Other</option>
    </select>
    <br>
    </label>
            
      <br>
      <strong>Add to Mailing List: </strong>
      <INPUT TYPE="RADIO" NAME="mailing_list" VALUE="YES" CHECKED>
      Yes
      <INPUT TYPE="RADIO" NAME="mailing_list" VALUE="NO">
      No    <br>
      <br>
      <INPUT TYPE="submit" VALUE="Order!">
      <br>
      <br>
      </fieldset>
      <!--  SCRIPT CONFIGURATION SECTION -->
      <INPUT TYPE="HIDDEN" NAME="required" 
        VALUE="name,surname,address,state,postcode,country,submit_by">
      <INPUT TYPE="HIDDEN" NAME="submit_to" VALUE="[email protected]">
      <INPUT TYPE="HIDDEN" NAME="outputfile" VALUE="form1">
      <INPUT TYPE="HIDDEN" NAME="countfile" VALUE="form1">
      <INPUT TYPE="HIDDEN" NAME="emailfile" VALUE="form1">
      <INPUT TYPE="HIDDEN" NAME="form_id" VALUE="Order Form">
      <INPUT TYPE="HIDDEN" NAME="ok_url" 
         VALUE="http://www.gothamcityheartattack.com/thanks.html">
      <INPUT TYPE="HIDDEN" NAME="not_ok_url" 
         VALUE="http://www.gothamcityheartattack.com/oops.html">
      <!--  END OF SCRIPT CONFIGURATION SECTION -->
    </FORM>
    </BODY>
    </HTML>

    Thanks.
    -Lyss

  • #2
    You have to change the following line in your cgi-script:

    @okaydomains=("http://www.gothamcityheartattack.com");

    to your own domain name...for example:

    @okaydomains=("http://www.mysite.com");
    Msnemo.com - Free winks, emoticons, avatars, moods and lots more for msn and windows live messenger.

    Comment


    • #3
      yup! http://www.gothamcityheartattack.com is my domain.

      Comment


      • #4
        try capitalizing your domain name:

        @okaydomains=("HTTP://WWW.GOTHAMCITYHEARTATTACK.COM");
        Msnemo.com - Free winks, emoticons, avatars, moods and lots more for msn and windows live messenger.

        Comment


        • #5
          I didn't study everything completely,
          but is this line commented out in your actual script?

          #$SEND_MAIL="/usr/lib/sendmail -t";

          Try un-commenting that line:

          $SEND_MAIL="/usr/lib/sendmail -t";

          Comment


          • #6
            The error message is comming from the valid_page subroutine. You need to add some debugging code to that sub to see exactly what's in those vars. I suspect $RF doesn't hold the value you think it should have.

            BTW, the scripts from BNB are not written very well. I'd recommend switching to either the FormMail or TFMail script from the nms project.
            http://nms-cgi.sourceforge.net/scripts.shtml

            edit: If you plan on using the bnb script, I'd recommend making a few changes to clean up some of the code.
            Last edited by FishMonger; Sep 26, 2006, 01:55 PM.

            Comment


            • #7
              Looks like a geocities page:
              Code:
              @okaydomains = 'http://us.1.p10.geocities.com/gothamcityheartattack';

              Comment


              • #8
                Thanks everyone, I'll try out all the suggestions.

                Comment

                Working...
                X