Ok, I'm sick of trying to understand why my form isn't working. Would anyone be able to take a look at my html form fix it until both the cgi and html are working? Maybe test it on your server? I really don't have a clue what I'm doing but if someone out there knows their stuff it'd be a great help! I just need a html form that looks like that, which sends me an email through the server rather than Outlook or whatever..
I have a paid geocities account that accepts php, perl, cgi and all that, so at the moment I don't think it's anything to do with that.
Help would be amazing
bnbform.pl
and
bnbform.html
I have a paid geocities account that accepts php, perl, cgi and all that, so at the moment I don't think it's anything to do with that.
Help would be amazing

bnbform.pl
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://p10.hostingprod.com/@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; }
bnbform.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>
Comment