新鲜、有趣,互联生活。令狐葱。

显示标签为“编程设计”的博文。显示所有博文
显示标签为“编程设计”的博文。显示所有博文

2007/10/05

CSS禅意花园阅读笔记三:图像文本替换

CSS禅意花园 Page123

1. 图像替换方法的提出

起源于在他的网站StopDesign 上发表的一个文章Using Background-Image to Replace Text ,解释了图片替换的技巧。其发明者是Todd Fahrner,因此该方法又叫Fahrner Image Replacement (FIR)。

HTML:

<h1 id="pageheader"><span>css zen Garden</span></h1>

CSS:

#pageheader {
    background: url(lemion.gif) top left no-repeat;
    width:  400px;
    height: 20px;
}

#pageheader span {
    display: none;
}
2. Leahy/Langridge Method
<h3 id="header">
    Revised Image Replacement
</h3>

/* css */
#header {
    padding: 25px 0 0 0;
    overflow: hidden;
    background-image: url(sample-opaque.gif );
    background-repeat: no-repeat;
    height: 0px !important;
    height /**/:25px;
    }
3. Rundle Method
<h3 id="header">
    Revised Image Replacement
</h3>

/* css */
#header {
    text-indent: -5000px;
    height: 25px;
    background: url(sample.gif) no-repeat;
    }
注:Dave Shea在他的网站上有相关介绍

CSS禅意花园阅读笔记二:居中显示

CSS禅意花园 Page86

1. 使用自动外边距实现居中

div #container {
    margin-left: auto;
    margin-right: auto;
    width: 168px;
}

注意,必须为容器指定宽度。

2. 使用text-align 实现居中

body {
    text-align: center;
}

这样所有body的子元素都被居中显示,然后需要附加条件:

p {
    text-align: left;
}

3. 组合使用自动外边距和文本对齐

body {
    text-align: center;
}
#container {
    margin-left: auto;
    margin-right: auto;
    border: 1px solid red;
    width: 168px;
    text-align: left;
}

4. 使用负外边距

#container {
    position: absolute;
    left: 50%;
    width: 760px;
    margin-left: -380px;
}

CSS禅意花园阅读笔记一:创建良好的标记

CSS禅意花园 Page11
 
1. 选择DOCTYPE
 
在html代码开始的部分声明,展示你使用的html语言的类型。
 
举例:
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 
但更常用的是为过渡阶段设计的稍微不严格的标准:
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
注:1. 文档结构和表现分离可参考牛人Roger Johansson的作品Developing With Web Standards:http://www.456bereastreet.com/dwws
      2. 更多关于DOCTYPE参考大牛人Jeffrey ZeldmanFix Your Site With the Right DOCTYPE!
 
2. 指定语言和字符集
 
举例:
 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
3. 指定标题
 
举例:
 
<title>The Zen of CSS Gargen</title>
 
4. 选用恰当的元素
 
html标签的选择。
 
5. 避免过度使用div和span
 
6. 尽可能少的使用标签
 
7. 适当的使用class和id
 
在同一页面上可以为多个元素指定同一个class,但是不能指定同一个id。这就是二者的区别。

2007/10/04

HTML中的form 嵌套问题

习惯了使用<div>的嵌套方式,便理所当然的认为<form>也是可以嵌套的,不过今天却遇见了一个问题,描述如下:

<form   name="form1"   .....>  
      <form   name="form2"....>  
      </form>  
</form>  

在form2中有按钮,点击按钮的时候,需要将form2的数据以及form1中部分数据提交给服务器。想法很简单,比如form2是个上传组件,放在别的地方很不美观。在Firefox 上测试没有问题,但是,在IE 上的时候,按钮就失效了。

最后得出一个结论:HTML中是不允许 form 嵌套的,据说是因为form 和table 同源的缘故,不得而知。

php中显示当前页面地址的方法

在php中显示当前页面地址的方法如下:

echo "http://".$_SERVER[HTTP_HOST].$_SERVER[PHP_SELF];
echo "http://".$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI];//当页地址栏,含?后的请求项

输出如下:

http://127.0.0.1/main.php
http://127.0.0.1/main.php?catid=2

注意 :可能会出现提示Notice: Use of undefined constant HTTP_HOST 或者 Notice: Use of undefined constant REQUEST_URI,具体原因不是很清楚,我的解决办法就是在php文件开头加上:

error_reporting(1);//只显示错误信息

眼不见心不烦,呵呵。

