2 min read

LAMP Project[part B]-解析cgi动态网页项目源代码(下部)

这里是该项目的完整代码,在本机上运行正确, 如果出错,就是你LAMP的配置有问题. 文中注释即为相关解释.
整整一百行哦…哈哈

1 #! /usr/bin/perl
2 # if.simple.cgi
3 use DBI;
4 use CGI ‘:standard’;
5
6 ####
7 # handle_error() - 错误处理的一个子程序
8 ####
9 sub handle_error {
10 my $msg = shift ||’ ‘;
11 my $dbh = shift ||’ ‘;
12 my $sth = shift ||’ ‘;
13 #text/html行下必须有一个空行
14 print <<EOHTML;
15 Content-type: text/html
16
17 <head>
18 <title>Age Information Error</title>
19 </head>
20 <body bgcolor=”#ffffff”>
21 There was an error: <b>$msg</b>
22 </body>
23 </html>
24 EOHTML
25 #EOHTML行只能有这几个字母, 一个不多,一个不少.
26
27 # finish the state handle and disconnect, if necessary
28 $sth->finish() if $sth;
29 $dbh->disconnect() if $dbh;
30 exit 0;
31 }
32
33 ####
34 # 程序主体在这里
35 ####
36
37 # 连接数据库服务器
38 my $dbh = DBI->connect(‘DBI:mysql:test’, ‘apache’, ‘lampiscool’)
39 or handle_error(“Can’t connect…” . DBI->errstr());
40
41 # 现在开始创建网页, 首先创建网页的头文件, 一个表格的头部
42 print header(),
43 start_html(-title=>“Project with MySQL, Perl”,
44 -bgcolor => ‘#ffffff’),
45 <<EOHTML;
46 <h2>Your queryed impact factor</h2>
47 <table border=“1” bgcolor=yellow>
48 <tr bgcolor=orange><th>Title</th><th>IF04</th><th>IF05</th><th>IF06</th></tr>
49 EOHTML
50 # 上面的这一行, 只能有这几个字符, 连一个空格都不能多, 否则会出现服务器内部错误
51 # 这个table还没有结束, 下面会继续由程序创建table项目.
52
53 # 对返回的参数进行处理
54 if (param()) {
55 # 获取查询字符串.
56 # inputbox的name为query, 把它返回的参数保存到$query中去
57 my $query = param(‘query’) ||’ ‘;
58 # 查询数据库
59 my $sth = $dbh->prepare(‘SELECT title,if04,if05,if06 FROM ifactor
60 WHERE title RLIKE ? ‘)
61 or handle_error(“Can’t prepare SQL: “ . $dbh->errstr(), $dbh);
62
63 $sth->execute($query)
64 or handle_error(“Can’t execute SQL: “ . $dbh->errstr(),
65 $dbh, $sth);
66 my($title,$if04,$if05,$if06);
67 # 这里就是表格table的中间部分
68 while (($title,$if04,$if05,$if06) = $sth->fetchrow()) {
69 print “<tr><th>$title</th><th>$if04</th><th>$if05</th><th>$if06</th></tr>\n”;
70 }
71
72 }
73
74 # 这里结束table的html代码, 于是有了一个完整的table.
75 # 此处设置了返回数据的方法(get), 返回的目标(if.simple.cgi),
76 # 一个文本框和两个按钮.
77 print <<EOHTML;
78 </table>
79 <hr>
80 <h2>Enter query</h2>
81 You can enter you query below. <b>e.g:</b> annu rev, p.* n.* a.* s,etc
82 <form action=“/mycgi/if.simple.cgi” method=“get”>
83 <table border=“0” bgcolor=orange>
84 <tr>
85 <td>Query name:</td>
86 <td><input type=“text” name=“query” maxsize=“20” value=“”></td>
87 </tr>
88 <tr>
89 <td><input type=“submit” value=“Submit Data”></td>
90 <td><input type=“reset” value=“Reset Form”></td>
91 </tr>
92 </table>
93 </form>
94 EOHTML
95
96 # 这一行代码标志这cgi网页的完成
97 print end_html();
98 # 关闭数据库连接
99 $sth->finish();
100 $dbh->disconnect();

参考资料: Open Source Web Development with LAMP (ISBN: 0-201-77061-X)