Ajax and JSON

关于JSON,是很久以前就听说了,但是一直没有真正的去研究,去使用。

关于AJAX,也是很久以前就听说了,而且一直也在研究,在使用。

关于AJAX and JSON,是刚刚开始研究和使用。

JSON,JavaScript Object Notation, 我理解为Javascript 对象标记,可能不太准确,但是这样有助自己理解和使用。高人们都说JSON使用起来要比XML更灵活,更方便,是吗,带着这样的疑问,自己写了个小例子。

Continue reading

Posted in Ajax | Tagged , , , | Leave a comment

MaiMaiJ Live Messenger[Beta1.0]

经过几天的努力,MaiMaiJ Live® Messenger已经初具模型了,运用创新的Ajax和灵活的XML,实现WEB方式的及时互动交流!

发几张图上来,晒晒先!






Posted in 买卖街 | Tagged , , , | Leave a comment

买卖街引发的“订单革命”!

买卖街引发的“订单革命”!

“低成本,高收益”一直是企业经营所追求的目标。怎样做到“低成本,高收益”也是企业一直在探索的问题。从传统的线下交易到现在的电子商务,这个跨越确实给企业带来了很大的好处,更容易寻找商机,同时缩短了交易时间,节约了交易成本,实现了交易双方更便捷的实时交流。现在我们正处在一个电子商务的新时代,在这个基础上如何进一步节约我们的成本,实现更方便的管理,赚取更多的利润,正是我们需要研究的课题。

买卖街(www.MaiMaiJ.com)是国内第一家专注于为企业或者个人网商提供批发订单处理解决方案的网站,无论您从事内贸、外贸,还是采购商品到淘宝、拍拍网、易趣甚至国际eBay等网站进行零售,您都可以享受到买卖街带给您的便捷、高效、周到的服务。

买卖街实现的是一种全新概念的订单管理和处理模式:

首先,买方再也无需用Word 或者Excel 手工制作订单,只需在线填写各款所需的订购数量,买卖街就会自动生成在线订单,大大节省了交易双方的工作量;
其次,卖方无需自己核算订单的价值,买卖街会根据事先定义的买方批发级别进行相应的计算;
第三,卖方可以进行多级别批发的管理,给自己的客户定义批发级别;
第四,交易双方收发订单无需通过Email或者传真,避免了反复传送所产生的不便;第五,买卖街针对交易双方的不同身份对订单进行分类,便于用户管理和查找;
第六,买卖街全程跟踪交易过程,交易双方可随时查看订单状态;
第七,买卖街支持多种收付款方式,既支持PayPal 和Moneybookers 这样安全快捷的在线支付方式,也支持Western Union 和 Wire Transfer(T/T),卖方可根据情况选择适合自己的方式;
第八,买卖街可以实现订单系统与自己网站的无缝嵌套,提升网站的功能。

在这样一个竞争激烈的时代,买卖街在实践中总结经验,从用户的实际需要出发,必将以它独特的特点和优势掀起了一场“订单革命”!

买卖街真诚欢迎您的加入!想要了解更多,请登录:cn.MaiMaiJ.com !

Posted in 买卖街 | Tagged , | Leave a comment

FireFox 3.0!

天下大事,FireFox 出3.0了!!

新推出的FireFox 3.0,据称比2.0速度提高2倍,内存占用减小,几乎与苹果的Safari速度不相上下。

