吴伟贤のBlog

Feed Rss

ASP日期函数

04.07.2008, ASP日期函数已关闭评论, asp, by .

<%=year(now)%>年<%=month(now)%>月<%=day(now)%>日 <%=weekdayname(weekday(now))%>
显示:
今日是: 2003年10月31日 星期五

VBScript有许多函数,使你可以得到各种格式的日期和时间。你已经用过了这些函数中的一个。你可以用函数NOW返回当前的日期和时间:

At the tone,the time will bi: <%=NOW%>

你应该注意,返回的日期和时间是你的Web服务器的系统时钟的日期和时间。如果身处纽约的某个人在看你的网页,他看到的日期和时间与她当地的日期和时间也许是不一至的。

函数NOW同时返回日期和时间。如果你只想返回当前日期,你可以使用函数DATE。如果你只想返回当前时间,你可以使用函数TIME。例如:

The date is :<%=DATE%>

The time is :<%=TIME%>

操作日期

使用函数MONTH(),DAY(),WEEKDAY(),和YEAR(),你可以把一个日期分割成更小的部分。所有这些函数都以一个日期表达式作为参数,并返回一个数字。这里有一个如何使用这些函数的例子:

The Month is :<%=MONTH(DATE)%>

<BR>

The Day is : <%=DAY(DATE)%>

<BR>

The weekday is :<%=WEEKDAY(DATE)%>

<BR>

The year is :<%=YEAR(DATE)%>

假设当前日期是1997年8月9日,星期三。如果你把上面的例子包含在一个ASP网页中,在浏览器中将显示如下的文字:

The Month is : 7

The Day is : 9

The weekday is : 4

The year is : 1997

注意函数weekday()假定一个星期的第一天是星期日。如果你想把星期一作为一周的第一天,你可以使用如下的语句:

The weekday is :<%=weekday(DATE,vbWednesday)%>

你可以把任何一天作为一周的第一天。要指定一周的第一天是星期几,只要用vbSunday,vbMonday,vbTusday,vbWednesday,vbThurday,vbFriday或vbSaturday代替函数WEEKDAY()的第二个参数即可。

你不单可以用函数DATE作为这些函数的参数。你也可以提供一个日期字符串或者一个日期常数作为参数,如下例所示:

The weekday is :<%=WEEKDAY(#12/25/2000#)%>

The weekday is :<%=WEEKDAY(“12-25-2000”)%>

这两个函数都返回2000年圣诞节这一天是星期几。(这也许使你不习惯:返回值是2,代表星期一。)表达式#12/25/2000#是一个日期常数,日期常数总是括在字符’#’中。表达式”12-25-2000”是一个日期字符串。用这两种方法为函数提供一个日期都是可行的。

要以更加易读的形式返回月份和星期几,你可以使用函数WEEKDAYNAME()或MONTHNAME()。这两个函数返回的是字符串。这里有一个使用这两个函数的例子:

The month is :<%=MONTHNAME(MONTH(DATE))%>

The weekday is:<%=WEEKDAYNAME(WEEKDAY(DATE))%>

假设当前日期是八月,星期三。在这种情况下,第一个函数将返回字符串July,第二个函数返回字符串Wednesday。你可以把1到12之间的任何整数作为函数MONTHNAME()的参数,你可以把1到7之间的任何整数作为函数WEEKDAYNAME()的参数。

在缺省情况下,这两个函数不会缩写返回的字符串。函数MONTHNAME()返回的是July而不是Jul,函数WEEKDAYNAME()返回的是Wednesday而不是Wed。然而,通过指定第二个参数为TRUE,你可以强制这两个函数返回缩写的字符串。(TRUE表示要缩写,FALSE表示不缩写。)如下例所示:

The month is: <%=MONTHNAME(MONTH(DATE),TRUE)%>

The weekday is: <%=WEEKDAYNAME(WEEKDAY(DATE),TRUE)%>

操作时间

你也可以把时间分割成更小的部分。通过函数HOUR(),MINUTE(),和SECOND(),你可以返回时间的不同部分。下面是使用这些函数的一些例子以及可能的返回值:

The hour is:<%=HOUR(TIME)%>

The hour is:21

The minute is:<%=MINUTE(TIME)%>

The minute is:39

The second is:<%=SECOND(TIME)%>

The second is:34

函数HOUR()返回一个0到23之间的整数(0点是午夜后的一个小时)。函数MINUTE()返回一个0到59之间的整数。函数SECOND()也返回一个0到59之间的整数。

你不单可以用函数TIME作为这些函数的参数,你还可以提供一个时间常数或时间字符串作为参数。下面的两个例子都从时间中抽取分钟数34:

The minute is:<%=MINUTE(#12:34:19#%>

The minute is:34

The minute is:<%=MINUTE(“12:34:23”)%>

The minute is:34

比较日期和时间

VBScript有两个用于比较日期和时间的函数。你可以用函数DATEADD()对日期和时间作加法,用函数DATEDIFF()计算两个日期或时间的间隔。下面是使用函数DATEADD()的一些例子:

Your registration will exprie on <%=DATEADD(“ww”,6,DATE)%>

Exactly fifteen seconds from now,at<%=DATEADD(“s”,15,TIME)%>your computer

will melt.

第一个例子返回比当前日期晚六个星期的日期,第二个例子返回15秒钟后的时间中的秒数。

函数DATEADD()有三个参数:

第一个参数指定一个时间间隔。(见表8.2)

第二个参数时间间隔的倍数因子。

最后,第三个参数是一个日期或时间的变量或常量。

表8.2 日期和时间间隔

间隔 描述

yyyy 年

q 季度

m 月

y 天

d 天

w 天

ww 星期

h 小时

m 分钟

s 秒

你可以用函数DATEDIFF确定两个日期或时间之间的间隔。下面的例子演示了如何使用这个函数:

You have been a member for <%=DATEDIFF(“d”,”1/1/1988”,DATE)%> days.

There are exactly <%=DATEDIFF(“s”,DATE,”1/1/2000”)%> seconds remaining until

the year 2000.

第一个例子中的DATEDIFF()函数返回1/1/1988与当前日期之间的天数。第二个例子中的DATEDIFF()返回当前日期到2000年之间的秒数。

函数DATEDIFF()有三个参数:

第一个参数是一个日期或时间间隔(参见表8.2).

另两个参数是两个日期。为了避免出现负数,第一个日期参数应该比第二个早。(如果该函数返回一个负数,你应该知道第一个日期比第二个日期晚。)

格式化日期和时间

你可以规定一个日期或时间的显示格式。在缺省情况下,当你通过函数DATE显示一个日期时,它看起来是这样的:

7/9/97

但是,你可以用函数FORMATDATETIME()显示一个基于你计算机的区域设置的日期。你可以把一个日期显示为短日期格式或长日期格式。

注意

从控制面板中选择区域设置图标,可以为你的计算机进行区域设置。你可以通过区域设置来指定日期和时间的长格式或短格式。

下面的例子演示了如何控制长日期格式和短日期格式的显示:

Short Date:<%=FORMATDATETIME(DATE,vbShortDate)%>

Long Date:<%=FORMATDATETIME(DATE,vbLongDate)%>

当根据英国(美国)区域设置显示日期时,日期显示为如下的格式:

Short Date:7/9/97

Long Date:Wednesday,July 09,1997

注意短日期格式的显示与不做任何格式化时完

常用ASP函数

04.07.2008, 常用ASP函数已关闭评论, asp, by .

Array() 
 FUNCTION: 返回一个数组 
 SYNTAX: Array(list) 
 ARGUMENTS: 字符,数字均可 
 EXAMPLE: <%
Dim myArray()
For i = 1 to 7
  Redim Preserve myArray(i)
  myArray(i) = WeekdayName(i)
Next
%> 
 RESULT: 建立了一个包含7个元素的数组myArray
myArray("Sunday","Monday", … … "Saturday") 
 
CInt() 
 FUNCTION: 将一个表达式转化为数字类型 
 SYNTAX: CInt(expression) 
 ARGUMENTS: 任何有效的字符均可 
 EXAMPLE: <%
f = "234"
response.write cINT(f) + 2
%> 
 RESULT: 236
转化字符"234"为数字"234",如果字符串为空,则返回0值  
 
CreateObject() 
 FUNCTION: 建立和返回一个已注册的ACTIVEX组件的实例。 
 SYNTAX: CreateObject(objName) 
 ARGUMENTS: objName 是任何一个有效、已注册的ACTIVEX组件的名字. 
 EXAMPLE: <%
Set con = Server.CreateObject("ADODB.Connection")
%> 
 RESULT: 
 
CStr() 
 FUNCTION: 转化一个表达式为字符串. 
 SYNTAX: CStr(expression) 
 ARGUMENTS: expression 是任何有效的表达式。 
 EXAMPLE: <%
s = 3 + 2
response.write "The result is: " & cStr(s)
%> 
 RESULT: 转化数字“5”为字符“5”。 
 
Date() 
 FUNCTION: 返回当前系统日期. 
 SYNTAX: Date() 
 ARGUMENTS: None. 
 EXAMPLE: <%=Date%> 
 RESULT: 8/4/99 
 
DateAdd() 
 FUNCTION: 返回一个被改变了的日期。 
 SYNTAX: DateAdd(timeinterval,number,date) 
 ARGUMENTS: timeinterval is the time interval to add; number is amount of 
time intervals to add; and date is the starting date. 
 EXAMPLE: <%
currentDate = #8/4/99#
newDate = DateAdd("m",3,currentDate)
response.write newDate
%> 

<%
currentDate = #12:34:45 PM#
newDate = DateAdd("h",3,currentDate)
response.write newDate
%> 
 RESULT: 11/4/99
3:34:45 PM

"m" = "month";
"d" = "day";

If currentDate is in time format then,
"h" = "hour"; 
"s" = "second"; 
 
DateDiff() 
 FUNCTION: 返回两个日期之间的差值 。 
 SYNTAX: DateDiff(timeinterval,date1,date2 [, firstdayofweek ][, 
firstweekofyear]]) 
 ARGUMENTS: timeinterval 表示相隔时间的类型,如“M“表示“月”。 
 EXAMPLE: <%
fromDate = #8/4/99#
toDate = #1/1/2000#
response.write "There are " & _
  DateDiff("d",fromDate,toDate) & _
  " days to millenium from 8/4/99."
%> 
 RESULT: 从8/4/99 到2000年还有 150 天. 
 
Day() 
 FUNCTION: 返回一个月的第几日 . 
 SYNTAX: Day(date) 
 ARGUMENTS: date 是任何有效的日期。 
 EXAMPLE: <%=Day(#8/4/99#)%> 
 RESULT: 4 
 
FormatCurrency() 
 FUNCTION: 返回表达式,此表达式已被格式化为货币值  
 SYNTAX: FormatCurrency(Expression [, Digit ][, LeadingDigit ][, Paren ][, 
GroupDigit]]]]) 
 ARGUMENTS: Digit 指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是
计算机的区域设置; LeadingDigit 三态常数,指示是否显示小数值小数点前面的
零。 
 EXAMPLE: <%=FormatCurrency(34.3456)%> 
 RESULT: $34.35 
 
FormatDateTime() 
 FUNCTION: 返回表达式,此表达式已被格式化为日期或时间 
 SYNTAX: FormatDateTime(Date, [, NamedFormat]) 
 ARGUMENTS: NamedFormat 指示所使用的日期/时间格式的数值,如果省略,则使用 