2007/09/17

mysql命令行常用命令

mysql命令行常用命令

1.mysql服务的启动和停止
net stop mysql
net start mysql

2. 登陆mysql
语法如下: mysql -u用户名 -p用户密码
键入命令mysql -uroot -p, 回车后提示你输入密码,输入12345,然后回车即可进入到mysql中了,mysql的提示符是:
mysql>
注意,如果是连接到另外的机器上,则需要加入一个参数-h机器IP

3. 增加新用户
格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"
如,增加一个用户user1密码为password1,让其可以在本机上登录, 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令:
grant select,insert,update,delete on *.* to user1@localhost Identified by "password1";
如果希望该用户能够在任何机器上登陆mysql,则将localhost改为"%"。
如果你不想user1有密码,可以再打一个命令将密码去掉。
grant select,insert,update,delete on mydb.* to user1@localhost identified by "";

4. 操作数据库
登录到mysql中,然后在mysql的提示符下运行下列命令,每个命令以分号结束。
1、 显示数据库列表。
show databases;
缺省有两个数据库:mysql和test。 mysql库存放着mysql的系统和用户权限信息,我们改密码和新增用户,实际上就是对这个库进行操作。
2、 显示库中的数据表:
use mysql;
show tables;
3、 显示数据表的结构:
describe 表名;

5. 执行sql文件
mysql -u yourusername -D yourdatabasename < dbtables.sql
4、 建库与删库:
create database 库名;
drop database 库名;
5、 建表:
use 库名;
create table 表名(字段列表);
drop table 表名;
6、 清空表中记录:
delete from 表名;
7、 显示表中的记录:
select * from 表名;

第五招、导出和导入数据
1. 导出数据:
mysqldump --opt test > mysql.test
即将数据库test数据库导出到mysql.test文件,后者是一个文本文件
如:mysqldump -u root -p123456 --databases dbname > mysql.dbname
就是把数据库dbname导出到文件mysql.dbname中。
2. 导入数据:
mysqlimport -u root -p123456 < mysql.dbname。
不用解释了吧。
3. 将文本数据导入数据库:
文本数据的字段数据之间用tab键隔开。
use test;
load data local infile "文件名" into table 表名;

2007/09/10

SyntaxHighlighter:很优秀的代码着色工具

SyntaxHighlighter 是Google Code 上的一个开源项目,主要用于给网页上的代码着色,使用十分方便,效果也不错,而且几乎支持常见的所有语言。

安装使用方法:

1. 首先在页面上添加如下代码(假设下载后的SyntaxHighlighter放在SyntaxHighlighter目录下面,注意目录结构):

<link type="text/css" rel="stylesheet" href="SyntaxHighlighter/Styles/SyntaxHighlighter.css"></link>
<script language="javascript" src="SyntaxHighlighter/Scripts/shCore.js"></script>
<script language="javascript" src="SyntaxHighlighter/Scripts/shBrushCSharp.js"></script>
<script language="javascript" src="SyntaxHighlighter/Scripts/shBrushXml.js"></script>
<script language="javascript">
window.onload = function () {
dp.SyntaxHighlighter.ClipboardSwf = 'SyntaxHighlighter/Scripts/clipboard.swf';
dp.SyntaxHighlighter.HighlightAll ('code');
}
</script>

官方的安装中没有window.onload,我想这个还是需要的,毕竟,页面加载的时候我就需要给代码着色。

2. 使用方法如下:

方法一:使用pre
<pre name="code" class="c-sharp">
 ... some code here ...
</pre>

方法二:使用textarea
<textarea name="code" class="c#" cols="60" rows="10">
... some code here ...
</textarea>

另外,这里还有一些高级特性的设置方法可供参考,诸如代码折叠等。

我在互动wiki 上安装成功,安装方法如上, 第一步的修改代码放到doc.php文件的最后即可,以后编辑wiki的时候直接使用html模式即可按照第二步的方法给代码着色。

PS:CSDN的blog系统上使用的也是这个插件:>[本文代码不着色]

2007/09/06

PHP:GD画图提示“因其本身有错无法显示”

使用GD画图的代码大致如下所示

<?  
  $im=ImageCreate(300,200)   or   die("cannot   create   image");  
  $black=ImageColorAllocate($im,0,0,0);  
  $white=ImageColorAllocate($im,255,255,255);  
  Imagefill($im,0,0,$white);  
  ImageString($im,5,4,10,"Graphic   test",$black);  
  Header   ("Content-type:image/jpeg");  
  imagejpeg($im);  
  imagedestroy($im);  
  ?>  
