电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 在线教程-> CGI
网友zengh写的基于ODBC的通用数据库管理程序-CGI教程,CGI文档
作者:网友供稿 点击:24
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
#!/usr/bin/perl
print "content-type: text/html\n\n";

#setver
$http = "http://$env{server_name}$server_port";
$cgiurl = "$http/cgi-bin/test4.pl"; #cgi的url exp :http://ssl
($disk,$root,$script) =split(/\\/,__file__);
$filehead = "$disk\/$root\/$script"; #exp:d:/inetpub/cgi-bin
$allow_html = 0; # 1=允许使用html语法 0=no
$time_miss = +0; # server时区调整

#program
&get_form;
&set_var;
use win32::odbc;
#$dsn = "mdbtest" if (!$dsn);
$dsn = "dsn eq test;uid eq test;pwd eq test;" if (!$dsn); #i use sqlserver
$dsn1=$dsn;
$dsn=~s / eq /=/g;
$dsn1=~s / /%20/g;
#创建一个dsn文件头
my $db = win32::odbc->new($dsn);
#测试是否存在此dsn
if (! $db){
print "failed to connect $dsn\n";
win32::odbc::dumperror();
#如果不存在则退出程序
die;
}#else{print "联结正确!";exit;}
$dsn=$dsn1;
if ($job eq "look") {
&look;
$db->close();
exit;
}elsif ($job eq "type"){
&type;
$db->close();
exit;
}elsif ($job eq "stat"){
&stat;
$db->close();
exit;
}elsif ($job eq "help"){
&help;
$db->close();
exit;
}elsif ($job eq "log"){
&log;
$db->close();
exit;
}
&main;
$db->close();
exit;

sub log{
$sql="select usedate as 时间,host as 使用者,sqlcommand as sql命令 from log order by usedate";
&look;
}

sub help{
print <<"eof";
<html><body>
<pre>

sql语句简介:
select [all|distinct|distinctrow|][top n ]字段列表|* from 表名
[where 条件]
[order by 字段名 ][desc]]
[group by 字段名]

其中:条件 数字型 字段名 操作符 值(lt < ,gt >,eq =, le <=,ge >=,ne <>)
字符型 字段名 like 值 如加%号为模糊条件
日期型 to_char(字段名,yyyymmdd hh24:mi:ss) > 20000120 09:01:00
谓词 all 返回所有数据,默认值
distinct 省略选择字段中包含重复数据的记录
distinctrow 省略基于整个重复记录的数据,而不只是基于重复字段的数据。
top n 返回指定记录数
标头 用于代替字段名,语法: 字段名 as 标头
create table 表名(字段名 字段类型(长度)[,字段名 字段类型(长度)...])
drop table 表名 用途:删除表 注:删除后无法恢复
truncate table 表名 用途:清除表中的所有数据但不删除这个表
alter table 表名 add 字段名 字段类型 null
用途:给指定的表增加一个字段,注意:null参数是必须有的
insert into 表名 (字段列表) values (字段值列表) 用途:增加记录,分隔用,分隔
delete * from 表名 where 条件 用途:删除符合条件的记录 注意:如不提供条件,将删除所有记录
update 表名 set 字段=字段值[,字段=字段值] where 条件
用途:更新符合条件的记录值,注意:如不提供条件将更新所有记录
select *|字段列表 into 新表名 from 旧表名 用途:拷贝整个表或指定字段的表


字段类型:
数据类型 存储大小 描述
binary 每个字符占一个字节 任何类型的数据都可存储在这种类型的字段中。不需数据转换(例如,转换到文本数据)。数据输入二进制字段的方式决定了它的输出方式。
bit 1 个字节 yes 和 no ,以及只包含这两个数值之一的字段。
byte 1 个字节 介于 0 到 255 之间的整型数。
counter 4 个字节 每当有新记录添加至表中时,由 microsoft jet 数据库引擎自动增加数值。在 microsoft jet 数据库引擎中,此数值的数据类型为 long。
currency 8 个字节 介于 ?-?922,337,203,685,477.5808 到 922,337,203,685,477.5807 之间的符号整数。
datetime
(清参阅 double ) 8 个字节 介于 100 到 9999 年的日期或时间数值。
guid 128 个位 用于远程过程调用的唯一识别数字。
single 4 个字节 单精度浮点数,负数范围是从 -3.402823e38 到 -1.401298e-45,正数从1.401298e-45 到 3.402823e38,和 0。
double 8 个字节 双精度浮点数,负数范围是从 -1.79769313486232e308 到 -4.94065645841247e-324,正数从 4.94065645841247e-324 到 1.79769313486232e308,和 0。
short 2 个字节 介于 -32,768 到 32,767 的短整型数。
long 4 个字节 介于 -2,147,483,648 到 2,147,483,647 的长整型数。
longtext 每个字符占一个字节 从零到最大 1.2 千兆字节。
longbinary 视实际需要而定 从零到最大 1.2 千兆字节。用于 ole 对象。
text 每个字符占一个字节 长度从 0 到 255 个字符。