vbGeneralDate. 
 EXAMPLE: <%=FormatDateTime("08/4/99", vbLongDate)%> 
 RESULT: Wednesday, August 04, 1999 
 
FormatNumber() 
 FUNCTION: 返回表达式,此表达式已被格式化为数值. 
 SYNTAX: FormatNumber(Expression [, Digit ][, LeadingDigit ][, Paren ][, 
GroupDigit]]]]) 
 ARGUMENTS: Digit 指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是
计算机的区域设置。; LeadingDigit i指示小数点右侧显示位数的数值。默认值为 –
1,指示使用的是计算机的区域设置。; Paren 指示小数点右侧显示位数的数值。默认
值为 -1,指示使用的是计算机的区域设置。; GroupDigit i指示小数点右侧显示位数
的数值。默认值为 -1,指示使用的是计算机的区域设置。. 
 EXAMPLE: <%=FormatNumber(45.324567, 3)%> 
 RESULT: 45.325 
 
FormatPercent() 
 FUNCTION: 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 
100 )。 (%) 
 SYNTAX: FormatPercent(Expression [, Digit ][, LeadingDigit ][, Paren ][, 
GroupDigit]]]]) 
 ARGUMENTS: 同上. 
 EXAMPLE: <%=FormatPercent(0.45267, 3)%> 
 RESULT: 45.267% 
 