本来是想做一个注册验证码的东西,但是session什么的都加上去之后发现在Firefox下提示"图像.......因其本身有错无法显示",而在IE下是那个恐怖的红叉!郁闷了半天,后来发现了一个解决方案,简单的要死:

把 <?  前面的空格全部去掉!

至于为什么,到现在还是没搞明白,php怎么竞有这些莫名其妙的问题!

提示:如上述代码显示错误,请 到这里查看

2007/08/13

Ubuntu 7.04下编译ffmpeg

1. 从svn上下载最新版本ffmpeg:
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

2. 到ffmpeg目录执行./configure
可能会出现以下错误提示:
gcc is unable to create an executable file.
If gcc is a cross-compiler, use the --cross-compile option.
C compiler test failed.
If you think configure made a mistake, make sure you are using the latest
version from SVN.  If the latest version fails, report the problem to the
ffmpeg-devel@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
Include the log file "config.err" produced by configure as this will help
solving the problem.
解决办法:
 apt-get install gcc libc6-dev
或者直接使用新立得搜索libc6-dev 安装,然后再./configure 即可。

3. make
一大串乱七八糟的东西。

4. make install
安装完毕。

2007/08/06

解决VS2005编译对winnt.h 报错的问题

使用VS.net2005编译JM的时候,出现类似以下的错误:
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnt.h(222) : error C2146: 语法错误 : 缺少";"(在标识符"PVOID64"的前面)

解决办法:
将:\program files\microsoft visual studio 8\vc\platformsdk\include\winnt.h(222) 中的typedef void * POINTER_64 PVOID64;
改成下面两行:
typedef void *POINTER_64;
typedef void *PVOID64;

其次,编译中有变量没有定义的问题,在其引用前加上相应的定义就可以,对普通的程序应用没有影响。

2007/08/01

Easy Ajax with jQuery[令狐葱翻译版(全)]

几天之前翻译了Easy Ajax with jQuery这篇文章的第一部分,但是发现放到blog上之后html代码会自动解析,很影响效果,所以我把我的译文放到了译言上,我比较欣赏的两个国内web2.0网站之一。

现在我在着手翻译一些其他的关于jQuery和/或Ajax的优秀文章,本着边学习边理解边翻译的原则来,如有误漏,还望大侠不吝赐教。

2007/07/31

12步让你的web1.0变成web2.0

原作者: slayerment    译者: 令狐葱  

 现在不是80年代了。互联网已经成为每个人生活中的一部分。你的那个陈旧过时的网站要不要也加入进来呢?如果你比较上进的话我想你的回答应该是 "YES"。不管web2.0是多么的让人讨厌,我还是收集了12个条目,让你可以轻松的把你的web1.0的网站升级到web2.0。

1. 把esomething.com 换成 MYsomething.com

如果你的网站域名前面有个蹩脚的"e",那就说明你的网站不是web2.0的。很容易觉得你的网站是个电子产品罢了。如果你在域名前用的是"my",这样看起来就亲切多了。

2. 把字体从10px变到12-16px

没人人喜欢虐待自己的眼睛。去掉字体很小的文本,为我们这些高效率的人士换成大的容易阅读的文本吧!

3. 把category 换成tag

如果你的网站只是限定在特定的分类,别人有什么理由阅读它呢?你的内容应该被动态的做上标签(tag),因此每个人都可以跟踪到他自己关注的某一方面。加个标签云吧!

4. 把新闻板块换成blog

人们想知道的关于公司的消息不仅仅只是那些官方的新闻。写一些很酷的、有趣的、傻傻的,什么都行!做此的一半目的是让你的读者觉得很享受。

5. 把邮寄给朋友换成RSS订阅

上次你给朋友email一个文章是什么时候?你用过它么?我是一次都没用过。去掉这个没用的功能,然后加上通过rss订阅你的网站甚至...

6. 把 加入到收藏夹 变成 social network this

你不能只让看到你网站的用户收藏它,使用 del.icio.us 以及Digg等社会化收藏网站吧,这样就可以想每个人展示你的网站。

7. 把用户账户 改成user profile (档案)

没人喜欢那十分单调的用户页,只有一个用户名和email(没错,我是再说Amazon)。他们需要一个丰富多彩的页面,可以展示他整个生活以及让全世界知道他有多棒。让你的用户加入进来吧!

