Posts Tagged ‘使用方法’

base href 使用方法详解

星期三, 06月 4th, 2008

当点了链接后,跳出de网页地址是http://www.jb51.net/1.asp或http://www.jb51.net/2.asp,它就是在这些相对路径de文件前加上基链接指向de地址.如果目标文件中de链接没有指定target属性,就用base标记中detarget属性.
常在框架结构中用,如左右两个框架,把左边de框架中文件里de连接都显示在右边de框架里.只要用base标记,把其target属性值写为右框架名称,这就不用再为左框架里de文件中de每一个连接都指定target属性.
base href标记其他说明:
1、当使用时,BASE 元素必须出现在文档de HEAD 内,在任何对外部源de引用之前.
2、此元素在 Microsoft® Internet Explorer 3.0 de HTML 中可用,在 Internet Explorer 4.0 de脚本中可用.
3、此元素不会被渲染.
4、此元素不需要关闭标签.
5、base标签其实还是有用处de,比如<base href=”_blank”>将使得本页所有de链接都在新页打开,这样就不必在每个链接处都以上target=”_blank” 了.
IE7中注意:
1 、<html>之前不能加入额外de输出字符.否则IE7就对 base 不进行解析.
2、< base >是一个链接基准标记,用以改变文件中所有链接标记de参数默认值.它只能适应于文件de开头部分,即标记< head >与< /head >之间.
点击运行可以看到效果:
[Ctrl A 全选 提示:您可先修改部分相关代码,再按运行]

h1标签的使用技巧

星期三, 06月 4th, 2008

h1标签de正确使用可以达到seode目de,那么如何在使用h1标签de同时,又不失去原有de美观呢?事实上,正确使用h1标签,我既可以达到seode目de,也能达到美观de目de.大家都知道搜索引擎比较喜欢h1标签.在SEO中h1标签也是很基础也很重要de一步.但有些时候为了界面风格de原因,很多标题性de文字做成了图片.大多数情况下,切割页面de时候就直接用上了图片.在相关代码上,h1标签也就对搜索引擎失去了作用.
其实通过一点小de调整则可以将两者兼顾.我需要两张图片:
1
2
看看这段.h1标签对搜索引擎依然可读,我只是利用text-indent:-9999px;将“邀请好友加入”de文字远远de扔到左边去了.
[复制此相关代码]CODE:
<style>
.test{}
.test h1{margin:0; padding:0; text-indent:-9999px; width:522px; height:45px; background:url(header.gif) no-repeat;}
.testbox{background:url(bg.gif); width:522px; height:323px;}
</style>
<div class=”test”>
<h1>邀请好友加入</h1>
</div>
<div class=”testbox”></div>

点击运行可以看到效果:
[Ctrl A 全选 提示:您可先修改部分相关代码,再按运行]
h1标签还可以这样使用,当然您也可以对h1标签使用样式比如字体大小,字体颜色之类de,当然像上面例子,只是为了达到seode目de,就不需要使用样式对h1标签进行修改了,因为显示在用户面前de是一张图片.

php中iconv函数使用方法

星期一, 06月 2nd, 2008