Hour() 
 FUNCTION: 以24时返回小时数. 
 SYNTAX: Hour(time) 
 ARGUMENTS: 
 EXAMPLE: <%=Hour(#4:45:34 PM#)%> 
 RESULT: 16
(Hour has been converted to 24-hour system) 
 
Instr() 
 FUNCTION: 返回字符或字符串在另一个字符串中第一次出现的位置. 
 SYNTAX: Instr([start, ] strToBeSearched, strSearchFor [, compare]) 
 ARGUMENTS: Start为搜索的起始值,strToBeSearched接受搜索的字符串 
strSearchFor要搜索的字符.compare比较方式(详细见ASP常数) 
 EXAMPLE: <%
strText = "This is a test!!"
pos = Instr(strText, "a")
response.write pos
%> 
 RESULT: 9  InstrRev() 
 FUNCTION: 同上,只是从字符串的最后一个搜索起 
 SYNTAX: InstrRev([start, ] strToBeSearched, strSearchFor [, compare]) 
 ARGUMENTS: 同上. 
 EXAMPLE: <%
strText = "This is a test!!"
pos = InstrRev(strText, "s")
response.write pos
%> 
 RESULT: 13

 
Int() 
 FUNCTION: 返回数值类型,不四舍五入,注意取值是不大于它的整数。 
 SYNTAX: Int(number) 
 ARGUMENTS: 
 EXAMPLE: <%=INT(32.89)%>  <%=int(-3.33)%>
 RESULT: 32  -4
 
IsArray() 
 FUNCTION: 判断一对象是否为数组,返回布尔值 . 
 SYNTAX: IsArray(name) 
 ARGUMENTS: 
 EXAMPLE: <%
strTest = "Test!"
response.write IsArray(strTest)
%> 
 RESULT: False 
 
IsDate() 
 FUNCTION: 判断一对象是否为日期,返回布尔值 
 SYNTAX: IsDate(expression) 
 ARGUMENTS: expression is any valid expression. 
 EXAMPLE: <%
strTest = "8/4/99"
response.write IsDate(strTest)
%> 
 RESULT: True 
 
IsEmpty() 
 FUNCTION: 判断一对象是否初始化,

多个域名绑定一个空间互不影响

04.07.2008, 多个域名绑定一个空间互不影响已关闭评论, windows, by .

 

第一步:创建转向控制页面
  创建网站默认的首页文件(通常为"index.asp"或"default.asp")如下:

<%
‘取得HTTP输入的值并付值到HTOST中
host=lcase(request.servervariables("HTTP_HOST"))
‘开始条件跳转
Select CASE host
‘ 如果HOST的值是www.abc0.com就选择事件case"www.abc0.com"的命令
CASE "www.abc0.com"
‘ Below is the redirect command
response.redirect "index_abc0.asp"
CASE "www.abc1.com"
‘ Below is the redirect command
response.redirect "index_abc1.asp"
CASE "www.abc2.com"
‘ Below is the redirect command
response.redirect "index_abc2.asp"
‘ 继续添加…
CASE "www.abcn.com"
‘ Below is the redirect command
response.redirect "index_abcn.asp"

‘We use CASE ELSE to fix any other requests
CASE ELSE
response.redirect "default.asp"
END Select
%>

  第二步:创建相应的被转向文件
  创建"index_abc0.asp"?"index_abcN.asp",作为各个网站的首页。

  第三步:将多个域名的IP地址解析到同一个网站空间
  例如:将"www.abc1.com"?"www.abcN.com"的IP地址全部解析到"www.abc1.com"的WEB空间上。

  第四步:设置网站的WEB服务
  设置WEB服务的别名为:"www.abc1.com www.abc2.com www.abc3.com …… www.abcN.com"(注意:别名之前用一个空格分开)

  现在你就可以使用象"http://www.abc1.com"、……、"http://www.abcN.com"这类顶级的网址来访问同一个WEB空间,而得到各不相同的首页面了。

着Internet的发展,Web技术日新月异。继通用网关接口(CGI)之后,“ASP”(Active Server Pages)作为一种典型的服务器端网页设计技术,被广泛地应用在网上银行、电子商务、搜索引擎等各种互联网应用中。同时Access数据库作为微软推出的以标准JET为引擎的桌面型数据库系统,由于具有操作简单、界面友好等特点,具有较大的用户群体。因此ASP+Access成为许多中小型网上应用系统的首选方案。但ASP+Access解决方案在为我们带来便捷的同时,也带来了不容忽视的安全问题。

ASP+Access的安全隐患ASP+Access解决方案的主要安全隐患来自Access数据库的安全性,其次在于ASP网页设计过程中的安全漏洞。

1.Access数据库的存储隐患

在ASP+Access应用系统中,如果获得或者猜到Access数据库的存储路径和数据库名,则该数据库就可以被下载到本地。例如:对于网上书店的Access数据库,人们一般命名为book.mdb、store.mdb等,而存储的路径一般为“URL/database”或干脆放在根目录(“URL/”)下。这样,只要在浏览器地址栏中敲入地址:“URL/database/store.mdb”,就可以轻易地把store.mdb下载到本地的机器中。

2.Access数据库的解密隐患

由于Access数据库的加密机制非常简单,所以即使数据库设置了密码,解密也很容易。该数据库系统通过将用户输入的密码与某一固定密钥进行异或来形成一个加密串,并将其存储在*.mdb文件中从地址“&H42”开始的区域内。由于异或操作的特点是“经过两次异或就恢复原值”,因此,用这一密钥与*.mdb文件中的加密串进行第二次异或操作,就可以轻松地得到Access数据库的密码。基于这种原理,可以很容易地编制出解密程序。

由此可见,无论是否设置了数据库密码,只要数据库被下载,其信息就没有任何安全性可言了。

3.源代码的安全隐患

由于ASP程序采用的是非编译性语言,这大大降低了程序源代码的安全性。任何人只要进入站点,就可以获得源代码,从而造成ASP应用程序源代码的泄露。

4.程序设计中的安全隐患

ASP代码利用表单(form)实现与用户交互的功能,而相应的内容会反映在浏览器的地址栏中,如果不采用适当的安全措施,只要记下这些内容,就可以绕过验证直接进入某一页面。例如在浏览器中敲入“……page.asp?x=1”,即可不经过表单页面直接进入满足“x=1”条件的页面。因此,在设计验证或注册页面时,必须采取特殊措施来避免此类问题的发生。

提高数据库的安全性由于Access数据库加密机制过于简单,因此,如何有效地防止Access数据库被下载,就成了提高ASP+Access解决方案安全性的重中之重。

1.非常规命名法

防止数据库被找到的简便方法是为Access数据库文件起一个复杂的非常规名字,并把它存放在多层目录下。例如,对于网上书店的数据库文件,不要简单地命名为“book.mdb”或“store.mdb”,而是要起个非常规的名字,例如:

faq19jhsvzbal.mdb,再把它放在如./akkjj16t/kjhgb661/acd/avccx55 之类的深层目录下。这样,对于一些通过猜的方式得到Access数据库文件名的非法访问方法起到了有效的阻止作用。

2.使用ODBC数据源

在ASP程序设计中,应尽量使用ODBC数据源,不要把数据库名直接写在程序中,否则,数据库名将随ASP源代码的失密而一同失密。例如: DBPath = Server.MapPath(“./akkjj16t/
kjhgb661/acd/avccx55/faq19jhsvzbal.mdb ”)
conn.Open “driver={Microsoft Access Driver (*.mdb)};dbq=” & DBPath 可见,即使数据库名字起得再怪异,隐藏的目录再深,ASP源代码失密后,数据库也很容易被下载下来。如果使用ODBC数据源,就不会存在这样的问题了:

conn.open “ODBC-DSN名”

对ASP页面进行加密为有效地防止ASP源代码泄露,可以对ASP页面进行加密。一般有两种方法对ASP页面进行加密。一种是使用组件技术将编程逻辑封装入DLL之中;另一种是使用微软的Script Encoder对ASP页面进行加密。笔者认为,使用组件技术存在的主要问题是每段代码均需组件化,操作比较烦琐,工作量较大;而使用Script Encoder对ASP页面进行加密,操作简单、收效良好。

Script Encoder方法具有许多优点:

1.HTML仍具有很好的可编辑性。Script Encoder只加密在HTML页面中嵌入的ASP代码,其他部分仍保持不变,这就使得我们仍然可以使用FrontPage或Dreamweaver等常用网页编辑工具对HTML部分进行修改、完善,只是不能对ASP加密部分进行修改,否则将导致文件失效。

2.操作简单。只要掌握几个命令行参数即可。Script Encoder的运行程序是screnc.exe,其使用方法如下:

screnc [/s] [/f] [/xl] [/l defLanguage ] [/e defExtension] inputfile outputfile

其中的参数含义如下:

s:屏蔽屏幕输出;

f:指定输出文件是否覆盖同名输入文件;

xl:是否在.asp文件的顶部添加@Language指令;

l:defLanguag指定缺省的脚本语言;

e:defExtension 指定待加密文件的扩展名。

3.可以批量加密文件。使用Script Encoder可以对当前目录中的所有的ASP 文件进行加密,并把加密后的文件统一输出到相应的目录中。例如:

screnc *.asp c:\temp

4. Script Encoder是免费软件。该加密软件可以从微软网站下载:

http://msdn.microsoft.com/scripting/vbscript/download/x86/sce10en.exe。下载后,运行安装即可。

利用Session对象进行注册验证

为防止未经注册的用户绕过注册界面直接进入应用系统,可以采用Session对象进行注册验证。Session对象最大的优点是可以把某用户的信息保留下来,让后续的网页读取。例如,要设计如图1所示的注册页面。

设计要求用户注册成功后系统启动hrmis.asp?page=1页面。如果不采用Session对象进行注册验证,则用户在浏览器中敲入“URL/hrmis.asp?page=1”即可绕过注册界面,直接进入系统。利用Session对象可以有效阻止这一情况的发生。相关的程序代码如下:

<% ‘ 读取用户输入的账号和密码
UserID = Request(“UserID”)
Password = Request(“Password”)
‘ 检查UserID 及Password 是否正确(实际程序可能会比较复杂)
If UserID <> “hrmis” or Password <>
“password” Then
Response.Write “账号错误!”
Response.End
End If
‘将Session 对象设置为通过验证状态
Session(“Passed”) = True
%>
进入应用程序后,首先进行验证:

<% ‘如果未通过验证,返回Login状态
If Not Session(“Passed”) Then
Response.Redirect “login.htm”
End If
%>

一个简单的域名自动转向源代码

04.07.2008, 一个简单的域名自动转向源代码已关闭评论, div+css & html, by .

<%
if Request.ServerVariables("SERVER_NAME")="www.tajh.net" then
response.redirect "index1.htm"
else
response.redirect "index2.htm"
end if
%>
此ASP代码功能是当两个域名指向同一个主机时,可以自动重定向到相应的域名网站

ASP编程中20个非常有用的例子

04.07.2008, ASP编程中20个非常有用的例子已关闭评论, asp, by .

 

1.如何用Asp判断你的网站的虚拟物理路径
答:使用Mappath方法
< p align="center" >< font size="4" face="Arial" >< b >
The Physical path to this virtual website is:
< /b >< /font >
< font color="#FF0000" size="6" face="Arial" >
< %= Server.MapPath("\")% >
< /font >< /p >
2.我如何知道使用者所用的浏览器?
答:使用the Request object方法
strBrowser=Request.ServerVariables("HTTP_USER_AGENT")
If Instr(strBrowser,"MSIE") < > 0 Then
  Response.redirect("ForMSIEOnly.htm")
Else
  Response.redirect("ForAll.htm")
End If
 

3.如何计算每天的平均反复访问人数
答:解决方法
< % startdate=DateDiff("d",Now,"01/01/1990")
if strdate< 0 then startdate=startdate*-1
avgvpd=Int((usercnt)/startdate) % >
显示结果
< % response.write(avgvpd) % >
that is it.this page have been viewed since November 10,1998

4.如何显示随机图象
< % dim p,ppic,dpic
ppic=12
randomize
p=Int((ppic*rnd)+1)
dpic="graphix/randompics/"&p&".gif"
% >
显示
< img src="< %=dpic% >" >

5.如何回到先前的页面
答:< a href="< %=request.serverVariables("Http_REFERER")% >" >preivous page< /a >
或用图片如:< img src="arrowback.gif" alt="< %=request.serverVariables("HTTP_REFERER")% >" >

6.如何确定对方的IP地址
答:< %=Request.serverVariables("REMOTE_ADDR)% >

7.如何链结到一副图片上
答:< % @Languages=vbs cript % >
< % response.expires=0
strimagename="graphix/errors/erroriamge.gif"
response.redirect(strimagename)
% >

8.强迫输入密码对话框
答:把这句话放载页面的开头
< % response.status="401 not Authorized"
response.end
% >

9.如何传递变量从一页到另一页
答:用 HIDDEN 类型来传递变量
< % form method="post" action="mynextpage.asp" >
< % for each item in request.form % >
< input namee="< %=item% >" type="HIDDEN"
value="< %=server.HTMLEncode(Request.form(item)) % >" >
< % next % >
< /form >

10.为何我在 asp 程序内使用 msgbox,程序出错说没有权限
答:由于 asp 是服务器运行的,如果可以在服务器显示一个对话框,那么你只好等有人按了确定之后,你的程序才能继续执行,而一般服务器不会有人守着,所以微软不得不禁止这个函数,并胡乱告诉你 (:) 呵呵) 没有权限。但是ASP和客户端脚本结合倒可以显示一个对话框,as follows:
< % yourVar="测试对话框"% >
< % s cript language=”javas cript” >
alert("< %=yourvar% >")
< /s cript >

11.有没有办法保护自己的源代码,不给人看到
答:可以去下载一个微软的Windows s cript Encoder,它可以对asp的脚本和客户端javas cript/vbs cript脚本进行加密。。。不过客户端加密后,只有ie5才能执行,服务器端脚本加密后,只有服务器上安装有s cript engine 5(装一个ie5就有了)才能执行。

12.怎样才能将 query string 从一个 asp 文件传送到另一个?
答:前者文件加入下句: Response.Redirect("second.asp?" & Request.ServerVariables("QUERY_STRING"))

13.global.asa文件总是不起作用?
答:只有web目录设置为web application, global.asa才有效,并且一个web application的根目录下 global.asa才有效。IIS4可以使用Internet Service Manager设置application setting 怎样才能使得htm文件如同asp文件一样可以执行脚本代码?

14.怎样才能使得htm文件如同asp文件一样可以执行脚本代码?
答:Internet Sevices Manager – > 选择default web site – >右鼠键- >菜单属性-〉主目录- > 应用程序设置(Application Setting)- > 点击按钮 "配置"- > app mapping – >点击按钮"Add" – > executable browse选择 \WINNT\SYSTEM32\INETSRV\ASP.DLL EXTENSION 输入 htm method exclusions 输入PUT.Delete 全部确定即可。但是值得注意的是这样对htm也要由asp.dll处理,效率将降低。

15.如何注册组件
答:有两种方法。
第一种方法:手工注册 DLL 这种方法从IIs 3.0一直使用到IIs 4.0和其它的Web Server。它需要你在命令行方式下来执行,进入到包含有DLL的目录,并输入:regsvr32 component_name.dll 例如 c:\temp\regsvr32 AspEmail.dll 它会把dll的特定信息注册入服务器中的注册表中。然后这个组件就可以在服务器上使用了,但是这个方法有一个缺陷。当使用这种方法注册完毕组件后,该组件必须要相应的设置NT的匿名帐号有权限执行这个dll。特别是一些组件需要读取注册表,所以,这个注册组件的方法仅仅是使用在服务器上没有MTS的情况下,要取消注册这个dll,使用:regsvr32 /u aspobject.dll example c:\temp\regsvr32 /u aneiodbc.dll

第二种方法:使用MTS(Microsoft Transaction Server) MTS是IIS 4新增特色,但是它提供了巨大的改进。MTS允许你指定只有有特权的用户才能够访问组件,大大提高了网站服务器上的安全性设置。在MTS上注册组件的步骤如下:
1) 打开IIS管理控制台。
2) 展开transaction server,右键单击"pkgs installed"然后选择"new package"。
3) 单击"create an empty package"。
4) 给该包命名。
5) 指定administrator帐号或则使用"interactive"(如果服务器经常是使用administrator 登陆的话)。
6) 现在使用右键单击你刚建立的那个包下面展开后的"components"。选择 "new then component"。
7) 选择 "install new component" [b]。
8) 找到你的.dll文件然后选择next到完成。
要删除这个对象,只要选择它的图标,然后选择delete。
附注:特别要注意第二种方法,它是用来调试自己编写组件的最好方法,而不必每次都需要重新启动机器了。