8.  把硬编码的html 变成语义级html并使用css

总的来说你的设计很酷,但是你怎么升级它?你怎么改变它呢?如果需要增加新内容的时候你都怎么做(这点尤为重要)?去掉你旧的编程习惯,使用用css控制样式的语义html吧,对每个人来说这都是最好的选择!拜托!

9.  要得是用户不是点击率。

再次声明,现在不是80年代了,所以我们已经不在关注点击率了。我们关心的是用户(是的,唯一的用户)。在你的网站上放上Google Analytics,不要再谈论什么点击率了!

10. 增加评论功能

用户有发表以及分享的欲望,不要阻止他们,这对你的网站以及搜索引擎都有好处。

11. 把 esite.com?id=5235&sort=desc&useless=this &one%20more=still%20useless 这样的地址变成 mysite.com/meaningful-title

这个不用多说了吧

12. 把自建的网站换成开源的CMS

想想吧,扔掉你的整个网站,然后下载一个Drupal 或者Wordpress ,然后开始找一些免费的模板。毕竟,用户不是特别在乎你的网站到底是什么样。他们宁愿上一个感兴趣但是界面丑陋的网站,也不愿去光顾一个漂亮但是空无一物的网站。现在就开始行动吧!

结论

人们并不像使用一本书那样来使用网站。他们希望参与以及有所贡献。总之,让你的用户成为你网站的一部分,而不是要什么点击量。

2007/07/28

Easy Ajax with jQuery[令狐葱翻译版]

原文作者:Akash Mehta
原文地址:http://www.sitepoint.com/article/ajax-jquery
翻译:令狐葱 (转载请注明以上信息)


Ajax 在改变着web应用,并且带来了一种前所未有的桌面应用程序之外的震撼。但是,在这些宣传的背后我们应该意识到,其实ajax不过是——(X)HTML,Javascript以及XML,没什么新鲜的.在这个教程中,我将给你展示如何让简单的添加ajax到你的应用中去,并且教你如何使用一个流行的javascript库Jquey进行ajax开发.

1. 什么是ajax

你以前可能听说过ajax,或者至少用过ajax的应用--比如Gmail.简单的说,ajax就是使用javascript来异步地处理数据,而不是一下子重载整个页面.SitePoint上有个教程a good introduction to Ajax.另外,ajax这个词出自Jesse James Garrett的这篇著名的文章.

不幸的是,关于ajax深入的实践教程可以说少之又少,还有就是ajax中使用的XMLHttpRequest 类对初学网页开发的人来说有很大的难度.不过庆幸的是有一大批javascript库相继出现,为实现ajax提供了简单的方法.我们今天要用到的Jquery就是其中之一.

2. 什么是JQuery

Jquery是一个成熟的Javascript库,它提供许多其他库没有的特性.当然也得承认,它有19K之大,不想moo.fx那样只有3KB之轻.你可以在这里看到对许多javascript库性能以及其他方面的比较数据.

3. 先验知识

要学习此教程,你需要有基本的javascript只是,如果你懂c风格的语言,那么你可以对javascript很快上手.其实不过是大括号,函数声明以及可有可无的行末分号(对Jquery来说;为必须).如果你想学习javascript,可以看这个教程. 另外,既然我们讨论的是web应用,基本的html只是自然是必不可少的.

4. Jquery 101

让我们简单浏览一下jQuery.要想使用jQuery,首先你必须下载这个库.下载地址在这里(目前版本1.1.2).jQuery的语法非常简单:找到,然后做.我们从文档中选择元素则使用$().这个符号就相当于 document.getElementById(),不过除了支持ID外,它还支持css选择符以及一些XPath选择符. 而且,它可以返回一个元素的数组.好,也许举个例子可以更好的说明$()的功能.

我们想使用函数来操作我们的选择符.比如,把
"Hello World!" 添加到每个class为foo的div上去,然后设置颜色为红色,我们可以这样写代码:

$("div.foo").append("Hello World!").css("color","red");

很简单啊!一般情况下,这需要两行代码来完成:

$("div.foo").append("Hello World!");

$("div.foo").css("color","red");

jQuery的链接方法可以是允许你连写你的代码,这点别的库恐怕没有.有很多jQuery的函数不需要对象,也就是说独立工作,许多ajax相关的函数都这样.比如,我们将会使用的post函数,调用方式为$.post(parameters). 更多jQuery函数信息可以来online documentation 或者 visualjquery.com.

