这里是该项目的完整代码,在本机上运行正确, 如果出错,就是你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)

作者简介

Chun-Hui Gao is a Research Associate at Huazhong Agricultural University.

重复使用

Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The source code is licensed under MIT. The full source is available at https://github.com/yihui/hugo-prose.

欢迎修订

如果您发现本文里含有任何错误(包括错别字和标点符号),欢迎在本站的 GitHub 项目里提交修订意见。

引用本文

如果您使用了本文的内容,请按照以下方式引用:

gaoch (2008). LAMP Project[part B]-解析cgi动态网页项目源代码(下部). BIO-SPRING. /post/2008/01/18/lamp-cgi-project/

BibTeX citation

@misc{
  title = "LAMP Project[part B]-解析cgi动态网页项目源代码(下部)",
  author = "gaoch",
  year = "2008",
  journal = "BIO-SPRING",
  note = "/post/2008/01/18/lamp-cgi-project/"
}