16. ASP与Access数据库连接:
<%@ language=VBs cript%>
<%
dim conn,mdbfile
mdbfile=server.mappath("数据库名称.mdb")
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=数据库密码;dbq="&mdbfile
%>

17. ASP与SQL数据库连接:
<%@ language=VBs cript%>
<%
dim conn
set conn=server.createobject("ADODB.connection")
con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服务器名称或IP地址;UID=sa;PWD=数据库密码;DATABASE=数据库名称
%>

建立记录集对象:

set rs=server.createobject("adodb.recordset")
rs.open SQL语句,conn,3,2

18. SQL常用命令使用方法:

(1) 数据记录筛选:

sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]"

sql="select * from 数据表 where 字段名 like ”%字段值%” order by 字段名 [desc]"

sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]"

sql="select * from 数据表 where
字段名 in (”值1”,”值2”,”值3”)"

sql="select * from 数据表 where 字段名 between 值1 and 值2"

(2) 更新数据记录:

sql="update 数据表 set 字段名=字段值 where 条件表达式"

sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"

(3) 删除数据记录:

sql="delete from 数据表 where 条件表达式"

sql="delete from 数据表" (将数据表所有记录删除)

(4) 添加数据记录:

sql="insert into 数据表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)"

sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表)

(5) 数据记录统计函数:

AVG(字段名) 得出一个表格栏平均值
COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加

引用以上函数的方法:

sql="select sum(字段名) as 别名 from 数据表 where 条件表达式"
set rs=conn.excute(sql)

用 rs("别名") 获取统的计值,其它函数运用同上。

(5) 数据表的建立和删除:

Create TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )

例:Create TABLE tab01(name varchar(50),datetime default now())

Drop TABLE 数据表名称 (永久性删除一个数据表)

19. 记录集对象的方法:

rs.movenext 将记录指针从当前的位置向下移一行
rs.moveprevious 将记录指针从当前的位置向上移一行
rs.movefirst 将记录指针移到数据表第一行
rs.movelast 将记录指针移到数据表最后一行
rs.absoluteposition=N 将记录指针移到数据表第N行
rs.absolutepage=N 将记录指针移到第N页的第一行
rs.pagesize=N 设置每页为N条记录
rs.pagecount 根据 pagesize 的设置返回总页数
rs.recordcount 返回记录总数
rs.bof 返回记录指针是否超出数据表首端,true表示是,false为否
rs.eof 返回记录指针是否超出数据表末端,true表示是,false为否
rs.delete 删除当前记录,但记录指针不会向下移动
rs.addnew 添加记录到数据表末端
rs.update 更新数据表记录

---------------------------------------

20 Recordset对象方法

Open方法

recordset.Open Source,ActiveConnection,CursorType,LockType,Options

Source
Recordset对象可以通过Source属性来连接Command对象。Source参数可以是一个Command对象名称、一段SQL命令、一个指定的数据表名称或是一个Stored Procedure。假如省略这个参数,系统则采用Recordset对象的Source属性。

ActiveConnection
Recordset对象可以通过ActiveConnection属性来连接Connection对象。这里的ActiveConnection可以是一个Connection对象或是一串包含数据库连接信息(ConnectionString)的字符串参数。

CursorType
Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下:
————————————————————–
常数 常数值 说明
————————————————————-
adOpenForwardOnly 0 缺省值,启动一个只能向前移动的游标(Forward Only)。
adOpenKeyset 1 启动一个Keyset类型的游标。
adOpenDynamic 2 启动一个Dynamic类型的游标。
adOpenStatic 3 启动一个Static类型的游标。
————————————————————-
以上几个游标类型将直接影响到Recordset对象所有的属性和方法,以下列表说明他们之间的区别。