5. 示例一:我们的第一个ajax程序

作为一个例子,我们将做一个交互概念生成器.简单的说就是让我们从列表中随机选择两个选项,然后组合成一个词组.这个例子中我们将使用web2.0特性的词语(像'Mashup', 'Folksonomy', 'Media' 等等),通常情况下我们从文本文件中获得这些选项.为节省用户用javascript下载每一个组合(或者至少每一个元素)的时间,我们将在服务器端快速生成它,并且使用jQuery在客户端获取到它.jQuery可以很好的和javascript结合使用,所以你将发现在代码中使用它将使工作变得十分容易.

服务器端代码(php):
简单起见,我们使用最简单的代码来做我们的概念生成器.不要担心他是如何工作的,注意看它是干什么的:输出一句话.注意,这段代码没有输出xml,他只是输入一个纯文本:

&lt;?php

header("Cache-Control: no-cache");

// Ideally, you'd put these in a text file or a database.

// Put an entry on each line of 'a.txt' and use $prefixes = file("a.txt");

// You can do the same with a separate file for $suffixes.

$prefixes = array('Mashup','2.0','Tagging','Folksonomy');

$suffixes = array('Web','Push','Media','GUI');

// This selects a random element of each array on the fly

echo $prefixes[rand(0,count($prefixes)-1)] . " is the new "

. $suffixes[rand(0,count($prefixes)-1)];

// Example output: Tagging is the new Media

?&gt;


这里,我们使用 Cache-Control 头选项是因为IE总是为同一个地址建立缓存,甚至页面内容有变化时也是.很明显,这对我们的例子很不利,因为我们在每次加载的时候重新生成一句话.我们也可以使用jQuery生成一个随机数加到地址的后边,不过这不像在服务器端这样处理比较简单.[译者著:其实作者在这里提供了ajax和IE cache冲突的两种解决方案.]

客户端代码(html)

可以开始编写前端代码了,然后我们就可以把ajax加进去了. 我们需要做的仅仅是加一个按钮,好让用户点击一下获得一句新的语句,还有一个div标签,好让我们在从服务器端接收到语句的时候显示在div里面.我们将使用jQuery选中这个div以及加载返回的那句话,我们可以使用div的id来引用它. 如果需要,你可以加载这句话到不同的元素标签中,这可能需要使用class了.不过这里,我们仅仅需要使用id就够了.此页面body标签中的内容为:

&lt;input type="submit" id="generate" value="Generate!"&gt;

&lt;div id="quote"&gt;&lt;/div&gt;

一般说来,我们需要为这个按钮(就是这个id为generate的input)加上一个冗长的
onSubmit 事件. 有时,我们用onSumit事件调用一个Javascript函数. 但是在jQuery里面,我们设置不需要修改任何html代码,我们可以简单的实现行为(事件处理)和结构(html代码)的分离.

客户端代码(jQuery)

终于该使用jQuery把我们的后台和前台结合到一起了.前面我提到我们可以使用jQuery从DOM中选择元素. 首先,我们应该ixuanze这个按钮,并给它一个onClick事件响应. 在这个事件代码中,我们可以选中div并且载入内容.下面是click事件响应的写法:

$("element expression").click(function(){

// Code goes here

});

可能你已经知道,在CSS里选择一个元素的时候我们使用#来使用元素的id属性. 你可以在jQuery里使用同样的语法.因此,要选择那个按钮,我们可以使用#generate. 注意,这种语法可以让我们把事件处理函数定义成匿名的.

Mark Wubben's JavaScript Terminology page 提供了详细的关于匿名函数的解释,有兴趣可以参考.

我们将要使用jQuery中一个比较高级的ajax函数:load(). 假设我们的代码保存为script.php.我们这样把它和我们的客户端整合起来:

$("#generate").click(function(){

$("#quote").load("script.php");

});

只有:3行代码!现在我们已经做了一个完整的ajax随机语句生成器了!不错!

问题是javascript代码并不是在一个浏览器加载完就执行的函数内. 这样的话,这段代码就会试图去关联一个可能还没有被加载的元素.一般情况下我们使用window.load来处理这个问题,不过这种方法的局限性在于,window.load只在所有的东西(图片及其它)被加载完成后加载一次.我们对等待这些图片的加载可能毫无兴趣--我们只是需要去获得DOM中的元素罢了.

幸运的是,jQuery有一个
$(document).ready()函数,如其名,它在DOM被加载完之后就被执行.

