Archive for the ‘原创技术文章’ Category

javascript怪异的access is denied

二月 15th, 2008

要实现这样一个功能,一个活动很多人报名,后台做操作界面,可以给某些数据做一下标记。
本地开发,本地的环境+测试数据测试通过,到了线上,就死活不行。
因为表单有简单的校验,用了javascript的document.submit()。总是报错,说 access is denied
原来怀疑是因为提交的按钮在浮动层的原因,后来发现数据量大了就不行,因为每条数据会有checkbox。
网上google了半天,也没有对症的解决方法,大多是安全因素造成的。在冥思苦想没有结果,正一筹莫展的时候。突然想起了GET提交的数据长度是有2048个字节的限制的。
然后查看了代码,原来从别的地方复制过来的form表单,用的是get方法,改成method=”post”后,问题解决。

车到山前啊。

Popularity: 23%

为google toolbar添加https的gmail button

十二月 18th, 2007

google的toolbar是我浏览器装的唯一一个工具条,gmail是我现在使用的主力邮箱,google toolbar的功能就不介绍了,它和google的其它产品结合的比较好。
google toolbar可以添加Custom Button,比如你经常在A网站搜索,可以在搜索框的地方点右键,菜单最下面会有一个“Generate Custom Search…”,按照提示走,可以在你的工具条上增加一个按钮,如果A网站设置了favorite icon的话,按钮就是这个icon。你可以在工具条搜索的地方输入要搜索的内容,点击自己增加的那个button,那么会调用A网站的搜索程序来进行搜索。
可以用本站右上角的搜索框测试一下,一定要先装google的toolbar哦。
gmail也可以增加到toolbar上,但是有一个问题,就是,增加后是http连接的,但是有时候可能会因为网络或其他原因,http不能用,每次都要去修改为https的连接。
找到2个方法
方法一
用https://www.gmail.com/打开gmail,在左边的 Invite a friend –>Give Gmail to: 输入框里点邮件,生成一个custom的search,优点是简单,方便,缺点是,不能搜索,只是加了一个链接而已。
方法二
首先按正常方法增加一个gmail button,然后要改一下配置文件,开始–>运行,输入

%USERPROFILE%\Local Settings\Application Data\Google\Custom Buttons

会有几个xml文件,我这里是一个
toolbar.google.com_J66T77NJDBMW4FEUU7FA.xml
打开,搜索

http://mail.google.com

替换为

https://mail.google.com,应该有三个位置。

保存后,重新开浏览器,发现搜索和直接点击都已经是https的连接。

更多google api的信息 http://www.google.com/tools/toolbar/buttons/apis/

Popularity: 19%

Groovlets (groovy servlet) 的 helloword

十二月 13th, 2007

需要
Groovy Version: 1.5.0
resin pro 3.1.4
groovy的安装,略

启动resin后,会有一个%RESIN_HOME%\webapps\ROOT\WEB-INF\web.xml文件。
增加如下内容

<servlet>
      
<servlet-name>GroovyServlet</servlet-name>
      
<servlet-class>groovy.servlet.GroovyServlet</servlet-class>
    
</servlet>
    
<servlet>
        
<servlet-name>GroovyTemplate</servlet-name>
        
<servlet-class>groovy.servlet.TemplateServlet</servlet-class>   
    
</servlet>
    
<servlet-mapping>
        
<servlet-name>GroovyServlet</servlet-name>
        
<url-pattern>*.groovy</url-pattern>
    
</servlet-mapping>
    
<servlet-mapping>
        
<servlet-name>GroovyTemplate</servlet-name>
        
<url-pattern>*.gsp</url-pattern>
    
</servlet-mapping>

copy %GROOVY_HOME%\lib\下的
groovy-1.5.0.jar
asm-2.2.jar
antlr-2.7.6.jar

%RESIN_HOME%\lib
启动resin,在
%RESIN_HOME%\webapps\ROOT下新建2个文件
hello.gsp
————-

<%
def h="hello"
def w="world"
println "$h $w"
print 2+2
println " times"
 %>

hello.groovy
——-

println """
<html>
    <head>
        <title>Groovy Servlet</title>
    </head>
    <body>
Hello world @ ${new Date()}
    </body>
</html>
"""

运行后

http://localhost:8080/1.gsp

http://localhost:8080/a.groovy

的内容分别为
hello world 4 times
Hello world @ Thu Dec 13 23:04:18 CST 2007

Popularity: 17%

注意.js文件的编码

十二月 6th, 2007

在调试javascript代码的时候在a.html引用了b.js这个文件。
原来测试都没有问题,但是paste了一些原来的老代码后,ie出现js报错,但是firefox不抱错。
报错的信息如下:
return statement outside of functions
狗了半天,说是retrun写的位置不对,但是新写的代码和老的代码都没问题啊,一直在用。没办法,只能一段段的删除
期间还报过下面的错误
XXX is not defined
XXX是一个函数里面传过来的变量。函数都没用,居然也抱错。狠奇怪。
最后只剩2个function了,中间有一段代码的注释,是中文的。我把注释删掉,好了!

突然想起来问题所在了,原来是编码问题。上面的a.html是utf-8编码,而js里面的中文是gbk的编码,由于a.html是全英文的,所以没注意编码。而老的代码一直都是在gbk或者gb2312编码的页面上用,所以一直也没问题。

最后修改a.html为gbk的编码,问题解决。
比较好的习惯可能应该是公用的js代码里面不要用中文的注释。。

Popularity: 31%

oracle null值的排序

十月 18th, 2007

原来写过一个程序,需要按照数据的更新日期的倒叙来排序来排序。oracle好像是把null当作最大的值,测试了varchar2和number也是这样认为的。

