一个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();
展开
 我来答
xiaoxiao45619
2008-12-25 · TA获得超过566个赞
知道小有建树答主
回答量:325
采纳率:0%
帮助的人:220万
展开全部
建议还是需要看书理解,要不永远学不会
真不行这样理解

<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产品认证

#关闭链接

$分贝, “关闭( ) ;
liujq007
2008-12-25 · TA获得超过942个赞
知道大有可为答主
回答量:1035
采纳率:0%
帮助的人:1082万
展开全部
什么年代了?还用perl?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式