————————————————————-
Recordset属性 adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic
————————————————————-
AbsolutePage 不支持 不支持 可读写 可读写
AbsolutePosition 不支持 不支持 可读写 可读写
ActiveConnection 可读写 可读写 可读写 可读写
BOF 只读 只读 只读 只读
Bookmark 不支持 不支持 可读写 可读写
CacheSize 可读写 可读写 可读写 可读写
CursorLocation 可读写 可读写 可读写 可读写
CursorType 可读写 可读写 可读写 可读写
EditMode 只读 只读 只读 只读
EOF 只读 只读 只读 只读
Filter 可读写 可读写 可读写 可读写
LockType 可读写 可读写 可读写 可读写
MarshalOptions 可读写 可读写 可读写 可读写
MaxRecords 可读写 可读写 可读写 可读写
PageCount 不支持 不支持 只读 只读
PageSize 可读写 可读写 可读写 可读写
RecordCount 不支持 不支持 只读 只读
Source 可读写 可读写 可读写 可读写
State 只读 只读 只读 只读
Status 只读 只读 只读 只读
AddNew 支持 支持 支持 支持
CancelBatch 支持 支持 支持 支持
CancelUpdate 支持 支持 支持 支持
Clone 不支持 不支持
Close 支持 支持 支持 支持
Delete 支持 支持 支持 支持
GetRows 支持 支持 支持 支持
Move 不支持 支持 支持 支持
MoveFirst 支持 支持 支持 支持
MoveLast 不支持 支持 支持 支持
MoveNext 支持 支持 支持 支持
MovePrevious 不支持 支持 支持 支持
NextRecordset 支持 支持 支持 支持
Open 支持 支持 支持 支持
Requery 支持 支持 支持 支持
Resync 不支持 不支持 支持 支持
Supports 支持 支持 支持 支持
Update 支持 支持 支持 支持
UpdateBatch 支持 支持 支持 支持
————————————————————–
其中NextRecordset方法并不适用于Microsoft Access数据库。

LockType
Recordset对象Open方法的LockType参数表示要采用的Lock类型,如果忽略这个参数,那么系统会以Recordset对象的LockType属性为预设值。LockType参数包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下:

————————————————————-
常数 常数值 说明
————————————————————–
adLockReadOnly 1 缺省值,Recordset对象以只读方式启动,无法运行AddNew、Update及Delete等方法
adLockPrssimistic 2 当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性。
adLockOptimistic 3 当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。
adLockBatchOptimistic 4 当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、
删、改的操作

墓志铭打算写点啥

04.03.2008, 墓志铭打算写点啥已关闭评论, 杂七杂八, by .

清明节(4月4日)快到了, "如果你死后,墓志铭打算写点啥?"以下是一些回复:
1.一居室,求合租,面议。
2.小事招魂,大事挖坟。
3.我觉得我还可以抢救一下!
4.广告位招租
5.提供鞭尸服务,一次100!
6.基因重组中,请稍候二十年
7.单挑冥王哈迪斯中,征求组队!
8.牧师,帮我复活一下下,谢谢,坐标××.××。
9.当你看清这行字的时候:朋友,你踩到我了。
10.老子终于不用怕鬼了!
11.给爷笑一个,要不爷给你笑一个?
12.神农氏的墓志铭:我靠!这草有毒!
13.摸骨算命
14.陪聊,提供夜间上门服务。
15.还看,你丫也会有这一天的
16.我從前是個胖子,現在和所有躺著的人一樣有骨感。
17.終於可以失掉身體80的水分,可以變瘦了!
18.强力推荐这个给我挖坑的,电话:xxxxxxxxx
19.曾经很黄很暴力,现在很黑很安静
20.谢谢来访,改日登门回拜.呵呵
21.来客请便,无人倒茶,站累躺下一起聊聊?
22。终于解决住房问题了

推荐五个好用的网页配色器

04.01.2008, 推荐五个好用的网页配色器已关闭评论, div+css & html, by .

网页设计中,有一个最基本的设计问题,就是关于网页整体配色方案的选择。以前要做一个网页的时候,技术上,对于网页设计的技术人员来说,不是很大的问题;但是关于网页整体的美工,却是一个大问题。尤其是只有计算机专业知识而没有太多艺术细胞的人,要设计出好看的网页是一件比较困难的事情。

像我就是技术类。对于界面来说。唉。不说啦

推荐几个网页配色器,能很好的解决技术类人员设计网页遇到配色方案而头疼的问题。

ColorMatch 5K
http://www.colormatch.dk/

ColorMatch 10K
http://www.nickherman.com/colormatch/

technicolor
http://www.themaninblue.com/experiment/Technicolor/

ColorMixer
http://colormixers.com/mixers/cmr/

Color Schema Generator 2
http://wellstyled.com/tools/colorscheme2/index-en.html

这些配色器都适合网页的配色选用,对网页设计的新手来说,是不错的工具哦。他们还提供一些配色的源代码和CSS样式表。

搞笑

02.26.2008, 搞笑已关闭评论, 杂七杂八, by .

1.上大学的时候去衡山玩,当时爬山爬了一半,累的正想歇会的时候看到路边有个买纪念品的欧巴桑,上去开口就问:老婆……..

2.偶有次开车,有个美女同事搭车,一坐我旁边,偶特紧张滴说:把安全套带上!美女以后再不理偶了。郁闷ING

3.以前别人来我阿姨家作客,刚进门的。刚好我阿姨要去上厕所。她连忙招呼客人说:“你们坐哈坐哈,我给你们去倒点尿喝!”,,本来是说倒点茶喝的,,。

4.在实习的时候,对一个老师说:陈老师你是不是姓陈?

5.偶们大学去工厂金工实习的时候,工人师傅分配机床时说:为了安全起见,我门尽量保证一个男同学和一个女同学一张床。当时所有男生爆笑,女生脸红。实习期间,几乎所有的用车床的活都是我帮和偶同床,,寒,,的女生做的,最后考虑到她什么都不会作的话师傅检查起来不太好,偶劝她练练手,谁知道她说:我已经习惯让你干了。当时偶爆寒不止。

