如何使用perl脚本将表单数组从URL插入到DBD数据库?

时间:2012-10-03 14:22:51

标签: perl postgresql psql

我正在尝试使用perl脚本将数据填入html到DBD数据库。

这是我的HTML代码:

<html>
</head>


<body>
<H1>Friend's contact book</H1>

<FORM ACTION="contact.pl" METHOD="POST">


<HR>
<H2>Friend's contact</H2>

<PRE>
          Name:<INPUT TYPE="text" NAME="name"> 
         Address:<INPUT TYPE="text" NAME="add"> 


</PRE>

</HR><P>
<INPUT TYPE="submit" VALUE="Sign Up"> or <INPUT TYPE="reset" VALUE="Cancel">
</P>
</FORM>
</body></html>

这是我的perl脚本: contact.pl

#!/usr/bin/perl

# Initialize DBI.
use DBI;
use strict;

# Make the database connection.
my $dbh = DBI->connect("dbi:Pg:dbname=friendcontact") 
or die my $DBI::errstr;

   # Store the SQL query

myy $stat = my $dbh->prepare("INSERT into friend (name, add) VALUE 
(?,?)");

   # Execute the query

my $stmh->execute();

   # Tidy up

my $stmh->finish();
my $dbh->commit or die my $DBI::errstr;

我无法运行 contact.pl 代码 它说“内部服务器错误”

无论如何我可以纠正这个吗?

非常感谢

谢谢 我已按照您的说法编辑了代码,但它有错误 更新后     内部服务器错误

The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, and inform them of the time the error occurred, and anything you might have done that may have caused the error.

Premature end of script headers: /home/friendcontact/private/cgi-bin/contact.pl

2 个答案:

答案 0 :(得分:1)

首先,您需要将Perl错误定向到浏览器,以便进行调试。这是通常的方法,但如果没有看到代码的CGI部分,很难知道:

use CGI::Carp qw(fatalsToBrowser);

您可能还需要更改服务器上的设置。

除此之外,这里有几个问题。我认为这需要VALUES而不是VALUE

$stat = $dbh->prepare( "INSERT into friend (name, add) VALUE 
(?,?)");

另外,这是不正确的:

$stmh->execute('$name','$add');

?占位符与DBH一起使用时,您无需引用变量;它在内部为你处理。即使允许,您也使用单引号,这意味着您不是传入变量,而是传递文字字符串'$name''$add'。只需这样做:

$stmh->execute($name,$add);

这只是一个开始;这里可能还有更多。

更新:您也遇到错误,因为您在使用变量之前尚未声明变量。您应该使用my $var;形式声明每个变量。这使它成为词汇变量,而不是全局变量。这是一种很好的做法,因为你说use strict;(这是一件非常好的事情),这也是一种必修课。

答案 1 :(得分:0)

你没有do准备好的手柄。准备并执行:

$stat = $dbh->prepare( "INSERT into friend (name, add) VALUES(?,?)" );
$stat->execute( $name, $add);

我假设您有其他代码设置$name$add变量,因为它不会自动发生。

编辑:您还有其他问题。不要在调用execute时引用变量。它在插入语句中的VALUES