完整的代码

下面是完整的代码,使用
$(document).ready()以及一些简单的html和css:

&lt;html&gt;

&lt;head&gt;

&lt;title&gt;Ajax with jQuery Example&lt;/title&gt;

&lt;script type="text/JavaScript" src="jquery.js"&gt;&lt;/script&gt;

&lt;script type="text/JavaScript"&gt;

$(document).ready(function(){

$("#generate").click(function(){

$("#quote p").load("script.php");

});

});

&lt;/script&gt;

&lt;style type="text/css"&gt;

#wrapper {

width: 240px;

height: 80px;

margin: auto;

padding: 10px;

margin-top: 10px;

border: 1px solid black;

text-align: center;

}

&lt;/style&gt;

&lt;/head&gt;

&lt;body&gt;

&lt;div id="wrapper"&gt;

&lt;div id="quote"&gt;&lt;p&gt; &lt;/p&gt;&lt;/div&gt;

&lt;input type="submit" id="generate" value="Generate!"&gt;

&lt;/div&gt;

&lt;/body&gt;

&lt;/html&gt;


代码可以在这里下载,注意你的jquery需要保存在php文件的同目录,并且名为 jquery.js .现在你已经熟悉jQuery了,让我们做些更复杂的:表单元素和XML处理,这才是真正的ajax!

预知后事如何,且听下回分解.

Powered by ScribeFire.

2007/07/27

[PHP+MySql]解决 supplied argument is not a valid MySQL result resource...

问题描述
在使用mysql_num_rows()函数的时候出现警告:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource...

非完美解决方案
在mysql_num_rows函数前加@,即写成
$num = @mysql_num_rows($result);

PS:@符号即为禁止显示出错信息,不知用在此处何意。

Tag Clouds 的一个PHP+MySql 实现

Tag Clouds 的一个很不错的实现,简单易用,代码来自这里,可以参考这里

 <?php

// connect to database at some point

// In the SQL below, change these three things:
// thing is the column name that you are making a tag cloud for
// id is the primary key
// my_table is the name of the database table

$query = "SELECT thing AS tag, COUNT(id) AS quantity
FROM my_table
GROUP BY thing
ORDER BY thing ASC";

$result = mysql_query($query);

// here we loop through the results and put them into a simple array:
// $tag['thing1'] = 12;
// $tag['thing2'] = 25;
// etc. so we can use all the nifty array functions
// to calculate the font-size of each tag
while ($row = mysql_fetch_array($result)) {

$tags[$row['tag']] = $row['quantity'];
}

// change these font sizes if you will
$max_size = 250; // max font size in %
$min_size = 100; // min font size in %

// get the largest and smallest array values
$max_qty = max(array_values($tags));
$min_qty = min(array_values($tags));

// find the range of values
$spread = $max_qty - $min_qty;
if (0 == $spread) { // we don't want to divide by zero
$spread = 1;
}

// determine the font-size increment
// this is the increase per tag quantity (times used)
$step = ($max_size - $min_size)/($spread);

// loop through our tag array
foreach ($tags as $key => $value) {

// calculate CSS font-size
// find the $value in excess of $min_qty
// multiply by the font-size increment ($size)
// and add the $min_size set above
$size = $min_size + (($value - $min_qty) * $step);
// uncomment if you want sizes in whole %:
// $size = ceil($size);

// you'll need to put the link destination in place of the #
// (assuming your tag links to some sort of details page)
echo '<a href="#" style="font-size: '.$size.'%"';
// perhaps adjust this title attribute for the things that are tagged
echo ' title="'.$value.' things tagged with '.$key.'"';
echo '>'.$key.'</a> ';
// notice the space at the end of the link
}

?>

2007/07/26

Tag Clouds标签云的实现

关于Tag Clouds,可能网上见过不少,不过具体的实现说的不多,在24Way上看到一个不错的文章,先是把delicious、flickr、Technorati等web2.0大家的tag clouds 表现形式逐一批判了一下,然后提出了自己的一个解决方案。总的来说,还比较简单,不过我在想,到底是根据什么来分这个等级呢?如果仅仅是个数字,那这个数字是多少才算个界限呢?