» More: oracle null值的排序

Popularity: 24%

jquery选择例子3

九月 27th, 2007

选取一个name为”S_03_22″的input text框的上一个td的text值
$(“input[@name=S_03_22]“).parent().prev().text()

名字以”S_”开始,并且不是以”_R”结尾的
$(“input[@name^='S_']“).not(“[@name$='_R']“)

一个名为radio_01的radio所选的值
$(“input[@name=radio_01][@checked]“).val();

Popularity: 31%

删除表中重复数据的sql

八月 21st, 2007

一张多用户的通讯记录表,主要是手机信息,每个用户可以建立自己的联系人组。
原来数据对数据没有校验,用户可以在一个组里面输入重复手机号码,如果数据量大,会造成数据重复。
所以要做一个唯一性的索引,如下:

create unique index inx_uniq_cellphone_onegroup on addresslist (cellphone, groupid, operatorid);

目的是保证每个用户的每个组里面,不能有同样的cellphone。
但是建立的时候出错,因为里面原来有重复的数据。
清除重复的数据,用如下的sql,如果重复的就删除rowid不等于max(rowid)的那条记录。

delete addresslist
 
where rowid not in (select rowid1
                      
from addresslist a,
                            
(select cellphone,
                                    
groupid,
                                    
operatorid,
                                    
max(rowid) rowid1,
                                    
count(*)
                              
from addresslist
                              
group by cellphone, groupid, operatorid) b
                      
where a.cellphone = b.cellphone
                        
and a.groupid = b.groupid
                        
and a.operatorid = b.operatorid
                        
and a.rowid = b.rowid1)

Popularity: 19%

share一下贝贝成长进度的php代码

七月 23rd, 2007

主要功能是根据贝贝的出生日期来显示贝贝现在多大了,实时显示贝贝的成长。
用当前时间减去出生的日期,但是可以显示出来几岁,几个月,和几天。
天的算法有点问题,没有考虑到大小月和2月份。

function getDays() {
    
putenv("TZ=Asia/Chongqing");
    
$by = 2006;
    
$bm = 7;
    
$bd = 7;
    
$rday="";
 
    
$today = getdate();
    
$by = $today[year] - $by;
    
$bm = $today[mon] - $bm;
    
$bd = $today[mday] - $bd;
    
if ($bd < 0) {
        
$bd = 30 + $bd;
        
$bm--;
    
}
    
if ($bm < 0) {
        
$bm = 12 + $bm;
        
$by--;
    
}
    
#print $by."-".$bm."-".$bd;
    
if ($by > 0) {
        
$rday = $by . "";
    
}
    
if ($bm == 0&&$bd == 0){
        
$rday .="生日";
    
}else{
        
if ($bm == 0){
            
$rday.="".$bd."";
        
}elseif ($bd == 0){
            
$rday.=$bm."个月整";
        
}else{
            
$rday.=$bm."个月".$bd."";
        
}
    
}
    
return $rday;
}

用的时候直接

<?php echo getDays();?>

就可以了
空下来再完善以下,再写一个js的版本。
有bug请拍砖,有好的写法请留言。
您可以免费用,但是请留个到本页的链接。谢谢

Popularity: 31%

mysql去除特殊asc码

七月 22nd, 2007

要做一个mysql数据导入并且更新的工作。数据源是excel里来的。
选中excel里面左上角的元素,ctrl+shift+end,选中全部有内容的cell。另存为一个abc.txt的文件。
数据只有2列,建了一个有2列的表,准备把数据load进去,用root用户登录的,在mysql的shell运行如下命令
load data infile ‘/root/test.dat’ into table mytable FIELDS TERMINATED BY ‘\t’;
结果报错。
ERROR 13 (HY000): Can’t get stat of ‘/root/test.dat’ (Errcode: 13)
后来google,说是权限的问题,看来可能是mysql不能读root目录下的文件,随便换了个目录,问题解决。
load data infile ‘/tmp/test.dat’ into table ppname FIELDS TERMINATED BY ‘\t’;
但是后来出现的问题,基本让我崩溃。
举个例子

mysql> select * from mytable;
+------+------+
|
a    | b    |
+------+------+
 |
aaa  | aaa
+------+------+
1 row in set (0.00 sec)

肉眼看上去,a和b是一样的,然后我就按照一样的去匹配,奇怪的是怎么做都不行,刚开始以为是大小写的问题,作了lower操作还是不行。
后来开始不相信自己的眼睛了,查看一下到底是什么

mysql> select hex(a),hex(b) from mytable;
+--------+----------+
|
hex(a) | hex(b)   |
+--------+----------+
|
616161 | 6161610D |
+--------+----------+
1 row in set (0.00 sec)

这个时候才发现每个字符后边多了一个
0D
被这个问题搞了个把钟头,郁闷的要死。做了以下处理,终于乌云散尽看见阳光了。
update mytable set b=UNHEX(TRIM(TRAILING ’0D’ FROM hex(b)));

奇怪的是我模拟不出来这种数据,本来以为是没有加“LINES TERMINATED BY ‘\n’”的问题,可是后来加了也不行,:S
看来眼见不一定为实啊。

Popularity: 17%

jquery 3例

七月 20th, 2007

jquery使用2例
1.把

<div id="a01">0</div>

里面的数值增加1
$(“#a01″)[0].innerHTML=parseInt($(“#a01″)[0].innerHTML)+1;
2.所有的checkbox有多少个选上的
var all_check=$(“input[@type='checkbox'][@checked]“);
alert(all_check.length+”个选中”);
3.给每个checkbox增加click事件

$("input[@type='checkbox']").click(function(){
                                
Redirect_login()
                                
return true;
                            
});

Popularity: 19%