iconv函数库能够完成各种字符集间de转换,是php编程中不可缺少de基础函数库.
1、下载libiconv函数库http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.9.2.tar.gz;
2、解压缩tar -zxvf libiconv-1.9.2.tar.gz;
3、安装libiconv
#configure –prefix=/usr/local/iconv
#make
#make install
4、重新编译php 增加编译参数–with-iconv=/usr/local/iconv
windows下
最近在做一个小偷程序,需要用到iconv函数把抓取来过deutf-8编码de页面转成gb2312, 发现只有用iconv函数把抓取过来de数据一转码数据就会无缘无故de少一些. 让我郁闷了好一会儿,去网上一查资料才知道这是iconv函数de一个bug.iconv在转换字符”—”到gb2312时会出错
解决方法很简单,就是在需要转成de编码后加 “//IGNORE” 也就是iconv函数第二个参数后.如下:
以下为引用de内容:
iconv(”UTF-8″,”GB2312//IGNORE”,$data)
ignorede意思是忽略转换时de错误,如果没有ignore参数,所有该字符后面de字符串都无法被保存.

常用的php ADODB使用方法集锦

星期一, 06月 2nd, 2008

[复制此相关代码]CODE:
<?php
//定义数据库变量
$DB_TYPE = “mysql“;
$DB_HOST = “localhost”;
$DB_USER = “root”;
$DB_PASS = “”;
$DB_DATABASE = “ai-part”;
require_once(”../adodb/adodb.inc.php”);
$db = NewADOConnection(”$DB_TYPE”);//建立数据库对象
$db->debug = true;//数据库deDEBUG测试,默认值是false
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;//返回de记录集形式,关联形式
/***
返回de记录集形式
define(’ADODB_FETCH_DEFAULT’,0);
define(’ADODB_FETCH_NUM’,1);
define(’ADODB_FETCH_ASSOC’,2);
define(’ADODB_FETCH_BOTH’,3);
以上常量,在adodb.inc.php里定义了,也就是可用”$ADODB_FETCH_MODE=2″方式
ADODB_FETCH_NUM 返回de记录集中de索引,是数字形式,即数据库字段de排序顺序值
ADODB_FETCH_ASSOC 返回de记录集中de索引,是原数据库字段名
ADODB_FETCH_BOTH 和 ADODB_FETCH_DEFAULT 是同时返回以上两种.某些数据库不支持
An example:
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
$rs1 = $db->Execute(’select * from table’);
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$rs2 = $db->Execute(’select * from table’);
print_r($rs1->fields); # 返回de数组是: array([0]=>’v0′,[1] =>’v1′)
print_r($rs2->fields); # 返回de数组是: array(['col1']=>’v0′,['col2'] =>’v1′)
***/
//连接数据库,方法有Connect,PConnect,NConnect,一般使用Connect
if (!@$db->Connect(”$DB_HOST”, “$DB_USER”, “$DB_PASS”, “$DB_DATABASE”)) {
exit(’<a href=”/”>服务器忙,请稍候再访问</a>’);
}
/*
$db-> $rs-> 此类de使用方法
Execute($sql),执行参数中de$sql语句
SelectLimit($sql,$numrows=-1,$offset=-1) $numrows:取几条记录,$offset,从第几条开始取,一般是用于分页,或只取出几条记录de时候用
*/
//Example: 取出多个记录
$sql = “Select * FROM table orDER BY id DESC”;
if (!$rs = $db->Execute($sql)) {//执行SQL语句,并把结果返回给$rs变量
echo $db->ErrorMsg();//这个是打印出错信息
$db->Close();//关闭数据库
exit();
}
while (!$rs->EOF) {//遍历记录集
echo $rs->fields['username'] . ‘<br>’;
//print_r($rs->fields)试试,$rs->fields['字段名'],返回de是这个字段里de值
$rs->MoveNext();//将指针指到下一条记录,否则出现死循环!
}
$rs->Close();//关闭以便释放内存
//插入新记录
$sql = “Insert table (user_type,username) VALUES (3, ‘liucheng’)”;
$db->Execute($sql);
//更新记录
$sql = “Update table SET user_type=3 Where id=2″;
$db->Execute($sql);
//删除记录
$sql = “Delete FROM table Where id=2″;
$db->Execute($sql);
// 取单个记录
//$db->GetRow($sql), 取第一条记录,并返回一个数组,出错返回false
$sql = “Select username,password,user_type FROM table Where id=3″;
$data_ary = $db->GetRow($sql);
if ($data_ary == false) {
echo ‘没有找到此记录’;
exit();
} else {
echo $data_ary['username'] . ‘ ‘ . $data_ary['password'] . ‘ ‘ . $data_ary['user_type'] . ‘<br>’;
}
//另一种方法
$sql = “Select username,password,user_type FROM table Where id=3″;
if (!$rs = $db->Execute($sql)) {
echo $db->ErrorMsg();
$db->Close();
exit();
}
if (!$result = $rs->FetchRow()) {
echo ‘没有找到此记录’;
exit();
} else {
echo $result['username'] . ‘ ‘ . $result['password'] . ‘ ‘ . $result['user_type'] . ‘<br>’;
}
// 取单个字段
//$db->GetOne($sql) 取出第一条记录de第一个字段de值,出错则返回false
$sql = “Select COUNT(id) FROM table”;
$record_nums = $db->GetOne($sql);
echo $record_nums;
$sql = “Select username,password,user_type FROM table Where user_id=1″;
$result = $db->GetOne($sql);
echo $result;//打印出usernamede值
/*
在进行添加,修改,删除记录操作时,
要对字符串型de字段,使用$db->qstr()对用户输入de字符进行处理,
对数字型字段,要进行数据判断
更新记录,注意:这是针对php.ini中,magic_quotes被设置为Offde情况,如果不确定,可以使用
$db->qstr($content,get_magic_quotes_gpc())
注意:content= 等号右边,没有单引号
*/
$sql = “Update table SET content=” . $db->qstr($content) . ” Where id=2″;
$db->Execute($sql);

/*$db->Insert_ID(),无参数,返回刚刚插入de那条记录deID值,仅支持部分数据库,带auto-increment功能de数据库,如PostgreSQL, MySQL 和 MS SQL
*/
//Example:
$sql = “Insert table (user_type,username) VALUES (3, ‘liucheng’)”;
$db->Execute($sql);
$data_id = $db->Insert_ID();
echo $data_id;
/*$db->GenID($seqName = ‘adodbseq’,$startID=1),产生一个ID值.$seqName:用于产生此IDde数据库表名,$startID:起始值,一般不用设置,它会把$seqName中de值自动加1.支持部分数据库,某些数据库不支持
Insert_ID,GenID,一般我用GenID,使用它de目de,是在插入记录后,要马上得到它deID时,才用
*/
/*Example:
先创建一个列名为user_id_seqde表,里面只有一个字段,id,int(10),NOT NULL,然后插入一条值为0de记录
*/
$user_id = $db->GenID(’user_id_seq’);
$sql = “Insert table (id, user_type,username) VALUES (” . $user_id . “, 3, ‘liucheng’)”;
$db->Execute($sql);
/*
$rs->RecordCount(),取出记录集总数,无参数
它好像是把取出de记录集,用count()数组de方法,取得数据de数量
如果取大量数据,效率比较慢,建议使用SQL里deCOUNT(*)de方法
$sql = “Select COUNT(*) FROM table”, 用此方法时,不要在SQL里加ORDER BY,那样会降低执行速度
Example:
*/
$sql = “Select * FROM table orDER BY id DESC”;
if (!$rs = $db->Execute($sql)) {
echo $db->ErrorMsg();
$db->Close();
exit();
}
$record_nums = $rs->RecordCount();
/*
如果想对某一结果集,要进行两次同样de循环处理,可以用下面方法
以下,只是一个例子,只为说明$rs->MoveFirst()de使用方法
*/
$sql = “Select * FROM table orDER BY id DESC”;
if (!$rs = $db->Execute($sql)) {
echo $db->ErrorMsg();
$db->Close();
exit();
}
$username_ary = array();
while (!$rs->EOF) {
$username_ary[] = $rs->fields['username']
echo $rs->fields['username'] . ‘<br>’;//print_r($rs->fields)试试,$rs->fields['字段名'],返回de是这个字段里de值
$rs->MoveNext();//将指针指到下一条记录,不用de话,会出现死循环!
}
$username_ary = array_unique($username_ary);
$rs->MoveFirst();//将指针指回第一条记录
while (!$rs->EOF) {
echo $rs->fields['password'] . ‘<br>’;//print_r($rs->fields)试试,$rs->fields['字段名'],返回de是这个字段里de值
$rs->MoveNext();//将指针指到下一条记录
}
$rs->Close();
//当本页程序,对数据库de操作完毕后,要$db->Close();
$db->Close();
/*一个不错de方法 */
if (isset($db)) {
$db->Close();
}
?>

JS event使用方法详解

星期一, 06月 2nd, 2008

eventde某些属性只对特定de事件有意义.比如,fromElement 和 toElement 属性只对 onmouseover 和 onmouseout 事件有意义.
下面de例子检查鼠标是否在链接上单击,并且,如果shift键被按下,就取消链接de跳转.
<HTML>
<HEAD><TITLE>Cancels Links</TITLE>
<SCRIPT LANGUAGE=”JScript”>…
function cancelLink() …{
if (window.event.srcElement.tagName == “A” && window.event.shiftKey)
window.event.returnValue = false;
}
</SCRIPT>
<BODY onclick=”cancelLink()”>

下面de例子在状态栏上显示鼠标de当前位置.

<BODY onmousemove=”window.status = ‘X=’ window.event.x ‘ Y=’ window.event.y”>

属性:

altKey, button, cancelBubble, clientX, clientY, ctrlKey, fromElement, keyCode, offsetX, offsetY, propertyName, returnValue, screenX,
screenY, shiftKey, srcElement, srcFilter, toElement, type, x, y

1.altKey
描述:
检查alt键de状态.
语法:
event.altKey
可能de值:
当alt键按下时,值为 TRUE ,否则为 FALSE .只读.

2.button
描述:
检查按下de鼠标键.
语法:
event.button
可能de值:
0 没按键
1 按左键
2 按右键
3 按左右键
4 按中间键
5 按左键和中间键
6 按右键和中间键
7 按所有de键
这个属性仅用于onmousedown, onmouseup, 和 onmousemove 事件.对其他事件,不管鼠标状态如何,都返回 0(比如onclick).
3.cancelBubble
描述:
检测是否接受上层元素de事件de控制.
语法:
event.cancelBubble[ = cancelBubble]
可能de值:
这是一个可读写de布尔值:
TRUE 不被上层原素de事件控制.
FALSE 允许被上层元素de事件控制.这是默认值.
例子:
下面de相关代码片断演示了当在图片上点击(onclick)时,如果同时shift键也被按下,就取消上层元素(body)上de事件onclick所引发deshowSrc()函数.

<SCRIPT LANGUAGE=”JScript”>
function checkCancel() …{
if (window.event.shiftKey)
window.event.cancelBubble = true;
}
function showSrc() …{
if (window.event.srcElement.tagName == “IMG”)
alert(window.event.srcElement.src);
}
</SCRIPT>
<BODY onclick=”showSrc()”>
<IMG onclick=”checkCancel()” src=”/sample.gif”>

4.clientX
描述:
返回鼠标在窗口客户区域中deX坐标.
语法:
event.clientX
注释:
这是个只读属性.这意味着,您只能通过它来得到鼠标de当前位置,却不能用它来更改鼠标de位置.

5.clientY
描述:
返回鼠标在窗口客户区域中deY坐标.
语法:
event.clientY
注释:
这是个只读属性.这意味着,您只能通过它来得到鼠标de当前位置,却不能用它来更改鼠标de位置.

6.ctrlKey
描述:
检查ctrl键de状态.
语法:
event.ctrlKey
可能de值:
当ctrl键按下时,值为 TRUE ,否则为 FALSE .只读.

7.fromElement
描述:
检测 onmouseover 和 onmouseout 事件发生时,鼠标所离开de元素. 参考:18.toElement
语法:
event.fromElement
注释:
这是个只读属性.

8.keyCode
描述:
检测键盘事件相对应de内码.
这个属性用于 onkeydown, onkeyup, 和 onkeypress 事件.
语法:
event.keyCode[ = keyCode]

可能de值:
这是个可读写de值,可以是任何一个Unicode键盘内码.如果没有引发键盘事件,则该值为 0 .

9.offsetX
描述:
检查相对于触发事件de对象,鼠标位置de水平坐标
语法:
event.offsetX

10.offsetY
描述:
检查相对于触发事件de对象,鼠标位置de垂直坐标
语法:
event.offsetY

11.propertyName
描述:
设置或返回元素de变化了de属性de名称.
语法:
event.propertyName [ = sProperty ]
可能de值:
sProperty 是一个字符串,指定或返回触发事件de元素在事件中变化了de属性de名称.
这个属性是可读写de.无默认值.
注释:
您可以通过使用 onpropertychange 事件,得到 propertyName de值.
例子:
下面de例子通过使用 onpropertychange 事件,弹出一个对话框,显示 propertyName de值.

<HEAD>
<SCRIPT>…
function changeProp()…{
btnProp.value = “This is the new VALUE”;
}
function changeCSSProp()…{
btnStyleProp.style.backgroundColor = “aqua”;
}
</SCRIPT>
</HEAD>
<BODY>
<P>The event object property propertyName is
used here to return which property has been
altered.</P>
<INPUT TYPE=button ID=btnProp onclick=”changeProp()”
VALUE=”Click to change the VALUE property of this button”
onpropertychange=’alert(event.propertyName ” property has changed value”)’>
<INPUT TYPE=button ID=btnStyleProp
onclick=”changeCSSProp()”
VALUE=”Click to change the CSS backgroundColor property of this button”
onpropertychange=’alert(event.propertyName ” property has changed value”)’>
</BODY>


12.returnValue
描述:
设置或检查从事件中返回de值
语法:
event.returnValue[ = Boolean]
可能de值:
true 事件中de值被返回
false 源对象上事件de默认操作被取消
例子见本文de开头.

13.screenX
描述:
检测鼠标相对于用户屏幕de水平位置
语法:
event.screenX

注释:
这是个只读属性.这意味着,您只能通过它来得到鼠标de当前位置,却不能用它来更改鼠标de位置.

14.screenY
描述:
检测鼠标相对于用户屏幕de垂直位置
语法:
event.screenY
注释:
这是个只读属性.这意味着,您只能通过它来得到鼠标de当前位置,却不能用它来更改鼠标de位置.

15.shiftKey
描述:
检查shift键de状态.
语法:
event.shiftKey
可能de值:
当shift键按下时,值为 TRUE ,否则为 FALSE .只读.

16.srcElement
描述:
返回触发事件de元素.只读.例子见本文开头.
语法:
event.srcElement

17.srcFilter
描述:
返回触发 onfilterchange 事件de滤镜.只读.
语法:
event.srcFilter

18.toElement
描述:
检测 onmouseover 和 onmouseout 事件发生时,鼠标所进入de元素. 参考:7.fromElement
语法:
event.toElement
注释:
这是个只读属性.
例子:下面de相关代码演示了当鼠标移到按钮上时,弹出一个对话框,显示“mouse arrived”

<SCRIPT>
function testMouse(oObject) …{
if(oObject.contains(event.toElement)) …{
alert(”mouse arrived”);
}
}
</SCRIPT>
<BUTTON ID=oButton onmouseover=”testMouse(this)”>Mouse Over This.</BUTTON>

19.type
描述:
返回事件名.
语法:
event.type
注释:
返回没有“on”作为前缀de事件名,比如,onclick事件返回detype是click
只读.

20. x
描述:
返回鼠标相对于css属性中有position属性de上级元素dex轴坐标.如果没有css属性中有position属性de上级元素,默认以BODY元素作为参考对象.
语法:
event.x
注释:
如果事件触发后,鼠标移出窗口外,则返回de值为 -1
这是个只读属性.这意味着,您只能通过它来得到鼠标de当前位置,却不能用它来更改鼠标de位置.

21. y
描述:
返回鼠标相对于css属性中有position属性de上级元素dey轴坐标.如果没有css属性中有position属性de上级元素,默认以BODY元素作为参考对象.
语法:
event.y
注释:
如果事件触发后,鼠标移出窗口外,则返回de值为 -1
这是个只读属性.这意味着,您只能通过它来得到鼠标de当前位置,却不能用它来更改鼠标de位置.

惰性函数定义模式 使用方法第1/3页

星期一, 06月 2nd, 2008

这篇文章阐述de是一种函数式编程(functional-programming)设计模式,我称之为惰性函数定义(Lazy Function Definition).我不止一次发现这种模式在JavaScript中大有用处,尤其是编写跨浏览器de、高效运行de库之时.
热身问题
编写一个函数foo,它返回de是Date对象,这个对象保存de是foo首次调用de时间.
方法一:上古时代de技术
这个最简陋de解决方案使用了全局变量t来保存Date对象.foo首次调用时会把时间保存到t中.接下来de再次调用,foo只会返回保存在t中de值.
[复制此相关代码]CODE:
var t;
function foo() {
if (t) {
return t;
}
t = new Date();
return t;
}

但是这样de相关代码有两个问题.第一,变量t是一个多余de全局变量,并且在 foo调用de间隔期间有可能被更改.第二,在调用时这些相关代码de效率并没有得到优化因为每次调用 foo都必须去求值条件.虽然在这个例子中,求值条件并不显得低效,但在现实世界de实践例子中常常会有极为昂贵de条件求值,比如在if-else-else-…de结构中.
方法二:模块模式
我可以通过被认为归功于Cornford 和 Crockford de模块模式来弥补第一种方法de缺陷.使用闭包可以隐藏全局变量t,只有在 foo内de相关代码才可以访问它.
[复制此相关代码]CODE:
var foo = (function() {
var t;
return function() {
if (t) {
return t;
}
t = new Date();
return t;
}
})();

但这仍然没有优化调用时de效率,因为每次调用foo依然需要求值条件.
虽然模块模式是一个强大de工具,但我坚信在这种情形下它用错了地方.
方法三:函数作为对象
由于JavaScriptde函数也是对象,所以它可以带有属性,我可以据此实现一种跟模块模式质量差不多de解决方案.
[复制此相关代码]CODE:
function foo() {
if (foo.t) {
return foo.t;
}
foo.t = new Date();
return foo.t;
}

在一些情形中,带有属性de函数对象可以产生比较清晰de解决方案.我认为,这个方法在理念上要比模式模块方法更为简单.
这个解决方案避免了第一种方法中de全局变量t,但仍然解决不了foo每次调用所带来de条件求值.

syntaxhighlighter 使用方法

星期一, 06月 2nd, 2008

Placing the code

Place your code on the page and surround it with <pre> tag. Set name attribute to code and class attribute to one of the language aliases you wish to use.

<pre name=”code” class=”c-sharp”>

… some code here …

</pre>

NOTE: One important thing to watch out for is opening triangular bracket <. It must be replaced with an HTML equivalent of < in all cases. Failure to do won’t break the page, but might break the source code displayed.

An alternative to <pre> is to use <textarea> tag. There are no problems with < character in that case. The main problem is that it doesn’t look as good as <pre> tag if for some reason JavaScript didn’t work (in RSS feed for example).

<textarea name=”code” class=”c#” cols=”60″ rows=”10″>

… some code here …

</textarea>

Extended configuration

There’s a way to pass a few configuration options to the code block. It’s done via colon separated arguments.

<pre name=”code” class=”html:collapse”>

… some code here …

</pre>

Making it work

Finally, to get the whole thing to render properly on the page, you have to add JavaScript to the page.

<link type=”text/css” rel=”stylesheet” href=”css/SyntaxHighlighter.css”></link>

<script language=”javascript” src=”js/shCore.js”></script>

<script language=”javascript” src=”js/shBrushCSharp.js”></script>

<script language=”javascript” src=”js/shBrushXml.js”></script>

<script language=”javascript”>

dp.SyntaxHighlighter.ClipboardSwf = ‘/flash/clipboard.swf’;

dp.SyntaxHighlighter.HighlightAll(’code’);

</script>

For optimal result, place this code at the very end of your page. Check HighlightAll for more details about the function.
下载地址:SyntaxHighlighter_1.5.0.zip

JavaScript For…In 使用方法

星期一, 06月 2nd, 2008

For…In 声明用于遍历数组或者对象de属性(对数组或者对象de属性进行循环操作).
JavaScript For…In 声明
For…In 声明用于对数组或者对象de属性进行循环操作.
for … in循环中de相关代码每执行一次,就会对数组de元素或者对象de属性进行一次操作.
语法:
for (变量 in 对象)
{
在此执行相关代码
}variable用来指定变量,指定de变量可以是数组元素,也可以是对象de属性.
实例:
使用for … in循环遍历数组.
点击运行可以看到效果:
[Ctrl A 全选 提示:您可先修改部分相关代码,再按运行]

JavaScript Try…Catch 声明的 使用方法

星期一, 06月 2nd, 2008

try…catchde作用是测试相关代码中de错误.
实例
try…catch声明
如何编写try…catch声明.
带有确认框detry…catch声明
另一个编写try…catch声明de例子. JavaScript - 捕获错误
当我在网上冲浪时,总会看到带有runtime错误deJavascript警告框,同时会询问我“是否进行debug?”.像这样de错误信息或许对开发人员有用,对用户则未必.当错误发生时,他们往往会选择离开这个站点.
本节向您讲解如何捕获和处理Javascriptde错误消息,这样就可以为受众提供更多de便利.
有两种在网页中捕获错误de方法:
使用try…catch声明.(在IE5 、Mozilla 1.0、和Netscape 6中可用)
使用onerror 事件.这是用于捕获错误de老式方法.(Netscape 3以后de版本可用)
Try…Catch 声明
try…catch可以测试相关代码中de错误.try部分包含需要运行de相关代码,而catch部分包含错误发生时运行de相关代码.
语法:
try
{
//在此运行相关代码
}
catch(err)
{
//在此处理错误
}注意:try…catch使用小写字母.大写字母会出错.
实例 1
下面de例子原本用在用户点击按钮时显示”Welcome guest!”这个消息.不过message()函数中dealert()被误写为adddlert().这时错误发生了:
点击运行可以看到效果:
[Ctrl A 全选 提示:您可先修改部分相关代码,再按运行]
我可以添加try…catch声明,这样当错误发生时可以采取更适当de措施.
下面de例子用try…catch声明重新修改了脚本.由于误写了alert(),所以错误发生了.不过这一次,catch部分捕获到了错误,并用一段准备好de相关代码来处理这个错误.这段相关代码会显示一个自定义de出错信息来告知用户所发生de事情.
点击运行可以看到效果:
[Ctrl A 全选 提示:您可先修改部分相关代码,再按运行]实例 2
下一个例子会显示一个确认框,让用户来选择在发生错误时点击确定按钮来继续浏览网页,还是点击取消按钮来回到首页.如果confirm方法de返回值为false,相关代码会把用户重定向到其他de页面.如果confirm方法de返回值为true,那么相关代码什么也不会做.
点击运行可以看到效果:
[Ctrl A 全选 提示:您可先修改部分相关代码,再按运行]

ASP中 SQL语句 使用方法第1/3页

星期一, 06月 2nd, 2008

ASP中使用SQL语句教程
五花八门deSQL产品多得要命,或许您早顾不得其它甩开袖子就动手干了.但您要同时采用ASP和SQLde话就可能会头晕.MySQL、SQL Server和mSQL都是绝佳deSQL工具,可惜,在ASPde环境下您却用不着它们来创建实用deSQL语句.不过,您可以利用自己掌握deAccess知识以及相应deAccess技能,再加上我de提示和技巧,相信一定能成功地在您deASP网页中加入SQL.

1. SELECT 语句
在SQLde世界里,最最基础de操作就是SELECT 语句了.在数据库工具下直接采用SQLde时候很多人都会熟悉下面de操作:
SELECT what
FROM whichTable
WHERE criteria
执行以上语句就会创建一个存放其结果de查询.
而在ASP页面文件上,您也可以采用以上de一般语法,不过情况稍微不同,ASP编程de时候,SELECT 语句de内容要作为字符串赋给一个变量:
SQL = “SELECT what FROM whichTable WHERE criteria”
好了,明白了ASP下SQL“说话”de方式,接下来如法炮制即可,只要满足您de需要,传统deSQL查询模式和条件查询都能派用场.
举例说明,不妨假设您de数据库内有个数据表,名字是Products ,现在您想取出这个表里de全部记录.然后您就编写了下面de相关代码:
SQL =”SELECT * FROM Products”
以上相关代码——SQL语句de作用就是取出表内de全部数据——执行后将会选出数据表内de全部记录.不过,要是只想从表内取出某个特定列,比如p_name.那就不能用 * 通配符了,这里得键入具体某列de名字,相关代码如下:
SQL =”SELECT p_name FROM Products”
执行以上查询之后Products 表内、p_name 列de内容就会全被选取出来.

2. 用WHERE子句设置查询条件
有de时候取出全部数据库记录也许正好满足您de要求,不过,在大多数情况下我通常只需得到部分记录.这样一来该如何设计查询呢?当然会更费点脑筋了,何况本文也存心不想让您去用那个什么劳什子derecordset.
举个例子,假如您只打算取出p_name 记录,而且这些记录de名字必须以字母w打头,那么您就要用到下面deWHERE 子句了:
SQL =”SELECT p_name FROM Products WHERE p_name LIKE ‘W%’”
WHERE 关键词de后面跟着用来过滤数据de条件,有了这些条件de帮助,只有满足一定标准de数据才会被查询出来.在以上de例子里,查询de结果只会得到名字以w 打头dep_name 记录.
以上例子中,百分比符号(%)de含义是指示查询返回所有w 字母打头而且后面是任何数据甚至没有数据de记录条目.所以,在执行以上查询de时候, west 和 willow 就会从Products 表内被选取出来并存放在查询里.
就像您看到de那样,只要仔细地设计SELECT 语句,您就可以限制recordset 中返回de信息量,多琢磨琢磨总能满足您de要求.
这些啊还不过是掌握SQL用途刚起步.为了帮助您逐步掌握复杂deSELECT 语句用法,下面就让我再来看一下关键de标准术语:比较运算符,这些玩意都是您在构筑自己deSELECT 字符串来获得特定数据时要经常用到de.
WHERE子句基础
在开始创建WHERE 子句de时候,最简单de方式是采用标准de比较符号,它们是 < 、 <= 、 > 、 >= 、<> 和 =.显然,您很快就能明白以下相关代码de含义和具体运行结果:
SELECT * FROM Products WHERE p_price >= 199.95
SELECT * FROM Products WHERE p_price <> 19.95
SELECT * FROM Products WHERE p_version = ‘4′
注意: 这里您会注意到,最后一个例句中de数字4周围加了单引号.原因是这样de,在这个例子中de ‘4′ 是文本类型而非数字类型.因为您会把 SELECT 语句放到引号中来把它作为一个值赋给变量,所以您也可以在语句中采用引号.
比较运算符
比较运算符指定从表内取出数据de内容范围.您可以用它们来创建过滤器以便缩小recordsetde范围,促使其只保存给定任务下您关心de信息.
3. LIKE 、 NOT LIKE和 BETWEEN

您已经在上面取出w打头记录de例子中看到了LIKEde用法.LIKE判定词是一个非常有用de符号.不过,在很多情况下用了它可能会带给您太多de数据,所以在用到它之前最好先开动脑筋多想想自己到底想获得什么数据.假设您想取出5位数字deSKU号码,而且其开头是1结尾是5,那么您可以用下划符(_)代替%符号:
SQL = “SELECT * FROM Products WHERE p_sku LIKE ‘1___5′”
下划符表示任意一个字符.所以在输入“1 _ _ _ 5”de情况下,您de搜索就会限制在满足特定模式de5位数范围内了.
假如您想反其道而行之,要找出所有不匹配“1_ _ _ 5”模式deSKU条目.那么您只需要在刚才语句例子中deLIKE前面加上NOT就可以了.
BETWEEN
假设您想取出一定范围内de数据,而且您事先知道范围de起点和终点,那么您不妨采用BETWEEN 判断词.现在就让我假设您想选取给定表内范围在 1和 10之间de记录.您可以如下使用BETWEEN:
…WHERE ID BETWEEN 1 AND 10
或者您也可以采用已经熟悉de数学判断字句:
…WHERE ID >= 1 AND ID >= 10

4. 联合语句
我到目前为止所谈到deSQL语句相对较为简单,如果再能通过标准derecordset循环查询,那么这些语句也能满足一些更复杂de要求.不过,何必非要拘泥在浅尝则止de基础水准之上呢?您完全可以再增加其他一些符号,比如AND、 OR和NOT来完成更强大de功能.
以下面deSQL语句为例:
SQL =”SELECT c_firstname, c_lastname, c_email FROM customers WHERE c_email IS
NOT NULL AND c_purchase = ‘1′ OR c_purchase = ‘2′ AND c_lastname LIKE
‘A%’”
就您目前所掌握deSQL知识,以上de例子也不难解释,不过上面de语句并没有很明白地让您看清条件字句是如何胶合在单一SQL语句中de.
多行语句
在SQL语句不好懂de情况下,您不妨把整个语句分解为多行相关代码,然后在现有变量基础上逐步增加查询语句de各个组成部分并把它存在同一变量内:
SQL = “SELECT c_firstname, c_lastname, c_emailaddress, c_phone”
SQL = SQL & ” FROM customers”
SQL = SQL & ” WHERE c_firstname LIKE ‘A%’ and c_emailaddress NOT NULL”
SQL = SQL & ” ORDER BY c_lastname, c_firstname”
到了最后一句,SQL变量就包含了以下de完整SELECT 语句:
“SELECT c_firstname, c_lastname, c_emailaddress, c_phone FROM customers
WHERE c_firstname LIKE ‘A%’ and c_emailaddress NO NULL ORDER BY c_lastname,
c_firstname”
整句照上面分解之后显然好读多了!在进行调试de时候,您或许更乐于多敲几个字符把程序改得更好读些.不过您可要记住了,在封闭引号之前或者在打开引号之后您需要增加空格,这样才能保证字符串连接起来de时候您没有把几个词凑到了一块.