文章中的方法实现如下(可以直接在这里查看源代码):
CSS: 

  1. <style type= 'text/css'>
  2. /* display the individual items next to each other, not one-per-line */
  3. .tag-cloud li { display: inline; }
  4. /* hide the extra context from CSS-enabled browsers, but not screenreaders */
  5. .tag -cloud span { position: absolute; left: -999px; width: 990px; }
  6. /* size is purely presentational, based upon the class */
  7. . tag-cloud .not-popular { font-size: 1em; }
  8. .tag-cloud .not-very-popular { font-size: 1.3em; }
  9. .tag-cloud .somewhat-popular { font-size: 1.6em; }
  10. .tag-cloud .popular { font-size: 1.9em; }
  11. .tag-cloud .very-popular { font-size: 2.2em; }
  12. . tag-cloud .ultra-popular { font-size: 2.5em; }
  13. </style>
  14.  
HTML:
  1.  
  2. <ol class='tag-cloud'>
  3. <li class="somewhat-popular"> <span>44 photos are tagged with </span> <a href='http://flickr.com/photos/mn_francis/tags/125shaftesburyavenue/' class='tag'>125 Shaftesbury Avenue</a> </li>
  4. <li class="not-popular" ><span>2 photos are tagged with </span> <a href='http://flickr.com/photos/mn_francis/tags/airlinefood/' class='tag'>airline food</a> </li>
  5. <li class="ultra-popular" ><span>344 photos are tagged with </span> <a href='http://flickr.com/photos/mn_francis/tags/austin/' class='tag'>austin</a> </li>
  6. <li class="not-very-popular" ><span>12 photos are tagged with </span> <a href='http://flickr.com/photos/mn_francis/tags/badjoke/' class='tag'>bad joke</a> </li>
  7. ........
  8. </ol>
  9.  

[CSS]长字符串截取问题

经常会碰到很长很长的地址,往往容易把框架撑破,显示很不美观。一种稍显勉强的解决方案是多出部分不显示,也就是使用overflow。

示例:
.content {
    width:200px;
    /* 禁止自动换行 */
    white-space:nowrap;
    /* 隐藏超出部分 */
    overflow:hidden;
    /* 用省略号代替结尾, 只对 IE6+有效 */
    text-overflow:ellipsis;
}

2007/07/25

解决Mysql中出现Data too long for column ‘test’ at row 1的问题

之前写过一个post 解决我遇到的php读写mysql 中文乱码问题,今天又碰到一个比较奇怪的问题,后来试了一下,发现基本上是一个问题:编码!

问题描述:在更新或者添加数据库条目的时候出现如下提示:Data too long for column 'test' at row 1。

解决方法:方法一:使用Mysql Query Browser 修改该字段的属性,把Column Charset 改成utf-8

方法二:直接在程序中写mysql_query("set character set gbk");

2007/07/23

JavaScript URL地址传递中的中文乱码问题

无法查看这则摘要。请 点击此处查看博文。

2007/07/22

PHP操作数据库详解(一)

1. 建立和关闭连接byLinghucong

1) mysql_connect()
    resource mysql_connect([string hostname [:port][:/path/to/socket][,string username] [,string password]])
    所有参数都是可选的
    举例:
    @mysql_connect("localhost", "webuser", "password")
    or die("Could not connect to mysql server!");
    注意,@符号表示禁止失败尝试导致的任何错误信息,用户将看到的是die()中指定的错误信息.
    
    注意,当与多个mysql进行连接时,必须指定每个连接的链接ID,如下:
    $link1 = @mysql_connect("server1", "webuser", "password")
    or die("Could not connect to mysql server!");
    $link2 = @mysql_connect("server2", "webuser", "password")
    or die("Could not connect to mysql server!");

2) mysql_pconnect()
   resource mysql_pconnect([string hostname [:port][:/path/to/socket][,string username] [,string password]])
    与mysql_connect()不同的是:会首先查找现有链接,不存在时才创建.
    注意,不需要显示关闭连接(mysql_close()),因为连接将放在池中,所以叫持久连接.

3) mysql_close()
    boolean mysql_close([resource link_id])
    关闭连接不是必须的,因为可以由mysql的垃圾回收来处理.
    如果没有指定link_id,则关闭最近的链接.
    
2. 选择数据库 byLinghucong
    mysql_select_db()
    boolean mysql_select_db(string db_name [, resource link_id])

3. 查询MySql

1) mysql_query()
    resource mysql_query(string query [,resource link_id])
    负责执行query.

2) mysql_db_query()
    resource mysql_db_query(string database, string query [, resource link_id])
    等价于mysql_select_db() + mysql_query(),从参数中就可以清楚的看出来.
    
4. 获取和显示数据 byLinghucong

