分享
 
 
 

CGI连接数据库的方法详细说明

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

毫无疑问,当今Web程序设计中最吸引人而且最复杂的当然就是web数据库程序了。平心而论,其复杂高深的程度决不是你们可以想象得到的。我们先来看看其中涉及到的几个方面的问题:

1.最基本的html设计

2.CGI程序编写调试

3.网络管理和客户协调

4.数据库编写

5.客户/服务体系程序编写

另外你还得不时地同你的客户进行斗争,以取得他们对你工作的认同。因此编写一个大型WEB数据库,是综合素质的考验。

笔者自问尚不完全具备以上的能力,但有幸曾参加过几个web数据库的开发,算是具备了初步的经验吧。这里给大家分享,也算是感谢各位对这个断断续续的教程的总结吧。

一 数据库选择

从一般情况来看,使用web数据库往往是要解决数据的归纳、索引和维护的问题。我们一般选择最流行的关系型数据库,比如NT下的sql,win95和nt下的Access,NT下的sybase,unix下的msql等等。当然还有Oracle、FileMaker PRO、Paradox等等。这些都是很流行的Sql数据库。Sql给数据管理提供了一个标准而坚实的接口,它对数据库操作饿所有函数必需在数据库语言中实现。这种函数包括:数据对象的创建、插入数据和数据修改等。对于数据量不大的小型数据库,一般使用access。

二 接口程序

虽然我们可以直接编写WEB的CGI接口,但是那是工作量巨大且麻烦异常的工作。为了减轻开发者的负担,数据库程序员为我们编写了许多可以直接使用的接口程序,配合不同的数据库。下面就是一些十分常用的接口程序:

1. DB2WWW

http://www.software.ibm.com/data/db2/db2wfac2.html

这是一个用于和IBM DB2数据库进行连接的工具。在HTTP服务器中,这种工具将HTML文件和SQL命令作为宏文件存储,然后,DB2WWW在接受到浏览器请求后就处理这些宏文件。

2. dbCGI

http://www.progress.com/webtools.html

这个工具通过在html文件中内置SQL语句来实现和数据库的连接。适用于Progress,Sybase,Oracle,Informix,Ingres和ODBC。下面是一个典型的dbCGI程序代码:

<title>dbCGI test</title>

<sql init>

INFORMIXDIR=/usr/informixdir

SQLEXEC=/usr/informix/sqlturbo

TBCONFIG=tbconfig

</sql>

<sql connect connl>

<DATABASE=stores>

<sql>

<sql format>

% [! 8:<h1>%8d</h1>%]

....

</sql>

<sql query connl>

selet *

from customer

order by date,city,zipcode

</sql>

<sql disconect connl>

</sql>

<sql uninit>

</sql>

这个工具通过<sql>标签和%转意字符来把sql语句放置在html语句内。

3 Genera

http://gdbdoc.gdb.org/letovsky/genera/general.html

这个是sybase数据库系统的网关。它通过在文本文件中加入特定的语句来和数据库进行连接。

4 WebDBC

http://www.ndev.com

以windows NT为平台,可以访问所有对odbc兼容的数据库。

5 A-Xorion

http://www.clark.net/infouser/endidc.html

他是一个CGI网关,它可以访问大多数的PC机数据库。它以Windows3.1/95/NT为平台。数据库为Ms Access2.0。

三 编程语言

上面介绍的是一些常用的接口程序,它们需要Server的配合才能正常工作。当然如果是很小的数据库程序,不需要使用如此复杂的数据库接口程序。用C,Perl,VB等等,写成CGI程序,在CGI程序内调用数据库。虽然速度方面不是很快,但绝对是非常简单的。

最后的例子:

最后,我准备以一个例子来结束这个教程。

环境:

这是一个非常简单的WEB应用程序。如果你要运行这个程序,也许你得化些时间来配置自己的系统。在这个例子里,CGI程序由Perl5来编写,后台数据库使用sybase system 10,Sybperl用于建立脚本和数据库之间的通信,用其他的CGI后台数据库接口程序也可以。

CGI程序:

<head>

<title>会议登记程序</title>

</head>

<body>

<h2>会议登记系统</h2>

please fill out the following form. A registration packet will be sent to you immediatel you.Note that all <b>bolad-faced</b>fields muse be complected.

