奇趣技术网 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 技术论坛
中华网络安全联盟 >> 程序开发 >> Perl >> 基于ODBC的通用数据库管理程序
程序开发
Asp
PHP
JSP
CGI/Perl
XML
.Net
C/C++/C#
Visual Basic
Visual C++
Delphi
Java
汇编语言
  • LB5000XP论坛配合SERV

  • 获取随机的由大小写字

  • Perl操作Mysql数据库

  • Perl在NT下的快速简便

  • 用Perl制作页面计数器

  • 用Perl语句来代替常用

  • 用 perl 实现文件上传

  • perl 域名查询程序

  • 基于ODBC的通用数据库管理程序
    字体:

    中华网络安全联盟    作者:佚名    来源:网络转载    时间:2006-3-21


    #!/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 doesn't 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;
    }

    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.