1) mysql_result()
    mixed mysql_result(resource result_set, int row [,mixed field])
    从result_set 的指定row 中获取一个field 的数据. 简单但是效率低.
    
    举例:
    $link1 = @mysql_connect("server1", "webuser", "password")
    or die("Could not connect to mysql server!");
    @mysql_select_db("company") or die("Could not select database!");
    
    $query = "select id, name from product order by name";
    $result = mysql_query($query);
    $id = mysql_result($result, 0, "id");
    $name = mysql_result($result, 0, "name");
    
    mysql_close(); byLinghucong
    
    注意,上述代码只是输出结果集中的第一条数据的字段值,如果要输出所有记录,需要循环处理.
    ...
    for ($i = 0; $i <= mysql_num_rows($result); $i++)
    {
        $id = mysql_result($result, 0, "id");
        $name = mysql_result($result, 0, "name");
        echo "Product: $name ($id)";
    }
    ...
    
    注意,如果查询字段名是别名,则mysql_result中就使用别名.byLinghucong

2) mysql_fetch_row()
    array mysql_fetch_row(resource result_set)
    从result_set中获取整行,把数据放入数组中.
    举例(注意和list 的巧妙配合):
    ...
    $query = "select id, name from product order by name";
    $result = mysql_query($query);
    while(list($id, $name) = mysql_fetch_row($result)) {
        echo "Product: $name ($id)";
    }
    ...
    
3) mysql_fetch_array() byLinghucong
    array mysql_fetch_array(resource result_set [,int result_type])
    mysql_fetch_row()的增强版.
    将result_set的每一行获取为一个关联数组或/和数值索引数组.
    默认获取两种数组,result_type可以设置:
    MYSQL_ASSOC:返回关联数组,字段名=>字段值
    MYSQL_NUM:返回数值索引数组.
    MYSQL_BOTH:获取两种数组.因此每个字段可以按索引偏移引用,也可以按字段名引用.
    举例:
    ...
    $query = "select id, name from product order by name";
    $result = mysql_query($query);
    while($row = mysql_fetch_array($result, MYSQL_BOTH)) {
        $name = $row['name'];//或者 $name = $row[1];
        $name = $row['id'];//或者 $name = $row[0];
        echo "Product: $name ($id)";
    }
    ... byLinghucong
    
4) mysql_fetch_assoc()
    array mysql_fetch_assoc(resource result_set)
    相当于 mysql_fetch_array($result, MYSQL_ASSOC)
    
5) mysql_fetch_object()
    object mysql_fetch_object(resource result_set)
    和mysql_fetch_array()功能一样,不过返回的不是数组,而是一个对象.
    举例:
    ...byLinghucong
    $query = "select id, name from product order by name";
    $result = mysql_query($query);
    while($row = mysql_fetch_object($result)) {
        $name = $row->name;
        $name = $row->id;
        echo "Product: $name ($id)";
    }
    ...
    
5. 所选择的记录和受影响的记录 byLinghucongbyLinghucong

1) mysql_num_rows()
    int mysql_num_rows(resource result_set)
    返回result_set中的行数.
    注意,mysql_num_rows()只在确定select语句查询获得的记录数有效,如果要获取insert/updata/delete查询影响的记录数,需要使用mysql_affected_rows().

2) mysql_affected_rows()
    int mysql_affected_rows([resource link_id])
    获取insert/updata/delete查询影响的记录数
    注意,不需要输入参数,默认使用最近建立的数据库连接的最近结果.可以使用可选参数link_id来选择数据库连接.
    
6. 获取数据库和表的信息
1) mysql_list_dbs() byLinghucong
    resource mysql_list_dbs([resource link_id])
    获取服务器上所有数据库名称.
    举例:
    mysql_connect("localhost", "name","pwd");
    $dbs = mysql_list_dbs();
    while (list($db) = mysql_fetch_row(dbs)) {
        echo "$db <br>";
    }
    注意,输出结果与使用的用户权限相关.

2) mysql_db_name() byLinghucong
    string mysql_db_name(resource result_set, interger index)
    获取在mysql_list_dbs()返回的result_set中位置为index的数据库名.
    
3) mysql_list_tables()
    resource mysql_list_tables(string database [,resource link_id])
    获取database中的所有表名.
byLinghucong
4) mysql_tablename()
    string mysql_tablename(resource result_set, interger index)
    获取mysql_list_tables()返回的result_set中位置为index的表名.