浏览模式: 标准 | 列表分类:网站|ASP备忘

分享,通用asp生成html代码(zt)

首先感谢落伍的liuyanhao ,MySky 等。

原理:通过浏览器传送变量,如
http://127.0.0.1/shengchen...

代码:
if SaveFile("/new/"&id&".html","http://127.0.0.1/newss.asp... then 中

/new"&id&".html",是你生成的文件和路径。http://127.0.0.1/news.asp?...是asp的路径
大家可以自己设置修改,其中 "&id&"  是读取浏览器的变量。网址改成你自己的。

使用方法,给你的文章列表添加一个连接,如 http://127.0.0.1/shengchen...
90这个变量相信大家会调用吧,这样就能在/new目录下生成按照id排列的html文章了

shengcheng.asp文件如下:

代码:
<%
Dim id
id = Request("id")
%>
<%
if SaveFile("/new/"&amp;id&amp;".html","http://127.0.0.1/news.asp?... then
Response.write "已生成"
else
Response.write "没有生成"
end if

function SaveFile(LocalFileName,RemoteFileUrl)
Dim Ads, Retrieval, GetRemoteData
On Error Resume Next
Set Retrieval = Server.Cr&#101;ateObject("Microso" &amp; "ft.XM" &amp; "LHTTP") "//把单词拆开防止杀毒软件误杀
With Retrieval
.Open "Get", RemoteFileUrl, False, "", ""
.Send
GetRemoteData = .ResponseBody
End With
Set Retrieval = Nothing
Set Ads = Server.Cr&#101;ateObject("Ado" &amp; "db.Str" &amp; "eam") "//把单词拆开防止杀毒软件误杀
With Ads
.Type = 1
.Open
.Write GetRemoteData
.SaveToFile Server.MapPath(LocalFileName), 2
.Cancel()
.Close()
End With
Set Ads=nothing
if err <> 0 then
SaveFile = false
err.clear
else
SaveFile = true
end if
End function
%>

Tags: tohtml

密码验证,要如何不区分大小写?

user_password = ucase(request("user_password"))
加一个Ucase都大写即可,不然也可以Lcase都小写^_^

较长text型数据无法在Asp页面中取出的解决办法

在Asp页面中向记录集取长text型数据时,出现如下错误现象时:

Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e21'

Errors occurred

可有以下三种解决办法:

(一)使用rs.open sql,conn,1,3方式打开记录集

(二)将该列放在第一列取出,比如comment里存放有较长的text内容,取记录集内容的时候,先来个comment=rs("comment")把这个捣蛋的东西先取出来放到内存变量中,然后再操作其它的字段。由于一般长text内容不会在第一个显示,因此一般都要取出来放到内存变量中。

(三)改为oledb方式连接数据库。在此方式连接数据库时,不会出现该错误(起码我没有遇到过)。在我的系统中,将现在的oledb连接方式改成odbc连接方式后,错误就马上出现了。

此错误怀疑是由于Asp向odbc返回的记录集取数据的机制有些问题造成。建议采用第三种方法避免该错误。

在ASP中判断SQL语句是否执行成功

利用err对象:

代码:
    sql="insert into table(f1,f2) values('v1','v2')"
    conn.execute sql
    if err.number<>0 then
        response.write "出错了:"& err.description
        err.clear
    else
        response.write "OK"
    end if 

ASP 中健壮的页结构的异常处理

错误处理是让程序员牢骚满腹的东西之一。让我们来面对它,我们不写错误的代码就是了。。。或者类似的想法。不幸的是,代码中的运行时错误可能有许多的原因,从硬件、软件的改变到使用了别的开发团队的代码等等。有效的处理这些错误并使得它对于网站正常操作过程的中断最小化是每个有良知的程序员的责任。

在本文讨论的范围内,有三个不同的地方可以发生错误:脚本,中间件,以及IT内部架构。IT内部架构的错误,比方周期性的性能降低并导致IIS进行(Inetinfo.exe)崩溃几乎是无法避免的。这种类型的错误通常只能打电话要求技术支持并且会让系统管理员忙上很久。开发者不能为阻止这类错误做些什么,但是我们通常能够应付和改正脚本和中间件中的错误。 在安装了IIS以后,缺省的服务器端脚本语言被设置成VBScript。许多Web 开发团队在他们的开发环境中保持了这些缺省设置,这是不幸的,因为VBScript对于处理运行时错误的支持非常的差。在VBScript中,开发者可以使用的唯一一个错误处理结构是

On Error Resume Next (打开错误处理功能) 和
On Error GoTo 0 (关闭错误处理功能).
为了在你的ASP 页面里有效的使用这个错误处理结构,你可能需要用这些结构包括可能抛出异常的代码,就象下面这样:

代码:
<%
Dim myVar
On Error Resume Next
'下面一行代码会在MSXML 4.0没有被安装或者已经损坏的情况下产生错误
Set myVar = Server.CreateObject("MSXML2.DOMDocument.4.0")
If Err.Number <> 0 Then
' 在这里处理错误
' 结束错误处理,避免以后发生的错误无法被发现
On Error GoTo 0
Else
' myVar 现在指向 MSXML 4.0 DOMDocument的一个实例
' 结束错误处理,避免以后发生的错误无法被发现
On Error GoTo 0
End If
%>


就象你看到的一样,如果你要在每一行现有的可能发生错误的代码上使用上面的规则,你的程序马上就会充满 "On Error" 和 "If Err.Number <> 0 Then . . ." 这样的结构。

而另一方面JScript对于健壮的错误处理机制“结构化异常处理(SEH)”有内建的支持。使用SEH能够让你的软件开发团队顺利的转移到.NET 环境上来,因为SEH是JScript.NET, VB.NET, 和 C#缺省的错误处理机制。(注意:.NET不支持VBScript。)下面的例子代码执行与VBScript代码相同的操作,但是使用JScript语言并用SEH来处理异常

代码:
<%@ LANGUAGE="JScript" %>
<%
var myVar;
try {
myVar = Server.CreateObject("MSXML2.DOMDocument.4.0");
// 如果上面发生了错误,那么catch
// 代码块就会立刻被执行
// 并在myVar上进行必要的操作。
}
catch (e) {
// 在这里处理异常,异常本身可以用
// 'e' 变量进行引用。
}
finally {
// 在这里进行所有收尾工作
// 这段代码不管错误有没有发生
// (也就是“catch”块有没有运行)
// 都会执行。
}
%>

通过在服务器端使用JScript,你就得到了SEH带来的好处,以及对复杂ASP对象,比方Server,Request和Response对象的完全使用。要把这种脚本语言设置成你的ASP页面的缺省语言,你只需要简单的在你的ASP页面上添加@LANGUAGE指令,就象上面的例子那样。

简单的asp静态页面批量生成代码

在做网站的时候遇上了将数十万条数据全部生成静态页面的情况,就写了这个简单的页面生成代码,通过多次http请求,将过多的记录集分割成很多小块来分别执行,以下是我整理过的代码:

模板文件中要替换的内容均以{...}括起来

为力求简洁,去掉了错误处理代码(replace中要来替换的字符串参数不能为null值,当然fso也应该做错误检查)。
代码:
<%
" ---------------------------------------------------------------------------------------------------------------------
" 作者: kevin fung  
" ---------------------------------------------------------------------------------------------------------------------
Dim start                 "该变量为指针将要指向的记录集位置,通过参数动态获得
Dim Template          "模板文件将以字符串读入该变量
Dim  content           "替换后的字符串变量
Dim objConn            "连接对象
Dim ConnStr            "连接字符串
Dim sql                    "查询语句
Dim cnt:cnt = 1 "本轮循环计数器初始化

start  = request("start") "获取本轮指针的开始位置
If IsNumeric(start) Then start = CLng(start) Else start=1
If start=0 Then start = 1 "如果start

ConnStr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " &amp; Server.MapPath("DataBase.mdb")
sql = "sel&#101;ct * from table_name"

Set objConn = Server.Cr&#101;ateObject("ADODB.Connection")
objConn.Open ConnStr

set rs = Server.Cr&#101;ateObject("ADODB.Recordset")
rs.open sql,objConn,1,1                "打开数据集
rs.AbsolutePosition = start "最关键的一步,将指针指向start,start通过参数动态获得

Template = getTemplate(Server.MapPath("template.html"))" template.html为模板文件,通过函数getTemplate读入到字符串,模板文件中要替换的内容均以{...}括起来

While Not rs.eof And cnt<= 500 "500是设定一次请求生成页面的循环次数,根据实际情况修改,如果太高了,记录集很多的时候会出现超时错误
        content = Replace(Template,"{filed_name_1}",rs("filed_name_1")) "用字段值替换模板内容
        content = Replace(content,"{filed_name_2}",rs("filed_name_2"))
        ......
        content = Replace(content,"{filed_name_n}",rs("filed_name_n"))

        genHtml content,Server.MapPath("htmfiles/"&amp;rs("id")&amp;".html") "将替换之后的Template字符串生成HTML文档,htmfiles为存储静态文件的目录,请手动建立

        cnt = cnt + 1  "计数器加1
        start = start + 1 "指针变量递增
rs.movenext
wend

If Not rs.eof Then "通过刷新的方式进行下一轮请求,并将指针变量start传递到下一轮
response.write "<meta http-equiv="refresh" content="0;URL=?start="&amp;start&amp;"">"
Else
response.write "生成HTML文件完毕!"
End if

rs.Close()
Set rs = Nothing
objConn.Close()
Set objConn = Nothing

Function getTemplate(template)"读取模板的函数,返回字符串,template为文件名
Dim fso,f
set fso=Cr&#101;ateObject("Scripting.FileSystemObject")
set f = fso.OpenTextFile(template)
getTemplate=f.ReadAll
f.close
set f=nothing
set fso=Nothing
End Function

Sub genHtml(content,filename)"将替换后的内容写入HTML文档,content为替换后的字符串,filename为生成的文件名
Dim fso,f
Set fso = Server.Cr&#101;ateObject("Scripting.FileSystemObject")
Set f = fso.Cr&#101;ateTextFile(filename,true)"如果文件名重复将覆盖旧文件
f.Write content
f.Close
Set f = Nothing
set fso=Nothing
End Sub
%>

Tags: tohtml

将ACCESS转化成SQL2000要注意的问题

很多朋友想用SQL2000数据库的编程方法,但是却又苦于自己是学ACCESS的,对SQL只是一点点的了解而已,这里我给大家提供以下参考---将ACCESS转化成SQL2000的方法和注意事项
一,首先,我说的是在ACCESS2000,SQL2000之间转换,其他的我也还没有尝试过,希望大家多多试验,肯定是有办法的;
二,转换的方法
1,打开”控制面板“下”管理工具“中的”数据库源“;
2,按”添加“添加一个新的数据源,在选择栏里选”Driver do microsoft Access
(*.mdb)”,完成后将出现一个框,

在”数据库源“里面输入你想写的名称,我取名叫“ABC”,说明不需要填,接着,按下面的选择,寻找你的数据库地址和选中(注意,请先备份自己的ACCESS数据库),然后确定。
数据源在这里建好了,剩下转换了。

3,打开SQL2000企业管理器,进入数据库,新建一个空的数据库“ABC”;
4,选择新建立的数据库,按鼠标右键,选择“所有任务”下“导入数据”,按“下一步”继续;
5,在数据库源下拉但中选择”Driver do microsoft Access(*.mdb)“,在”用户/系统DSN“中,选种你刚才添加的”ABC“,按 ”下一步“;
6,“目的”不需要修改,选择服务器(一般下为自己的本机"local",也可以选择服务器地址或者局域网地址,确定你的权限是否可以操作,),"使用WINDOWS 身份验证"指用自己的系统管理员身份操作,"使用SQL身份操作验证"可以用于网站的操作,推荐用后者;
7,选上"使用SQL身份操作验证"后,填写你的用户名和密码,我自己选择的是系统默认号码"sa","****",数据库选择刚新建的"ABC",按"下一步";
8,这一步的两个单项选择,"从数据源复制表和视图"与"用一条查询指令指定要传输的数据",选择前者,按"下一步"继续;
9,这里将出现你自己ACCESS数据库的表,按"全选"后,下一步;
10,"DTS导入/导出向导",看"立即运行"被选中按"下一步",
11,按"完成"继续;
12,这个步骤你将看到你的数据被导入SQL2000里面,当出现"已经成功把XXX个表导入到数据库"的字样,而且所有的表前面都有绿色的勾,就表示成功导入所有数据,如果中途出现问题或者表前面有红色的叉的话,说明该表没有成功导入,这时就要回去查看自己的操作是否正确了.

三,数据修改
1,由于SQL2000里面没有"自动编号",所以你的以"自动编号"设置的字段都会变成非空的字段,这就必须手工修改这些字段,并把他的"标示"选择"是",种子为"1",增量为"1",
2,另外,ACCESS2000转换成SQL2000后,原来属性为"是/否"的字段将被转换成非空的"bit",这时候你必须修改成自己想要的属性了;
3,另外,大家要注意对时间函数的把握.ACCESS与SQL是有很多不同的.

远程图片自动保存到本地服务器|利用aspjpeg为图片加上水印

代码:
<%
"函数功能:远程图片自动保存到本地服务器,并利用aspjpeg为图片加上水印
"(注意:请先在目录下创建images目录,用来保存临时图片)
"本程序需要在服务器上安装"aspjpeg组件"否则无法正常使用
"也可以只取"""""22222222"""""""以上的部分,这部分可以保存图片,第二部分是进行水印增加
"使用方法,请保存为saveimg.asp
"saveimg.asp?url=http://siyizhu.com/logo.gif 即可以取下图片啦,HOHO. 其他需要加的功能,大家自己扩展好啦
"如何获取其他后缀名的文件呢? 当然也可以啦
"(jpg|gif|png|bmp)改成(mp3)明白吧? 就是取mp3后缀的文件名.以此类推. 嘻嘻

Server.ScriptTimeOut=99999

const savepath="images" "图片保存路径
url=request("url")

function myreplace(str)
newstr=str
set objregEx = new RegExp
objregEx.IgnoreCase = true
objregEx.Global = true
objregEx.Pattern = "http://(.+?)\.(jpg|gif|png|bmp)" "定义文件后缀
set matches = objregEx.execute(str)
for each match in matches
newstr=replace(newstr,match.value,saveimg(match.value))
next
myreplace=newstr
end function

function saveimg(url)
temp=split(url,".")
"以下是用时间与随机数重命名文件名
randomize
ranNum=int(90000*rnd)+10000
filename=year(now)&amp;month(now)&amp;day(now)&amp;hour(now)&amp;minute(now)&amp;second(now)&amp;ranNum&amp;"."&amp;temp(ubound(temp))
"文件名重命名结束
set xmlhttp=server.cr&#101;ateobject("Microsoft.XMLHTTP")
xmlhttp.open "get",url,false
xmlhttp.send
img=xmlhttp.ResponseBody
set xmlhttp=nothing
set objAdostream=server.cr&#101;ateobject("ADODB.Stream")
objAdostream.Open()
objAdostream.type=1
objAdostream.Write(img)
objAdostream.SaveToFile(server.mappath(savepath&amp;filename))
objAdostream.SetEOS
set objAdostream=nothing
"""""""222222222"""""""""""
saveimg=savepath&amp;filename "获取保存路径
Dim Jpeg
Set Jpeg = Server.Cr&#101;ateObject("Persits.Jpeg")
Jpeg.Open Server.MapPath(saveimg) "打开保存图片的路径

" 添加文字水印
Jpeg.Canvas.Font.Color = &amp;HFF0000" 红色
Jpeg.Canvas.Font.Family = "宋体"
Jpeg.Canvas.Font.Bold = True
Jpeg.Canvas.Print Jpeg.OriginalWidth-200,Jpeg.OriginalHeight-50, "siyizhu.com" "水印离左边的距离,离顶端的距离,这个是放在右下脚了
"保存文件
Jpeg.Save Server.MapPath(saveimg) "保存添加水印后的图片

" 注销对象
Set Jpeg = Nothing
end function
%>

Tags: aspjpge, 远程

给你的asp+ac站点加rss功能

代码:
<%
Response.ContentType="text/xml"
dim db,dbpath,conn
dim rs,SQL
db="shujuku/hotltcom.mdb"'这里填写你的数据库地址
Set conn = Server.CreateObject("ADODB.Connection")
dbpath="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)
conn.Open dbpath
%>
<?xml version="1.0" encoding="gb2312"?><rss version="2.0">'这里是xml的版本和语言声明
<channel>
'以下相当于html的meta部分,包括标题.连接.语言.版权信息以及logo图标等
<title>简单的快乐</title>
<link>http://www.tsingfeng.com&l...
<Description>简单的快乐</Description>
<language>zh-cn</language>
<copyright>Copyright 2006 mumu</copyright>
<webMaster>kissmumu@126.com</webMaster>
<image>
<title>简单的快乐</title>
<url>http://www.tsingfeng.com/l...
<link>http://www.tsingfeng.com/&...'s weblog</description></image>
'以下是连接数据库数据表部分,top 15代表最新的15条,movie是数据表
<%
SQL="select top 15 * from movie order by id desc"
set rs=conn.execute(SQL)
if rs.Eof or rs.Bof then
response.write "<item></item>"
end if
while not rs.Eof
Title=rs("Title")'这里定义Title是标题,("Title")为字段名称
id=rs("id")'这里定义id是连接id ,("id")为字段名称
Time=rs("Time")'这里定义Time是时间 ,("Time")为字段名称
Content=replace(replace(left(rs("Content"),200),"<","<"),">",">")'这里的Content是内容的字段名称
'以下是rss输出
response.Write "<item>"
Response.write "<title>"&Title&"</title>" '这里是输出标题
response.write "<link>http://www.tsingfeng.com/w..."&id&"</link>" '这里是输出链接,注意要用网址
response.write "<author>mumu</author>" '这里是输出作者,如果有字段可以调用字段
response.write "<PubDate>"&Time&"</PubDate>" '这里是时间
response.write "<description><![CDATA["&Content&"]]></description>"'这里是输出简介,因为可能有代码.括起来,否则预览时会提示错误。
response.write "</item>"
rs.MoveNext
wend
set rs=nothing
conn.Close
set conn = nothing
%>
</channel></rss>

ASP获取客户端MAC地址

本程序属于一种特别的方法。使用范围比较有限,而且有一定的危险性。
借鉴了asp后门里的一些方法。下面是程序代码。

代码:
<%
dim remoteaddr
if Request.ServerVariables("HTTP_X_FORWARDED_FOR")=empty then
remoteaddr=Request.ServerVariables("REMOTE_ADDR")
else
remoteaddr=Request.ServerVariables("HTTP_X_FORWARDED_FOR")
end if

Response.Write(GetMac(remoteaddr))
''用于读取某IP的网卡MAC地址
''本程序通过调用arp命令通过查询本机arp表读取特定IP的MAC地址
''使用本程序需注意以下事项:
'' 本程序需要“WSCRIPT.SHELL”和“Scripting.FileSystemObject”两个组件,请确保您的服务器可以正常使用这两个组件
'' 本程序需要调用cmd.exe程序,请确保IIS来宾帐号对程序有访问权限。
'' 本程序需要临时文件保存结果,请确保IIS来宾帐号对临时目录有写权限。
''
function GetMac(IP)
On Error Resume Next
Dim oScript
Dim oFileSys, oFile
Dim All, szTempFile,ipc,phyc,typec
Dim TempPath
Set oScript = Server.CreateObject("WSCRIPT.SHELL")
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
TempPath="d:\temp\" ''临时目录
szTempFile = TempPath & oFileSys.GetTempName() '' 获取临时文件名
Call oScript.Run ("cmd.exe /c ping -n 2 " & IP, 0, True) ''保证arp表中有此IP
Call oScript.Run ("cmd.exe /c arp -a " & IP & " > " & szTempFile, 0, True)
Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0)
All=oFile.ReadAll()
oFile.Close
If (IsObject(oFile)) Then
Call oFileSys.DeleteFile(szTempFile, True)
End If
arr = Split(All, vbCrLf)
If UBound(arr) = 4 Then
ipc =InStr(1, arr(2), "Internet Address")
phyc = InStr(1, arr(2), "Physical Address")
typec = InStr(1, arr(2), "Type")
If typec > phyc And phyc > ipc And ipc > 0 Then
GetMac=Ucase(Trim(CStr(Mid(arr(3), phyc, typec - phyc))))
End If
End If
End function
%>