<hr>

<form method="post" action="cgi-bin/resgister.pl">

<b>first name:</b><input type="text" name="c_fname" size=30>

<p>

<b>Last name:</b><input type="text" name="c_lname" size=30>

<p>

<b>address 1:</b><input type="text" name="c_add1" size=30>

<p>

<b>address 2:</b><input type="text" name="c_add2" size=30>

<p>

<b>city:</b><input type="text" name="c_city" size=30>

<p>

<b>State:</b><input type="text" name="c_state" size=2>

<p>

<b>Zip:</b><input type="text" name="c_zip" size=15>

<p>

<b>phone:</b><input type="text" name="c_phone" size=15>

<p>

<b>Fax:</b><input type="text" name="c_fax" size=15>

<p>

<b>Email:</b><input type="text" name="c_email" size=15>

<p>

Packge:

<ul>

<li><input type="radio" name="c_packge" valuge="a">Package A

<li><input type="radio" name="c_packge" valuge="b">Package B

<li><input type="radio" name="c_packge" valuge="c">Package C

</ul>

How did you hear about the conference:

<ul>

<li><input type="radio" name="c_ad" value="a">Direct Mail

<li><input type="radio" name="c_ad" value="b">Associate

<li><input type="radio" name="c_ad" value="c">Journal

<li><input type="radio" name="c_ad" value="d">Other

</ul>

<p>

<input type="reset" value="clear"><input type="submit" value="Register"><p>

</form>

<hr>

</body>

Perl脚本:

#!/usr/local/bin/perl

require"cgi-lib.pl";

&ReadParse(* input);

$mc_fname=$input{'c_fname'};

$mc_lname=$input{'c_lname'};

$mc_add1=$input{'c_add1'};

$mc_add2=$input{'c_add2'};

$mc_city=$input{'c_city'};

$mc_state=$input{'c_state'};

$mc_zip=$input{'c_zip'};

$mc_phone=$input{'c_phone'};

$mc_fax=$input{'c_fax'};

$mc_email=$input{'c_email'};

$mc_package=$input{'c_package'};

$mc_ad=$input{'c_ad'};

print &PrintHeader;

if (($mc_fname eq"")||(mc_lname eq "")||(mc_add1 eq "")||($mc_add2 eq "")||(

mc_city eq "")||(mc_state eq "")||(mc_zip eq "")){

printf ("<br>");

printf(",strong>Your registration cannot be processed as is.Pleae make sure all the requied fields are filled properly.</strong>");

print"<p>";

print"Pleae use the <i>Back</i>button to complete the form.\n";

}

else{# data is OK

use Sybase::DBlib;

$dbh=Sybase::DBlib->dblogin('conf_user','123','DB-SERVER','REG');

$dbh->dbuse('conference');

$sqlcmd="insert into reg(c_fname,c_lanme,c_add1,c_add2,c_city,c_state,c_zip, c_phone,c_fax,c_email,c_package,c_ad)";

$sqlcmd=$sqlcmd."values("

$sqlcmd=$sqlcmd.'\"".$mc_fname."\",";

$sqlcmd=$sqlcmd.'\"".$mc_flame."\",";

$sqlcmd=$sqlcmd.'\"".$mc_add1."\",";

$sqlcmd=$sqlcmd.'\"".$mc_add2."\",";

$sqlcmd=$sqlcmd.'\"".$mc_city."\",";

$sqlcmd=$sqlcmd.'\"".$mc_state."\",";

$sqlcmd=$sqlcmd.'\"".$mc_zip."\",";

$sqlcmd=$sqlcmd.'\"".$mc_phone."\",";

$sqlcmd=$sqlcmd.'\"".$mc_fax."\",";

$sqlcmd=$sqlcmd.'\"".$mc_email."\",";

$sqlcmd=$sqlcmd.'\"".$mc_package."\",";

$sqlcmd=$sqlcmd.'\"".$mc_ad."\",";

$sqlcmd=$sqlcmd.'\"".$mc_fax."\",";

$dbh->dbcmd($sqlcmd."\n");

$dbh->dbsqlexec;

print"<strong>Thank you.</strong>Your registration has been submitted.You should receive you packet shourtly in the mail.";

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有