6.一个朋友去饺子馆,问“水饺(睡觉,,一碗,,晚,,多少钱?”只听服务员小姐“呸!”了一声,说道:“不要脸!”~

7.上自习的时候,大家都在看复习,GG对MM 说:“我刚背了单词,帮忙默写一下。”MM 不想默,GG就求她,你,,摸,,默我吧,,,摸,,我吧!结果MM 实在忍受不了,大喊,老师你看我不想,,摸,,默他,他非要我,,摸,,默~!

8.有一天去同学家吃饭,喝了点酒,她爸爸忽然进来了,本来是想喊叔叔的,结果说错了,说:“爸,来座!”~寒!大帮同学笑得要死

9.我同事跟人争执,急了张口来了句“你以为我吃饭长大的啊?”我一直纳闷他到底吃什么长大的。

10.小学时一个很讨厌的男生找我借橡皮,我不借,他就死缠烂打,之后我用尽全身的力气狂吼了一句“我不嫁,,借,,给你”当时同学们立马安静下来了,。

11.上机课,一位同学机子有问题,于是大喊“老板,换机子!”全班木然

12.我唾你一脸狗屎!

13.偶对mm开玩笑说:“别说你认识偶,影响我声誉!”mm说:“你有生育?你能生育?”..

14.偶是男的,在广东生病了嗓子说不出话…………去看医生,医生告诉我:yin dao发炎狂晕中…………仔细一看,诊断书上写者   咽道发炎 ………………无语…………….

15.买电脑,老板开价4150,我杀价:老板410么好赖~~~~老板狂晕!

16.上次早上上班,发现自行车轮胎没气了,于是想叫妈妈帮忙推到门外打一下气。结果我说:把我的轮胎推出去。

17.一个女孩失恋了,我劝她:“两条腿的蛤蟆不好找,三条腿的男的有的是!”

18.小学时候有劳动课,一般都是除草,所以到了前一天放学时候老师就得提醒我们带锄头,第2天上劳动课了准备出发,老师便于管理就问了一句:有多少人带了啊?带了手的把锄头举起来!”

19.开导一失恋。同学你知道什么叫失恋么?

20.初中语文课上,有人背诵毛泽东的诗:一代风骚,……

21.某老师, 今天,我们来上,杨修之屎

22.一次ktv,点歌,一mm大声喊:给我点一首周截棍的“双杰伦”……

23.大二有一阵儿特别喜欢和同宿舍的一个MM一起骑车出去逛街,收拾打扮漂亮后一起进了电梯,突然想起车好像没气儿了,就冲她说了句:先陪我去打胎啊?~天…….

24.公交车上人比较多,一猛男怒吼:妈个脚的踩我B上了

25.同学的高中同学,,一男生,,走进面馆很酷把头发一甩:“老板,2两葱不要米线!”完了还加一句:“多下点米线啊!”老板:“。你到底是要米线还是要葱?”

26.一次文艺晚会,主持人上台报幕:下面请欣赏:新疆歌舞,掀起你的头盖骨!毛骨悚然!

27.上高中时,课堂纪律混乱,老师一怒之下揪起XXX,说:XXX,你给我站墙上去!~全班暴寒!

28.我:那是我们物理老师。
  同学:教什么的阿?
  我:化学。

29.在网吧,一同学突然举手,大喊:“老师!”

30.我们宿舍一个人喝多了要去尿尿然后带出一句冷话:尿喝多了,酒就特别多.

31.买橘子,老板:一块五一斤。我:太贵了,五块钱三斤吧。老板:不行不行。

32.朋友问我电脑配置,我说显示器是彩屏的。,,本来是想说液晶的,,

33.听过一MM在食堂喊“给我一碗viper~!”

34.有一次寝室里同学的老妈打电话过来
  我习惯说“他不在”,但是这一次我想说的的是“已经出去了”
  结果说出来是:“他已经…不在了”

35.和我姐姐去李宁买鞋,我姐一开口:“小姐,这鞋多少钱一斤?”

36.高中时每人发个胸牌。一次来检查前,班主任跑到教室大声喊,大家快把胸罩戴起来,来查拉。 全场鸦雀无声。

37.老师留下作业,我不会做就抄别人的,然后去办公室交作业,看见老师说:“我抄完了!”

38.偶高中,放学和偶MM一起回家,校门口看到一卖烧烤的,MM说要吃牛杂,因为烤架前人比较多,偶怕老板听不见,于是偶大声喊道:“老板,5串牛鞭”然后一片寂静,三秒钟后所有人一起暴笑。偶巨尴尬。最尴尬的是MM接着问偶“牛鞭是什么”偶只好非常非常小声地回答MM:“牛鞭就是牛尾巴啊”。

39.早上和同学去吃早餐 其中一个只吃包子馅,另外一个只吃皮。我们正在说他们两个浪费的时候吃馅的同学来了一句“行了 以后你吃我的包皮好了”在场的所有喝粥 的全部喷出来了。

40.大学军训时,教官大吼一声说:用你们的旁光,,余光,,对齐~偶们想笑又不敢笑,那个难过

MP3也有这么大的危害,让你提早30年耳聋!

02.21.2008, MP3也有这么大的危害,让你提早30年耳聋!已关闭评论, 杂七杂八, by .

MP3也有这么大的危害,让你提早30年耳聋!

MP3是时尚一族的最爱,越来越多的年轻人开始使用它,无论是在大街上还是在公共汽车上都随处可见。人们一般都将音量调到很大,以盖过喧嚣或是追求高音量的听觉震撼。也就是在听音乐的同时,你的耳朵无形地被高音量这个杀手伤害着!

英国卫生和安全管理局多次警告说,任何超过105分贝的声音都会对听力造成永久伤害,但许多MP3的最大音量都达到120分贝。医生提醒:长期、高音量听 MP3可能导致年轻人“提早30年耳聋”,这一说法并非危言耸听。

建议:播放音乐电器选择的音量档以不超过60%较为合适,每天听的时间不要超过1小时。

以下是几种噪声的声级,大家可以把MP3与它们做一下对比。
飞机:140分贝
电锯:110分贝 MP3最大音量:120分贝
燃放鞭炮:100分贝
汽车:90分