nadiassdcg
asked on
trouble with optional and required fields in a form
I have this script from an e-mail form:
#!/usr/local/bin/perl
$|++; ## Disable output buffering.
use CGI;
$q=new CGI;
$err_ctr=0; ## Initailize the error count.
## Read the incoming HTML variables into Perl variables.
## The Perl variables have the same name as the HTML form variables.
foreach ($q->param){
$$_=$q->param($_);
$$_=~ s/^\s+//g;
$$_=~ s/\s+$//g;
if (/^cp$/ || /^celular$/ || /^tel_oficina$/||/^extensi on$/|| /^dia_hora_entrega$/){
next; ## Ignore this optional field.
if (!($$_)){ ## Check if any of the mandatory fields are empty.
print "Content-type: text/html\n\n" if (!($err_ctr));
print "<B><FONT COLOR=RED>$_ cannot be empty.</FONT></B><BR>\n";
++$err_ctr; ## Increment the error count.
}else{
## Build the plain text message of the email.
$plain_text.=$_." = ".$$_."\n";
#print $_," = ",$$_,"<BR>\n";
}
}
if ($err_ctr){ ## We do have some error messages!!
exit; ## Bail out!!
}
$boundary="Message-Boundar y-19990614 ";
$from='Web<>';
push(@attachments,$file);
## Prepare to send out the email to you, the owner of the site.
$mailprog ="/usr/lib/sendmail";
open(MAIL, "| $mailprog -t ") || die "Content-type: text/html\n\n$!";
print MAIL "To: $recipient\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject!\n";
print MAIL "MIME-Version: 1.0\n";
print MAIL "Content-type: Multipart/1;\n";
print MAIL "\tboundary=$boundary\n";
print MAIL "\n";
print MAIL "\n";
print MAIL "--$boundary\n";
## Add the plain text message to the email
if ($plain_text){
print MAIL "Content-type: text/plain; charset=US-ASCII\n";
print MAIL "Content-description: Mail message body\n";
print MAIL "Content-transfer-encoding : 7BIT\n";
print MAIL "\n";
print MAIL $plain_text."\n";
print MAIL "--$boundary\n";
}
## Attach all the files to the email
foreach $file (@attachments){
undef $some_text;
## Read 1024 bytes at a time
while($bytesread=read($fil e,$data,10 24)){
$content.=$data; ## Store the ACTUAL file content
}
close($file);
$some_text=&encode_base64( $content);
## Convert all \'s to /
$file=~ s/\\/\//g;
## Extract the name of the file.
$file=~ /.*\/(.*)/;
$actual_file=$1;
## Print the header for that attachment.
print MAIL "Content-type: application/octet-stream; name=\"".$actual_file."\"; type=Unknown\n";
print MAIL "Content-transfer-encoding : BASE64\n";
print MAIL "Content-disposition: attachment\n";
print MAIL "\n";
## Send out the contents!!
print MAIL $some_text;
print MAIL "\n";
print MAIL "--$boundary\n";
}
## Send the Email!!
print MAIL "--$boundary--\n";
close(MAIL);
## Prepare to send out the "Thank you" email to the user.
$mailprog ="/usr/lib/sendmail";
open(MAIL, "| $mailprog -t ") || die "Content-type: text/html\n\n$!";
print MAIL "To: $E_MAIL\n";
print MAIL "From: $from\n";
print MAIL "Subject: Gracias por llenar nuestro formulario. \n";
print MAIL "Estimado usuario:\n\nSu información ha sido recibida.\nEn breve nos comunicaremos con usted.\n\nAtentamente\n\nS elective Directory";
print MAIL "\n";
close(MAIL);
## Now redirect the user to some page.
print "Location: $redirect\n\n";
sub encode_base64 ($;$){
my $res = "";
my $eol = $_[1];
$eol = "\n" unless defined $eol;
pos($_[0]) = 0; # ensure start at the beginning
while ($_[0] =~ /(.{1,45})/gs) {
$res .= substr(pack('u', $1), 1);
chop($res);
}
$res =~ tr|` -_|AA-Za-z0-9+/|; # `# help emacs
# fix padding at the end
my $padding = (3 - length($_[0]) % 3) % 3;
$res =~ s/.{$padding}$/'=' x $padding/e if $padding;
# break encoded string into lines of no more than 76 characters each
if (length $eol) {
$res =~ s/(.{1,76})/$1$eol/g;
}
$res;
}
but it sends an error:
Missing right curly or square bracket at /home/cgi-bin/head_hunters 1.pl line 129, at end of line
syntax error at /home/cgi-bin/head_hunters 1.pl line 129, at EOF
Execution of /home/cgi-bin/head_hunters 1.pl aborted due to compilation errors.
the only part of the script I changed is the one about optional fields:
if (/^cp$/ || /^celular$/ || /^tel_oficina$/||/^extensi on$/|| /^dia_hora_entrega$/){
next; ## Ignore this optional field.
but if I write this instead:
next if /^cp$/;
next if /^celular$/;
next if /^CP$/;
next if /^tel_oficina$/;
it doesn´t sends an error, and it doesn´t ask for the fields to be filled, but if I fill them when I receive the email from the form the information from those fields don´t appear in it
#!/usr/local/bin/perl
$|++; ## Disable output buffering.
use CGI;
$q=new CGI;
$err_ctr=0; ## Initailize the error count.
## Read the incoming HTML variables into Perl variables.
## The Perl variables have the same name as the HTML form variables.
foreach ($q->param){
$$_=$q->param($_);
$$_=~ s/^\s+//g;
$$_=~ s/\s+$//g;
if (/^cp$/ || /^celular$/ || /^tel_oficina$/||/^extensi
next; ## Ignore this optional field.
if (!($$_)){ ## Check if any of the mandatory fields are empty.
print "Content-type: text/html\n\n" if (!($err_ctr));
print "<B><FONT COLOR=RED>$_ cannot be empty.</FONT></B><BR>\n";
++$err_ctr; ## Increment the error count.
}else{
## Build the plain text message of the email.
$plain_text.=$_." = ".$$_."\n";
#print $_," = ",$$_,"<BR>\n";
}
}
if ($err_ctr){ ## We do have some error messages!!
exit; ## Bail out!!
}
$boundary="Message-Boundar
$from='Web<>';
push(@attachments,$file);
## Prepare to send out the email to you, the owner of the site.
$mailprog ="/usr/lib/sendmail";
open(MAIL, "| $mailprog -t ") || die "Content-type: text/html\n\n$!";
print MAIL "To: $recipient\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject!\n";
print MAIL "MIME-Version: 1.0\n";
print MAIL "Content-type: Multipart/1;\n";
print MAIL "\tboundary=$boundary\n";
print MAIL "\n";
print MAIL "\n";
print MAIL "--$boundary\n";
## Add the plain text message to the email
if ($plain_text){
print MAIL "Content-type: text/plain; charset=US-ASCII\n";
print MAIL "Content-description: Mail message body\n";
print MAIL "Content-transfer-encoding
print MAIL "\n";
print MAIL $plain_text."\n";
print MAIL "--$boundary\n";
}
## Attach all the files to the email
foreach $file (@attachments){
undef $some_text;
## Read 1024 bytes at a time
while($bytesread=read($fil
$content.=$data; ## Store the ACTUAL file content
}
close($file);
$some_text=&encode_base64(
## Convert all \'s to /
$file=~ s/\\/\//g;
## Extract the name of the file.
$file=~ /.*\/(.*)/;
$actual_file=$1;
## Print the header for that attachment.
print MAIL "Content-type: application/octet-stream; name=\"".$actual_file."\";
print MAIL "Content-transfer-encoding
print MAIL "Content-disposition: attachment\n";
print MAIL "\n";
## Send out the contents!!
print MAIL $some_text;
print MAIL "\n";
print MAIL "--$boundary\n";
}
## Send the Email!!
print MAIL "--$boundary--\n";
close(MAIL);
## Prepare to send out the "Thank you" email to the user.
$mailprog ="/usr/lib/sendmail";
open(MAIL, "| $mailprog -t ") || die "Content-type: text/html\n\n$!";
print MAIL "To: $E_MAIL\n";
print MAIL "From: $from\n";
print MAIL "Subject: Gracias por llenar nuestro formulario. \n";
print MAIL "Estimado usuario:\n\nSu información ha sido recibida.\nEn breve nos comunicaremos con usted.\n\nAtentamente\n\nS
print MAIL "\n";
close(MAIL);
## Now redirect the user to some page.
print "Location: $redirect\n\n";
sub encode_base64 ($;$){
my $res = "";
my $eol = $_[1];
$eol = "\n" unless defined $eol;
pos($_[0]) = 0; # ensure start at the beginning
while ($_[0] =~ /(.{1,45})/gs) {
$res .= substr(pack('u', $1), 1);
chop($res);
}
$res =~ tr|` -_|AA-Za-z0-9+/|; # `# help emacs
# fix padding at the end
my $padding = (3 - length($_[0]) % 3) % 3;
$res =~ s/.{$padding}$/'=' x $padding/e if $padding;
# break encoded string into lines of no more than 76 characters each
if (length $eol) {
$res =~ s/(.{1,76})/$1$eol/g;
}
$res;
}
but it sends an error:
Missing right curly or square bracket at /home/cgi-bin/head_hunters
syntax error at /home/cgi-bin/head_hunters
Execution of /home/cgi-bin/head_hunters
the only part of the script I changed is the one about optional fields:
if (/^cp$/ || /^celular$/ || /^tel_oficina$/||/^extensi
next; ## Ignore this optional field.
but if I write this instead:
next if /^cp$/;
next if /^celular$/;
next if /^CP$/;
next if /^tel_oficina$/;
it doesn´t sends an error, and it doesn´t ask for the fields to be filled, but if I fill them when I receive the email from the form the information from those fields don´t appear in it
nadiassdcg,
"..but if I fill them when I receive the email from the form the information from those fields don´t appear in it .."
REPLACE...
if (/^cp$/ || /^celular$/ || /^tel_oficina$/||/^extensi on$/|| /^dia_hora_entrega$/){
next; ## Ignore this optional field.
WITH...
if (/^cp$/ || /^celular$/ || /^tel_oficina$/||/^extensi on$/|| /^dia_hora_entrega$/){
next; ## Ignore this optional field.
}
"..but if I fill them when I receive the email from the form the information from those fields don´t appear in it .."
REPLACE...
if (/^cp$/ || /^celular$/ || /^tel_oficina$/||/^extensi
next; ## Ignore this optional field.
WITH...
if (/^cp$/ || /^celular$/ || /^tel_oficina$/||/^extensi
next; ## Ignore this optional field.
}
nadiassdcg,
i have fixed that error in the script & tested it.
It works fine.
Let me know if that is indeed the case.
i have fixed that error in the script & tested it.
It works fine.
Let me know if that is indeed the case.
ASKER
maneshr,
the error is fixed, but the information from the optional fields isn´t arriving with the info from the form
the error is fixed, but the information from the optional fields isn´t arriving with the info from the form
ASKER
I added file:
if (/^cp$/ || /^celular$/ || /^file$/ || /^tel_oficina$/||/^extensi on$/|| /^dia_hora_entrega$/){next ; ## Ignore this optional field
}
and though the atachment arrives without problem, and there´s no error if I send no atachment; the information from: cp, celular, tel-oficina, extension, dia_hora_entrega isn´t arriving in the e-mail from the form
if (/^cp$/ || /^celular$/ || /^file$/ || /^tel_oficina$/||/^extensi
}
and though the atachment arrives without problem, and there´s no error if I send no atachment; the information from: cp, celular, tel-oficina, extension, dia_hora_entrega isn´t arriving in the e-mail from the form
nadiassdcg,
"..the information from: cp, celular, tel-oficina, extension, dia_hora_entrega isn´t arriving in the e-mail from the form ..."
To fix this, ADD the following line..
$plain_text.=$_." = ".$$_."\n";
AFTER...
if (/^cp$/ || /^celular$/ || /^file$/ || /^tel_oficina$/||/^extensi on$/|| /^dia_hora_entrega$/){next ;
"..the information from: cp, celular, tel-oficina, extension, dia_hora_entrega isn´t arriving in the e-mail from the form ..."
To fix this, ADD the following line..
$plain_text.=$_." = ".$$_."\n";
AFTER...
if (/^cp$/ || /^celular$/ || /^file$/ || /^tel_oficina$/||/^extensi
$$_=$q->param($_); #this is not recommended
ASKER
I added $plain_text.=$_." = ".$$_."\n";
like this:
if (/^cp$/ || /^celular$/ || /^file$/ || /^tel_oficina$/||/^extensi on$/|| /^dia_hora_entrega$/){next ;
## Ignore this optional field
$plain_text.=$_." = ".$$_."\n";
}
and this:
if (/^cp$/ || /^celular$/ || /^file$/ || /^tel_oficina$/||/^extensi on$/|| /^dia_hora_entrega$/){next ;
$plain_text.=$_." = ".$$_."\n";
## Ignore this optional field
but nothing happened, i pasted like this:
if (/^cp$/ || /^celular$/ || /^file$/ || /^tel_oficina$/||/^extensi on$/|| /^dia_hora_entrega$/){next ;
## Ignore this optional field
}
$plain_text.=$_." = ".$$_."\n";
and all the fields came duplicated, but the optional ones still ain´t appearing
(took a long time to test it, cause some troubles with the e-mail server)
like this:
if (/^cp$/ || /^celular$/ || /^file$/ || /^tel_oficina$/||/^extensi
## Ignore this optional field
$plain_text.=$_." = ".$$_."\n";
}
and this:
if (/^cp$/ || /^celular$/ || /^file$/ || /^tel_oficina$/||/^extensi
$plain_text.=$_." = ".$$_."\n";
## Ignore this optional field
but nothing happened, i pasted like this:
if (/^cp$/ || /^celular$/ || /^file$/ || /^tel_oficina$/||/^extensi
## Ignore this optional field
}
$plain_text.=$_." = ".$$_."\n";
and all the fields came duplicated, but the optional ones still ain´t appearing
(took a long time to test it, cause some troubles with the e-mail server)
ASKER
by nothing happened I mean the info from the required fields arrived as usual but the info from the optional ones didn´t
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
worked just fine , thank you
the confusion was because you said:
"ADD the following line..
$plain_text.=$_." = ".$$_."\n";
AFTER...
if (/^cp$/ || /^celular$/ || /^file$/ || /^tel_oficina$/||/^extensi on$/|| /^dia_hora_entrega$/){next ;
"
but what matters is that the script is working perfectly, thanks a lot
: )
the confusion was because you said:
"ADD the following line..
$plain_text.=$_." = ".$$_."\n";
AFTER...
if (/^cp$/ || /^celular$/ || /^file$/ || /^tel_oficina$/||/^extensi
"
but what matters is that the script is working perfectly, thanks a lot
: )
ASKER