You should be quoting the values you use in your SQL statement. What's happening is your DB sees the ' or ; in the value and interprets it as part of the statement, not part of the value. This also opens you up to SQl injections via malformed values. I recommend using placeholder ?s in your statement and passing your values asarguments. Read the DBI documentation for implementation.

RJ


Scott wrote:

I have a web form that we use to submit comments to a database, however
some characters will make the insert fail. For instance usage of ' or ;.
Below is the snipit that handles this, perhaps I could be corrected in the
errors of my ways.

Everything in the DB is varchar except for the comments which is a blob.

Thanks, Scott

Page that handles the input:
------------------------------
<%perl>
if (@_) {
 if ((!$_[1]) or (!$_[3])) {
  print "ERROR: You missed some required information...<br><br>
        You will be returned shortly";
 } else {
  print "Thank you for your submission,<br><br>
        You will be auto-redirected in 5 seconds...";
  my $ip = $r->get_remote_host;
  my $ua = $r->header_in('User-Agent');
  my $ref = $r->header_in('referer');

  use Net::SMTP;
  use DBI;

  my $dsn = 'DBI:mysql:xxxxxx:localhost';
  my $dbuser = 'xxxxx';
  my $dbpass = 'xxxxxx';
  my $dbh = DBI->connect($dsn, $dbuser, $dbpass);

  my $name = $_[3];
  my $email = $_[1];
  my $comment = $_[5];
  $dbh->do("insert into email
       (name, email, comments, host, agent) values
       ('$name', '$email', '$comment', '$ip', '$ua')");

  my $subject = "xxxxxxxx.net Email Form...";
  my $smtp = Net::SMTP->new("xxxx.xxxxx.net");
  my $addr = "[EMAIL PROTECTED]";

  $smtp->mail($email);
  $smtp->to($addr);
  $smtp->data();
  $smtp->datasend("Subject: $subject \n");
  $smtp->datasend("\n");
  $smtp->datasend("Name: $name\n\n");
  $smtp->datasend("Comment:\n$comment");
  $smtp->dataend();
  $smtp->quit();
  close($smtp)
 }
}
</%perl>

---------------------------
Section with form:
---------------------------
} elsif ($source eq "contact") {
 print "<center><br><table width='70%'><tr><td>";
 print "<form NAME='CONTACT' action='email.ml'>";
 print "Name: <input type='text' name='name'
        size='50'><font color=red>*</font><br>";
 print "Email: <input type='text' name='email'
        size='50'><font color=red>*</font><br>";
 print "<textarea name='comments' COLS=80 ROWS=25></textarea><br>";
 print "<input type='submit' value='Submit Email'>";
 print "</td></tr></table></center>";

---------------------------




-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Mason-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mason-users




-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Mason-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mason-users

Reply via email to