一个perl处理表单连接数据库的例子,高手帮忙解释下
表单程序我懂,不用太多解释,但是完全不懂perl,请尽量详细貌似是一个连Access数据库的简单的留言板表单:<html><head></head><body><form...
表单程序我懂,不用太多解释,但是完全不懂perl,请尽量详细
貌似是一个连Access数据库的简单的留言板
表单:
<html><head></head><body>
<form action="cgi-bin/perlodbc.pl" method="get">
Name: <input type="text" size=15 name="name"><br>
emotion: <input type="text" size=15 name="emotion"><br>
content: <input type="text" size=15 name="contents">
<br>
<input type="submit"><br>
<input type="reset">
</body></html>
perl程序:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print<<eof;
<html>
<head>
<title>perl-access</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
eof
if($ENV{'REQUEST_METHOD'} eq "POST")
{
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
}
elsif($ENV{'REQUEST_METHOD'} eq "GET")
{
$buffer=$ENV{'QUERY_STRING'};
}
#分割用户提交数据
@pairs=split(/&/,$buffer);
#对用户提交数据进行解码
foreach $pair(@pairs)
{
($name1,$value)=split(/=/,$pair);
$value=~tr/+/ /; #注意最后两个斜线之间是有一个空格的.
$value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$name1=~tr/+/ /; #注意最后两个斜线之间是有一个空格的.
$name1=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$FORM{$name1}=$value;
}
use Win32::ODBC;
$DSN = "DSN=liuyan;";
#连接数据库
if (!($db = new Win32::ODBC($DSN))){
print "连接数据库失败.\n";
exit(0);
}
else{
print "连接数据库成功 (连接号:", $db->Connection(), ")\n\n";
}
#数据库中的表
print "数据库中的表:";
@tables = $db->TableList;
print @tables;
print "\n\n";
#添加记录
my $sqlinsert="INSERT INTO guestbook (name,emotion,contents) VALUES('"
.$FORM{'name'}."','".$FORM{'emotion'}."','".$FORM{'contents'}."')";
if($db->Sql($sqlinsert)){
print "error insert data\n";
Win32::ODBC->DumpError();
$db->Close();
}
$sql="select * from guestbook";
if($db->Sql($sql)){
print "error select data\n";
Win32::ODBC->DumpError();
$db->Close();
}
print "\n\n";
print<<"aaa";
<table border=1 cellpadding=2>
<tr>
<td>name</td>
<td>emotion</td>
<td>time</td>
<td>content</td>
</tr>
aaa
while($db->FetchRow())
{
my(%data)=$db->DataHash();
$name=$data{'name'};
$emotion=$data{'emotion'};
$guest_time=$data{'guest_time'};
$content=$data{'contents'};
print<<"BBB";
<tr>
<td>$name</td>
<td>$emotion</td>
<td>$guest_time</td>
<td>$content</td>
</tr>
BBB
}
print "\n\n";
print<<"ccc";
</table>
</body>
</html>
ccc
#关闭链接
$db->Close(); 展开
貌似是一个连Access数据库的简单的留言板
表单:
<html><head></head><body>
<form action="cgi-bin/perlodbc.pl" method="get">
Name: <input type="text" size=15 name="name"><br>
emotion: <input type="text" size=15 name="emotion"><br>
content: <input type="text" size=15 name="contents">
<br>
<input type="submit"><br>
<input type="reset">
</body></html>
perl程序:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print<<eof;
<html>
<head>
<title>perl-access</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
eof
if($ENV{'REQUEST_METHOD'} eq "POST")
{
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
}
elsif($ENV{'REQUEST_METHOD'} eq "GET")
{
$buffer=$ENV{'QUERY_STRING'};
}
#分割用户提交数据
@pairs=split(/&/,$buffer);
#对用户提交数据进行解码
foreach $pair(@pairs)
{
($name1,$value)=split(/=/,$pair);
$value=~tr/+/ /; #注意最后两个斜线之间是有一个空格的.
$value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$name1=~tr/+/ /; #注意最后两个斜线之间是有一个空格的.
$name1=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$FORM{$name1}=$value;
}
use Win32::ODBC;
$DSN = "DSN=liuyan;";
#连接数据库
if (!($db = new Win32::ODBC($DSN))){
print "连接数据库失败.\n";
exit(0);
}
else{
print "连接数据库成功 (连接号:", $db->Connection(), ")\n\n";
}
#数据库中的表
print "数据库中的表:";
@tables = $db->TableList;
print @tables;
print "\n\n";
#添加记录
my $sqlinsert="INSERT INTO guestbook (name,emotion,contents) VALUES('"
.$FORM{'name'}."','".$FORM{'emotion'}."','".$FORM{'contents'}."')";
if($db->Sql($sqlinsert)){
print "error insert data\n";
Win32::ODBC->DumpError();
$db->Close();
}
$sql="select * from guestbook";
if($db->Sql($sql)){
print "error select data\n";
Win32::ODBC->DumpError();
$db->Close();
}
print "\n\n";
print<<"aaa";
<table border=1 cellpadding=2>
<tr>
<td>name</td>
<td>emotion</td>
<td>time</td>
<td>content</td>
</tr>
aaa
while($db->FetchRow())
{
my(%data)=$db->DataHash();
$name=$data{'name'};
$emotion=$data{'emotion'};
$guest_time=$data{'guest_time'};
$content=$data{'contents'};
print<<"BBB";
<tr>
<td>$name</td>
<td>$emotion</td>
<td>$guest_time</td>
<td>$content</td>
</tr>
BBB
}
print "\n\n";
print<<"ccc";
</table>
</body>
</html>
ccc
#关闭链接
$db->Close(); 展开
2个回答
展开全部
建议还是需要看书理解,要不永远学不会
真不行这样理解
<html>的<head> “ /头” <body>
<form action="cgi-bin/perlodbc.pl" method="get">
名称: <input type="text" size=15 name="name"> <br>
情感: <input type="text" size=15 name="emotion"> <br>
内容: <input type="text" size=15 name="contents">
<br>
<input type="submit"> <br>
<input type="reset">
“ /机构” “ /的HTML ”
perl的程序:
# !是/ usr /斌/ perl的
打印“内容类型:文字/的HTML \ n \ n已” ;
打印“ ”的EOF ;
<html>
的<head>
的<title> perl的准入“ /标题”
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
“ /头”
<body>
的EOF
如果( $包膜( ' REQUEST_METHOD ' )当量“邮报” )
(
改为(标准输入, $缓冲区,包膜$ ( ' CONTENT_LENGTH ' ) ) ;
)
elsif ( $包膜( ' REQUEST_METHOD ' )当量“的GET ” )
(
$缓冲区= $包膜( ' QUERY_STRING ' ) ;
)
#分割用户提交数据
@对分裂(/&/,$ =缓冲区) ;
#对用户提交数据进行解码
foreach $一双( @双)
(
( $ name1 , $值) =分裂(/=/,$配对) ;
$值= 〜文/ + / / ; #注意最后两个斜线之间是有一个空格的。
$值= 〜秒/ % ( [一个发,当代- 9 ] [一个发,当代- 9 ] ) /包( “ C ”类,十六进制( 1 ) ) /例如;
$ name1 = 〜文/ + / / ; #注意最后两个斜线之间是有一个空格的。
$ name1 = 〜秒/ % ( [一个发,当代- 9 ] [一个发,当代- 9 ] ) /包( “ C ”类,十六进制( 1 ) ) /例如;
$表( $ name1 ) = $价值;
)
使用的Win32 :为: ODBC ;
$的DSN = “的DSN =浏阳” ;
#连接数据库
如果( ! ( $分贝=新的Win32 :为: ODBC ( $的DSN ) ) ) (
打印“连接数据库失败。 \ ñ ” ;
出口( 0 ) ;
)
其他(
打印“连接数据库成功(连接号: ” , $数据库“连接( ) , ” ) \ n \ n已“ ;
)
#数据库中的表
印刷“数据库中的表: ” ;
@表= $数据库“ TableList ;
印刷@表;
打印“ \ n \ n已” ;
#添加记录
我的$ sqlinsert = “插入留言簿(姓名,情感,内容)值( ' ”
。形式$ ( '名称'}."','".$表格( '情感'}."','".$表格( '内容'}."')";
如果( $数据库“数据库( $ sqlinsert ) ) (
打印“错误插入数据\ ñ ” ;
Win32的: : ODBC的“ DumpError ( ) ;
$分贝, “关闭( ) ;
)
$的SQL = “选择*从留言簿” ;
如果( $数据库“数据库(数据库) ) (
打印“错误选择数据\ ñ ” ;
Win32的: : ODBC的“ DumpError ( ) ;
$分贝, “关闭( ) ;
)
打印“ \ n \ n已” ;
打印“ ” “ AAA级” ;
<table border=1 cellpadding=2>
<tr>
<td>名称“ /运输署”
<td>情感“ /运输署”
<td>时间“ /运输署”
<td>内容“ /运输署”
“ /文”
AAA级
而( $数据库“ fetchRow ( )方法)
(
我( %数据) = $数据库“ DataHash ( ) ;
$名称= $数据( '名称' ) ;
$情感= $数据( '情' ) ;
$ guest_time = $数据( ' guest_time ' ) ;
$内容= $数据( '内容' ) ;
打印“ ” “血脑屏障” ;
<tr>
<td> $名称“ /运输署”
<td> $情感“ /运输署”
<td> $ guest_time “ /运输署”
<td> $内容“ /运输署”
“ /文”
血脑屏障
)
打印“ \ n \ n已” ;
打印“ ” “中心” ;
“ /表”
“ /体重”
“ /的HTML ”
CCC产品认证
#关闭链接
$分贝, “关闭( ) ;
真不行这样理解
<html>的<head> “ /头” <body>
<form action="cgi-bin/perlodbc.pl" method="get">
名称: <input type="text" size=15 name="name"> <br>
情感: <input type="text" size=15 name="emotion"> <br>
内容: <input type="text" size=15 name="contents">
<br>
<input type="submit"> <br>
<input type="reset">
“ /机构” “ /的HTML ”
perl的程序:
# !是/ usr /斌/ perl的
打印“内容类型:文字/的HTML \ n \ n已” ;
打印“ ”的EOF ;
<html>
的<head>
的<title> perl的准入“ /标题”
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
“ /头”
<body>
的EOF
如果( $包膜( ' REQUEST_METHOD ' )当量“邮报” )
(
改为(标准输入, $缓冲区,包膜$ ( ' CONTENT_LENGTH ' ) ) ;
)
elsif ( $包膜( ' REQUEST_METHOD ' )当量“的GET ” )
(
$缓冲区= $包膜( ' QUERY_STRING ' ) ;
)
#分割用户提交数据
@对分裂(/&/,$ =缓冲区) ;
#对用户提交数据进行解码
foreach $一双( @双)
(
( $ name1 , $值) =分裂(/=/,$配对) ;
$值= 〜文/ + / / ; #注意最后两个斜线之间是有一个空格的。
$值= 〜秒/ % ( [一个发,当代- 9 ] [一个发,当代- 9 ] ) /包( “ C ”类,十六进制( 1 ) ) /例如;
$ name1 = 〜文/ + / / ; #注意最后两个斜线之间是有一个空格的。
$ name1 = 〜秒/ % ( [一个发,当代- 9 ] [一个发,当代- 9 ] ) /包( “ C ”类,十六进制( 1 ) ) /例如;
$表( $ name1 ) = $价值;
)
使用的Win32 :为: ODBC ;
$的DSN = “的DSN =浏阳” ;
#连接数据库
如果( ! ( $分贝=新的Win32 :为: ODBC ( $的DSN ) ) ) (
打印“连接数据库失败。 \ ñ ” ;
出口( 0 ) ;
)
其他(
打印“连接数据库成功(连接号: ” , $数据库“连接( ) , ” ) \ n \ n已“ ;
)
#数据库中的表
印刷“数据库中的表: ” ;
@表= $数据库“ TableList ;
印刷@表;
打印“ \ n \ n已” ;
#添加记录
我的$ sqlinsert = “插入留言簿(姓名,情感,内容)值( ' ”
。形式$ ( '名称'}."','".$表格( '情感'}."','".$表格( '内容'}."')";
如果( $数据库“数据库( $ sqlinsert ) ) (
打印“错误插入数据\ ñ ” ;
Win32的: : ODBC的“ DumpError ( ) ;
$分贝, “关闭( ) ;
)
$的SQL = “选择*从留言簿” ;
如果( $数据库“数据库(数据库) ) (
打印“错误选择数据\ ñ ” ;
Win32的: : ODBC的“ DumpError ( ) ;
$分贝, “关闭( ) ;
)
打印“ \ n \ n已” ;
打印“ ” “ AAA级” ;
<table border=1 cellpadding=2>
<tr>
<td>名称“ /运输署”
<td>情感“ /运输署”
<td>时间“ /运输署”
<td>内容“ /运输署”
“ /文”
AAA级
而( $数据库“ fetchRow ( )方法)
(
我( %数据) = $数据库“ DataHash ( ) ;
$名称= $数据( '名称' ) ;
$情感= $数据( '情' ) ;
$ guest_time = $数据( ' guest_time ' ) ;
$内容= $数据( '内容' ) ;
打印“ ” “血脑屏障” ;
<tr>
<td> $名称“ /运输署”
<td> $情感“ /运输署”
<td> $ guest_time “ /运输署”
<td> $内容“ /运输署”
“ /文”
血脑屏障
)
打印“ \ n \ n已” ;
打印“ ” “中心” ;
“ /表”
“ /体重”
“ /的HTML ”
CCC产品认证
#关闭链接
$分贝, “关闭( ) ;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询