标准函数:avg(),count(),sum(),max(),min() 括号内为字段名
技巧:
vote between 7 and 10 等同于vote>6 and vote<11
username in (bill gates,president clinton)只取其中之一
convert(char(8),price) 将其它类型的数据转型为指定长度的字符型
site_name like [a-m]% 则只取首字符为a至m的记录
site_name like [abc]% 则只取首字符为a或b或c的记录
site_name like [c-fy]% 则只取首字符为c至f或y的记录
site_name like [^y]% 要得到那些名字不以y开头的记录
site_name like m_crosoft 通过使用下划线字符(_),你可以匹配任何单个字符
如果你想匹配百分号或下划线字符本身,你需要把它们括在方括号中。如果你想匹配连字
符(-),应把它指定为方括号中的第一个字符。如果你想匹配方括号,应把它们也括在方括号中。
ttrim()和ltrim(),可以用来从字符串中剪掉空格。函数ltrim()去除应该字符串前面的
所有空格;函数rtrim()去除一个字符串尾部的所有空格。
日期型常数应形式为 #12/25/2000 11:25:32#


<center><font color=red>(c)copyright by zengh 1999-2000</font></center>
</pre>
</body></html>
eof
}
sub stat {
@tables=sort $db->tablelist;
print "<html><body><center><h4>数据表
(共$#tables个)</h4></center><hr>";
$yes=0;
foreach (@tables) {
if ($_ ne log) {
print "<a href=$cgiurl?job=look&dsn=$dsn&sql=select%20top%20100%20*%20%20from%20$_ target=look>$_</a>
\n";
}else{$yes=1;}
}
if ($yes=0) {#如果不存在log这个表则建立
$sql="create table log (usedate datetime,host char(20),sqlcommand char(255))";
if ($db->sql($sql)) {
print "sql错误:$sql\n
";
$db->dumperror();
$db->close();
exit;
}
}
print "<hr>点击表名显示其记录<hr>";

print "</body></html>";
}
sub look{
@tables=sort $db->tablelist;
if (!$sql) {
$table=@tables[0];
$table=@tables[1] if ($#tables>=1 and @tables[0] eq "log");
$sql="select top 100 * from ".$table;
}
$sql=~s / eq /=/g;
$sql=~s / ne /<>/g;
$sql=~s / lt /</g;
$sql=~s / gt />/g;
$sql=~s / le /<=/g;
$sql=~s / ge />=/g;

if ($db->sql($sql)) {
print "sql错误:$sql\n
";
$db->dumperror();
$db->close();
exit;
}
if (! ($sql=~/select|into|/i)) {
print "$sql语句执行成功!!";
$db->close();
exit;
}
@fieldname=$db->fieldnames();
print "<html><body><center><h2>返回状态情况<h2></center><hr>";
print "<table width=100% border=1><tr><td>no.</td>";
foreach (@fieldname) {
print "<td>$_</td>";
}
print "</tr>";
$i=0;
while ($db->fetchrow()){
$i++;
%fieldmemo=$db->datahash;
print "<tr><td>$i</td>";
foreach (@fieldname) {
print "<td>$fieldmemo{$_}</td> ";
}
print "</tr>";
}
print "</table>";
print "<hr>表属性";
print "<table border=1>";
my(%type) = $db->colattributes($db->sql_column_type);
my(%len) = $db->colattributes($db->sql_column_length);
my(%null) = $db->colattributes($db->sql_column_nullable);
foreach $field (sort @fieldname) {
if ($type{$field}==12) {$fieldtype="文本";}
elsif ($type{$field}==-1){$fieldtype="备注/超级链接";}
elsif ($type{$field}==4){$fieldtype="数字/自动编号";}
elsif ($type{$field}==11){$fieldtype="日期/时间";}
elsif ($type{$field}==2){$fieldtype="货币";}
elsif ($type{$field}==-7){$fieldtype="是/否";}
elsif ($type{$field}==-4){$fieldtype="ole对象";}
elsif ($type{$field}==1){$fieldtype="文本";}
else{$fieldtype=$type{$field};}
print "<tr><td>$field</td><td>$fieldtype</td><td>$len{$field}</td><td></tr>";
}
print "</table>";
print "</body></html>";
if ($sql ne "select usedate as 时间,host as 使用者,sqlcommand as sql命令 from log order by usedate" and $sql !=~"select top 100 * from") {
$sql1="insert into log (usedate,host,sqlcommand) values ($daten $timen,$userip,$sql)";
if ($db->sql($sql1)) {
print "sql错误:$sql\n
";
$db->dumperror();
$db->close();
exit;
}
}
}

sub type{
print <<"eof";
<html><body>
<form method=post action="$cgiurl?job=look&dsn=$dsn" target="look">
sql语句:<input type="text" name="sql" size=60>
<input type="submit" value="确定"><input type="reset" value="重写">
</form>
<a href=$cgiurl?job=stat&dsn=$dsn target="stat">刷性状态</a>-----
<a href=$cgiurl?job=help target="look">帮助</a>-----
<a href=$cgiurl?job=log&dsn=$dsn target="look">日志</a>
</body></html>
eof
}
sub main {
print <<"eof";
<html>
<head>
<title>odbc test</title>
<meta name="generator" content="microsoft frontpage 3.0">
</head>
<frameset cols="643,*">
<frameset rows="*,25%">
<frame name="look" src="$cgiurl?job=look&dsn=$dsn">
<frame name="type" target="look" src="$cgiurl?job=type&dsn=$dsn">
</frameset>
<frame name="stat" src="$cgiurl?job=stat&dsn=$dsn">
<noframes>
<body>
<p>this page uses frames, but your browser doesnt support them.</p>
</body>
</noframes>
</frameset>
</html>
eof
}




##########
#subs program
##########
sub set_var {
$job =&get_var(job ,\n|‖);
$sql =&get_var(sql ,\n);
$dsn =&get_var(dsn ,\n);

$userip=$env{remote_addr};

($secn,$minn,$hourn,$dayn,$monn,$yearn,$weekn,$yeardayn,$isdst) = localtime(time+(3600*$time_miss));
$monn=$monn+1;
if ($monn<10) {$monn="0$monn";}
if ($dayn<10) {$dayn="0$dayn";}
if ($hourn<10) {$hourn="0$hourn";}
if ($minn<10) {$minn="0$minn";}
if ($secn<10) {$secn="0$secn";}
$yearn+=1900;
$daten="$monn/$dayn/$yearn";
$timen="$hourn\:$minn\:$secn";
}


############
sub get_form {
@querys = split(/&/, $env{query_string});
foreach (@querys) {
($name,$value) = split(/=/, $_);
$value = &decode($value);
$value = &filterhtml($value);
&setvaluetoform($name, $value);
}

read(stdin, $buffer, $env{content_length});
@pairs = split(/&/, $buffer);
foreach (@pairs) {
($name, $value) = split(/=/, $_);
$value = &decode($value);
$value = &filterhtml($value);
&setvaluetoform($name, $value);
}

@cookies = split(/; /, $env{http_cookie});
foreach $cookies (@cookies) {
($name, $value) = split(/=/, $cookies);
$value = &decode($value);
$value = &filterhtml($value);
&setvaluetoform($name, $value);
}
}
############
sub decode {
local($return)=$_[0];
$return =~ tr/+/ /;
$return =~ s/%([a-fa-f0-9][a-fa-f0-9])/pack("c", hex($1))/eg;
return $return;
}
##########
sub filterhtml {
local($return)=$_[0];
$return =~ s/<!--(.|\n)*-->//g;
if ($allow_html != 1) {
$return =~s/<([>]|\n)*>//g;
}
return $return;
}
##########
sub setvaluetoform {
if ($form{$_[0]}) {
print "\$_[0]=$_[0]\n
";
print "\$_[1]=$_[1]\n
";
$form{$_[0]}="$form{$_[0]}§$_[1]";
print "\$form{\$_[0]}=$form{$_[0]}\n
";
}
else {
$form{$_[0]}=$_[1];
}
}
#########
sub get_var {
local($return)="";
$return="$form{$_[0]}" if ($form{$_[0]});
$return=~ s/$_[1]//g;
return $return;
}
#########
sub readtxtfile {
open(readtxtfile,"$_[0]");
@readtxtfile=<readtxtfile>;
close(readtxtfile);
return @readtxtfile;
}
#############
sub checkempty {
local($chkval)=$_[0];
$chkval =~ s/ |
|\n//g;
&error($_[1]) if ($chkval eq "");
}
##########
sub outhtml {
print "<html><head>\n";
print "</head><body >\n";
print "$_[0]\n";
print "</body></html>\n";
exit 0;
}

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·LB5000XP论坛配合SERV-U获取系统管理员权限-CGI教程,CGI文档
·CGI 版本-PHP教程,其它文章
·获取随机的由大小写字母和数字组成的八位密码-CGI教程,CGI文档
·Perl在NT下的快速简便安装方法 (转)-CGI教程,CGI文档
·实战 FastCGI(转)二-CGI教程,CGI文档
·XML和现代CGI应用程序-.NET教程,XML应用
·perl在win32平台上直接操作打印机-CGI教程,CGI文档
·实战 FastCGI(转)五(完)-CGI教程,CGI文档
·Python 快速入门(一)-CGI教程,CGI文档
·网站 PAGEVIEW 分析系统 CGI (原创)-CGI教程,CGI文档

最新文章
·顺便说说一些指示代码
·跟我学Perl(二)
·跟我学Perl(一)
·CGI教程(5)利用CGI解码FORM
·CGI教程(4)HTML 表单
·CGI教程(3)怎样发回文档给客户端
·CGI教程(2)怎样从服务器获得信息
·CGI教程(1)简介
·CGI教程(目录)
·Perl直接入门详尽指南




版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号