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コードを実行できませんでした。「Internal Server Error」と表示されました

とにかくこれを修正できますか?

事前に感謝します

あなたが言ったように私はすでにコードを編集していましたが、更新後にエラーが発生しています: 内部サーバーエラー

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);

$nameまた、変数を設定する他のコードがあると想定しています。これは、$add自動的には行われないためです。

編集:他の問題もありました。の呼び出しで変数を引用しないでくださいexecute。そして、そのVALUES挿入ステートメントで

于 2012-10-03T14:34:47.303 に答える