1

我正在尝试使用 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
4

2 回答 2

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;(一件非常好的事情),它也是一种必需的做法。

于 2012-10-03T14:36:47.713 回答
0

你没有do准备好处理。只需准备并执行:

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

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

编辑:你也有其他问题。不要在对 . 的调用中引用变量execute。它VALUES在插入语句中

于 2012-10-03T14:34:47.303 回答