还有,FireBug 也有新版本提供下载了[https://addons.mozilla.org/zh-CN/firefox/addon/1843],官方网站[http://getfirebug.com/releases/],太帅了,不多说了,赶紧去升级吧!

还有,在网上刚学的:

地址栏输入about:config打开配置页,将下面两项设置为TRUE:
在新窗口打开搜索页:browser.search.openintab
在后台LOAD外部链接,方便看新闻:browser.tabs.loadDivertedInBackground

Posted in keyboard's joy | Tagged , | Leave a comment

反向解析(PTR)(转)

做反向解析(PTR):
在垃圾邮件泛滥的今天,垃圾邮件给我们的生活、工作、学习带来了极大的危害。由于SMTP服务器之间缺乏有效的发送认证机制,即使采用了垃圾邮件识别阻拦 技术效果仍旧一般,再者垃圾邮件识别阻拦技术主要是在收到信件后根据一定条件进行识别的,需要耗费大量服务器资源,如果能在信件到达服务器之前就采取一定 手段,这样就能大大提高服务器效率了。因此,目前许多邮件服务器如sina.com,hotmail.com,yahoo.com.cn等等都采用了垃圾 邮件识别阻拦技术+IP反向解析验证技术以更好的阻拦垃圾邮件。
我们先来了解一下什么是IP反向解析。其实作过DNS服务器的朋友一定会知道DNS服务器里有两个区域,即“正向查找区域”和“反向查找区域”,反向查找 区域即是这里所说的IP反向解析,它的作用就是通过查询IP地址的PTR记录来得到该IP地址指向的域名,当然,要成功得到域名就必需要有该IP地址的 PTR记录。
Continue reading

Posted in keyboard's joy | Tagged | Leave a comment

HTML中的IF语法判断IE版本

1
2
3
4
5
6
7
8
9
10
11
<!--[if !IE]> 除IE外都可识别 <![endif]-->
<!--[if IE]> 所有的IE可识别 <![endif]-->
<!--[if IE 5.0]> 只有IE5.0可以识别 <![endif]-->
<!--[if IE 5]> 仅IE5.0与IE5.5可以识别 <![endif]-->
<!--[if gt IE 5.0]> IE5.0以及IE5.0以上版本都可以识别 <![endif]-->
<!--[if IE 6]> 仅IE6可识别 <![endif]-->
<!--[if lt IE 6]> IE6以及IE6以下版本可识别 <![endif]-->
<!--[if gte IE 6]> IE6以及IE6以上版本可识别 <![endif]-->
<!--[if IE 7]> 仅IE7可识别 <![endif]-->
<!--[if lt IE 7]> IE7以及IE7以下版本可识别 <![endif]-->
<!--[if gte IE 7]> IE7以及IE7以上版本可识别 <![endif]-->
Posted in IE, keyboard's joy | Tagged , , | Leave a comment

正则(JS)re=new RegExp(“^\\d*$”);与re=/^\d*$/;之间区别?

以下代码结果为:FALSE,TRUE,TRUE , 结果中为什么第一个为FALSE呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<form name=form1>
字符串:<input name=”t1″ value=123456″>
模式:/<input name=”t2″ value=”^\d*$”>/
</form>
<script language=javascript>
function c1()
{
re=new RegExp(“^\d*$”);
alert(re.test(“123456″));
}
function c2(form)
{
re=new RegExp(form.t2.value);
alert(re.test(form.t1.value));
}
function c3()
{
re=/^\d*$/;
alert(re.test(“123456″));
}
c1();
c2(document.form1);
c3();
</script>

第一个应为 re=new RegExp(“^\\d*$”);
\在引号中需要转义
第一个表达式有双引号,双引号要加多一次转义的,第二个没有,这就是区别

Posted in javascript | Tagged , , , | Leave a comment

Javascript跨域读取数据的新突破!

首先一点,这里的跨域不是类似 aaa.test.com 和 bbb.test.com的二级域名跨域,这种跨域的问题好像有很多人研究过了,而且也实现了。我这里说的跨域是像www.aaa.com和www.bbb.com这样的跨域。

再说一下我研究的这个跨域所要实现的功能吧,我有自己的域名www.aaa.com,我的域名下有一个图片列表页面,这个页面需要在其他域名,例如www.bbb.com的页面上显示,说到这里,可能有些朋友会说,提供一段代码,在www.bbb.com上iframe一下,不就结了吗,也牵扯不到跨域的问题,但是有一点,如果是ifame的方式在bbb.com上显示的话,这个iframe窗体的高度不是能够随着我的图片页面的高度变化的,也就是说,如果我提供的图片页面很长,那么就会在bbb.com的页面上显示滚动条,这样的话,页面会变得很难看,而这是我所希望的。

好了,说一下我的实现方式,我采用JS直接创建层的方式在bbb.com的show.html页面上直接创建我所需要的数据容器层,

<div id=”Data-Container”></div>

然后再把获取数据的链接get.asp附加到页面上<head>元素里面,利用OBJ.appendChild(obj),

<head>
<script src=”http://www.aaa.com/…/get.asp” id=”Data-Handler”></script>
</head>

在链接页面获取到数据

var content = ‘this is test content’; 以后,

在该页面的底部执行预先定义好的赋值函数

function SetData(){
document.getElementById(‘Data-Container’).innerHTML = content;
}

这样,原本在aaa.com域名下的数据就巧妙的显示到了bbb.com域名下的页面里,关键一点是,层Data-Container的高度会随着获取到数据的大小而自动调整大小,这样,show.html的高度也会自动调整了,就不会出现难看的上下滚动条了。

当然,这只是一个简单的工作原理,其中还有好多需要注意的地方,比如更复杂的回传参数,更新数据等,剩下的下次再写吧。

Posted in javascript | Tagged , , , , | 1 Comment

FlashFXP 3.6 Final(正式版)注册码

经过多个 RC 版本以后,FlashFXP 终于发布了 3.6.0 Build 1240 的正式版,当然很快在 9Down 那边的回复里就出现了破解注册码  ,帖一个:

———————————————————
FLASHFXPxgA9UrTnxgAAAAC7W5MNJwTnsl73n0Vuu1AePJgEAG
41mgSvHSiDWi1Kg8B5xJNCCCAVCMr9Rtmo6u93NoQF27wg6KrQ
3RIE8Jz6Qy/YlnYIBf58aRJrG7rGITgQJ4KSmyK0wz4xySS+0H
N/9lJ65abJf7rB7m3R2vyjhakIKSzZnquXQ0/Rdv5nMS+Bbc7n
rMqoYnTURE8jeePVOgIO9a4N89ORDsPW4uEtPjCXiyk1hVcse3
3uZgJ/H5KriA==
———————————————————

重要注意事项:
因为 FlashFXP 在启动时会连接到网站的服务器检查许可的激活数量是否合法,因此公共的注册码肯定会遭到屏蔽,所以请在你的杀毒软件的防火墙中阻止 secure.flashfxp.comliveupdate.inicom.net 这两个地址,或者通过编辑 C:\Windows\System32\Drivers\etc\HOSTS 文件将这两个地址指向到 127.0.0.1。

Posted in life's shadow | Leave a comment

PHP初学者头疼问题总结[Usefull]

【1】页面之间无法传递变量 get,post,session在最新的php版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用$_GET['foo'],$_POST['foo'],$_SESSION['foo']来得到
当然也可以修改自动全局变量为开(php.ini改为register_globals = On);考虑到兼容性,还是强迫自己熟悉新的写法比较好。
【2】Win32下apache2 用get方法传递中文参数会出错
test.php?a=你好&b=你也好
传递参数是会导致一个内部错误
解决办法:”test.php?a=”.urlencode(你好).”&b=”.urlencode(你也好)
………….

【3】win32下的session不能正常工作
php.ini默认的session.save_path = /tmp
这显然是linux下的配置,win32下php无法读写session文件导致session无法使用
把它改成一个绝对路径就可以了,例如session.save_path = c:\windows\temp Continue reading

Posted in PHP | Tagged , , , , | Leave a comment

SEO策略的核心领域[转]

一个SEO策略应该主要包括三个部分:

² 内容研究与创新

² 网站内部的内容架构

² 建立导入链接

这几个部分不强调要有一个正确执行顺序,有的人直到网站被关闭了也没有建立导入链接,相反的,有的人从建立链接开始着手,并且取得了很好的效果。

我可能比较偏向于创建内容和建立链接同时进行,因为网站的架构需要大量的内容去不断的充实,对于一个成功的网站而言,终其一生,内容的更新和链接的建立都是不断进行的过程。

内容的研究与更新

首要的工作是确认关键词,通过这些关键词,客户才能使用搜索引擎找到你的产品和服务,以下是确认关键词的工具的链接:

http://www.keyworddiscovery.com

http://www.wordtracker.com

还有其他的一些工具,你可以自己寻找,然后使用其中一个或几个为你服务。

一般而言,不可能只搜索到几个有限的词语,而是你搜索的越多,你能够找的资源也就越多,如果时间允许的话,可能还需要进一步的发掘。

需要牢记的一件非常重要的事情是:GOOGLE上超过一半的搜索都是独一无二的。

你需要为每一个关键词创建一个网页,这可能意味着要创建很多页面。当根据你的关键词创立了含有内容的网页之后,就有很多事情需要做了,这些事情是搜索引擎将要浏览并借以决定你的网页是关于什么内容的依据,它们包括:

l 导入链接文本

l 标题标签

l 主题标签

l META标签

l 网站剩余的内容

l URL

……

上面的每一项内容都是一个机会去告诉搜索引擎你的网页是关于什么方面的——但是你要是做得太过了,你就惨了,会遭到惩罚。简单的规则是,如果它看上去和读起来对一般人都OK 的话,那就没问题了。

网站内部的内容架构

这一部分的目的就是分配你站点的PR,使你的主页尽可能高效的运转。

PR(页面分级)与你的导入链接的数目和质量有关,一个好的PR可以提升你的页面在搜索结果中的位置。

如果想看一下你的和其他网站的PR,可以下载Google Toolbar.

在理想的世界里,每一个页面都有他自己的导入链接和PR,但事实上这是不可能也不必要的。

Google建议在每一个页面里有不超过50100的链接。简单说,每个页面的PR将随着来自于首页的点击而减少,所以你要寻求一种架构,这种架构能给你的每一个网页最少的点击。

竞争性条款可能要更多的PR才能攀升到顶部,因此,你可能想要将一些非常规的等级分类引进你的构架之中,从而使你的特殊网页比其他普通网页得到更多的PR值。

最简单的分配PR又不扰乱你的网站的方法是,使用与你主页相断开的站点地图(Sitemap)。很明显的,这将在连接到你每一个网页的过程中增加一个点击,同时与你的架构相对应的,又与你的主页相结合了。

建立导入链接

这是一个最有挑战性的策略,这个部分需要你做大量的工作,同时进行创造性的思考。

这里有几个方法得到导入链接:

l 和其他的网站交换互惠性的链接

l 购买单向链接

l 建立一些关于你的网站的新奇的东西,这样网民可以在任何地方连接到它

我觉得来自于权威性的网站的导入链接对于竞争性条款是很重要的,甚至对于那些非竞争性的条款,你可能也需要一些好的链接以使你的网站得到进一步的发展。

GOOGLE的角度看,他们正在寻找那些值得他们公布或者展示的网站去链接,比如:不是为了金钱的目的,或者只是链接交换的结果。

对于你的网站,可能有很多其他的方法从高质量的相关的网站得到导入链接,有什么更好的建议和方法,欢迎一起探讨和分享!

转自[网站优化指南]

Posted in keyboard's joy | Tagged , | Leave a comment

WordPress性能优化

WordPress的效率问题似乎一直是议论的热点,今天来看看其中一条SQL语句的效率。

首先将所有插件禁用,并切换为默认模板。 然后按照《WordPress执行效率问题》这篇文章的方法, 在 wp-config.php 中加入

<?php define('SAVEQUERIES', true); ?>

在模板的 footer.php 中加入

<!-- <?php var_dump($wpdb->queries); ?> -->

访问首页,即可从源代码中看到SQL语句。

执行时间最长的是这一条,花了0.02秒:

SELECT DISTINCT * FROM wp_posts
WHERE 1=1
AND post_date_gmt <= '2007-01-02 07:12:59'
AND (
post_status = 'publish'
OR
post_author = 1
AND post_status != 'draft'
AND post_status != 'static'
)
AND post_status != 'attachment'
GROUP BY  wp_posts.ID
ORDER BY post_date DESC
LIMIT 0, 10"

这条语句位于 class.php 的 WP_Query->&get_posts() 函数。

说说这个SQL语句的问题。不妨先来看看 wp_posts 表的结构(省略无关列)。

列名 类型 索引
ID bigint(20) PRIMARY
post_author bigint(20)
post_date_gmt datetime
post_status enum INDEX
post_name varchar(200) INDEX

首先是关键字 DISTINCT,DISTINCT的作用是去掉重复的数据, 相当于对选择的列进行 GROUP BY。而这条语句中选择了 * 列,包含了主键列 ID, 每行数据必然不相同,因此 DISTINCT 关键字起不到任何作用, 白白浪费一次排序。

其次是 post_date_gmt 和 post_author 上的比较操作。wp_posts表仅有 ID、post_status 和 post_name 列上有索引,对其他列的比较操作使得mysql不得不访问wp_posts表的所有数据, 影响效率。

然后是 post_status 上的不等于的比较。对索引列使用不等于比较, 会导致数据库不能使用索引(索引只能判断等于关系)。 另外显然已经有了 post_status = ‘publish’ 的条件, 不必再判断 post_status != ‘attachment’。

最后是 GROUP BY wp_posts.ID,仍然是对一个不会重复的列进行 GROUP BY, 毫无意义。

如果不考虑功能损失,将这个 SQL 语句优化为下面这样,则仅需花费0.003秒。

SELECT * FROM wp_posts
WHERE 1=1
AND post_status = 'publish'
ORDER BY post_date DESC
LIMIT 0, 10"

使用Apache Bench做测试,优化前平均每个请求的处理时间为 503.125ms,优化后为 478.125ms。

Posted in keyboard's joy | Tagged , , , | Leave a comment

WordPress常用插件100个

0、中文WordPress工具箱: 使用这 个插件,你可以显示随机文章,最新留言(最新引用),留言最多文章,发表评论最多的网友,还有真正的文章摘要,等等,真正截断,没有乱码。

留言相关:

1、Akismet:最流行的反垃圾留言插件。可能吧使用WP至今,它已经协助屏蔽了1700多条垃圾评论。

2、Spam Karma 2:又一个垃圾留言屏蔽插件,和Akismet相比,这个要更为复杂一些。

3、Threaded Comments:实现有针对性的留言。也就是可以针对某个留言进行留言,这个留言不出现在最底部,而是在所针对的留言的下方。

4、Subscribe to Comments:让评论者订阅文章后续评论的插件。

5、Webcam Comments:觉得文字留言太乏味?试试语音或视频留言如何?

6、Gravatars:只要留言者在Gravatars网站上传了头像,在留言时就能显示留言者的头像。

7、De-link Comment Author:有时候你想删除一个评论者的链接但不想删除整个留言,这个插件可以帮助你。

8、Ajax Comments-Reply:将留言系统设置成Ajax形式,不用刷新即可添加评论。

9、DMS Guestbook:为你的博客制作一个留言本。

10、Sexy Comments:替换原来的评论模板,让评论区域看起来有点像论坛的风格,确实相当Sexy。

11、Math Problem Spam Protection:和留言验证码差不多,这个是要回答一道简单的数学问题。

12、Link Love Plugin:去除留言者链接里的”nofollow”标签。

13、Do-Follow:和Link Love Plugin一样,去除留言里的nofollow标签。

SEO相关:

14、All-in-One SEO Pack:必备的SEO插件,不详细介绍,具体参看WordPress的SEO插件

15、Permalink Redirect:在介绍WordPress的SEO插件时介绍了这个插件,一个实现301转向的插件。

16、Google Sitemaps:在博客根目录生成一个sitemap.xml文件,并自动提交到Google,方便搜索引擎进行索引。

17、Google Pagerank Plugin:展示Page Rank的插件。

18、Alexa Ranking:展示Alexa排名的插件。

19、Dagon Design Sitemap Generator:生成一个网站地图。具体可以看可能吧的网站地图

20、No WWW:将所有含有www的URL都转向到无www的URL。

21、Simple Tagging:给文章添加标签。

22、Ultimate Tag Warrior:在WordPress的SEO插件时也介绍了这个插件,主要是用来添加文章标签。对SEO也有一定的帮助。

23、Robots.TXT:协助你方便地编辑robots.txt,我觉得手动编写好robots.txt再上传会更好。 Continue reading

Posted in keyboard's joy | Leave a comment

WordPress Robots.txt For SEO

The robots.txt file is used to instruct search engine robots about what pages on your website should be crawled and consequently indexed. Most websites have files and folders that are not relevant for search engines (like images or admin files) therefore creating a robots.txt file can actually improve your website indexation.

Implementing an effective SEO robots.txt file for WordPress will help your blog to rank higher in Search Engines, receive higher paying relevant Ads, and increase your blog traffic.

Here is my robots.txt files, which can further protect WordPress from this duplicate content issue.

1
2
3
4
5
6
7
User-agent: *
Disallow: /wp-
Disallow: /feed/
Disallow: /trackback/
Disallow: /comments/feed/
Disallow: /page/
Disallow: /comments/

After you created the robots.txt file just upload it to your root directory and you are done!

Posted in keyboard's joy | Tagged , , , | 1 Comment

Phpmyadmin安装配置简单实现-超简单

前些日子装好了PHP的环境,然后安装上了MYSQL,网上说phpmyadmin可以简单的以图形界面管理mysql,于是就安装了一个phpmyadmin,结果一打开,显示“访问被拒绝”,首次接触php,不知道从哪里下手解决问题,从网上搜啊搜怎么说的都有,但就是没有一个能解决问题的,愁。
不甘心,今天晚上又搜,找到一篇文章,如题,结果真就把问题解决了,原来简单的问题复杂化了。
下面是内容,原文:

Quote
#Tar jxvf phpMyAdmin-2.10.1-all-languages.tar.bz2 //解压

#mv phpMyAdmin-2.10.1-all-languages /var/www/html/database //讲整个目录移到默认的WEB根目录下并改文件名为database

#cp config.inc.sample.php config.inc.php //将config.inc.sample.php改为config.inc.php

#vi config.inc.php

$cfg[’Servers’][$i][’auth_type’] = ‘cookie’;// phpMyAdmin有3种授权模式:
cookie: 显示一个web登录页面,输入mysql的用户名和密码,然后进入管理界面
http: 显示1个windows登录框,输入mysql的用户名和密码,然和进入管理
config: 把mysql用户名和密码直接填入config.inc.php,不显示登录界面,直接进入管理界面
phpMyAdmin的配置文件名为config.inc.php,各版本的config.inc.php修改方法如下:

$cfg[’blowfish_secret’] = ‘php’;(其中的”php”自定义)
修改以后,以后登入phpmyadmin就方便多了,但一定不要使用空密码,切记!

我什么也没修改,就是把$cfg[’blowfish_secret’] 的值设定了一个,结果访问通过了,一切正常。
唉,希望和我一样初次接触PHP的朋友能够不在为这么简单的问题而困惑!

Posted in keyboard's joy | Tagged , | 1 Comment

假装

http://www.ishere.cn/wp-content/uploads/200707/12_152648_9351c585e4f0e3108479dae84ebf9086.jpg
Posted in Jimmy | Tagged | 2 Comments

甜甜薄荷糖

http://www.ishere.cn/wp-content/uploads/200707/12_151731_76edb6e6af52bd337ea655a42b4768cc.jpg

关于我想变成一棵树的想法,我
一直无法启齿。并非人际关系失
败,男女关系低能,或是毫无成
就感。更别把弗洛伊德、女性主
义,或者悲惨童年给牵扯进来。
我想做一棵树,只想随风飘摇。
枝叶繁茂。

我想做一棵树、只想青青翠翠。
平凡稳定。请别将简单的问题变
得复杂……有个朋友还只想做一
颗甜甜的薄荷糖呢。

Posted in Jimmy | Tagged | 1 Comment

access数据库导入mssql应该注意的几个地方[转]

1、在ACCESS中经常使用的自动编号字段,导入到MSSQL后,他并不是自增型的INT,需要手工设置,把导入后的自动编号字段的标识的“否”改为“是”,“种子”和“递增量”都为“1”,才能成为自动编号;

2、在MSSQL SERVER中,有许多保留字,在ACCESS中是没有的,当你把数据导入到MSSQL的时候,问题就出来了。MSSQL在导入的时候,会自动给这些字段(包括数据库中的表名)加上“[字段名]”,因此,你必须修改你的脚本,把相应的字段名字(或者表名字)加上中括号,或改变字段名字为不是MSSQL的保留字。
例如user应该写为[user]
(具体是那些,请参考有关资料)

3、在用ACCESS关于时间的使用,大家喜欢使用“SELECT * FROM AAAA WHILE TIME="&NOW()”这样的SQL语句,然而,在MSSQL中没有“NOW()”这个函数,而是使用“GETDATE()”,所以,所有的SQL语句中的“NOW()”必须换成“GETDATE()”,请吧sql语句和默认值改为getdate()。

4、在ACCESS中SQL如果用到mid(str,bengin,strlen),在MSSQL中没有这个函数,可以用这个代替left(right(str,len(str)-1),strlen),例如
Mid(”202.097.181.059”,5,3)
改为:left(right(”202.97.181.059”,len(”202.097.181.059”)-),3)

5、在ACCESS的SQL语句中的时间使用变量查询的时候,大家一般使用“SELECT * FROM AAAA WHILE TIME=#"&变量名&"#"”,在MSSQL中是不行的,他的语法是“SELECT * FROM AAAA WHILE TIME=”"&变量名&"”"”。(意思是让你把日期时间变量当成字符串来使用,呵呵~~~)

6、在需要用到时间计算的时候,通常大家使用“SELECT * FROM AAAA WHERE DATEDIFF(”dd”,#"&NOW()&"#,被比较的字段名)>0”这样的语法,在使用到MSSQL的时候是绝对通不过的,即使把#"&NOW()&"# 换成了”"&GETDATE()&"”也没有用,因为MSSQL中的DATEDIFF()函数不认识“”计算类型””里的单引号,你必须使用双引号,并且使用两个(ASP的语法规则)。因此这样的语句应该换成“SELECT * FROM AAAA WHERE DATEDIFF(""dd"",”"&GETDATE()&"”,被比较的字段名)>0”。

7、在ACCESS数据表中的“是/否”类型字段,导入到MSSQL后,是BIT字段,他的值不再是“TRUE”或“FALSE”,而是“1”和“0”,并且“1”和“0”在ASP中并不绝对等同于“TRUE”或“FALSE”,因此在引用这些数据的时候,要加以注意。

8、ACCESS中备注型在MSSQL中改为TEXT或者NTEXT性,长度默认为16就可以,不影响贴子长度!
9、ACCESS中SQL语句 delete * from 表名…. 再MS SQL中改为delete from….

10、ACCESS 中的好多默认值在MSSQL中需要手工添加,特别是int型,请对照改动!

Posted in mssql | Tagged | Leave a comment

解决Prototype.js传递中文参数的问题!

2007/06/29 更新:
增加随机码,确保每次都有效读取。

============================

这段时间一直对javascript挺感兴趣的。
前些日子开始用prototype的一些脚本,说起来惭愧,早就存在而且出名的东东,自己竟然不知道,唉。
用prototype.js的Ajax.Request实现异步传递真不错,可以把整个表单转换成string来传递,也可以单独获取某一个文本域的值,可是有一个缺点就是不支持中文参数传递(可能是我没发现),毕竟是老外的写的东东。经过一番琢磨,我发现是在内部脚本中对参数编码的问题,老外不管什么参数都用encodeURIComponent()函数进行编码,而中文则适用于escape()函数。经过测试,问题解决了,可以实现传递中文参数了。在实际应用中,可以指定encoding,若:encoding:”gb2312″,则自动转换为escape()函数进行编码;若不指定encoding则使用默认函数encodeURIComponent()。

我把修改过了prototype.js放上来,需要的朋友下载就是了,版本是1.5.0

Click Here To Download

Posted in keyboard's joy | Tagged , | Leave a comment

验证码表现类

近一段时间网上对BLOG恶意评论与引用越来越猖狂,真是太可恶了,提交需要验证码也不能阻止,真是气死我了. 想想原因,还是在验证码上,网上传说那些机器人可以分析验证码图片,真是太牛X了,但是你分析出来了也还是要提交的,对,就从输入框这下手,阻止他们!! 这招还真管用,我的BLOG自从换了验证码输入形式以后,几乎没有了机器人提交的东西,呵呵.下面给大家分享一下,希望为清理网络环境出一点力!

// JavaScript Document===验证码表现类
/*
///////////////////////////////////////////////////////////////////////////////
Jena’s Blog
作 者: 迦楠(Jena.want)
版权所有: IsHere.cn
技术支持: jena.want@gmail.com
单元名称: JENAValidCode
开始时间: 2007-5-30
最后修改:
参 数: instanceName-输入框名称;imgUrl-验证码程序地址;inputAmount-验证码位数.
备 注: 这是一个验证码表现类,支持内嵌各种类型的验证程序(gif,bmp…)
///////////////////////////////////////////////////////////////////////////////
*/
var inputsAmount;
function JENAValidCode(instanceName,imgUrl,inputAmount,inputStyle){
this.InstanceName = instanceName || ‘CheckCode’;
this.ImgUrl = imgUrl || ‘CheckCode.asp’;
this.InputAmount = inputAmount || 4;
this.InputStyle = inputStyle || ‘text’;

inputsAmount=this.InputAmount;
}
JENAValidCode.prototype.Create=function(){
var strs=”";
strs+= “<input name=\”"+ this.InstanceName +”\” type=\”hidden\” id=\”"+ this.InstanceName +”\” />”;
for(var i=1;i<=this.InputAmount;i++){
if(i==1){
strs+= “<input name=\”scode1\” id=\”scode1\” maxlength=\”1\” type=\”text\” class=\”"+ this.InputStyle +”\” onKeyUp=\”javascript:if(this.value!=”&&scode”+ (i+1) +”.value==”){scode”+ (i+1) +”.style.display=”;scode”+ (i+1) +”.focus();this.style.borderRight=’0px’;}”+ this.InstanceName +”.value=MusterValue()\” style=\”text-align:center; width:14px;\” />”;
}else if(i==this.InputAmount){
strs+= “<input name=\”scode”+ i +”\” id=\”scode”+ i +”\” maxlength=\”1\” type=\”text\” class=\”"+ this.InputStyle +”\” style=\”display:none;text-align:center; width:14px; border-width:1px 1px 1px 0px\” onKeyUp=\”javascript:”+ this.InstanceName +”.value=MusterValue()\” />”;
}else{
strs+= “<input name=\”scode”+ i +”\” id=\”scode”+ i +”\” maxlength=\”1\” type=\”text\” class=\”"+ this.InputStyle +”\” style=\”display:none;text-align:center; width:14px; border-width:1px 1px 1px 0px\” onKeyUp=\”javascript:if(this.value!=”&&scode”+ (i+1) +”.value==”){scode”+ (i+1) +”.style.display=”;scode”+ (i+1) +”.focus();this.style.borderRight=’0px’;}”+ this.InstanceName +”.value=MusterValue()\” />”;
}
}
strs+= ” <img src=\”"+ this.ImgUrl +”? + Math.random()\” id=\”secCode\” align=\”absmiddle\” />”;
strs+= “<span style=\”font-family:Verdana;font-size:9px;cursor:pointer;\” onclick=\”javascript:document.getElementById(‘secCode’).src=’”+ this.ImgUrl +”?’ + Math.random();scode1.value=”;scode1.focus();”
for(var i=2;i<=this.InputAmount;i++){
strs+=”scode”+ i +”.value=”;”
}
strs+=”\”> Another</span>”;
document.writeln(strs);
//return strs;
}
function MusterValue(){
var mustervalue=”";
for(var i=1;i<=inputsAmount;i++){
mustervalue+=document.getElementById(“scode”+i).value
}
return mustervalue;
}

Posted in keyboard's joy | Tagged , | Leave a comment