<?xml version="1.0" encoding="gb2312" ?><rss version="2.0"><channel><title>Cenus Design</title><link>http://www.cenusblog.com</link><description>个人作品发布</description><category>个性化的blog</category><language>zh-cn</language><generator>http://www.cenusblog.com</generator><webMaster>sunechome@126.com</webMaster><pubDate>2008-11-20 15:11:36</pubDate><lastBuildDate>2008-11-20 15:11:36</lastBuildDate><ttl>30</ttl> <copyright>Copyright 2008,Cenus Design</copyright><item><title>linux vm 平台搭建问题记录</title><link>www.cenusblog.com/comments.asp?id=102</link><description><![CDATA[<P>linux vm 研习日记<BR>2008-11-16 </P>
<P>1.经过前段时间找工作等震荡，本来搭好的vm linux平台，突然不能与宿主联网<BR>&nbsp; 重装主机xp,重装vm，重装linux........<BR>&nbsp; 一大套下来，还是不行。郁闷了，不知从何下手，问了google,答案与我预想相似<BR>&nbsp; 无外乎网卡用桥连，但是我之前试过，无效，现在只能从新从这个突破口理清思路了<BR>&nbsp; a.首先装上6.5.0绿色精简汉化版本， 第一次装还不好用，卸了，重启<BR>&nbsp;&nbsp;&nbsp; 突然想起完整版没有注册机，而这个精简的有，那么又装一遍。结果居然可用。<BR>&nbsp;&nbsp;&nbsp; 呵呵，管那么多，能用就是王道。<BR>&nbsp;&nbsp;&nbsp; 用起来发现，除了没有在宿主机器建立两块vm网卡外，没有什么缺失，五脏俱全。<BR>&nbsp; b.用之重装redhat as 4完毕，怀着忐忑之心开启，ping网关，失败。。。。。。！！<BR>&nbsp;&nbsp;&nbsp; 关虚机后发现网卡不是桥连，改之！重启，再次忐忑ping网关，居然通了！<BR>&nbsp;&nbsp;&nbsp; 没天理呀，通就通了吧，好用就行。</P>
<P>2.继续后面的工作<BR>&nbsp; a.远程登录，使用putty（体积小，单文件，绿色版）ssh登录linux,但是发现中文乱码<BR>&nbsp;&nbsp;&nbsp; google后，解决方案为：<BR>&nbsp;&nbsp;&nbsp; 修改配置文件/etc/sysconfig/i18n 加入LANG="zh_CN.GB2312",原来的UTF-8注释掉,ok<BR>&nbsp; <BR>&nbsp; b.开启ftp，并允许root用户登录<BR>&nbsp;&nbsp;&nbsp; 在这个版本里，使用rh4自带的vsftp(very security ftp)呵呵，如此安全的服务器不用，<BR>&nbsp;&nbsp;&nbsp; 岂不成了“释骐骥而不乘，焉皇皇而更索”。<BR>&nbsp;&nbsp;&nbsp; 开启方法如下：chkconfig vsftpd on,重启后自动开启ftp.<BR>&nbsp;&nbsp;&nbsp; 修改root可以登录的方法是，修改两个配置文件，其中有不能使用的用户名单，<BR>&nbsp;&nbsp;&nbsp; 见root在前面加#注释，两个文件为<BR>&nbsp;&nbsp;&nbsp; /etc/vsftp.ftpusers<BR>&nbsp;&nbsp;&nbsp; /etc/vsftp.user_list</P>
<P>&nbsp;</P>
<P>后记<BR>连日奋战，前夜疲劳过甚，所以于今晨总结得失</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-11-16</pubDate></item><item><title>电脑无法读取U盘的解决方法</title><link>www.cenusblog.com/comments.asp?id=101</link><description><![CDATA[<P>　　有很多朋友说将USB盘插入电脑后，虽然USB指示灯正常亮起，但是在我的电脑里却看不见USB盘被加载。</P>
<P>　　一般可以尝试一下两个方法：</P>
<P>　　第一，右键<FONT color=#ff0000>我的电脑</FONT> -&gt; 左边窗口选择<FONT color=#ff0000>磁盘管理</FONT> -&gt; 察看右边窗口是否存在<FONT color=#000000>磁盘1</FONT>，如果存在，那么<FONT color=#ff0000>右键磁盘1右边的图表区域</FONT>，选择<FONT color=#ff0000>打开或者资源管理器</FONT>，应该就可以查看到USB盘中的内容了。</P>
<P>　　第二，可能因为USB加载的盘符正好被拟用作了映射驱动器，此时，你只需点击你的映射驱动盘符即可。如果你想将两者区分开，你可以按照第一种情况下的操作方法，右键磁盘1右边的图表区域，选择<FONT color=#ff0000>更换驱动器名或路径</FONT>，然后赋予USB另一个盘符即可。</P>
<P>　　大家要注意，这两种情况的前提是，你的USB在插入电脑后<FONT color=#ff0000>USB上的指示灯是正常亮起</FONT>的，如果连指示灯都不亮，那么就有可能是因为你USB盘本身的问题或者是电脑禁止了USB的使用，那么，这就不属于这篇文章讨论范围之内了~</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-11-6</pubDate></item><item><title>类似大众点评网系统源代码</title><link>www.cenusblog.com/comments.asp?id=100</link><description><![CDATA[<P>　　终于！历经两个多月的业余时间开发！<STRONG><FONT color=#ff0000>一套类似于大众点评网的PHP系统终于初见雏型</FONT></STRONG>！</P>
<P>　　特此放出源代码让各位PHP程序爱好者一同分享！Sunec制作的这个系统还处于相当简陋的状态～希望大家有兴趣可以一起参与修改与壮大～</P>
<P>　　<A href="http://www.cenusblog.com/download/chaorenshop/source/chaorenshop01.rar">潮人店源程序代码下载</A></P>
<P>　　<A href="http://www.cenusblog.com/download/chaorenshop/source/chaorensql.rar">潮人店数据文件下载</A></P>
<P>　　首先说明安装方法：</P>
<P>　　１、将sql文件倒入数据库。</P>
<P>　　２、将RAR文件解压缩，放到相应的PHP服务的目录。</P>
<P>　　如果有不明白的地方可以参照以前的专题文章。</P>
<P>　　使用方法：</P>
<P>　　大家进入系统后，可以用　<STRONG><FONT color=#ff0000>用户名：test　密码：111　</FONT></STRONG>登陆。</P>
<P>　　这个用户是一个admin用户，可以审核普通用户添加的小店。<FONT color=#ff0000>小店一定要在通过审核后才会被显示在“最近更新中”。审核页面我没有做连接，需要大家自己在浏览器中输入。链接地址为根目录下的tocheck.php文件。</FONT></P>
<P>　　这次因为比较匆忙，所有的文档都没有加入，代码的说明也没有编写，大家可能会看得比较累，我之后会慢慢补充完整。</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-10-24</pubDate></item><item><title>sunec最近在干什么</title><link>www.cenusblog.com/comments.asp?id=99</link><description><![CDATA[<P>　　有一段时间没有更新blog了，大家有没有想sunec呢？自己汗一下。。。</P>
<P>　　向大家汇报一下最近sunec的动态，最近sunec做了如下事情：</P>
<P>　　１、<FONT color=#ff0000>买了一部佳能40D照相机，开始了我摄影爱好之路～</FONT>并随之设计建立了个人设计作品网站<A href="http://www.cenusdesign.com/">http://www.cenusdesign.com</A>　。大家如果赏脸可以过来看看哟～希望大家喜欢～</P>
<P>　　２、<FONT color=#ff0000>筹备开设自己的设计工作室。</FONT>设计范围包括：平面印刷品设计，电脑美术设计，动画设计，摄影艺术，影视制作。这是我的一个小梦想～当然，这还需要更多时间的准备～</P>
<P>　　３、<FONT color=#ff0000>准备上传自己制作的一套PHP系统～</FONT>供大家学习参考之用～这套系统类<FONT color=#0000ff>似于目前的大众点评网</FONT>，希望通过这套小系统，让大家窥见一下大众点评网的一些基本构架原理～</P>
<P>　　这就是我最近没有更新这里的原因～</P>
<P>　　当然，我决不会放弃编程这一爱好～而且，随着上面提到的PHP系统的放出，我会更加照顾这里～与大家共同进步！</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-10-8</pubDate></item><item><title>电脑开机点不亮原因详细分析</title><link>www.cenusblog.com/comments.asp?id=98</link><description><![CDATA[<P>　　最近公司里时常有同事的电脑开机点不亮，过去帮忙后发现，症状也有一些差别，原因也有所不同，下面就来总结一下一般计算机开机点不亮的原因。</P>
<P>　　1、<FONT color=#ff0000>内存问题导致无法开机。</FONT>症状：打开电脑电源，发出连续3短报警声，随后显示器无法正常点亮。解决方案：尝试重新拔插内存条，或者更换内存插槽。如果之后还是同样的问题，请更换内存条 -_-|||</P>
<P>　　提醒：拔插内存条前，请先拔除电脑电源连接线。</P>
<P>　　2、<FONT color=#ff0000>主板损坏导致无法开机。</FONT>症状：打开电源后计算机除了风扇声之外，没有其它声音(硬盘基本无声)。出现这种现象的话，请查看主板尤其是主板上电容状况，如果发现电容上端突起或是有液态物质流出，那么就宣布，这块电脑主板可以下课了。解决方案：更换主板。。。</P>
<P>　　3、<FONT color=#ff0000>请查看显示器是否正常连接。</FONT>有时因为大意，显示器的连接出现松动，造成无法点亮机器的假象。所以，请确认所有连接都处于正常状态！</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-9-20</pubDate></item><item><title>PHP避免因页面刷新而插入重复记录-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=97</link><description><![CDATA[<P>　　有朋友问：“<STRONG>因为页面刷新而产生重复数据应该如何避免</STRONG>”。这个问题非常得好，确实是网页开发过程中会遇到的一个比较棘手的问题。</P>
<P>　　之所以会出现重复记录的问题，是因为在进行页面刷新时，从前一页递交的POST的参数并没有清空，从而页面会不断的读取从前一页传来的POST值造成重复数据的产生。</P>
<P>　　sunec通过一些资料的查阅以及一些测试，得出了以下的方法来解决PHP中因为页面刷新而产生重复数据的问题。</P>
<P>　　老规矩，首先讲一下思路：</P>
<OL>
<LI><FONT color=#ff0000>首先在留言输入界面中写入一个<A href="http://www.cenusblog.com/comments.asp?id=74">session</A>，比如说status="firsttime"。</FONT></LI>
<LI><FONT color=#ff0000>在留言接收显示页面首先判断session中的status是否为"firsttime"，如果是，那么在数据库中插入此留言内容。</FONT></LI>
<LI><FONT color=#ff0000>当留言插入数据库后，紧接着还是在留言接收显示页面程序的最后把status改成例如"secondtime"。</FONT></LI>
<LI><FONT color=#ff0000>当你刷新页面时，又回到第2条，判断session中的status是否为"firsttime"，这时，status应该为"secondtime"，所以判断为否，那么就不执行插入语句，这样，就有效避免了因为页面刷新而产生重复数据的问题。</FONT></LI></OL>
<P>　　大家是不是理解了sunec所说的方法呢？</P>
<P>　　那么让我们实际看一下该如何操作：（结合<A href="http://www.cenusblog.com/comments.asp?id=89">cenus留言板制作的主题</A>）</P>
<P>　　1、首先在board.php的最开始加入如下语句：</P>
<P><FONT color=#ff0000>&lt;?php<BR>session_start();<BR>$_SESSION["status"]="firsttime";<BR>?&gt;</FONT></P>
<P>　　2、其次在view.php中加入判断条件：</P>
<P>之前程序略。</P>
<P><FONT color=#ff0000>session_start();<BR>if($_SESSION["status"]=="firsttime")<BR>{<BR></FONT>mysql_query("SET NAMES GB2312");<BR>$title=$_POST["board_title"];<BR>$content=$_POST["board_content"];<BR>$name=$_POST["board_name"];<BR>$posttime=date("Y-m-d H:i:s");<BR>mysql_query("SET NAMES GB2312");<BR>$q="insert into board (board_title,board_content,board_name,posttime) values ('$title','$content','$name','$posttime')";<BR><FONT color=#ff0000>}</FONT><BR><FONT color=#ff0000>$_SESSION["status"]="secondtime";</FONT></P>
<P><BR>之后程序略。&nbsp;&nbsp; </P>
<P>　　好了，这就是整个因为页面刷新而产生重复数据的问题的解决方法，大家的问题是否解决了呢？欢迎与sunec进行交流。</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-9-16</pubDate></item><item><title>Outlook Express邮箱大于2G的问题探讨</title><link>www.cenusblog.com/comments.asp?id=96</link><description><![CDATA[<P>　　因为微软Outlook Express邮箱本身存在的缺陷，导致当邮箱大小超过2G时会出现邮件不能正常接收的情况，<FONT color=#ff0000>严重时会导致整个邮箱中邮件的丢失！</FONT>并且，在邮箱大小接近2G时，Outlook Express会在每次关闭时提醒用户是否对邮件进行压缩，建议点取不要压缩，如果一但点取确定进行压缩，<FONT color=#ff0000>请千万不要中断压缩过程（压缩过程通常需要１个多小时）！这样也会导致油箱中邮件的完全丢失！</FONT>微软已承认这一问题的存在，但却没有出台任何实质性的解决方案。也就是说，一旦出现邮箱过大而导致的邮件丢失情况，这将会给各位的工作带来无法挽回的损失！<BR>&nbsp;<BR>　　想要避免此现象的发生只能以预防为主，现给出两种预防方案：<BR>&nbsp;<BR>　　１、对现有邮箱结构进行整理。如果不对邮箱进行分类或者分类很少，这样会导致邮件全部都积累在收件箱根目录以及很少的目录下，很容易造成单个邮箱目录过大(2G)，而导致危险的产生。正确的做法应该根据工作业务联系的需要，建立相对细致的分类目录（注意，可以是多层次的），然后利用Outlook Express中的邮件规则，将来信自动保存至相应邮箱目录内。当然，即使做了目录分类后，也还是有可能会造成单个目录中因为邮件长期累计而超过2G限制的情况，这就需要麻烦大家在平时多关注一些容易过大的邮箱目录，做好定期删除备份操作。<BR>&nbsp;<BR>　　２、从Outlook Express升级至Microsoft Outlook。这样的话可以彻底摆脱2G的困扰。但是使用MS Outlook会较Outlook Express占用更多的系统资源，可能会在一定程度上影响到其他应用程序的运行速度。如果决定需要升级，先做好现有邮箱的备份工作，然后在进行升级工作。<BR>&nbsp;<BR>　　最后，给出Outlook Express备份方法：<BR>&nbsp;<BR>　　打开Outlook Express，在菜单中选择工具--&gt;选项--&gt;“维护”标签--&gt;“存储文件夹”按钮，弹出对话框中的路径就是你Outlook Express邮件储存的路径。打开此路经，备份其目录下所有文件即可！<BR>&nbsp;<BR>　　希望大家对Outlook Express存在的这个较大的问题引起注意。</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-9-3</pubDate></item><item><title>回答网友盒族的问题</title><link>www.cenusblog.com/comments.asp?id=95</link><description><![CDATA[<P><FONT color=#0000ff>问题：</FONT></P>
<P><FONT color=#0000ff>&nbsp;&nbsp;&nbsp; 编辑记录时，有个atype字段，是下拉菜单，下拉菜单是从数据库里面的一个表读取的，怎么让对应的option变成selected状态，不知道我描述的清楚不清楚。</FONT></P>
<P><FONT color=#0000ff>&nbsp;&nbsp;&nbsp; 意思就是如果循环到的option的value等于这条记录的atype时，让它处于选择状态。</FONT></P>
<P>&nbsp;&nbsp;&nbsp; 根据盒族的描述，我写了以下这段代码，不知道是不是你要的？</P>
<P>echo "&lt;select&gt;";<BR>$q = "SELECT * from hz_type";<BR>$rs = mysql_query($q, $conn);<BR>while($row = mysql_fetch_object($rs))<BR>{<BR>if($row-&gt;name==$row-&gt;atype)<BR>echo "&lt;option value='$row-&gt;name' selected="selected"&gt;$row-&gt;name&lt;/option&gt;";<BR>else "&lt;option value='$row-&gt;name'&gt;$row-&gt;name&lt;/option&gt;";<BR>}<BR>echo "&lt;/select&gt;";</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-8-22</pubDate></item><item><title>php对文件操作之目录篇-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=94</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 从这期开始，会连续和大家讨论<FONT color=#0000ff>PHP对文件目录</FONT>的操作~</P>
<P><FONT color=#ff0000>&nbsp;&nbsp;&nbsp; 创建目录：</FONT></P>
<P><FONT color=#ff0000>&nbsp;&nbsp;&nbsp; 语法：mkdir("路径/目录名");</FONT></P>
<P><FONT color=#ff0000>&nbsp;&nbsp;&nbsp; 更改目录名：</FONT></P>
<P><FONT color=#ff0000>&nbsp;&nbsp;&nbsp; 语法：rename("原目录名", "新目录名");</FONT></P>
<P><FONT color=#ff0000>&nbsp;&nbsp;&nbsp; 删除目录：</FONT></P>
<P><FONT color=#ff0000>&nbsp;&nbsp;&nbsp; 语法：rmdir("路径/目录名");</FONT></P>
<P>&nbsp;&nbsp;&nbsp; 以下是sunec自编的一个小程序<font color=#ff000>dir.php</font>，专门测试上述的三个操作。运行的每一步大家都可以去进行验证是否执行完成。</P>
<P>&lt;?php</P>
<P>echo "&lt;h3&gt;PHP对目录的操作&lt;/h3&gt;";</P>
<P>$action=$_GET["action"];</P>
<P>switch($action)<BR>{<BR>case "":<BR>echo "&lt;a href='dir.php?action=mkdir'&gt;创建目录&lt;/a&gt;";<BR>break;</P>
<P>case "mkdir":<BR>mkdir("cenus");<BR>echo "目录创建成功！&lt;br&gt;&lt;br&gt;";<BR>echo "&lt;a href='dir.php?action=rename'&gt;更改目录名&lt;/a&gt;";</P>
<P>break;</P>
<P>case "rename":<BR>rename("cenus","cenusdesign");<BR>echo "目录名更改成功！&lt;br&gt;&lt;br&gt;";<BR>echo "&lt;a href='dir.php?action=rmdir'&gt;删除目录&lt;/a&gt;";<BR>break;</P>
<P>case "rmdir":<BR>rmdir("cenusdesign");<BR>echo "目录删除成功！";<BR>break;<BR>}</P>
<P>?&gt;</P>
<P>&nbsp;&nbsp;&nbsp; 怎么样，是不是都按步执行了呢~</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-8-3</pubDate></item><item><title>PHP系统初步完成</title><link>www.cenusblog.com/comments.asp?id=93</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 自从这个Cenus Blog开通以来，sunec一直是一边学习一边书写blog，三个多月过去了，终于，sunec当时所说的一套<A href="http://www.cenusblog.com/comments.asp?id=44">信息系统</A>已经初步打造完毕！</P>
<P>&nbsp;&nbsp;&nbsp; 可以透露给大家的是，<FONT color=#ff0000>这套系统类似于大众点评网，是一个店源信息共享的平台</FONT>~暂定为0.1版本！</P>
<P>&nbsp;&nbsp;&nbsp; 很快，我将网上开通此系统~<FONT color=#ff0000>等再过一段时间，待系统比较成熟之后，我会开放其代码，供大家交流学习</FONT>~~</P>
<P>&nbsp;&nbsp;&nbsp; 希望大家可以喜欢~</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-7-30</pubDate></item><item><title>PHP中利用cookie设置Session对话周期</title><link>www.cenusblog.com/comments.asp?id=92</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 在之前的专题中CenusDesign详细解说了PHP中<A href="http://www.cenusblog.com/comments.asp?id=74">Session的使用方法</A>。但大家是不是发现，依照以前的做法，我们与Session之间的对话只能保留一次浏览周期，也就是说，如果我们将浏览器关闭然后再重新打开之后，就会发现我们之前的session已经丢失。这就是因为我们没有设置session对话保留的周期而产生的问题。如果每次关闭浏览器我们的登陆信息或者其它Session中保留的信息都将被删除的话，这样一定会给我们带来种种不便。</P>
<P>&nbsp;&nbsp;&nbsp; 那么，今天我们就来谈谈如何保留session信息。</P>
<P>&nbsp;&nbsp;&nbsp; 我们就用最常见的一种办法--<FONT color=#0000ff>利用cookies保存session信息</FONT>。</P>
<P>&nbsp;&nbsp;&nbsp; 我们只需要在session_start()之后加入如下代码，就可以轻松实现保留session信息的功能~</P>
<P>&nbsp;&nbsp;&nbsp; 例如：<BR>session_start();<BR><FONT color=#ff0000>$lifeTime = 24 * 3600; <BR>setcookie(session_name(), session_id(), time() + $lifeTime, "/");</FONT>&nbsp; </P>
<P>&nbsp;&nbsp;&nbsp; 好了~这样一来，你之后写入的session信息就会自动保留1天的时间，除非你中止该session。注意，<FONT color=#ff0000>$lifeTime是以“秒”为最小单位</FONT>的，我们可以根据自己需要修改其值。</P>
<P>&nbsp;&nbsp;&nbsp; 就是这么方便。<BR></P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-7-28</pubDate></item><item><title>这里不仅有PHP</title><link>www.cenusblog.com/comments.asp?id=91</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 夏天了，不知大家心情可好~工作是否顺利~</P>
<P>&nbsp;&nbsp;&nbsp; PHP的学习一口气下来是不是觉得有些累了呢，那么，放松一下也不要紧~细细总结一下也是理所当然的~</P>
<P>&nbsp;&nbsp;&nbsp; 其实在Cenus Design里，有的不仅仅只是PHP，还包括<A href="http://www.cenusblog.com/work.asp">设计</A>、<A href="http://www.cenusblog.com/album.asp">照片</A>与理想~希望大家也可以细细品味~</P>
<P>&nbsp;&nbsp;&nbsp; 这次在<A href="http://www.cenusblog.com/photo.asp?id=8">单位里随便拍了点照片</A>~也作为是08夏天的留念吧~</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-7-23</pubDate></item><item><title>为什么选择PHP-PHP的优点与缺点</title><link>www.cenusblog.com/comments.asp?id=90</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 今天我们不从技术上讨论PHP，而是从宏观上认识一下PHP，谈一下它的优点及缺点。</P>
<P>&nbsp;&nbsp;&nbsp;<FONT color=#ff0000> 优点很明显：</FONT>开发简便、易于上手、容错性好、多平台运用、函数较多。</P>
<P>&nbsp;&nbsp;&nbsp;<FONT color=#ff0000> 缺点也很不少：</FONT>运行时消耗资源较大、运行速度相对较慢、扩展性比较差、结构层次比较单一。</P>
<P>&nbsp;&nbsp;&nbsp; 要说明的是，这些优缺点都是相比于JAVA（JSP）来说的。</P>
<P>&nbsp;&nbsp;&nbsp; 为什么要和大家说明这些优缺点，是因为想让大家根据自己的应用做出最恰当的选择。<FONT color=#0000ff>如果你是一位有志于开发业务系统的爱好者，那么PHP在这方面显然不能胜任，建议去学习JAVA是更理想的选择。</FONT>因为庞大的业务系统需要多层次的结构做支持，并且要有良好的二次开发性，最重要的是，在处理大量数据的情况下也不能含糊。显然，这些方面JAVA要比PHP好许多。</P>
<P>&nbsp;&nbsp;&nbsp; 然而，如果你是个普通的程序爱好者，<FONT color=#0000ff>有志于在短时间内制作一些业务量相对较小或者中型的网站，又或是一些中型的业务系统，那么PHP是可取的</FONT>，因为PHP小快灵的特点能够帮助你在技术较为薄弱的阶段还能以较短的开发周期，制作出你想要的东西。</P>
<P>&nbsp;&nbsp;&nbsp; 都说，JAVA程序员看不起做PHP的，因为他们认为学习PHP不需要什么门槛，过于简单。觉得这样说过于片面，所有的东西都有其博大的一面，不能因为学习PHP门槛低而轻视了PHP。如若你能深刻了解PHP，一定会爱上它那种简便快速的魔法！</P>
<P>&nbsp;&nbsp;&nbsp; 无论是PHP还是JAVA，说到最后，运用它们的是程序员。如何运用，发挥它们的功效到什么程度都取决于程序员的能力。用PHP作出比JAVA好的应用的例子还是数不胜数的！</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-7-21</pubDate></item><item><title>PHP留言板实例代码-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=89</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 今天，sunec打算为大家送上一则留言板实例。因为留言板集合PHP对数据库的<A href="http://www.cenusblog.com/comments.asp?id=64">添加与查找操作</A>，是每一个PHP爱好者入门时的必经之路~</P>
<P>&nbsp;&nbsp;&nbsp; 废话不多说，让我们开始吧！</P>
<P>&nbsp;&nbsp;&nbsp; 第一步：在MySQL中建立名为board的表，其结构为：</P>
<P>board_id&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp; 自增编号<BR>board_title&nbsp;&nbsp;&nbsp;&nbsp; varchar(50)&nbsp;&nbsp;&nbsp;&nbsp; 留言标题<BR>board_content&nbsp;&nbsp;&nbsp;&nbsp; text&nbsp;&nbsp;&nbsp;&nbsp; 留言内容<BR>board_name&nbsp;&nbsp;&nbsp;&nbsp; varchar(50)&nbsp;&nbsp;&nbsp;&nbsp; 发言者姓名<BR>posttime&nbsp;&nbsp;&nbsp;&nbsp; datetime&nbsp;&nbsp;&nbsp;&nbsp; 发布留言时间</P>
<P>&nbsp;&nbsp;&nbsp; 第二步：建立留言页面board.php，内容如下：</P>
<P>&lt;form id="form1" name="form1" method="post" action="view.php"&gt;<BR>&nbsp; &lt;label&gt;<BR>&nbsp; 留言标题：&lt;input type="text" name="board_title" id="textfield" /&gt;<BR>&nbsp; &lt;/label&gt;<BR>&nbsp; &lt;p&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;label&gt;<BR>&nbsp;&nbsp;&nbsp; 留言内容：&lt;textarea name="board_content" id="textarea" cols="80" rows="10"&gt;&lt;/textarea&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/label&gt;<BR>&nbsp; &lt;/p&gt;<BR>&nbsp; &lt;p&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;label&gt;<BR>&nbsp;&nbsp;&nbsp; 发言人姓名：&lt;input type="text" name="board_name" id="textfield2" /&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/label&gt;<BR>&lt;/p&gt;<BR>&nbsp; &lt;p&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;label&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;input type="submit" name="button" id="button" value="提交" /&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/label&gt;<BR>&nbsp; &lt;/p&gt;<BR>&lt;/form&gt;</P>
<P>&nbsp;&nbsp;&nbsp; 在这个页面中，我们主要建立了留言页面的界面，定义了各个输入区域的name，以便之后的提交处理。</P>
<P>&nbsp;&nbsp;&nbsp; 第三步：建立留言提交处理并显示页面view.php，内容如下：</P>
<P>&lt;?php</P>
<P>$link =mysql_connect("localhost","root","管理员密码");<BR>mysql_select_db("数据库名称", $link);</P>
<P>mysql_query("SET NAMES GB2312");<BR>$title=$_POST["board_title"];<BR>$content=$_POST["board_content"];<BR>$name=$_POST["board_name"];<BR>$posttime=date("Y-m-d H:i:s");</P>
<P>mysql_query("SET NAMES GB2312");<BR>$q="insert into board (board_title,board_content,board_name,posttime) values ('$title','$content','$name','$posttime')";<BR>mysql_query($q, $link);</P>
<P>$showsql = "SELECT * FROM board";<BR>mysql_query("SET NAMES GB2312");<BR>$rs = mysql_query($showsql, $link);<BR>while($row = mysql_fetch_object($rs))<BR>{<BR>echo "title: $row-&gt;board_title &lt;br&gt;";<BR>echo "content: $row-&gt;board_content &lt;br&gt;";<BR>echo "name: $row-&gt;board_name posttime:$row-&gt;posttime &lt;br&gt;&lt;br&gt;";<BR>}</P>
<P>echo "&lt;a href='board.php'&gt;back&lt;/a&gt;";</P>
<P>?&gt;</P>
<P>&nbsp;&nbsp;&nbsp; 这样~我们就已经制作完成了一个最简单的留言板功能了！</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-7-17</pubDate></item><item><title>用PHP的include引用文件-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=88</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 细心的朋友或许已经发现，在sunec以往的程序中，大多都会出现以下这句话：</P>
<P>$link=mysql_connect("localhost","root","管理员密码");<BR>mysql_select_db("infosystem", $link);</P>
<P>&nbsp;&nbsp;&nbsp; 不错，它出现的频率确实很高，因为它担负着<A href="http://www.cenusblog.com/comments.asp?id=68">连接数据库</A>的重任，之后所有对数据库的操作都要以它为基础，没有这两句话是万万不可的。</P>
<P>&nbsp;&nbsp;&nbsp; 但是，这两句程序的频繁出现是不是让你输得有些头痛了呢~没关系，我们可以用引用的方法来避免这样重复的劳动！</P>
<P>&nbsp;&nbsp;&nbsp; 首先，我们可以将这两句话写入一个名为conn.php的文件。</P>
<P>&nbsp;&nbsp;&nbsp; 然后，我们便可以在任何页面中引用这个文件。例如现有test.php文件：</P>
<P>&lt;?php</P>
<P>include("conn.php");</P>
<P>数据库操作代码;</P>
<P>?&gt;</P>
<P>&nbsp;&nbsp;&nbsp; 我们就可以通过<FONT color=#ff0000>include("文件名")</FONT>这样的方法来调用conn.php文件，从而避免重复的劳动。</P>
<P>&nbsp;&nbsp;&nbsp; 同样，<FONT color=#0000ff>我们在制作系统时，一定会遇到许多相同或者类似的代码重复出现在许多地方，我们就可以利用引用的方法，简化程序~</FONT></P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-7-14</pubDate></item><item><title>PHP用switch语句实现一个页面多种用途-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=87</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 大家对做简单系统是否已经初窥门径？不知道家都做到什么阶段了~</P>
<P>&nbsp;&nbsp;&nbsp; 不知大家到现在为止有没有遇到这样的疑惑，那就是随着系统制作的深入，我们的页面会越来越多，到最后我们可能因为页面数量而造成某些管理上的不便。大家会问，<FONT color=#0000ff>能不能将一些功能相近的页面整合到一起呢？答案是肯定的！</FONT>那么接下来就谈谈怎么实现这个功能吧！</P>
<P>&nbsp;&nbsp;&nbsp; 比如现在有一个页面，其中包括一些增、删、查、改四项功能，如果在以前，我们会把这四项功能分别提交给四个页面进行处理，这样的话虽然分工明确，但是如果随着我们功能的增加，我们就会有越来越多的页面出现，而且这些页面的代码大致相同，这样不仅浪费了我们的资源而且还对管理造成不便。</P>
<P>&nbsp;&nbsp;&nbsp; 现在，我们可以用这样的方案来解决这个问题。首先建立test.php页面：</P>
<P>&lt;?php<BR>echo "&lt;a href='solution.php?<FONT color=#ff0000>action=add</FONT>'&gt;增加&lt;/a&gt;&lt;br&gt;&lt;br&gt;";<BR>echo "&lt;a href='solution.php?<FONT color=#ff0000>action=del</FONT>'&gt;删除&lt;/a&gt;&lt;br&gt;&lt;br&gt;";<BR>echo "&lt;a href='solution.php?<FONT color=#ff0000>action=search</FONT>'&gt;查找&lt;/a&gt;&lt;br&gt;&lt;br&gt;";<BR>echo "&lt;a href='solution.php?<FONT color=#ff0000>action=update</FONT>'&gt;更新&lt;/a&gt;";<BR>?&gt;</P>
<P>&nbsp;&nbsp;&nbsp; 当然这里sunec省略了其他大部分的代码，只是把其中一些提交按钮写了出来。我们可以看到，无论点击哪个按钮，我们都会跳转到solution.php页面，<FONT color=#0000ff>唯一不不同的是，问号后的action的内容分成了4种</FONT>。我们可以把它称作是一种提示。</P>
<P>&nbsp;&nbsp;&nbsp; 接着，让我们看看solution.php是如何处理这四种操作的。</P>
<P>&lt;?php<BR>$action=$_GET["action"];</P>
<P>switch ($action)<BR>{<BR>&nbsp;<FONT color=#ff0000>case "add":<BR></FONT>&nbsp;echo "现在可以实现增加功能！";<BR>&nbsp;break;<BR>&nbsp;<FONT color=#ff0000>case "del":<BR></FONT>&nbsp;echo "现在可以实现删除功能！";<BR>&nbsp;break;<BR>&nbsp;<FONT color=#ff0000>case "search":<BR></FONT>&nbsp;echo "现在可以实现查询功能！";<BR>&nbsp;break;<BR>&nbsp;<FONT color=#ff0000>case "update":<BR></FONT>&nbsp;echo "现在可以实现更新功能！";<BR>&nbsp;break;<BR>}<BR>?&gt;</P>
<P>&nbsp;&nbsp;&nbsp; 很简单，<FONT color=#0000ff>我们首先接收到action的值，运用switch语句根据action值的不同分别赋予它相应的操作</FONT>。怎么样，是不是比大家想象中要简单很多？</P>
<P>&nbsp;&nbsp;&nbsp; 值得一说的是switch的语法：相信大家通过这个例子已经大致明白它的运用方法了吧。</P>
<P><FONT color=#ff0000>switch(变量)<BR>{<BR>case 变量有可能的值1:<BR>功能代码1;<BR>break;</FONT></P>
<P><FONT color=#ff0000>case 变量有可能的值2:<BR>功能代码2;<BR>break;</FONT></P>
<P><FONT color=#ff0000>case 变量有可能的值3:<BR>功能代码3;<BR>break;<BR>}</FONT></P>
<P>&nbsp;&nbsp;&nbsp; 就是这样，我们可以在功能代码中再详细编写我们需要的功能。这样一来，这个页面就可以承载四项功能，这样，是不是能为大家省去很多麻烦呢？</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-7-11</pubDate></item><item><title>PHP自定义函数-PHP函数介绍</title><link>www.cenusblog.com/comments.asp?id=86</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 昨天我们基本认识了<A href="http://www.cenusblog.com/comments.asp?id=85">什么是函数</A>，那么今天，就让我们自己DIY一个函数吧！</P>
<P>&nbsp;&nbsp;&nbsp; 我们已经知道，函数其实就是一个功能~那么今天我们就来写一个让输出文字自动变成粗体与斜体功能的函数吧！</P>
<P>&nbsp;&nbsp;&nbsp; 以往，如果我们要让字体显示为粗斜体，我们至少要写这样一段代码&lt;i&gt;&lt;b&gt;SUNEC&lt;/i&gt;&lt;/b&gt;。当然，如果你的网站中仅有一处需要让字体变粗变斜，大家大可用这段代码。但是如果你的网站中有几十处要用到粗斜体，那你也愿意写几十遍这段代码么？</P>
<P>&nbsp;&nbsp;&nbsp; 显然，为了提高效率，我们就要用一种相对简单的方法来实现你这个需求。那就是，用函数解决问题！（当然你也可以用CSS。。。）</P>
<P>&nbsp;&nbsp;&nbsp; 首先看代码：</P>
<P>&lt;?php<BR><FONT color=#ff0000>function makebold_n_italics($text)<BR>{<BR>&nbsp;$text = "&lt;i&gt;&lt;b&gt;$text&lt;/i&gt;&lt;/b&gt;";<BR>&nbsp;return($text);<BR>}</FONT></P>
<P><FONT color=#0000ff>echo makebold_n_italics("我是SUNEC");</FONT></P>
<P><FONT color=#0000ff>echo "&lt;br&gt;";</FONT></P>
<P><FONT color=#0000ff>echo "我是SUNEC";</FONT></P>
<P><FONT color=#0000ff>echo "&lt;br&gt;";</FONT></P>
<P><FONT color=#0000ff>$sunec="CenusBlog是我的博客，欢迎光临!";</FONT></P>
<P><FONT color=#0000ff>echo makebold_n_italics($sunec);<BR></FONT>?&gt;</P>
<P>&nbsp;&nbsp;&nbsp; 红色部分就是函数定义部分，它的基本格式就是：<FONT color=#ff0000>function 函数名（参数）{函数体}</FONT>。在函数体中，我们将接收来的参数经过“包装”，最后return出函数结果，也就是包装完的参数。</P>
<P>&nbsp;&nbsp;&nbsp; 蓝色部分：那我们就来试试新出炉的DIY函数吧，在参数中直接输入我们要加粗变斜的文字，或者是将文字放入一个变量中然后再代入参数。效果当然都是一样的！</P>
<P>&nbsp;&nbsp;&nbsp; 很简单，我们工作结束了~这就是一个最最简单的函数~</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-7-7</pubDate></item><item><title>什么是函数-PHP函数介绍</title><link>www.cenusblog.com/comments.asp?id=85</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 终于，我们又将翻开PHP学习崭新的一页了！</P>
<P>&nbsp;&nbsp;&nbsp; 在之前的学习中，我们用了最简陋但却是最有效的方法来实现大部分的系统功能（比如<A href="http://www.cenusblog.com/articatmore.asp?blog_cat=PHP简单系统制作">增、删、查</A>等）。</P>
<P>&nbsp;&nbsp;&nbsp; 当然，如果想继续开发出更大更完美的系统，我们就不能只停留在这样“傻瓜式”的阶段，必须从代码的<FONT color=#ff0000>高效性与系统的稳定性角度来进一步考虑了</FONT>。</P>
<P>&nbsp;&nbsp;&nbsp; 所以，从今天的专题开始，sunec将开始向大家介绍PHP一些进阶的内容。</P>
<P>&nbsp;&nbsp;&nbsp; 有朋友可能会觉得进阶的东西会不会因为难度的增加而难以学习，大家完全不要担心，因为秉承CenusBlog一向的风格，<FONT color=#0000ff>sunec会用最朴实的话语告诉大家该如何操作</FONT>。希望大家能够喜欢，学到一些自己想要的东西!</P>
<P>&nbsp;&nbsp;&nbsp; 让我们马上开始今天的学习！</P>
<P>&nbsp;&nbsp;&nbsp; 首先，什么是函数？（有基础者可以无视这段。。。）</P>
<P>&nbsp;&nbsp;&nbsp; <FONT color=#ff0000>大家可以把“函数”理解成“功能”。一个函数就是一个功能，一个能帮你完成某个特定任务的功能。</FONT></P>
<P>&nbsp;&nbsp;&nbsp; 例如时间函数date()，它的功能就是帮你得到计算机当前的时间。<FONT color=#ff0000>其中date叫做函数名，括号中则是参数。</FONT></P>
<P>&nbsp;&nbsp;&nbsp; 接着，我们在括号中填入"Y-m-d h:i:s"，即date("Y-m-d h:i:s")。这样我们就给了这个函数一个参数，也就是给了这个功能一个规则，让它更加明确应该怎么样来为我们服务。这里，就是告诉date函数以年-月-日 时-分-秒的形式来显示时间。</P>
<P>&nbsp;&nbsp;&nbsp; 怎么样？大家是否已经初步认识了函数是个什么东西了么~~</P>
<P>&nbsp;&nbsp;&nbsp; PHP中已经提供了我们大量的函数，用这些函数我们已经可以完成很大部分的工作，但是，<FONT color=#0000ff>我们有一些个性化的需求PHP肯定照顾不到的，那么，有时我们就必须自己来写一个函数，或者说，自己来制作一个功能来对应我们所需要的一些个性化需要。</FONT></P>
<P>&nbsp;&nbsp;&nbsp; 明天我就告诉大家应该怎么来DIY函数！</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-7-6</pubDate></item><item><title>CSS控制图片大小-适应宽度</title><link>www.cenusblog.com/comments.asp?id=84</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 很长时间没有提到<A href="http://www.cenusblog.com/articatmore.asp?blog_cat=CSS技术技巧">CSS制作技巧</A>了，今天在编制程序时偶然用到一个CSS语句特别实用，想与大家分享！</P>
<P>&nbsp;&nbsp;&nbsp; 不知道家有没有遇到过这样的情况：在CSS控制图片大小时，如果把图片的宽度写死，比如 img{width:500px;} ，固然，如果图片宽度大于500px可以很好的控制它不让它过大，但如果图片宽度小于500px，比如说只有100px时，刚才的写法会把这张图扩大5倍显示，显然，这不是我们想看到的。</P>
<P>&nbsp;&nbsp;&nbsp; 那么，CSS如何可以区分对待这些图片设置大小呢？很简单，请看：</P>
<P>img{width:<FONT color=#ff0000>expression(this.width&gt;500?"500px":this.width+"px")</FONT>; }</P>
<P>&nbsp;&nbsp;&nbsp; 只要在CSS运用这段代码，就可以分别控制大图片与小图片。它的意思就是，如果图片宽度大于500px，那么图片就以500px的大小显示，如果小于的话，那么图片就按照原有尺寸显示！怎么样，是不是确实很简单？</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-7-4</pubDate></item><item><title>感谢的话语-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=83</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 感谢大家一直以来对小站的支持~希望大家通过Sunec对PHP应用的一些简单的说明解释有所收获~</P>
<P>&nbsp;&nbsp;&nbsp; 说实话，Sunec也只是个PHP菜鸟，很多程序可能显得比较幼稚~没有进过进一步的提炼，这也是今后Sunec需要改进的地方。但Sunec还是坚持要把这些应用技巧一五一十的告诉大家，因为我想传达给大家这样的想法：<FONT color=#ff0000>即使是一些微不足道的东西，只要将它汇集起来，也能发光发热。</FONT></P>
<P>&nbsp;&nbsp;&nbsp; 之前的所有PHP技术技巧在一般的简单系统制作中已经绰绰有余，大家只要用心制作，相信所有的问题在CenusBlog中都有解决之道。接下来一段时间，将为大家提供的一些PHP技术技巧可能会慢慢偏向于进阶。在一些稍许高级的运用中会使用到。</P>
<P>&nbsp;&nbsp;&nbsp; 大家也可以留言，<FONT color=#ff0000>将自己所想了解的技术告诉我</FONT>，我会尽力为大家准备！</P>
<P>&nbsp;&nbsp;&nbsp; 另外~前一阵子去了绍兴~有兴趣的朋友可以<A href="http://www.cenusblog.com/photo.asp?id=7">看看照片</A>哟~</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-7-1</pubDate></item><item><title>PHP中避免插入重复记录-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=82</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 不知大家有没有为这样的情况而担忧，比如，一个用户以sunec为名在你的系统中进行了注册，后来，又有一个用户以相同的名字进行了注册，那么我们的数据库中就有两个名为sunec的用户了！这也许会对你的管理造成意想不到的困难。是否考虑过如何避免这一现象呢？</P>
<P>&nbsp;&nbsp;&nbsp; 今天就用PHP教大家一个简便的避免该情况的方法。</P>
<P>&nbsp;&nbsp;&nbsp; 首先明确一下思路：</P>
<P>&nbsp;&nbsp;&nbsp; 当用户提交注册申请时，首先在数据库中查询是否有该用户名的存在，<FONT color=#0000ff>如果查询结果的记录数为0，那么说明这个用户名没有被注册过，那么审核通过，将其用户添加到数据库中，如果返回的记录数不为0，那么说明这个用户名已存在于数据库中，那么拒绝再次注册，显示提示信息~</FONT></P>
<P>&nbsp;&nbsp;&nbsp; 应该说这个思路还是比较简单的。</P>
<P>&nbsp;&nbsp;&nbsp; 让我们看看如何具体操作：</P>
<P>&nbsp;&nbsp;&nbsp; 建立login.php文件，写入以下内容：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php<BR>$username=$_GET["name"];<BR>$q="select * from usertable where user_name='$username'";<BR>mysql_query("SET NAMES gb2312");<BR>$rs = mysql_query($q, $link);<BR><FONT color=#ff0000>$num_rows = mysql_num_rows($rs);</FONT><BR>if($num_rows==0)<BR>{<BR>$exec="insert into usertable (user_name) values ($username)";<BR>mysql_query("SET NAMES gb2312");<BR>mysql_query($exec, $link);<BR>echo "用户注册成功！";<BR>}<BR>else<BR>{<BR>echo "该用户名已存在，请重新选择用户名！";<BR>}<BR>?&gt;</DIV>
<P>&nbsp;&nbsp;&nbsp; 相信大家以理解其中的意思，此程序的关键在于判断$num_rows的数值，如果为0代表没有数据记录被找到，如果不为0，则说明存在数据记录~然后再用一个简单的if..else..来区别执行，继而达到了避免插入重复记录的目的~</P>
<P>&nbsp;&nbsp;&nbsp; 这个例子只是起到一个抛砖引玉的目的，相信大家不仅在用户注册时会遇到这个问题，在其他的运用中也可以采取类似的做法来避免错误。</P>
<P>&nbsp;&nbsp;&nbsp; (以上代码中省略了一些连接数据库的代码。另外大家根据各自表结构的不同需要重新改写SQL语句，请注意)</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-6-27</pubDate></item><item><title>MySQL复制表结构或者表内容</title><link>www.cenusblog.com/comments.asp?id=81</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 今天想在数据库中建立一个临时表，以存取中间数据。这个表的表结构与其他的一个表是完全相同的，由于此表比较复杂所以不愿意重新建立，所以想复制那个表的表结构从而生成新表。</P>
<P>&nbsp;&nbsp;&nbsp; 一时间有点不知所措，但是经过思考，也参照了一些资料，终于将这个其实很简单的问题解决了。</P>
<P>&nbsp;&nbsp;&nbsp; 首先进入MySQL的命令行：</P>
<P>use <FONT color=#ff0000>database_name</FONT>;</P>
<P>create table <FONT color=#ff0000>table_name</FONT> select * from <FONT color=#ff0000>original_table_name</FONT> where 1=2;</P>
<P>&nbsp;&nbsp;&nbsp; 这样，就生成了一个新的表，它的表结构就与原始表相同，但是没有原始表中的数据。</P>
<P>&nbsp;&nbsp;&nbsp; 如果你想把数据也一起复制过来，可以通过输入：</P>
<P>create table <FONT color=#ff0000>table_name</FONT> select * from <FONT color=#ff0000>original_table_name</FONT> where 1=1;</P>
<P>&nbsp;&nbsp;&nbsp; 这样，两张表就完全相同了。</P>
<P>&nbsp;&nbsp;&nbsp; （红色字体部分大家根据需要可以自行修改）</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-6-25</pubDate></item><item><title>sunec去哪了</title><link>www.cenusblog.com/comments.asp?id=80</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 三天不见~大家的PHP学习是否顺利？</P>
<P>&nbsp;&nbsp;&nbsp; 这三天为何没有更新？嘿嘿~其实是进行了一次短途旅游~去浙江一带，<FONT color=#0000ff>绍兴、诸暨五泄</FONT>等一些地方~之后会放上照片~有兴趣的朋友可以去看看，为大家以后的出游提供一些参考！</P>
<P>&nbsp;&nbsp;&nbsp; 今天调整一下状态~明天又会给大家带来新鲜内容~</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-6-22</pubDate></item><item><title>PHP对显示数据进行排序-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=79</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 欧战正酣，但PHP技术技巧还要不断学习~虽然白天有点犯困。。。打起精神！</P>
<P>&nbsp;&nbsp;&nbsp; 首先承蒙大家对CenusBlog的支持~如果我的一些小心得能带给大家帮助，那就太好了~</P>
<P>&nbsp;&nbsp;&nbsp; 有一些朋友提出想了解PHP分页实现的方法，我也看到网上许多网友对PHP分页也很有兴趣，那好，我稍许准备一下，在下次的专题中为大家奉上！</P>
<P>&nbsp;&nbsp;&nbsp; 进入今天的主题，数据的排序。</P>
<P>&nbsp;&nbsp;&nbsp; 相信大家对如何<A href="http://www.cenusblog.com/comments.asp?id=51">用PHP读取并显示MySQL数据</A>已经了如指掌~那么该我们如何对显示出的数据进行各种排序操作呢？</P>
<P>&nbsp;&nbsp;&nbsp; 首先说明一下思路：</P>
<P>&nbsp;&nbsp;&nbsp; 一般需要排序的字段都是在sql中指定的，例如select * from test order by id desc。那么，数据就以ID字段降序排列。如果你想改变这些数据的排序方式，那么在sql中对其进行修改即可。也就是说，<FONT color=#ff0000>对数据排序的修改其实就是对sql的修改</FONT>，那么我们就可以通过参数的传递来实时修改sql语句，从而达到对不同字段进行排序的目的。</P>
<P>&nbsp;&nbsp;&nbsp; 明确了思路，我们来看看具体如何执行：</P>
<P>&nbsp;&nbsp;&nbsp; （一些数据显示层面的代码在这里省略了，大家可以参看之前的专题）</P>
<P>&nbsp;&nbsp;&nbsp; 在数据显示页view.php中，加入排序方式连接，例如姓名、年龄。<BR>&lt;a href="view.php?<FONT color=#ff0000>order=name</FONT>"&gt;姓名&lt;/a&gt;<BR>&lt;a href="view.php?<FONT color=#ff0000>order=age</FONT>"&gt;年龄&lt;/a&gt;</P>
<P>&nbsp;&nbsp;&nbsp; 随后在view.php开头位置加入以下代码：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">$order=$_GET["order"];<BR>if($_GET["order"]==null)<BR>{<BR>$q = "SELECT * FROM test order by id desc";<BR>（省略部分显示代码）<BR>}<BR>else<BR>{<BR>$q = "SELECT * FROM test order by $order desc";<BR>（省略部分显示代码）<BR>}</DIV>
<P>&nbsp;&nbsp;&nbsp; 意思很简单，首先判断有没有排序参数传递进来，如果没有，那么就按默认方式排列，如果有，那么就按照参数字段进行排序。是不是很轻松？</P>
<P>&nbsp;&nbsp;&nbsp; 但是有一点必须注意，通常，view.php并不单纯，什么意思呢，就是<FONT color=#ff0000>一般view.php可能也是接收到了某个参数从而显示数据，比如view.php?class=1 。那么，我们在传递排序参数时一定要注意把这个参数也要加上</FONT>：</P>
<P>&lt;a href="view.php?<FONT color=#ff0000>class=1&amp;order=name</FONT>"&gt;姓名&lt;/a&gt;<BR>&lt;a href="view.php?<FONT color=#ff0000>class=1&amp;order=age</FONT>"&gt;年龄&lt;/a&gt;</P>
<P>&nbsp;&nbsp;&nbsp; 这样，才能有效避免数据无法显示的问题~一定要引起注意！</P>
<P>&nbsp;&nbsp;&nbsp; 今天就到这里~看球赛去了。。。</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-6-18</pubDate></item><item><title>php中3个等号的运用-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=78</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 今天介绍一下PHP中等号的应用，非常基础，但很重要！</P>
<P>&nbsp;&nbsp;&nbsp; 首先一个等号：<FONT color=#ff0000>是赋值的意思</FONT>。比如$cenus=1; $cenusblog = "cenusdesign";</P>
<P>&nbsp;&nbsp;&nbsp; 接下来，两个等号在一起：<FONT color=#ff0000>意思是宽松比较</FONT>。例如a中存有数字3，那么a==3成立，a==3.0也成立。</P>
<P>&nbsp;&nbsp;&nbsp; 最后是三个等号在一起：可不要人为是笔误哦~<FONT color=#ff0000>它的意思是严格比较</FONT>。他要求两者值与数据类型都要相同。例如a中存有数字3，那么a==3成立，a==3.0也成立，a===3成立，a===3.0不成立。</P>
<P>&nbsp;&nbsp;&nbsp; 我写了一个小实验，有兴趣的话大家可以运行看看，就比较明白了。</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php<BR>$a=1;<BR>if($a==1){echo "a==1 is ok&lt;br&gt;";}else{echo "a==1 is wrong&lt;br&gt;";}&nbsp; //ok<BR>if($a==1.0){echo "a==1.0 is ok&lt;br&gt;";}else{echo "a==1.0 is wrong&lt;br&gt;";}&nbsp; //ok<BR>if($a=="1"){echo "a=='1' is ok&lt;br&gt;";}else{echo "a=='1' is wrong&lt;br&gt;";}&nbsp; //ok<BR>if($a=="1.0"){echo "a=='1.0' is ok&lt;br&gt;";}else{echo "a=='1.0' is wrong&lt;br&gt;";}&nbsp; //ok<BR>if($a===1){echo "a===1 is ok&lt;br&gt;";}else{echo "a===1 is wrong&lt;br&gt;";}&nbsp; //ok<BR>if($a===1.0){echo "a===1.0 is ok&lt;br&gt;";}else{echo "a===1.0 is wrong&lt;br&gt;";}&nbsp; //wrong<BR>if($a==="1"){echo "a==='1' is ok&lt;br&gt;";}else{echo "a==='1' is wrong&lt;br&gt;";}&nbsp; //wrong<BR>if($a==="1.0"){echo "a==='1.0' is ok&lt;br&gt;";}else{echo "a==='1.0' is wrong&lt;br&gt;";}&nbsp; //wrong<BR>?&gt;</DIV>
<P>&nbsp;&nbsp;&nbsp; 今天的内容很简单，但还是希望对大家学习PHP有所帮助~</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-6-16</pubDate></item><item><title>PHP中session的使用方法第四天-session最后的疯狂</title><link>www.cenusblog.com/comments.asp?id=77</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 前三天，我们了解了<A href="http://www.cenusblog.com/comments.asp?id=76">session的具体使用方法</A>~相信大家都经过了实验~</P>
<P>&nbsp;&nbsp;&nbsp; 今天，在最后来说说session的其他使用思路。</P>
<P>&nbsp;&nbsp;&nbsp; 1、权限用户的独特菜单项</P>
<P>&nbsp;&nbsp;&nbsp; 例如，有些按钮只有当拥有admin权限的用户才能使用，而对user用户屏蔽。那么，我们可以这样做，通过session会话，利用if条件判断语句，如果用户权限为admin，则显示按钮，如果不是，则不显示。很简单。</P>
<P>&nbsp;&nbsp;&nbsp; 2、保存用户浏览记录</P>
<P>&nbsp;&nbsp;&nbsp; 很多网站都有用户最近浏览的提示，想知道怎么做出来的么~呵呵~当然，做法可能各有不同，但思路肯定都差不多，就是将用户浏览过的商品信息记录在用户的cookie或者是session信息里，通常，cookie或是session都有一个保存周期性，这个周期是可以设置的，然后，在这保存周期之内，用户再次访问网站时，网站就会读取这些信息，以获得最近信息。</P>
<P>&nbsp;&nbsp;&nbsp; PS:有关cookie的知识将在以后详细介绍。</P>
<P>&nbsp;&nbsp;&nbsp; 好了~虽然session的相关知识我只叙述了九牛一毛，但不管怎么样，只是想让大家有一个基本的思路，更多的进阶知识，都是从这些基本思路中引申出来的。</P>
<P>&nbsp;&nbsp;&nbsp; Sunec相信，<FONT color=#ff0000>把一些基本的东西理解了，其它复杂的功能都是一个基础累加的过程，稍加思考，一定会揭开难题</FONT>~希望大家与Cenusblog一起进步！</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-6-13</pubDate></item><item><title>PHP中session的使用方法第三天-PHP页面用户权限控制代码</title><link>www.cenusblog.com/comments.asp?id=76</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 在昨天的专题中，我们已经了解了<A href="http://www.cenusblog.com/comments.asp?id=75">session的一些基本操作</A>，今天，我们继续就session对权限的控制与用户的识别来做进一步说明。</P>
<P>&nbsp;&nbsp;&nbsp; 在CenusBlog对<A href="http://www.cenusblog.com/comments.asp?id=74">session第一天</A>的说明中已经叙述过了权限控制的基本思路，如果有遗忘的话可以翻阅之前的主题。</P>
<P>&nbsp;&nbsp;&nbsp; 首先进行用户登陆，登陆完毕后，将用户相关信息发送给session，例如：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php<BR>session_start();<BR>$_SESSION["username"]="cenusblog";<BR>$_SESSION["authority"]="user";<BR>?&gt;</DIV>
<P>&nbsp;&nbsp;&nbsp; （提示：在数据库中，用户表中可以建立名为用户类型的字段。）</P>
<P>&nbsp;&nbsp;&nbsp; 这样，我们就将用户信息清楚地告诉给了session，意思就是，<FONT color=#0000ff>我的username是cenusblog，用户类型是user</FONT>。</P>
<P>&nbsp;&nbsp;&nbsp; 接下来我们建立两个页面，一个只允许admin类型用户可以访问admin.php，另一个是user和admin都有权限进行访问user.php。</P>
<P>&nbsp;&nbsp;&nbsp; admin.php的代码：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php<BR>session_start();<BR>$auth=$_SESSION["authority"];<BR>$user=$_SESSION["username"];<BR><FONT color=#ff0000>if($auth=="admin")</FONT><BR>{echo "$user,welcome to admin page";}<BR>else<BR>{echo "you are not permitted to visit this page";}<BR>?&gt;</DIV>
<P>&nbsp;&nbsp;&nbsp; user.php的代码：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php<BR>session_start();<BR>$auth=$_SESSION["authority"];<BR>$user=$_SESSION["username"];<BR><FONT color=#ff0000>if($auth=="admin"||$auth=="user")</FONT><BR>{echo "$user,welcome to user page";}<BR>else<BR>{echo "you are not permitted to visit this page";}<BR>?&gt;</DIV>
<P>&nbsp;&nbsp;&nbsp; 这两段代码的意思其实很简单，就是判断写入sess文件中的用户类型是否与页面要求的类型相一致，如果符合用户类型，那么通过并显示内容，如果不符，则不允许访问。所有这一切<FONT color=#0000ff>只需用一个简单的if...else语句</FONT>就完成了。大家是不是觉得很方便呢？</P>
<P>&nbsp;&nbsp;&nbsp; 在明天的专题中，Cenusblog还会就一些细节进行一些分析，敬请关注！</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-6-11</pubDate></item><item><title>PHP中session的使用方法第二天-操作session代码</title><link>www.cenusblog.com/comments.asp?id=75</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 今天开始向大家详细介绍如何进行session会话。</P>
<P>&nbsp;&nbsp;&nbsp; 首先在<A href="http://www.cenusblog.com/comments.asp?id=45">php.ini</A>中对session的设置做一些调整。找到<FONT color=#0000ff>session.save_path</FONT>，CenusDesign建议把路径改为自己比较容易查看的位置，比如说X:\web\session，注意，<FONT color=#ff0000>目录一定要真实存在</FONT>。修改完毕后重起Apache服务来使设置生效。这个操作的意思是，服务器会把与每一个用户的对话内容保存在一个以sess开头的session文件中来加以识别与操作。这个目录即为保存这些文件的目录。</P>
<P>&nbsp;&nbsp;&nbsp; 那么就进行我们与session的第一次会话吧！</P>
<P>&nbsp;&nbsp;&nbsp; 新建session.php文件,并录入以下代码：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php<BR>session_start();<BR>$_SESSION["username"]="cenusblog";<BR>$_SESSION["authority"]="admin";<BR>?&gt;</DIV>
<P>&nbsp;&nbsp; Cenusblog来进行解释：</P>
<P>&nbsp;&nbsp;&nbsp; <FONT color=#ff0000>session_start()：</FONT>表示一段会话的开始，所有对session的操作都要以它开始。在会话开始的同时，在先前提到的session.save_path目录下，便会自动生成记录这次对话的sess文件。</P>
<P>&nbsp;&nbsp;&nbsp; <FONT color=#ff0000>$_SESSION["变量名"]=值：</FONT>大家可以根据自己的需要在session中记录某些信息。变量名与值大家都可以任意改变。例如sunec将username赋予了“cenusblog”，authority赋予了“admin”。大家可session.save_path目录下的sess文件加以验证。</P>
<P>&nbsp;&nbsp;&nbsp; 另外，<FONT color=#ff0000>session_destroy()：</FONT>就是销毁这次session对话，同时也删除了这个sess文件。</P>
<P>&nbsp;&nbsp;&nbsp; 今天，我们了解到了如何进行session对话，并且写入一些数据，明天，会就权限控制与用户识别来做进一步说明，敬请期待Cenusblog的session第三天。</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-6-10</pubDate></item><item><title>PHP中session的使用方法第一天-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=74</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 作为一个<A href="http://www.cenusblog.com/comments.asp?id=63">系统</A>，必定会有用户登陆与权限控制的环节，怎么做好这两项呢？从今天开始，Cenus Design会向大家着重介绍。</P>
<P>&nbsp;&nbsp;&nbsp; 首先Ceuns Design用最直白，最简单的语言概括地告诉大家什么是session。</P>
<P><FONT color=#0000ff>&nbsp;&nbsp;&nbsp; session就是服务器端与客户端的会话，让服务器端“认识”客户端，继而达到权限控制或者客户端与服务器端信息交流的目的。</FONT></P>
<P>&nbsp;&nbsp;&nbsp; 首先梳理一下PHP控制session来实现权限控制的思路：</P>
<P>&nbsp;&nbsp;&nbsp; 假设某网站有两种用户权限分别为：admin与user。</P>
<OL>
<LI><FONT color=#0000ff>首先，进行用户登陆。</FONT></LI>
<LI><FONT color=#0000ff>当用户登陆验证通过时，同时向session发送用户类型信息，例如“user”。</FONT></LI>
<LI><FONT color=#0000ff>session记录下此用户的用户类型“user”。</FONT></LI>
<LI><FONT color=#0000ff>当用户请求访问页面时，页面将保存在session中的用户类型信息与页面的访问权限作比较，如果页面的访问权限为user，那么与用户类型一致，那么通过审核，用户可以对该页进行访问，如果页面的访问权限是admin，那么与用户类型不符，那么拒绝用户访问。</FONT></LI></OL>
<P>&nbsp;&nbsp;&nbsp; 怎么样，说到这里，大家对session是否有些了解了呢？</P>
<P>&nbsp;&nbsp;&nbsp; 下次，sunec将向大家具体介绍其使用方法。</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-6-9</pubDate></item><item><title>创建MySQL自增字段</title><link>www.cenusblog.com/comments.asp?id=73</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 朋友问：<FONT color=#0000ff>今天我碰到个问题，我建个表，索引是REF，怎么才能写进一条信息，自动生成一个REF号码，记录到表中去呢？希望生成的REF号码是连续的，从00000开始。</FONT></P>
<P>&nbsp;&nbsp;&nbsp; 显然这是一个凡是使用MySQL的朋友都会遇到的问题。</P>
<P>&nbsp;&nbsp;&nbsp; 回忆一下当初在配置环境时提到的<A href="http://www.cenusblog.com/comments.asp?id=45">MySQL GUI工具</A>，对了，就是它，大家可以到<A href="http://www.mysql.com/">http://www.mysql.com</A>中找到它。因为sunec也只是一名程序爱好者，远没有达到程序员水平，所以借助一些工具的帮助还是很有必要的~相信一些朋友也和我一样~</P>
<P>&nbsp;&nbsp;&nbsp; 用GUI工具创建表，建立REF字段，把<FONT color=#ff0000>REF设置为主键，定义类型为int，并在AUTO INC选项上打勾</FONT>。好了，在MySQL端的工作就结束了。</P>
<P>&nbsp;&nbsp;&nbsp; 接下去就交给PHP了，用之前专题中介绍过的<A href="http://www.cenusblog.com/comments.asp?id=65">insert命令</A>为此表添加数据，<FONT color=#ff0000>注意，不用去自行添加REF的值</FONT>，因为之前在AUTO INC选项上打了勾，那么，<FONT color=#ff0000>每添加一条记录，REF都会自动生成，而且是按顺序递增</FONT>，这样，是不是就能实现你的需求了呢？</P>
<P>&nbsp;&nbsp;&nbsp; 另外，从这次主题开始，我把一些技术归纳到PHP技术区，敬请大家留意！</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-6-7</pubDate></item><item><title>PHP中MD5函数使用方法-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=72</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; PHP中有着丰富的函数，MD5加密函数就是其中之一。</P>
<P>&nbsp;&nbsp;&nbsp; 一般来说，一个提供会员注册的网站必定需要采集用户的密码，如何保存用户密码就是个问题。我们当然<FONT color=#ff0000>不能将密码以明文的方式储存在数据库中</FONT>，因为这样的话，一般的管理员就可以查看到用户密码，显然对用户来说是件相当危险的事情。</P>
<P>&nbsp;&nbsp;&nbsp; 那如何解决这个问题呢，我们可以采取这样的策略。</P>
<P>&nbsp;&nbsp;&nbsp; 首先介绍一下PHP中MD5函数的使用方法：</P>
<P>&lt;?php<BR>$pswd1=<FONT color=#ff0000>md5("cenusdesign");</FONT><BR>echo $pswd1;&nbsp;&nbsp;&nbsp;&nbsp; <FONT color=#0000ff>//运行结果为：fc60ec37d1c08d5b0fb67a8cd934d5ba</FONT></P>
<P>$pswd2=md5("Cenusdesign");<BR>echo $pswd2;&nbsp;&nbsp;&nbsp;&nbsp; <FONT color=#0000ff>//运行结果为：067577d9fc109c80538c81d6f02bd293<BR></FONT>?&gt;</P>
<P>&nbsp;&nbsp;&nbsp; 显然，经过md5加密后，原本“cenusdesign”转变成了一组32位的字符串，而且，即使是一个字母的大小写变化，这组字符串就会发生巨大的变化。</P>
<P>&nbsp;&nbsp;&nbsp; Cenus Design建议把用户注册时，<FONT color=#ff0000>将密码首先经过MD5转换，然后将转换加密后的数据库。在用户登陆时，也将密码先进行MD5转化，再和数据库中那组经过MD5加密的字符串进行比较</FONT>。这样，就可以做到在不知道用户确切密码的情况下完成密码的比对操作。</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-6-6</pubDate></item><item><title>PHP时间戳使用方法-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=71</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 照例，首先向大家介绍什么是时间戳。</P>
<P>&nbsp;&nbsp;&nbsp; 说得通俗一些，时间戳就是根据当前系统时间生成的一组随机数字。时间戳一般作为对数据唯一性的一种判断依据。接下来向大家介绍一下我们可以如何运用时间戳。</P>
<P>&nbsp;&nbsp;&nbsp; 我们一定会碰到这样的情况：银行A与银行B几乎同时打开你的账户并看到你的账户上原有1000元存款，然后两家银行都想在你的账户上加上500元存款。那么，银行A便将1000元改成1500元，同时，银行B也将1000元改成了1500元。这样就糟糕了！最后，你的银行账户上最后只有1500元而不是理应的2000元，等于白白损失了500元！这就是在没有锁定数据的情况下修改造成的严重问题。然而，我们可以通过时间戳来巧妙解决这个问题。</P>
<P>&nbsp;&nbsp;&nbsp; 我们来看思路：</P>
<OL>
<LI>在银行account表中建立时间戳字段timestamp，设定为文本类型varchar。</LI>
<LI>当银行A读取account表中的存款字段时，同时也读取时间戳字段，比如123456。</LI>
<LI>当银行A修改完存款数值后，进行存盘操作时，将先前读取的时间戳123456与当时表中的时间戳进行一次对比，如果一致，那么允许存盘，然后生成一个新的时间戳比如456789替换表中原有的时间戳123456。</LI></OL>
<P>&nbsp;&nbsp;&nbsp; 这样做会带来什么好处呢。</P>
<P>&nbsp;&nbsp;&nbsp; 我们再来看一开始的那个情况：银行A与银行B几乎同时打开你的账户并看到你的账户上原有1000元存款，与此同时两个银行业同时读取了时间戳123456，接下来就有区别了，当银行A把1000元改成1500元后，存盘，系统将对比先前的时间戳123456是否与存盘时表中的时间戳一致，显然，现在应该是一致的，那么允许存盘，并生成新的时间戳456789替换了旧的时间戳123456。接下去，B银行也将1000元修改成了1500元，存盘，系统对比先前的时间戳123456是否与存盘时表中的时间戳一致，发现先前的时间戳123456已经与现在的时间戳456789相异，系统拒绝存盘，要求刷新数据，那么数据刷新之后1000元已经因为之前A银行存入了500元而成为了1500元，那么B银行就会在1500元的基础上改为2000元，再次存盘，系统允许。这样，我们就避免了重复修改数据所带来的错误！</P>
<P>&nbsp;&nbsp;&nbsp; 有些像绕口令，希望大家已经明白我的意思~</P>
<P>&nbsp;&nbsp;&nbsp; 最后，让我们看看PHP中对时间戳的一些操作代码。</P>
<UL>
<LI>获得时间戳<BR>&lt;?php<BR><FONT color=#ff0000>$timestamp=time();<BR></FONT>echo $timestamp;<BR>?&gt;</LI>
<LI>更新timestamp的SQL的语句：<BR><FONT color=#ff0000>update 表名 set 字段名=$timestamp where 条件=值；</FONT></LI></UL>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-6-4</pubDate></item><item><title>PHP-MySQL教程-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=70</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 至此，如何用PHP对MySQL进行增、删、查、改已经向大家简要地做过说明，为了方便大家查询浏览，在此，我对这些基本操作在此归纳罗列。</P>
<UL>
<LI><A href="http://www.cenusblog.com/comments.asp?id=45">WindowsXP中快速配置Apache+PHP5+Mysql</A></LI>
<LI><A href="http://www.cenusblog.com/comments.asp?id=51">PHP读取MySQL数据</A></LI>
<LI><A href="http://www.cenusblog.com/comments.asp?id=60">PHP组合查询多条件查询</A></LI>
<LI><A href="http://www.cenusblog.com/comments.asp?id=64">PHP添加MySQL数据记录</A></LI>
<LI><A href="http://www.cenusblog.com/comments.asp?id=66">用PHP进行MySQL删除记录操作</A></LI>
<LI><A href="http://www.cenusblog.com/comments.asp?id=69">用PHP实现MySQL更新记录</A></LI></UL>
<P>&nbsp;&nbsp;&nbsp; 这些都是PHP简单系统中最最基础的一些操作，<FONT color=#ff0000>任何复杂的系统都是由这些简单的操作衍生而来的。</FONT>所以，彻底掌握理解这些操作是极其重要的。希望大家可以从中得到一些启发~</P>
<P>&nbsp;&nbsp;&nbsp; 从下次专题开始，我将与大家一起深一步研究PHP简单系统的制作。从每一细小的环节着手，解决一些大家可能碰到的问题。希望大家可以喜欢。</P>
<P>&nbsp;&nbsp;&nbsp; 如果大家在实践中遇到任何问题，都可以通过留言或者邮件的方式联系Cenus Design。我会尽力与大家分享经验！</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-6-3</pubDate></item><item><title>用PHP实现MySQL更新记录-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=69</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 今天向大家讲述如何通过PHP修改MySQL中的数据记录。</P>
<P><FONT style="BACKGROUND-COLOR: #dbf2dc">&nbsp;&nbsp;&nbsp; 首先梳理一下操作思路：</FONT></P>
<OL>
<LI><FONT style="BACKGROUND-COLOR: #dbf2dc">列出所有数据</FONT></LI>
<LI><FONT style="BACKGROUND-COLOR: #dbf2dc">选择需要修改的数据记录，进入可编辑状态。</FONT></LI>
<LI><FONT style="BACKGROUND-COLOR: #dbf2dc">提交修改结果完成修改</FONT></LI></OL>
<P>&nbsp;&nbsp;&nbsp; 先列出数据库中的数据view.php，并在每条记录前添加一个modify字样，这样用户就可以选择自己要修改的记录进行修改。</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php<BR>$link=mysql_connect("localhost","root","管理员密码");<BR>mysql_select_db("infosystem", $link);<BR>$q = "SELECT * FROM info";<BR>mysql_query("SET NAMES GB2312");<BR>$rs = mysql_query($q, $link); 
<P></P>
<P>echo "&lt;table&gt;";<BR>echo "&lt;tr&gt;&lt;td&gt;部门名称&lt;/td&gt;&lt;td&gt;员工姓名&lt;/td&gt;&lt;td&gt;PC名称&lt;/td&gt;&lt;/tr&gt;";<BR>while($row = mysql_fetch_row($rs)) echo "&lt;tr&gt;&lt;td&gt;&lt;a href='modify_do.php?id=$row[0]'&gt;modify&lt;/a&gt;&lt;/td&gt;&lt;td&gt;$row[1]&lt;/td&gt;&lt;td&gt;$row[2]&lt;/td&gt;&lt;td&gt;$row[3]&lt;/td&gt;&lt;td&gt;$row[4]&lt;/td&gt;&lt;td&gt;$row[5]&lt;/td&gt;&lt;td&gt;$row[6]&lt;/td&gt;&lt;td&gt;$row[7]&lt;/td&gt;&lt;td&gt;$row[8]&lt;/td&gt;&lt;td&gt;$row[9]&lt;/td&gt;&lt;td&gt;$row[10]&lt;/td&gt;&lt;td&gt;$row[11]&lt;/td&gt;&lt;td&gt;$row[12]&lt;/td&gt;&lt;td&gt;$row[13]&lt;/td&gt;&lt;/tr&gt;";<BR>echo "&lt;/table&gt;";<BR>?&gt;</P></DIV>
<P>&nbsp;&nbsp;&nbsp; 当用户点击modify后，进入相应记录的可编辑状态modify_do.php：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php 
<P></P>
<P>$link =mysql_connect("localhost","root","管理员密码");<BR>if(!$link){die("error");}<BR>mysql_select_db("infosystem", $link);<BR>$del_id=$_GET["id"];<BR>$q="select * from info where id=$del_id";</P>
<P>mysql_query("SET NAMES GB2312");&nbsp;&nbsp;&nbsp; //代码转化<BR>$rs = mysql_query($q, $link);<BR>if(!$rs){die("没有显示结果");}<BR>?&gt;</P>
<P>&lt;html&gt;<BR>&lt;head&gt;<BR>&lt;/head&gt;<BR>&lt;body&gt;</P>
<P>&lt;form action="modify_finish.php" method="POST"&gt;<BR>&lt;?php</P>
<P>echo "&lt;input type='text' size=25 name='id' value='$del_id'&gt;";</P>
<P>while($row = mysql_fetch_object($rs)) echo "&lt;input type='text' size=25 name='ename' value='$row-&gt;ename'&gt;";</P>
<P>mysql_close($link);&nbsp; //关闭数据集</P>
<P>?&gt;</P>
<P>&lt;input type="submit" name="提交" value="提交"&gt;<BR>&lt;/form&gt;<BR>&lt;/body&gt;<BR>&lt;/html&gt;</P></DIV>
<P>&nbsp;&nbsp;&nbsp; 最后，处理提交数据modify_finish.php：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php 
<P></P>
<P>$link =mysql_connect("localhost","root","管理员密码");<BR>if(!$link){die("error");}<BR>mysql_select_db("infosystem", $link);</P><P>mysql_query("SET NAMES GB2312");</P>
$exec="update info set ename='".$_POST['ename']."' where id=".$_POST['id'].""; //修改数据</P><p>mysql_query($exec,$link);</p>
<P>echo "修改成功!" ;</P>
<P>mysql_close($link);&nbsp; //关闭数据集</P>?&gt;</DIV>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-6-2</pubDate></item><item><title>如何用PHP连接MySQL代码-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=68</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 看到很多朋友都在问PHP连接MySQL的代码，其实在我的专题中几乎每次都有写到。这里，我在单独列出来说一次。</P>
<P>&nbsp;&nbsp;&nbsp; 代码是这样的：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php <BR>$link=mysql_connect("<FONT color=#ff0000>localhost</FONT>","<FONT color=#ff0000>root</FONT>","<FONT color=#ff0000>123456</FONT>"); <BR>if(!$link) echo "没有连接成功!"; <BR>else echo "连接成功!"; <BR>?&gt;</DIV>
<P>&nbsp;&nbsp;&nbsp; 其中红色部分可以根据自己的实际情况进行修改。</P>
<UL>
<LI><FONT color=#ff0000>localhost：表示数据库所在地。</FONT>如果是本机，则写localhost，如果在其它机器上，则可写IP地址。</LI>
<LI><FONT color=#ff0000>root：进入数据库的用户名。</FONT>MySQL默认用户名为root。</LI>
<LI><FONT color=#ff0000>123456：用户名所对应的密码。</FONT>根据自己设的管理员密码修改这串数字。</LI></UL>
<P>&nbsp;&nbsp;&nbsp; 当然，所以以上提到的这些代码都是在<A href="http://www.cenusblog.com/comments.asp?id=45">配置好Apache + MySQL + PHP</A> 之后才能运行成功的。请大家注意。</P>
<P>&nbsp;&nbsp;&nbsp; 好了，PHP连接上MySQL是一切故事的开始，希望大家系统制作顺利~如果有其它PHP的问题还可以<A href="http://www.cenusblog.com/articatmore.asp?blog_cat=PHP简单系统制作">在我Blog中寻找</A>~</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-5-30</pubDate></item><item><title>PHP简单系统数据添加以及数据删除模块-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=67</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 今天我们总结一下PHP简单信息系统MySQL中<A href="http://www.cenusblog.com/comments.asp?id=64">数据添加</A>模块以及<A href="http://www.cenusblog.com/comments.asp?id=66">删除</A>模块的学习内容。</P>
<P>&nbsp;&nbsp;&nbsp; 无论执行什么操作，其<FONT color=#ff0000>思路无非是通过PHP传递SQL语句给MySQL数据库，让数据库执行添加或者删除命令，最终得到我们想要的结果。</FONT>PHP好比是一个桥梁，连接起可视化的网页与后台的数据库。</P>
<P>&nbsp;&nbsp;&nbsp; <A href="http://www.cenusblog.com/upload/insertdel_cenusdesign.rar">点击下载PHP简单系统添加数据以及数据删除模块。</A></P>
<P>&nbsp;&nbsp;&nbsp; 再次要提醒大家的是，我这里仅仅给出了程序文件，数据库还是需要大家自己建立，我的程序只是起到一个抛砖引玉的作用，希望大家可以把它作为参考，加以修改，变成自己想要的东西！</P>
<P>&nbsp;&nbsp;&nbsp; <STRONG><FONT color=#0000ff>另外~我的<A href="http://www.cenusblog.com/album.asp">相册</A>又有更新！感兴趣的朋友可以去看看！</FONT></STRONG></P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-5-27</pubDate></item><item><title>用PHP进行MySQL删除记录操作-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=66</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 首先我们新建数据显示页面view.php：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php<BR>$link=mysql_connect("localhost","root","<FONT color=#0000ff>管理员密码</FONT>");<BR>mysql_select_db("infosystem", $link);<BR>$q = "SELECT * FROM info";<BR>mysql_query("SET NAMES GB2312");<BR>$rs = mysql_query($q, $link); 
<P></P>
<P>echo "&lt;table&gt;";<BR>echo "&lt;tr&gt;&lt;td&gt;部门名称&lt;/td&gt;&lt;td&gt;员工姓名&lt;/td&gt;&lt;td&gt;PC名称&lt;/td&gt;&lt;/tr&gt;";<BR>while($row = mysql_fetch_object($rs)) echo "&lt;tr&gt;&lt;td&gt;<FONT color=#ff0000>&lt;a href='dodel.php?id=$row-&gt;id'&gt;del&lt;/a&gt;</FONT>&lt;/td&gt;&lt;td&gt;$row-&gt;depart&lt;/td&gt;&lt;td&gt;$row-&gt;ename&lt;/td&gt;&lt;/tr&gt;";<BR>echo "&lt;/table&gt;";<BR>?&gt;</P></DIV>
<P>&nbsp;&nbsp;&nbsp; 和<A href="http://www.cenusblog.com/comments.asp?id=51">一般数据显示页面</A>不同的是，这次，在每一条记录之前都有一个"del"字样的连接，通过点击del，我们便可以删除MySQL中相应的数据记录。上述程序中红色部分的意义就是：当点击del时，将所对应记录的ID号传递给dodel.php。</P>
<P>&nbsp;&nbsp;&nbsp; 接下去看dodel.php：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php<BR>$link =mysql_connect("localhost","root","管理员密码");<BR>mysql_select_db("infosystem", $link);<BR>$del_id=$_GET["id"];<BR><FONT color=#ff0000>$exec="delete from info where id=$del_id";<BR></FONT>mysql_query($exec, $link);<BR>echo "删除成功!";<BR>mysql_close($link);<BR>?&gt;</DIV>
<P>&nbsp;&nbsp;&nbsp; 这个页面就是这次专题的关键，它接收到来自view.php的ID号，并将它代入用于删除记录的SQL语句，从而达到删除纪录的目的。</P>
<P>&nbsp;&nbsp;&nbsp; 我们来详细看一下，用于MySQL数据删除的SQL语句为：</P>
<UL>
<LI><FONT color=#ff0000>delete from 表名 where 条件=值</FONT></LI></UL>
<P>&nbsp;&nbsp;&nbsp; 这里的值我们通过<FONT color=#ff0000>$del_id=$_GET["id"]</FONT>来接收，并传递给SQL语句，最后通过mysql_query来执行这句SQL语句。</P>
<P>&nbsp;&nbsp;&nbsp; 好了，大家可以确认一下，MySQL中的数据是否已经被正确删除了呢？大家如果有什么问题可以直接留言提问~</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-5-23</pubDate></item><item><title>PHP添加MySQL数据中SQL的insert语法详解-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=65</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp;&nbsp;想对上一次<A href="http://www.cenusblog.com/comments.asp?id=64">PHP插入数据记录</A>的专题做个补充。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;上次程序中有这么一句话：</P>
<P>$exec="insert into info (ename,pcname) values ('".$_POST["ename"]."','".$_POST["pcname"]."')";</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;解释一下这句话的意义。SQL插入记录的语法是：</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#0000ff>insert into 表名 (字段名1,字段名2, ...) values ("字段1的值","字段2的值", ...)</FONT></P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;先前那句程序就是根据这个语法而来，<FONT color=#ff0000>需要注意的是，values括号中的值我都加上了引号，这是因为所对应的字段类型为varchar，如果对应的字段类型是int之类的话，那么就应该把引号去掉！</FONT>一定要注意。</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-5-21</pubDate></item><item><title>PHP添加MySQL数据记录-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=64</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 相信大家已经大致了解了<A href="http://www.cenusblog.com/comments.asp?id=63">如何使用PHP查询MySQL</A>数据。那么接下来，我们就进入运用PHP语言添加MySQL数据的学习，是不是很兴奋呢？</P>
<P>&nbsp;&nbsp;&nbsp; 首先建立查询页面：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;html&gt;<BR>&lt;head&gt;<BR>&lt;/head&gt;<BR>&lt;body&gt;<BR>&lt;h3&gt;添加记录&lt;/h3&gt;<BR>&lt;form action="add_finish.php" method="POST"&gt;<BR>员工姓名：&lt;input type="text" size=25 name="ename" value=""&gt;&lt;br&gt;&lt;br&gt;<BR>PC名称：&lt;input type="text" size=25 name="pcname" value=""&gt;&lt;br&gt;&lt;br&gt;<BR>&lt;input type="submit" name="提交" value="提交"&gt;<BR>&lt;/form&gt;<BR>&lt;/body&gt;<BR>&lt;/html&gt;</DIV>
<P>&nbsp;&nbsp;&nbsp; 大家应该还记得，在之前的专题中已经介绍过<A href="http://www.cenusblog.com/comments.asp?id=56">PHP页面之间如何传值的技术</A>。同样，在这个页面里，当我们单击提交后，我们将把ename与pcname这两个参数通过post的方法传递给add_finish.php页面。</P>
<P>&nbsp;&nbsp;&nbsp; 接下来是最重要的，让我们来看看如何用PHP编写添加MySQL数据的语句：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php<BR>$link =mysql_connect("localhost","root","管理员密码");<BR>mysql_select_db("infosystem", $link);<BR><FONT color=#ff0000>$exec="insert into info (ename,pcname) values ('".$_POST["ename"]."','".$_POST["pcname"]."')";</FONT><BR>mysql_query("SET NAMES GB2312");<BR><FONT color=#ff0000>mysql_query($exec, $link);</FONT><BR>mysql_close($link);<BR>echo "添加成功！";<BR>?&gt;</DIV>
<P>&nbsp;&nbsp;&nbsp; 其中红色部分就是PHP添加MySQL数据的关键SQL语句。然后用mysql_query来执行这句SQL语句。</P>
<P>&nbsp;&nbsp;&nbsp; 要提醒大家的是，一定要注意程序中的任何一个符号，因为这段程序是经过我测试正常通过的，大家在复制时只要全部复制就可以了，但在大家自己编写时一定要注意每一个细节。</P>
<P>&nbsp;&nbsp;&nbsp; 还有一点就是，<FONT color=#0000ff>大家要根据自己的数据库结构对程序进行细微的修改来满足大家的特定需要。</FONT></P>
<P>&nbsp;&nbsp;&nbsp; 今天的专题比较简略，大致介绍了如何用PHP添加MySQL数据记录。更详细的介绍我会在以后的专题中补充说明。</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-5-19</pubDate></item><item><title>PHP简单系统查询模块代码-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=63</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 是时候稍微总结一下前一段时间的PHP简单系统制作技巧了。</P>
<P>&nbsp;&nbsp;&nbsp; 前一段时间主要讲述了如何用<A href="http://www.cenusblog.com/comments.asp?id=51">PHP读取与查询MySQL中的数据</A>，并向大家着重解释了如何<A href="http://www.cenusblog.com/comments.asp?id=60">制作PHP多条件组合查询的方法</A>。当然，很重要的是让大家了解到<A href="http://www.cenusblog.com/comments.asp?id=45">如何配置PHP+APACHE+MySQL</A>。</P>
<P>&nbsp;&nbsp;&nbsp; 如果大家在PHP简单信息系统数据查询模块中还有什么问题，欢迎大家留言询问。</P>
<P>&nbsp;&nbsp;&nbsp; 这里，我为大家准备好了一个文件，集合了前几次的代码，以供大家参考。<A href="http://www.cenusblog.com/upload/search_cenusdesign.rar">点击下载</A>。</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-5-18</pubDate></item><item><title>汶川挺住！</title><link>www.cenusblog.com/comments.asp?id=62</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 很长时间没有更新<A href="http://www.cenusblog.com/articatmore.asp?blog_cat=PHP简单系统制作">PHP技术技巧</A>了，不是偷懒，而是这几天时刻都在关注四川还在苦难中的同胞们。</P>
<P>&nbsp;&nbsp;&nbsp; <STRONG>天佑中国，天佑四川，天佑灾民！一切都会好起来！</STRONG></P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-5-15</pubDate></item><item><title>PHP组合查询多条件查询（下）-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=61</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 沿着<A href="http://www.cenusblog.com/comments.asp?id=60">上一次组合查询的思路</A>，建立search_result.php文件。</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php<BR>$link =mysql_connect("localhost","root","管理员密码");<BR>mysql_select_db("infosystem", $link);<BR>?&gt; 
<P></P>
<P>&lt;?php</P>
<P><FONT color=#ff0000>//注释1-----------------------------</FONT><BR>$depart=$_POST["depart"];<BR>$ename=$_POST["ename"];</P>
<P><FONT color=#ff0000>//注释2------------------------</FONT><BR>if($depart != null){<BR>$a = " and depart like '%$depart%'";}</P>
<P>if($ename != null){<BR>$b = " and ename like '%$ename%'";}</P>
<P><FONT color=#ff0000>//注释3------------------------</FONT><BR>$q = "SELECT * FROM info where (1=1)";<BR>$q .=$a;<BR>$q .=$b;</P>
<P><BR><FONT color=#ff0000>//注释4------------------------------------------</FONT><BR>mysql_query("SET NAMES GB2312");<BR>$rs = mysql_query($q, $link);<BR>echo "&lt;table&gt;";<BR>echo "&lt;tr&gt;&lt;td&gt;部门&lt;/td&gt;&lt;td&gt;员工姓名&lt;/td&gt;&lt;/tr&gt;";<BR>while($row = mysql_fetch_object($rs)) echo "&lt;tr&gt;&lt;td&gt;$row-&gt;depart&lt;/td&gt;&lt;td&gt;$row-&gt;ename&lt;/td&gt;&lt;/tr&gt;";<BR>echo "&lt;/table&gt;";</P>
<P>mysql_close($link);</P>?&gt;</DIV>
<P>&nbsp;&nbsp;&nbsp; 注释1：接收search.php通过post传递出的参数，把两个参数分别存储入变量:depart和ename。</P>
<P>&nbsp;&nbsp;&nbsp; 注释2：判断参数是否为空，如果为空，不作任何操作。如果有参数传出，则生成相应SQL语句。</P>
<P>&nbsp;&nbsp;&nbsp; 注释3：用追加的方法生成SQL语句。</P>
<P>&nbsp;&nbsp;&nbsp; 注释4：生成数据集，<A href="http://www.cenusblog.com/comments.asp?id=51">显示数据</A>，最后关闭数据库连接。</P>
<P>&nbsp;&nbsp;&nbsp; 怎么样，是不是实现了组合查询的功能呢？有机会的话，我将更详细的对此做一些介绍。</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-5-12</pubDate></item><item><title>PHP组合查询多条件查询（上）-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=60</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 今天想向大家介绍PHP页面间如何进行多条件组合查询。在很多其它网站也有很多相关介绍，但都不够详尽，在这里，我将详细地为大家说明这一比较实用但又相当关键的技术。</P>
<P>&nbsp;&nbsp;&nbsp; 先向大家说明需求：按照我们系统的要求，我们将通过部门名称、员工姓名、PC名称、IP地址等等字段来进行组合查询从而得到想要的数据结果。那么，为了简单起见，我们用两个条件（部门名称、员工姓名）的组合查询来向大家说明这一技术技巧。当我们只输入部门名而员工姓名为空值时，那么部门内所有员工信息将被呈现，只有当你同时限制部门与员工姓名时，才能查询出唯一信息。</P>
<P>&nbsp;&nbsp;&nbsp; 那就让我们开始。</P>
<P>&nbsp;&nbsp;&nbsp; 首先建立查询页面search.php，不同于<A href="http://www.cenusblog.com/comments.asp?id=56">上次单一条件查询</A>，这次我们需要两个条件的组合进行查询。</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;html&gt;<BR>&lt;body&gt;<BR>&lt;h3&gt;查询&lt;/h3&gt;<BR>&lt;form action="search_result.php" method="POST"&gt;<BR>部门名称：&lt;input type="text" size=25 name="depart" value=""&gt; &lt;br&gt;&lt;br&gt;<BR>员工姓名: &lt;input type="text" size=25 name="ename" value=""&gt; &lt;br&gt;&lt;br&gt;<BR>&lt;input type="submit" name="提交" value="提交"&gt;<BR>&lt;/form&gt;<BR>&lt;/body&gt;<BR>&lt;/html&gt;</DIV>
<P>&nbsp;&nbsp;&nbsp; 和上次一样，我们将depart与ename的值通过Post的方法传递给search_result.php文件。</P>
<P>&nbsp;&nbsp;&nbsp; 然后便到了这次主题的关键，search_result.php文件如何接受这两个参数值，并判断当其中一个字段为空值时，如何将其排除查询条件。</P>
<P><FONT color=#0000ff>&nbsp;&nbsp;&nbsp; 怎么理解上面这句话，举例子来说，如果我们单纯地将接收参数的查询语句写成 select * from info where depart='部门值参数'&nbsp; and ename='员工姓名参数' 的话，那么如果其中一个参数为空时我们就将得到 select * from info where depart='技术部' and ename='' ，显然，这样的查询很有可能返回空的结果，因为这句查询语句的意思就是，查询所有技术部没有姓名的人的数据，这不是很荒唐么，倒过来如果是 select * from info where depart='' and ename='sunec' ，那么它的意思就是查询员工姓名为sunec但是不属于任何部门的人，那自然也是查询不到结果的。</FONT></P>
<P><FONT color=#0000ff>&nbsp;&nbsp;&nbsp; 正确的做法应该是，在查询语句中过滤掉那个为空值的的参数。比如，当我们只输入部门名时应该得到 select * from info where depart='技术部' 。这样，查询语句的意思就变成查询所有部门为技术部员工的信息了，这就是我们想要的。</FONT></P>
<P>&nbsp;&nbsp;&nbsp; 明确了思路，那么，<A href="http://www.cenusblog.com/comments.asp?id=61">下一次我们就去实现它！</A></P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-5-10</pubDate></item><item><title>阻止广告机器人的战役是否告捷？~</title><link>www.cenusblog.com/comments.asp?id=59</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 在上一次向广告机器人宣战以来，已经过了三天，以往每天必有的广告留言暂时不见去向，到底是我战胜了它还是它压根没有来光顾？~不得而知，当然是希望我战胜了它~</P>
<P>&nbsp;&nbsp;&nbsp; 其实我也就是通过对广告字符的过滤的方法来阻止机器人的入侵。再过些日子吧，看看是否还有反复，估计等到那个时候才能下定论吧！</P>
<P>&nbsp;&nbsp;&nbsp; 对了，PHP明天将推出重要一课！请不要错过！</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-5-9</pubDate></item><item><title>通过POST还是GET来传值-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=58</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 细心的朋友一定注意到，上一次<A href="http://www.cenusblog.com/comments.asp?id=56">PHP页面间传递参数</A>的专题中有这么一段程序：</P>
<P>&nbsp;&nbsp;&nbsp; &lt;form action="search_result.php" method="POST"&gt;</P>
<P>&nbsp;&nbsp;&nbsp; 其中的method我用了POST，但为什么不用GET方法呢？</P>
<P>&nbsp;&nbsp;&nbsp; 首先来看看POST与GET传值的区别：</P>
<UL>
<LI>Post传输数据时，不需要在URL中显示出来，而Get方法要在URL中显示。</LI>
<LI>Post传输的数据量大，可以达到2M，而Get方法由于受到URL长度的限制,只能传递大约1024字节。</LI></UL>
<P>&nbsp;&nbsp;&nbsp; 一般来说，我们用POST传值作为首选，这样做较为安全。</P>
<P>&nbsp;&nbsp;&nbsp; 要注意的是，如果你用POST来传值，那么在另外一个页面接收参数时就要用$_POST["参数名"]来接收，如果你是用GET来传值，那么你就必须用$_GET["参数名"]来接收参数。</P>
<P>&nbsp;&nbsp;&nbsp; <STRONG>另外~我的</STRONG><A href="http://www.cenusblog.com/photo.asp?id=5"><STRONG>照片更新拉</STRONG></A><STRONG>~有兴趣的朋友可以进入参观~</STRONG></P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-5-8</pubDate></item><item><title>向自动留言的广告机器人宣战!</title><link>www.cenusblog.com/comments.asp?id=57</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 最近发现本站频繁遭到自动留言的广告机器人的骚扰，很是不爽，尽管采取过一些对策加以防范，比如说采用问答题的形式来进行过滤，但好像依然没有什么效果。</P>
<P>&nbsp;&nbsp;&nbsp; 在网上看到一些朋友推荐采用验证码的形式来抵御，当然这是个方法，但是总觉得应该还有更加简单的方法，所以还想继续做一些试验来验证，如果有什么突破或者效果，我回乡大家及时汇报相关情况。</P>
<P>&nbsp;&nbsp;&nbsp; 我要向自动留言的广告机器人宣战!</P>
<P>&nbsp;&nbsp;&nbsp; 再说到PHP每日一贴，五一长假，给自己放松了一下~从明天开始，PHP的生活将继续~</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-5-6</pubDate></item><item><title>PHP页面间传递参数-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=56</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 从今天开始，我们进入了系统制作中最基础但也是最关键的<FONT color=#0000ff>增删查找</FONT>功能介绍阶段了。</P>
<P>&nbsp;&nbsp;&nbsp; 首先给大家介绍<FONT color=#0000ff>如何通过表单传值查询数据</FONT>。</P>
<P>&nbsp;&nbsp;&nbsp; 任务目标：在表单中输入部门名，查询出相应部门的人员信息。</P>
<P>&nbsp;&nbsp;&nbsp; 先创建<FONT color=#0000ff>search.php</FONT>文件。</P>
<P>&nbsp;&nbsp;&nbsp; 第一步，插入一表单，在其中包含一个输入框，一个提交按钮。search.php文件内容如下所示：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;html&gt;<BR>&lt;head&gt;<BR>&lt;/head&gt;<BR>&lt;body&gt;<BR>&lt;h3&gt;Search&lt;/h3&gt;<BR>&lt;form <FONT color=#0000ff>action="search_result.php" method="POST"</FONT>&gt;<BR>Depart Name:&lt;input type="text" size=25 <FONT color=#0000ff>name="depart"</FONT> value=""&gt;&lt;br&gt;&lt;br&gt;<BR>&lt;input type="submit" name="submit" value="Search"&gt;<BR>&lt;/form&gt;<BR>&lt;/body&gt;<BR>&lt;/html&gt;</DIV>
<P>&nbsp;&nbsp;&nbsp; 这样，我们就得到了一个数据提交页面，其含义就是，当我们点击Search按钮时，系统将名字为depart的输入框中所输入的数据通过Post的方法传递给search_result.php文件。</P>
<P>&nbsp;&nbsp;&nbsp; 第二步，既然之前我们已经把值传送了出来，那么我们就要创建另一个页面文件来接收这一值。因为之前已经指定了是传送给search_result.php，那么我们就新建一个名为<FONT color=#0000ff>search_result.php</FONT>的文件。</P>
<P>&nbsp;&nbsp;&nbsp; 在这个文件中，首先连接上数据库并选择好数据源：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php <BR>$link=mysql_connect("localhost","root","<FONT color=#0000ff>之前的管理员密码</FONT>"); <BR>if(! $link) echo "没有连接成功!"; <BR>else echo "连接成功!"; <BR><FONT color=#0000ff>mysql_select_db("infosystem", $link);</FONT><BR>?&gt;</DIV>
<P>&nbsp;&nbsp;&nbsp; 其次，接收search.php文件发出的参数,并生成SQL查询语句：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php<BR>$depart=$_POST["depart"];<BR>$q = "SELECT * FROM info where depart='$depart'";<BR>?&gt;</DIV>
<P>&nbsp;&nbsp;&nbsp; 最后，执行SQL语句并<A href="http://www.cenusblog.com/comments.asp?id=52">显示数据</A>：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php<BR>mysql_query("SET NAMES GB2312");<BR>$rs = mysql_query($q, $link);<BR>echo "&lt;table&gt;";<BR>echo "&lt;tr&gt;&lt;td&gt;部门&lt;/td&gt;&lt;td&gt;姓名&lt;/td&gt;&lt;/tr&gt;";<BR>while($row = mysql_fetch_object($rs)) echo "&lt;tr&gt;&lt;td&gt;$row-&gt;depart&lt;/td&gt;&lt;td&gt;$row-&gt;ename&lt;/td&gt;&lt;/tr&gt;";<BR>echo "&lt;/table&gt;"; 
<P></P>
<P>mysql_close($link);<BR>?&gt;</P></DIV>
<P>&nbsp;&nbsp;&nbsp; 通过查询，是不是得到大家所需要的数据了呢？当然，这只是一个最最基本的例子，接下来的几个话题，我会接着查询数据这个问题继续补充说明。</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-5-2</pubDate></item><item><title>解决MySQL中文输出变成问号的问题-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=55</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 最初我在显示MySQL时遇到显示出的中文字符全部变成了问号。</P>
<P>&nbsp;&nbsp;&nbsp; 于是我在程序中加入：<FONT color=#0000ff>mysql_query("SET NAMES GB2312");</FONT>问题迎刃而解。主要是一个编码问题。</P>
<P>&nbsp;&nbsp;&nbsp; 注意这句代码的插入位置，应该插入在显示数据的代码前，否则就没有意义了。具体可以参照上次我放出的<A href="http://www.cenusblog.com/comments.asp?id=51">PHP显示MySQL数据</A>的程序。</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-4-30</pubDate></item><item><title>关于PHP简单信息系统制作-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=54</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 在之前，专题名为<A href="http://www.cenusblog.com/comments.asp?id=35">ASP.NET简单信息系统制作</A>的文章中说要用ASP.NET制作简单系统，后来在<A href="http://www.cenusblog.com/comments.asp?id=44">另一篇文章</A>中向大家说明了因为预算原因放弃了用ASP.NET，取而代之用PHP为基础进行简单信息系统的开发。</P>
<P>&nbsp;&nbsp;&nbsp; 现在大家可以看到的以“PHP学习心得每日一贴”为副标题的文章，就是介绍<FONT color=#ff0000>如何从无到有进行简单信息系统开发</FONT>的文章专题。<FONT color=#ff0000>越早发布的文章，谈论越基础的问题</FONT><FONT color=#ff0000>，按照时间顺序步步推进系统的开发流程</FONT>。为方便大家浏览，刚刚添加了前后文章导航系统，另外在左侧文章分类中也填加入了PHP信息系统开发的专题分类，大家可以从最老的帖子开始看起，和我一起学习简单信息系统是如何一步步搭建起来的。</P>
<P>&nbsp;&nbsp;&nbsp; 当文章数量达到一定数量，或者每过一阶段，我都会整理一下最近的更新，提供大家学习的索引。敬请大家关注~</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-4-29</pubDate></item><item><title>PHP中Date获取时间不正确怎么办-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=53</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 今天用<FONT color=#0000ff>echo $showtime=date("Y-m-d H:i:s")</FONT>获取系统时间时，发现获取的时间与系统的时间不符。</P>
<P>&nbsp;&nbsp;&nbsp; 研究了一番发现，<FONT color=#ff0000>PHP默认设置的时间是以格林威治时区为标准的，所以我们必须把PHP的时区设定改为北京时间。</FONT></P>
<P>&nbsp;&nbsp;&nbsp; 操作方法：</P>
<UL>
<LI>打开<FONT color=#0000ff>php.ini</FONT>文件，一般在PHP的安装根目录下</LI>
<LI>找到其中的<FONT color=#0000ff>;date.timezone</FONT></LI>
<LI>删掉date.timezone前面的分号，并改成<FONT color=#0000ff>date.timezone = PRC</FONT></LI>
<LI>存盘，并重新启动Apahce服务（有时用Apache的restart功能会有问题，建议先stop然后再start）</LI></UL>
<P>&nbsp;&nbsp;&nbsp; 让我们重新检验一下echo $showtime=date("Y-m-d H:i:s")。</P>
<P>&nbsp;&nbsp;&nbsp; 是不是时间恢复正常了？</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-4-28</pubDate></item><item><title>详解PHP显示MySQL数据的三种方法-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=52</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp;&nbsp;在昨天的专题里，我们谈论了<A href="http://www.cenusblog.com/comments.asp?id=51">如何用PHP读取MySQL中的数据</A>，今天，我想再继续补充一下其它的几种数据读取方式。</P>
<P>&nbsp;&nbsp;&nbsp; 昨天的程序是这样的：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php <BR>$link=mysql_connect("localhost","root","之前的管理员密码"); <BR>if(!$link) echo "没有连接成功!"; <BR>else echo "连接成功!"; <BR>mysql_select_db("infosystem", $link); <BR>$q = "SELECT * FROM info";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>mysql_query("SET NAMES GB2312");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>$rs = mysql_query($q, $link);<BR>if(!$rs){die("Valid result!");}<BR>echo "&lt;table&gt;";<BR>echo "&lt;tr&gt;&lt;td&gt;部门名称&lt;/td&gt;&lt;td&gt;员工姓名&lt;/td&gt;&lt;td&gt;PC名称&lt;/td&gt;&lt;/tr&gt;";<BR><FONT color=#ff0000>while($row = mysql_fetch_row($rs)) echo "&lt;tr&gt;&lt;td&gt;$row[1]&lt;/td&gt;&lt;td&gt;$row[2]&lt;/td&gt;&lt;td&gt;$row[3]&lt;/td&gt;&lt;/tr&gt;";<BR></FONT>echo "&lt;/table&gt;";<BR>mysql_close($link);<BR>?&gt;</DIV>
<P>&nbsp;&nbsp;&nbsp; 程序中红色部分就是显示MySQL中数据的关键。这里，大家可以用其它两种方式替换红色部分并达到相同效果。</P>
<OL>
<LI>while($row = <FONT color=#0000ff>mysql_fetch_object($rs)</FONT>) echo "&lt;tr&gt;&lt;td&gt;<FONT color=#0000ff>$row-&gt;depart</FONT>&lt;/td&gt;&lt;td&gt;<FONT color=#0000ff>$row-&gt;ename</FONT>&lt;/td&gt;&lt;td&gt;<FONT color=#0000ff>$row-pcname</FONT>&lt;/td&gt;&lt;/tr&gt;";</LI>
<LI>while($row =<FONT color=#0000ff> mysql_fetch_array($rs)</FONT>) echo "&lt;tr&gt;&lt;td&gt;<FONT color=#0000ff>$row[depart]</FONT>&lt;/td&gt;&lt;td&gt;<FONT color=#0000ff>$row[ename]</FONT>&lt;/td&gt;&lt;td&gt;<FONT color=#0000ff>$row[pcname]</FONT>&lt;/td&gt;&lt;/tr&gt;";</LI></OL>
<P>&nbsp;&nbsp;&nbsp; 简要地说明一下：</P>
<P>&nbsp;&nbsp;&nbsp; 用<FONT color=#0000ff>mysql_fetch_row()</FONT>的方法返回的一行数据列储存在一个数组的单元中，偏移量从 0 开始。例如你要返回第二个字段的数据，就应该写成$row[1]而不是$row[2]。</P>
<P>&nbsp;&nbsp;&nbsp; <FONT color=#0000ff>mysql_fetch_array()</FONT> 和 mysql_fetch_row() 类似，返回的数据也是存储在一个数组中，有所区别的是我们应该用字段命来访问该数组而不是通过偏移量，例如$row[depart]。</P>
<P>&nbsp;&nbsp;&nbsp; <FONT color=#0000ff>mysql_fetch_object()</FONT>返回的不再是数组而是一个对象，我们应该用对对象的操作方法来读取数据，例如：$row-&gt;depart。</P>
<P>&nbsp;&nbsp;&nbsp; 大家可以根据自身需要，选择一种方式，代替程序中红色部分来读取MySQL数据。</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-4-28</pubDate></item><item><title>PHP读取MySQL数据-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=51</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 配置好了PHP环境，接下来，我们要正式开始对数据库进行操作了！首先是读取MySQL中的数据。记得我们之前是怎么连接MySQL数据库的么？</P>
<P>&nbsp;&nbsp;&nbsp; 新建view.php文件，其内容为：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php <BR>$link=mysql_connect("localhost","root","<FONT color=#0000ff>之前的管理员密码</FONT>"); <BR>if(!$link) echo "没有连接成功!"; <BR>else echo "连接成功!"; <BR>?&gt;</DIV>
<P>&nbsp;&nbsp;&nbsp; 这样，我们便连接上了MySQL数据库，接下来，就是数据读取部分的代码，根据我的<A href="http://www.cenusblog.com/comments.asp?id=48">MySQL数据源表结构</A>的介绍，我们试验性的来读取：</P>
<P>&nbsp;&nbsp;&nbsp; depart&nbsp;&nbsp;&nbsp;&nbsp; varchar(45)&nbsp;&nbsp;&nbsp;&nbsp; 部门名称<BR>&nbsp;&nbsp;&nbsp; ename&nbsp;&nbsp;&nbsp;&nbsp; varchar(45)&nbsp;&nbsp;&nbsp;&nbsp; 员工姓名<BR>&nbsp;&nbsp;&nbsp; pcname&nbsp;&nbsp; varchar(45)&nbsp;&nbsp;&nbsp;&nbsp; PC名称</P>
<P>这三段数据。</P>
<P>&nbsp;&nbsp;&nbsp; 在view.php中紧接着前边的代码继续写：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php<BR>mysql_select_db("infosystem", $link);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //选择数据库<BR>$q = "SELECT * FROM info";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //SQL查询语句<BR>mysql_query("SET NAMES GB2312");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>$rs = mysql_query($q, $link);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //获取数据集<BR>if(!$rs){die("Valid result!");}<BR>echo "&lt;table&gt;";<BR>echo "&lt;tr&gt;&lt;td&gt;部门名称&lt;/td&gt;&lt;td&gt;员工姓名&lt;/td&gt;&lt;td&gt;PC名称&lt;/td&gt;&lt;/tr&gt;";<BR>while($row = mysql_fetch_row($rs)) echo "&lt;tr&gt;&lt;td&gt;$row[1]&lt;/td&gt;&lt;td&gt;$row[2]&lt;/td&gt;&lt;td&gt;$row[3]&lt;/td&gt;&lt;/tr&gt;";&nbsp;&nbsp; //显示数据<BR>echo "&lt;/table&gt;";<BR>mysql_free_result($rs);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //关闭数据集<BR>?&gt;</DIV>
<P>&nbsp;&nbsp;&nbsp; 其中，“<FONT color=#0000ff>infosystem</FONT>”为数据库名，“<FONT color=#0000ff>info</FONT>”为表名。大家可以根据自己的情况酌情修改。</P>
<P>&nbsp;&nbsp;&nbsp; 接着，运行它~怎么样~数据是不是顺利被读取了呢？</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-4-27</pubDate></item><item><title>改变Apache端口等配置-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=49</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 今天想补充一下前两次专题中没有详细探讨，但又比较重要的内容。</P>
<UL>
<LI>如何改变Apache端口</LI>
<LI>如何改变IIS端口</LI>
<LI>如何配置改变Apache网页服务目录在本机中的地址路径</LI>
<LI>如何配置改变Apache首页文件名</LI></UL>
<P>&nbsp;&nbsp;&nbsp; <FONT color=#0000ff>如何改变Apache端口：</FONT>找到Apache安装目录下conf目录下的httpd.conf文件。打开它，找到“<FONT color=#0000ff>Listen</FONT>”，紧接着Listen的数字就是端口号，默认状态下为“Listen 80”。在之前的PHP专题中提到过关于在<A href="http://www.cenusblog.com/comments.asp?id=45">安装配置Apache时会遇到端口与IIS HTTP端口冲突</A>的问题，因为IIS HTTP端口默认也为80。那么我们就可以在这里改变Apache的端口，从而避免冲突，比如可以改成:Listen 8011。改好之后别忘重起Apache服务使得配置生效。</P>
<P>&nbsp;&nbsp;&nbsp; <FONT color=#0000ff>如何改变IIS端口：</FONT>如果你想同时保留Apache服务与IIS服务，又不想改变Apache默认的80端口，那么只有改变IIS的端口了。<FONT color=#0000ff>开始-&gt;运行-&gt;输入:inetmgr-&gt;Internet信息服务-&gt;本地计算机-&gt;网站-&gt;右键“默认网站”-&gt;属性-&gt;选择“网站”标签-&gt;修改TCP端口</FONT>即可。最后也别忘了重新启动一下IIS服务。</P>
<P>&nbsp;&nbsp;&nbsp; <FONT color=#0000ff>如何配置改变Apache网页服务目录在本机中的地址路径：</FONT>默认状态下，Apache的wwwroot为Apache安装目下的htdocs目录，如果你想改变这个目录的位置，那么还是打开httpd.conf，找到<FONT color=#ff0000>DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs"</FONT>以及<FONT color=#ff0000>&lt;Directory "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs"&gt;</FONT>，修改其中的两个路径到你指定的位置即可。（红色部分为笔者电脑中的路径，只作为参考。）重起Apache服务。</P>
<P>&nbsp;&nbsp;&nbsp; <FONT color=#0000ff>如何配置改变Apache首页文件名：</FONT>当你输入例如http://localhost时，Apache会默认打开index.html文件，如果你想修改首页文件或者增加首页文件时，仍然打开httpd.conf，找到DirectoryIndex index.html，修改index.html为你想要文件名即可，比如main.php。如果你想添加多个首页文件，可以用空格隔开，文件的前后顺序就是首页文件读取的优先度。重起Apache服务。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 好了，在了解了这些基本的配置方法及概念后，我们可以更加顺利地进行我们的系统制作了！</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-4-24</pubDate></item><item><title>MySQL数据源表结构-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=48</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 今天我把<A href="http://www.cenusblog.com/comments.asp?id=35">ITIS系统</A>数据源的表结构公布给大家，在今后的开发过程中，将一直会用到这张表。当然，随着开发的推进，有可能还会修改此表，到时候会另外说明。</P>
<TABLE cellSpacing=0 cellPadding=0 width=337 border=0>
<COLGROUP><FONT color=#0000ff>
<COL span=2 width=111>
<COL width=115></FONT>
<TBODY>
<TR height=24>
<TD width=111 height=24><FONT color=#0000ff>字段名</FONT></TD>
<TD width=111><FONT color=#0000ff>字段类型</FONT></TD>
<TD width=115><FONT color=#0000ff>字段说明</FONT></TD></TR>
<TR height=24>
<TD width=111 height=24>id</TD>
<TD width=111>integer</TD>
<TD width=115>ID</TD></TR>
<TR height=24>
<TD height=24>depart</TD>
<TD>varchar(45)</TD>
<TD>部门名称</TD></TR>
<TR height=24>
<TD height=24>ename</TD>
<TD>varchar(45)</TD>
<TD>员工姓名</TD></TR>
<TR height=24>
<TD height=24>pcname</TD>
<TD>varchar(45)</TD>
<TD>PC名称</TD></TR>
<TR height=24>
<TD height=24>ipaddr</TD>
<TD>varchar(45)</TD>
<TD>IP地址</TD></TR>
<TR height=24>
<TD height=24>pcmodel</TD>
<TD>varchar(45)</TD>
<TD>PC型号</TD></TR>
<TR height=24>
<TD height=24>pcsn</TD>
<TD>varchar(45)</TD>
<TD>PC序列号</TD></TR>
<TR height=24>
<TD height=24>displaymodel</TD>
<TD>varchar(45)</TD>
<TD>显示器型号</TD></TR>
<TR height=24>
<TD height=24>displaysn</TD>
<TD>varchar(45)</TD>
<TD>显示器序列号</TD></TR>
<TR height=24>
<TD height=24>assetno</TD>
<TD>varchar(45)</TD>
<TD>固定资产编号</TD></TR>
<TR height=24>
<TD height=24>status</TD>
<TD>varchar(45)</TD>
<TD>设备状态</TD></TR>
<TR height=24>
<TD height=24>memo</TD>
<TD>varchar(255)</TD>
<TD>备注</TD></TR>
<TR height=24>
<TD height=24>location</TD>
<TD>varchar(45)</TD>
<TD>设备位置</TD></TR>
<TR height=24>
<TD height=24>osver</TD>
<TD>varchar(45)</TD>
<TD>操作系统版本</TD></TR>
<TR height=24>
<TD height=24>oscdkey</TD>
<TD>varchar(60)</TD>
<TD>操作系统CDKEY</TD></TR>
<TR height=24>
<TD height=24>msover</TD>
<TD>varchar(45)</TD>
<TD>Office版本</TD></TR>
<TR height=24>
<TD height=24>msocdkey</TD>
<TD>varchar(60)</TD>
<TD>OfficeCDKEY</TD></TR>
<TR height=24>
<TD height=24>sw01</TD>
<TD>TINYINT(1)</TD>
<TD>软件01</TD></TR>
<TR height=24>
<TD height=24>sw02</TD>
<TD>TINYINT(1)</TD>
<TD>软件02</TD></TR>
<TR height=24>
<TD height=24>sw03</TD>
<TD>TINYINT(1)</TD>
<TD>软件03</TD></TR>
<TR height=24>
<TD height=24>sw04</TD>
<TD>TINYINT(1)</TD>
<TD>软件04</TD></TR>
<TR height=24>
<TD height=24>sw05</TD>
<TD>TINYINT(1)</TD>
<TD>软件05</TD></TR>
<TR height=24>
<TD height=24>sw06</TD>
<TD>TINYINT(1)</TD>
<TD>软件06</TD></TR>
<TR height=24>
<TD height=24>sw07</TD>
<TD>TINYINT(1)</TD>
<TD>软件07</TD></TR>
<TR height=24>
<TD height=24>sw08</TD>
<TD>TINYINT(1)</TD>
<TD>软件08</TD></TR>
<TR height=24>
<TD height=24>sw09</TD>
<TD>TINYINT(1)</TD>
<TD>软件09</TD></TR>
<TR height=24>
<TD height=24>sw10</TD>
<TD>TINYINT(1)</TD>
<TD>软件10</TD></TR>
<TR height=24>
<TD height=24>sw11</TD>
<TD>TINYINT(1)</TD>
<TD>软件11</TD></TR>
<TR height=24>
<TD height=24>sw12</TD>
<TD>TINYINT(1)</TD>
<TD>软件12</TD></TR>
<TR height=24>
<TD height=24>sw13</TD>
<TD>TINYINT(1)</TD>
<TD>软件13</TD></TR>
<TR height=24>
<TD height=24>time_stamp</TD>
<TD>TIMESTAMP</TD>
<TD>时间戳</TD></TR></TBODY></TABLE>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-4-23</pubDate></item><item><title>快速配置PHPMyAdmin-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=47</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 今天想提一下如何配置PHPMyAdmin，虽然在本机开发、调试系统时或许并不会用到它，但对于将来在远程虚拟主机中放置Mysql数据库时，必然会用到phpmyadmin这样的Mysql GUI工具，所以，在本地先熟悉一下如何使用也是有必要的。</P>
<P>&nbsp;&nbsp;&nbsp; 那么我们现在开始进行安装配置：</P>
<P>&nbsp;&nbsp;&nbsp; 1.一般网上下载到的PHPMyAdmin是一个压缩包，我们将其释放到<A href="http://www.cenusblog.com/comments.asp?id=45">htdocs目录</A>中，例如htdocs\phpmyadmin。</P>
<P>&nbsp;&nbsp;&nbsp; 2.打开phpmyadmin目录，在此目录下是否有<FONT color=#0000ff>config.sample.inc.php</FONT>文件，如果存在，那么将其改名为<FONT color=#0000ff>config.inc.php</FONT>。（根据版本不同，有可能直接就有config.inc.php文件，那就无需改名，也有可能根本就没有config.sample.inc.php或者config.inc.php，那我们就到phpmyadmin\libraries目录下将config.default.php复制到phpmyadmin目录下并改名为config.inc.php）。</P>
<P>&nbsp;&nbsp;&nbsp; 3.打开config.inc.php文件(可以用写字板)，找到<FONT color=#0000ff>$cfg['blowfish_secret'] = '';</FONT>与<FONT color=#0000ff>$cfg['Servers'][$i]['auth_type'] = 'cookie';</FONT>，如果$cfg['Servers'][$i]['auth_type']的值就像前面看到的那样为cookie的话，那么我们必须在$cfg['blowfish_secret'] = ''的引号中任意写入一串字符，大家可以把它理解为一个身份验证码。比如<FONT color=#0000ff>$cfg['blowfish_secret'] = 'sunec'</FONT>。存盘退出。</P>
<P>&nbsp;&nbsp;&nbsp; 至此，phpmyadmin的安装配置工作就结束了，进入浏览器，在地址栏输入http://localhost/phpmyadmin/main.php，(这里的路径是根据先前你将phpmyadmin解压在htdocs的目录名决定的)，顺利的话，页面上应该出现让你输入用户名密码的画面了，输入用户名密码（Mysql的用户名密码），随即进入phpmyadmin的主界面。至于使用方法~暂时不在这里展开，大家可以自己先摸索一下~</P>
<P>&nbsp;&nbsp;&nbsp; 今天就到这里吧。</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-4-21</pubDate></item><item><title>Excel数据导入Mysql数据库-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=46</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 当<A href="http://www.cenusblog.com/comments.asp?id=45">配置好PHP运行环境</A>后，接下来我就开始准备数据源了，记得上次没有讲述Navicat的安装方法，很简单，没有什么特别的，一路Next就完毕了。</P>
<P>&nbsp;&nbsp;&nbsp; 首先做一下说明，为什么我要用Navicat，第一个原因，因为它是个不错的Mysql GUI工具，更重要的是，它可以将一些外部数据源导入Mysql数据库中。因为我的数据源是excel数据，所以想借助Navicat将其导入Mysql。</P>
<P>&nbsp;&nbsp;&nbsp; 第一次运行，首先<FONT color=#ff0000>创建连接</FONT>，主机名填写:<FONT color=#ff0000>localhost</FONT>，端口为<FONT color=#ff0000>3306</FONT>，然后<FONT color=#ff0000>填写用户名密码</FONT>，OK。顺利的话，大家就可以看到名为localhost的连接图标了。双击点开它，一般Mysql默认有两个数据库，分别为mysql与test。</P>
<P>&nbsp;&nbsp;&nbsp; 不用管它们，<FONT color=#ff0000>右键localhost，选择创建新数据库</FONT>，我这里填写了infosystem，大家可以根据需要修改名称，注意接下来选择字符集的选项，如果大家的数据源中有中文，那么最好还是<FONT color=#ff0000>选择gb2312，整理选择gb2312_chinese_ci</FONT>，这样可以保证数据可以在数据库中被正确显示，避免中文乱码的出现。</P>
<P>&nbsp;&nbsp;&nbsp; 选中刚刚建立好的infosystem数据库，点击navicat窗体右上方导入向导按钮，进入导入向导，然后按照向导一步步进行配置：</P>
<UL>
<LI>类型为Excel文件</LI>
<LI>选择你想要导入的excel文件的具体位置以及excel中的某一个表</LI>
<LI>配置表结构</LI>
<LI>开始导入</LI></UL>
<P>&nbsp;&nbsp;&nbsp; 就这样，很简单的，原本excel中的数据导入到了Mysql数据库中，这时，在systeminfo数据库中就可以看到一个刚才导入的新表了，打开看看是否显示正确。至此，数据源已经搞定了。</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-4-20</pubDate></item><item><title>WindowsXP中快速配置Apache+PHP5+Mysql-PHP学习心得每日一贴</title><link>www.cenusblog.com/comments.asp?id=45</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 查了一些资料，再加上以前也曾配置过，整个Apache + PHP5 + Mysql配置、测试成功的过程只用了短短5分钟。汗。废话不多说，先罗列出我下载的相关程序的版本：</P>
<P>Mysql-4.1.8-essential-win<BR>Mysql-gui-tools-5.0-r12-win32<BR>php-5.2.5-win32-installer<BR>apache_2.2.4-win32-x86-no_ssl<BR>phpMyAdmin-2.11.5.1-all-languages<BR>navicat8_mysql_cs-v8.0</P>
<P>&nbsp;&nbsp;&nbsp; 对这些软件稍作说明：<BR>&nbsp;&nbsp;&nbsp; Mysql选用了比较旧的版本，反正够用就行，本来也就是个学习的过程，相信大家也不会有什么疑义。<BR>&nbsp;&nbsp;&nbsp; 因为是菜鸟，Mysql GUI（Mysql可视化工具）还是有必要安一下的，建议初学者也装一下吧，当然，高手别BS。。。<BR>&nbsp;&nbsp;&nbsp; PHP正好看到新版本发布，那就拿来用吧~<BR>&nbsp;&nbsp;&nbsp; Apache也一样，随便挑了一个。<BR>&nbsp;&nbsp;&nbsp; PHPMyAdmin是一个基于web的mysql可视化工具，别小看它哟~一般空间提供商提供的虚拟空间如果支持Mysql的话，其操作界面多数就是它了。所以，学习一个也无妨。<BR>&nbsp;&nbsp;&nbsp; navicat，又是一款Mysql的GUI，第三方做的比较好的GUI，值得一用！<BR>&nbsp;&nbsp;&nbsp; 如果有朋友不明白他们具体是派什么用处的，我会在今后的专题中加以补充。</P>
<P>&nbsp;&nbsp;&nbsp; 正式开始配置！</P>
<P>&nbsp;&nbsp;&nbsp; 1.首先安装Mysql,没什么特别的，一路next，遇到让你Sign up的环节，选择<FONT color=#ff0000>skip Sign-Up</FONT>就可。之后选择<FONT color=#ff0000>Configure the MySQL Server now</FONT>，开始配置Mysql，普通的开发用户选择<FONT color=#ff0000>Standard Configuration</FONT>标准配置即可，一路按照给出的默认值Next，到了让你输入密码的环节，键入你想要的Mysql的<FONT color=#ff0000>root密码</FONT>再Next（可以理解成管理员密码）。随后Execute，不出意外的话，恭喜你，Mysql就配置完毕了。</P>
<P>&nbsp;&nbsp;&nbsp; 2.Mysql GUI Tool安装没有什么特别的，一路Next就可完成，完成后，可以打开它的一个程序MySQL Adsministraotr，如果是本机数据库的话，在<FONT color=#ff0000>Server Host中填入localhost，Username 为root,密码就是刚才安装Mysql时所输入的管理员密码</FONT>。如果可以顺利进入，那么再次证明刚才Mysql的配置没有问题，也可以确定GUI也安装到位了。</P>
<P>&nbsp;&nbsp;&nbsp; 3.Apache的安装有一点要说明，一开始全部Next，到了让你配置Server Information时，上面三项可以任意填，只要符合域名、主机名以及电子邮件的格式即可，可以参照它给出的书写方法。要提醒的是， Apache HTTP的端口设置，它默认是使用80端口作为HTTP的服务端口，这原本没有什么奇怪，只是如果你在同一台机器上之前安装过IIS的话，那么就会有问题了，IIS中HTTP服务的端口也是80,如果在这里你让Apache的HTTP端口还是用80 的话，那么，它会因为端口冲突而无法启动Apache服务。那么，就只有两种解决方法，要么停止或者修改IIS的HTTP服务端口，要么修改Apache的HTTP服务端口。在这里，我只能先假设大家没有安装过IIS，那么就让Apache来占用80端口。好了，接下来全部Next。Apache的安装就算结束了。以后的帖子中，我会叙述如何修改IIS以及Apache的端口。</P>
<P>&nbsp;&nbsp;&nbsp; 4.最后PHP的安装，一开始按照惯例Next，Web Server Setup时选择<FONT color=#ff0000>Apache 2.2.x Module</FONT>,因为我们刚才安装的Apache就是这个。接下去选择Apache的配置文件夹路经，就是在之前 Apache安装路径中<FONT color=#ff0000>Apache2.2\conf</FONT><FONT color=#000000>目录。</FONT>之后选择要安装的组件，注意，因为将来要连接Mysql，所以要在Extensions下选择MySQL组建，这是关键哦！下一步，安装宣告完毕！接下去，将先前你<FONT color=#ff0000>PHP安装目录的libmysql.dll与安装目录下的ext目录里的php_mysql.dll一同复制到windows\system32目录下</FONT>，然后，重起一下Apache服务，或者干脆重新启动一下机器，到这里，真个安装配置工作就算告一段落了。</P>
<P>&nbsp;&nbsp;&nbsp; 赶快，我们来测试一下吧。在浏览器中键入localhost，看是不是出现了It works!如果是，再次恭喜你，Apache的服务没有问题了。随后我们来到Apache安装目录中的htdocs目录下，创建一个test.php的文件，其中的内容为<BR><BR>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php<BR>echo phpinfo();<BR>?&gt;</DIV><BR>&nbsp;&nbsp;&nbsp; 再次进入浏览器，在地址栏中输入localhost/test.php，应该会看到PHP的版本信息及其其它一些信息，这样的话，说明PHP的配置工作也很成功了！ 
<P></P>
<P>&nbsp;&nbsp;&nbsp; 最后测试一下与Mysql数据库连接情况,新建test2.php文件中，在其中加入<BR><BR>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;?php <BR>$link=mysql_connect("localhost","root","<FONT color=#ff0000>之前的管理员密码 </FONT>"); <BR>if(!$link) echo "没有连接成功!"; <BR>else echo "连接成功!"; <BR>mysql_close(); <BR>?&gt; </DIV><BR>&nbsp;&nbsp;&nbsp; 回到浏览器，键入localhost/test2.php，一定是连接成功吧！ 
<P></P>
<P>&nbsp;&nbsp;&nbsp; 好啦~至此，Apache+PHP5+Mysql的安装、配置、测试工作全部完成了~是不是觉得很兴奋~</P>
<P>&nbsp;&nbsp;&nbsp; 那我们明天继续！</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-4-19</pubDate></item><item><title>坏消息与好消息</title><link>www.cenusblog.com/comments.asp?id=44</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 因为预算问题，IT Information System不得不放弃ASP.NET改用PHP进行开发，这真是个坏消息，原本想借助Visual Studio的快速开发能力，走一条捷径，现在看来只能踏踏实实，一行一行代码编写了。对于不太熟悉PHP的sunec来说，这真是个不小的挑战。</P>
<P>&nbsp;&nbsp;&nbsp; 好消息是，终于可以开始学习PHP了！有一些asp、javascript的基础，现在跳到陌生的PHP，确实需要花些精力来适应来学习。不过我相信，没有什么东西是学不会的，一步一步来呗，慢一点也没关系。</P>
<P>&nbsp;&nbsp;&nbsp; 对了，专题名称是需要改了。不能再使用原来的了，那就改成《PHP学习心得每日一贴》吧。之前的两篇文章因为没有涉及到具体技术问题，所以可以继续沿用，请大家原谅突然改变专题，但我相信PHP的世界同样精彩。</P>
<P>&nbsp;&nbsp;&nbsp; Let's go!</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-4-18</pubDate></item><item><title>页面设计中-专题：ASP.NET简单信息系统制作日记</title><link>www.cenusblog.com/comments.asp?id=43</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 这几天系统制作处在页面设计阶段。想提一下，有些朋友可能并不知道，网页的设计其实并不是直接在诸如Dreamweaver这些网页制作软件中进行的，而是应该先通过平面设计软件画出平面效果图，然后再进行画面切割生成页面。</P>
<P>&nbsp;&nbsp;&nbsp; 在最初平面设计的时候，尽可能将所有的元素样式都想到，然后添加到画面，这样做有利于在接下来的CSS制作中有章可查，设计网页最忌讳的就是想到哪里做到哪里，这样一定会出现不协调不统一的画面。</P>
<P>&nbsp;&nbsp;&nbsp; 系统的名字也已经确定，叫做:IT Information System。在以后的文章中就使用ITIS作为简称。</P>
<P>&nbsp;&nbsp;&nbsp; 虽然在明确设计目的时，已经将系统的大概功能罗列出来，但是在具体设计时，必须要更加具体地勾勒出它的样子，比如哪个页面是哪个功能，这些一定要在前期全部计划好，否则会越做越乱。我认为，就算是再简单的系统，一张具体功能的结构表还是相当有必要制作的。</P>
<P>&nbsp;&nbsp;&nbsp; 好了，我会加紧做出一个设计效果图，然后进行接下去的工作！</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-4-16</pubDate></item><item><title>养成良好的CSS样式书写习惯-专题:CSS技术技巧每日一贴</title><link>www.cenusblog.com/comments.asp?id=42</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 之所以在讲述一切技术技巧之前先谈论CSS书写习惯，是因为我觉得技术技巧是可以很快学到的，但是书写习惯是慢慢形成的，无论是书写的条理性，命名的规范性，注释的易读性还是代码的简化性都不是一朝一夕能够形成的。所以希望学习CSS的朋友们从一开始就要养成良好的书写习惯，这对将来自己查改样式或者交由他人修改的可读性都有相当重要的意义。</P>
<P>&nbsp;&nbsp;&nbsp; 首先，选择符命名规范化。一般来说，<FONT color=#ff0000>选择符的名称至少要包含需要被样式化的元素的意义</FONT>。比如说，定义框架的话，一般用“frame”，定义文章内容时用“contents”，标题的话可以用“title”等等，当然，如果需要更加具体的话，<FONT color=#ff0000>可以采用追加下滑线的方法</FONT>，比如说左边的框架可以用“left_frame”，最新的内容可以用“latest_conents”等等。命名尽量不要用拼音，更不要用拼音的首字母，比如：kuangjia（框架）或者kj（框架），这样一来易读性会大打折扣，如果碰到老外阅读的话就会更加莫名。避免使用一些只有自己才能理解的词汇，而多采用通用的名称，比如textbox，menu，navi等等。</P>
<P>&nbsp;&nbsp;&nbsp; 其次，为CSS内容划分区域。意思就是<FONT color=#ff0000>按照网页中需要被样式化的元素进行分组来实现对CSS内容的管理</FONT>。打个比方，我们可以将一个CSS样式表按照如下组别划分：</P>
<P>/*----------------页面结构----------------*/<BR>[CSS代码]<BR>/*----------------头部----------------*/<BR>[CSS代码]<BR>/*----------------表单元素----------------*/<BR>[CSS代码]<BR>/*----------------数据列表----------------*/<BR>[CSS代码]<BR>/*----------------文字内容----------------*/<BR>[CSS代码]<BR>/*----------------图片----------------*/<BR>[CSS代码]<BR>/*----------------其它元素----------------*/<BR>[CSS代码]</P>
<P>&nbsp;&nbsp;&nbsp; 这样一来，我们可以将所有CSS样式分门别类地放入不同部分，既方便自己查询修改，也为他人的查阅带去方便。</P>
<P>&nbsp;&nbsp;&nbsp; 最后，及时准确地添加注释。注释的书写也是一门学问。有时会发现这样的问题，自己写的注释，但过了一段时间后，发现连自己都忘了这注释到底是什么意思，指的是什么东西。这就是因为注释书写的不够准确清晰。<FONT color=#ff0000>注释一定要描述出对象的作用，而不是描述对象的特点外观</FONT>，因为作用不容易改变而特点外观是会发生变化的。比如，避免用“红色的标题”作为注释，如果将来把标题颜色改成了蓝色，那这一注释就失去了意义，你可以用“正文标题”或者诸如此类的表示其功能的词汇来注释说明会显得有意义的多。还有一点就是，注释标注要及时，最好是写一段标一段，以免一段时间后产生遗忘。</P>
<P>&nbsp;&nbsp;&nbsp; 讲到这里，最基本的一些习惯都已提到，当然，有一些方法根据自己的情况可以进行改进。总结来讲，良好的CSS样式书写习惯是为了提高对CSS样式表管理维护的效率，这不仅是对书写者本身来说，更是为其他阅读者带去方便。</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-4-14</pubDate></item><item><title>什么是CSS选择符-专题:CSS技术技巧每日一贴</title><link>www.cenusblog.com/comments.asp?id=41</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 在讨论选择符之前，先来说明一下CSS的基本语法。CSS语法书写标准由选择符、一对花括号、属性和属性值组成。选择符是你要样式化的标签。</P>
<P>&nbsp;&nbsp;&nbsp; 选择符 { 属性：属性值 }</P>
<P>&nbsp;&nbsp;&nbsp; 对于许多刚刚接触CSS的朋友来说，CSS选择符的运用往往会显得比较杂乱，可能有些用”.”有些用”#”等等。或者还有一些朋友还没有理顺这些符号的意义。那么首先我先介绍一下这些CSS选择符号的意义。</P>
<P>&nbsp;&nbsp;&nbsp; CSS选择符中最主要包括：<BR>&nbsp;&nbsp;&nbsp; 1.类型选择符<BR>&nbsp;&nbsp;&nbsp; 2.类选择符<BR>&nbsp;&nbsp;&nbsp; 3.ID选择符<BR>&nbsp;&nbsp;&nbsp; 4.后代选择符</P>
<P>&nbsp;&nbsp;&nbsp; 当然更细的包括通配选择符，相邻选择符，属性选择符等等。这些更细致的选择符在今后的专题中会再详细说明。今天主要介绍前面提到的最主要的四种。</P>
<P>&nbsp;&nbsp;&nbsp; 类型选择符用需要样式化的元素或者HTML标签命名。例如：你要样式化网页中的h1标签，你就可以写成：<BR>&nbsp;&nbsp;&nbsp; <FONT color=#ff0000><FONT color=#ff0000>h1 { font-size:60px; }</FONT><BR></FONT>&nbsp;&nbsp;&nbsp; 那么，网页中套用h1标签的文字都将以字体大小为60px方式显示。（不考虑继承父样式）</P>
<P>&nbsp;&nbsp;&nbsp; 类选择符可以让你在不同元素上多次使用相同的CSS规则时派上用处。首先选择符要以点”.”作开头，例如：<BR>&nbsp;&nbsp;&nbsp; <FONT color=#ff0000>.warning { font-weight:bold }<BR></FONT>&nbsp;&nbsp;&nbsp; 之后，无论你想在什么元素中运用此样式时，只需告诉此元素用warning这个class，css就会样式化这个元素。例如：<BR>&nbsp;&nbsp;&nbsp; <FONT color=#ff0000>&lt;li class="warning"&gt;I am Cenus Design&lt;/li&gt;<BR></FONT>&nbsp;&nbsp;&nbsp; 或者<BR>&nbsp;&nbsp;&nbsp; <FONT color=#ff0000>&lt;em class="warning"&gt;I am Cenus Design&lt;/em&gt;</FONT></P>
<P>&nbsp;&nbsp;&nbsp; ID选择符在整个WEB文档中只出现一次，通常ID选择符用于DIV标签，当然也可以用作其它元素。ID选择符以”#”开头，例如：<BR>&nbsp;&nbsp;&nbsp; <FONT color=#ff0000>#menu { padding:20px; }</FONT><BR>&nbsp;&nbsp;&nbsp; 在页面中，只需为元素添加对应的ID属性，那么此元素就会被样式化：<BR>&nbsp;&nbsp;&nbsp; <FONT color=#ff0000>&lt;div id="menu"&gt;I am Cenus Design&lt;/div&gt;</FONT><BR>&nbsp;&nbsp;&nbsp; 这是CSS+DIV中最常用的一种手段。</P>
<P>&nbsp;&nbsp;&nbsp; 后代选择符，先举一个例子：<BR>&nbsp;&nbsp;&nbsp; <FONT color=#ff0000>li a { color:blue }<BR></FONT>&nbsp;&nbsp;&nbsp; 那么网页中，li标签下所有拥有超级链接的文字都将以蓝色显示。</P>
<P>&nbsp;&nbsp;&nbsp; 总结的来说，要在文档中多次应用同一个样式时可以使用类选择符，如果样式只使用一次，则可以考虑ID选择符。定义DIV样式时多用ID选择符。</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-4-13</pubDate></item><item><title>什么是CSS-专题:CSS技术技巧每日一贴</title><link>www.cenusblog.com/comments.asp?id=40</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; CSS（Cascading Style Sheets）的简称，翻译成中文就是层叠式样表。光从文字上来理解可能比较困难，举个简单的例子吧。</P>
<P>&nbsp;&nbsp;&nbsp; 一张带有CSS样式表的Html网页：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;html&gt;<BR>&lt;head&gt;<BR>&lt;title&gt;什么是CSS&lt;/title&gt; 
<P></P>
<P><FONT color=#ff0000>&lt;style type="text/css"&gt;<BR>&lt;!--<BR>h1{font-size:50px}<BR>--&gt;<BR>&lt;/style&gt;</FONT></P>
<P>&lt;/head&gt;<BR>&lt;body&gt;<BR>&lt;h1&gt;I am Cenus Design&lt;/h1&gt;<BR>&lt;/body&gt;<BR>&lt;/html&gt;</P></DIV>
<P>&nbsp;&nbsp;&nbsp; 红色字体部分就是一张简单的CSS样式表，你只需通过修改font-size的值就可以轻易改变网页中h1标题字体的大小，这样就避免了直接在body中修改h1的大小所带来的不便。怎么样，是不是很方便？当然，在“{ }”中你还可以定义h1的其他属性包括颜色、字体等等~</P>
<P>&nbsp;&nbsp;&nbsp; 既然知道了CSS是干什么的了，那么就让它为我们带来更大的便捷吧！</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-4-12</pubDate></item><item><title>爱上CSS-专题:CSS技术技巧每日一贴</title><link>www.cenusblog.com/comments.asp?id=39</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 第一次接触CSS记得还是初中的时候，那时是因为自己第一个网站--龙珠酷站需要改变超级链接的样式，然后在frontpage中找到一个陌生的名词--CSS，经过一番误打误撞，运用CSS控制了超级链接的样式，当时还是个小孩，根本没有注意到自己已经触碰到了将来会非常流行的CSS技术。</P>
<P>&nbsp;&nbsp;&nbsp; 促使我想展开这一专题，是因为在平时运用实践中，也经常碰到许多CSS的难题，经过许多的捉摸研究虽然一一解决，但还是想把这些CSS技巧归纳整理，一方面对于自己来说是个知识整理的过程，另一方面可以让更多像我这样的网页设计者在CSS技术上少走弯路，或者提供一些有价值的CSS技巧提供给大家作为参考。当然，在CSS上我也还有许多疑惑，希望有机会也可以和大家交流探讨。</P>
<P>&nbsp;&nbsp;&nbsp; 我是sunec，让我们开始吧！</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-4-11</pubDate></item><item><title>专题：ASP.NET简单信息系统的制作过程之二_CSS+DIV的优势</title><link>www.cenusblog.com/comments.asp?id=38</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 首先来说说为什么选择DIV而非Table，理由归纳起来有三点：速度、灵活、清晰。</P>
<P>&nbsp;&nbsp;&nbsp; 速度指的是访问速度。浏览器在解释table标签时，需要将整个table框架全部解释完毕后才将其现实，而对于div，则是逐个解释并逐次显示。当然，在如果网速足够快的情况下，看不出两者的区别，但如果网速有线，你就会明显感觉到table架起的网页明显比div架起的网页多了许多延时，这样的延时通常对网站来说是致命的。</P>
<P>&nbsp;&nbsp;&nbsp; 灵活性是div对于table最大的优势，大家有没有曾经为table的定位问题头痛过？或者是为table牵一发而动全身的麻烦困扰过？那么就用DIV吧~无论你想把div放在哪个精确的位置，或者甚至是将两个div重叠在一起也没有关系，只要愿意，只要有胆量，随便你怎么摆放div。更让人省心的是，当CSS与DIV默契配合后，所有页面的修改都不需要改动DIV只需要对后台的CSS文件进行编辑即进行大范围的页面调整，这样可以大大增加修改的简易度，提高修改效率，当然也节省了成本，许多拥有多皮肤功能的网站就是基于CSS+DIV这样特性而诞生的。</P>
<P>&nbsp;&nbsp;&nbsp; 清晰是对于编程人员或者是网页设计人员来说的。彻底地将美工与页面标签剥离对于任何网页设计人员都是必要的，这样无疑会大大提高可维护性。</P>
<P>&nbsp;&nbsp;&nbsp; 当然，CSS+DIV对于非专业网页设计人员来说还是存在着一些问题，主要问题是在CSS语言的熟练应用，以及与不同浏览器的兼容性问题上。这两点我会在以后的专题中详细谈到。</P>
<P>&nbsp;&nbsp;&nbsp; 接下去，让我们看看CSS+DIV是如何工作的吧！</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-4-9</pubDate></item><item><title>新图与新作</title><link>www.cenusblog.com/comments.asp?id=37</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 最近去了横店郊游，贴了些新图~当然~还有网页新作登场~好了，话不多说~大家快来看吧~</P><BR>
<P><A href="http://www.cenusblog.com/photo.asp?id=4"><IMG height=120 src="http://www.cenusblog.com/photo/hengdian.jpg" width=500 border=0></A></P><BR>
<P><A href="http://www.cenusblog.com/workmore.asp?id=5"><IMG height=120 src="http://www.cenusblog.com/work/pigeon.jpg" width=500 border=0></A></P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-4-6</pubDate></item><item><title>专题：ASP.NET简单信息系统的制作过程之一_明确设计目的</title><link>www.cenusblog.com/comments.asp?id=35</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 从这期专题开始，Cenus将把自己制作一项简单的信息系统的过程（包括源码等），原原本本地展示给大家。希望可以与大家共同学习进步。</P>
<P>&nbsp;&nbsp;&nbsp; <STRONG>系统设计初衷</STRONG>：因为预算问题，单位没有采购相关的网管软件，因此，单位里大量的网络信息以及设备信息先前全部以EXCEL文件方式进行管理。虽然EXCEL功能还算强大，但是，数据频繁地增删查改势必会造成一些人为的操作失误，使得信息错位或者丢失。再者，EXCEL文件也不适合多人的共享查看或操作。因此，想建设一个简单的数据查询修改平台来优化现状。</P>
<P>&nbsp;&nbsp;&nbsp; <STRONG>系统设计目的</STRONG>：简化数据查询、修改、添加与删除过程，加入简单业务流程模块。</P>
<P>&nbsp;&nbsp;&nbsp; <STRONG>系统设计功能</STRONG>：<BR>&nbsp;&nbsp;&nbsp; 1. 多条件查询数据<BR>&nbsp;&nbsp;&nbsp; 2. 查询结果连接详细信息<BR>&nbsp;&nbsp;&nbsp; 3. 数据修改<BR>&nbsp;&nbsp;&nbsp; 4. 数据添加<BR>&nbsp;&nbsp;&nbsp; 5. 数据删除<BR>&nbsp;&nbsp;&nbsp; 6. 业务申单请输入<BR>&nbsp;&nbsp;&nbsp; 7. 业务完成情况查询<BR>&nbsp;&nbsp;&nbsp; 8. 业务完成确定<BR>&nbsp;&nbsp;&nbsp; 9. 浏览权限管理</P>
<P>&nbsp;&nbsp;&nbsp; 以上列出的功能比较粗线条，将来在专题深入后还会有更清晰的描述。</P>
<P>&nbsp;&nbsp;&nbsp; 好了，明确了系统设计目的，就让我们开始系统制作之旅吧！</P>
<P>&nbsp;&nbsp;&nbsp; 下期预告：CSS+DIV界面制作</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-4-3</pubDate></item><item><title>美观还是实用</title><link>www.cenusblog.com/comments.asp?id=34</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 网站美观重要还是实用重要，这是一个一直争论不休的问题。到目前为止，我一直沿着能兼顾两者的道路前行，因为无论是建立CenusBlog，还是今后要做的一系列工作，都是想告诉大家：做任何事情都不要忘记尽善尽美。</P>
<P>&nbsp;&nbsp;&nbsp; 当然实际上会碰到一些诸如：成本、进度、访问速度等问题。确实，这不可避免，但是我想指出的是，所谓美观并不等同于华丽与花哨。有时往往太过复杂化的美工带来的是操作的不友好，这样的代价是网站运营者所承担不起的。美观说起来其实很简单，就是看着舒服、顺眼，同时提高界面的友好度。可是，漂亮是一种很模糊的概念，年龄的不同，文化背景的不同，甚至于性别上的不同，每个人对美的评价标准就会有区别，所以，要让所有人都接受你所谓美观的网站实际上很难。</P>
<P>&nbsp;&nbsp;&nbsp; 既然美观成了一种相对的概念，那么实用便又占据了一个优先的位置。为什么大家会不厌其烦固定地去访问一些谈不上“漂亮”的门户网站？因为那里有大家都需要的内容，因为那里满足了大多数用户的需求，简单地说，实用！毕竟，网站的最终目的是吸引更多的回头者与常客。</P>
<P>&nbsp;&nbsp;&nbsp; 这么看来，首先，必须保证网站的实用性，保证其内容是有价值让更多用户阅读实用的。在这一前提基础上，确定网站的用户群，尽可能地个性化网站，所谓个性化不是指让网站变得花哨，而是设法让它给人留下印象，无论是简约、动感还是大气都可以，只要让用户可以在浏览内容之余留下更深更美好的体验即可。在网站内容一定的情况下，用户当然更愿意去“让自己舒服”的网站。</P>
<P>&nbsp;&nbsp;&nbsp; 网站如此，其他产品亦如此。不知大家的意思如何？</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-3-31</pubDate></item><item><title>没有玫瑰的花店</title><link>www.cenusblog.com/comments.asp?id=33</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 眼泪没有理由地流了下来，不是因为悲伤，情绪没有征兆地涌动起来，是因为感动。是因为他博大的心胸，是因为他无私的奉献，是因为他温柔的爱。</P>
<P>&nbsp;&nbsp;&nbsp; “如果没有雫，爸爸的人生就毫无意义。”<BR>&nbsp;&nbsp;&nbsp; “就是把你放进我的眼睛里都不会痛&nbsp;。”<BR>&nbsp;&nbsp;&nbsp; “父女之间就好象是2块磁铁一样吧。”</P>
<P>&nbsp;&nbsp;&nbsp; “我爸爸最常说的话就是：我没有关系的。”<BR>&nbsp;&nbsp;&nbsp; “我已经不会再哭了&nbsp;因为我不想让爸爸再担心。”<BR>&nbsp;&nbsp;&nbsp; “爸爸所做的一切都是为了我。”</P>
<P>&nbsp;&nbsp;&nbsp; “你们两个之间，又比亲生父女更深的牵绊，即使没有血缘关系，住在同一屋檐下也会变成家人。一想起从我们相遇，知道我的骗局之后还一直对我这么温柔的你，我就感到莫名的悲伤，有一次问你什么时候才会感到幸福，你回答说，当被别人叫做花店老板的时候，这种渺小的幸福，虽然那个时候我笑过你，现在已经不会笑了，因为我，不，几乎所有的人都不懂得幸福的含义，没有人能像你这样去理解爱，温柔且悲伤，我在你的身边，被你包围，好像小鸟一样幸福。”</P>
<P>&nbsp;&nbsp;&nbsp; 每一句话都很温暖，每一句话都会让人去相信温柔地对待周围的一切，温柔地掩藏自己的失望和寂寞，温柔地体恤所有人，用自己的付出和牺牲带给他人幸福是件多么快乐的事。即使悲伤寂寞，也能够一力承担。</P>
<P>&nbsp;&nbsp;&nbsp; 这是多么困难啊，可是花店老板不正在努力为我们展示着如此的可能性嘛。</P>
<P>&nbsp;&nbsp;&nbsp; 让我们忘记吧~</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-3-27</pubDate></item><item><title>地铁里的卖艺人</title><link>www.cenusblog.com/comments.asp?id=32</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 说实话，第一次经过这位年迈的卖艺人时，心里确实很看低他，瘫坐在地铁出口的他，拉着几乎不着调的二胡，发出尖涩刺耳的声音，使得走过的人们心里也不是滋味，心想落大的城市为何到处充满着如此难堪的现象，甚至还想到他为何不能靠自己其它的劳动来过活，非要以乞讨为生？</P>
<P>&nbsp;&nbsp;&nbsp; 从那天起，记得应该是一周后的某一天，当我又经过这座地铁出口时，忽然发现原本不着调的二胡音竟然有些许调调，不，应该说有了很大的变化，至少我知道他是在拉二胡，而且，很明显旋律是有意识的在推进。即便如此，我还只是报以一声轻叹：乞讨卖艺的技艺原来也能如此进步啊。</P>
<P>&nbsp;&nbsp;&nbsp; 那两周后的今天，我的想法有了改变。我真不敢相信，他已可附着二胡发出的音韵唱出有力的调子了！看他的表情真好像是那么回事。</P>
<P>&nbsp;&nbsp;&nbsp; 就是这样，一件很普通的，甚至可以说是一件让人不削的事。只是有时觉得，再卑微，或者说再卑贱的事情，用心做了，动脑筋想了，或者说坚持下去了，总会有所进步，有所收获。当自己因惰性停滞不前的时候，想想那卖艺人，自己是不是在某些方面还不如他呢，不知道。</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-3-25</pubDate></item><item><title>Squid日志过大问题对策</title><link>www.cenusblog.com/comments.asp?id=31</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 最近，单位凡是通过proxy服务器上网的机器都无法上网。查看服务器日志，发现问题有可能出在Squid上。</P>
<P>&nbsp;&nbsp;&nbsp; 于是想通过service squid restart命令重起服务，可是系统却提示squid dead but pid file exists，squid服务无法重起。查阅一番资料之后，得知原因可能出在Squid日志容量过大的问题上。</P>
<P>&nbsp;&nbsp;&nbsp; 随即在var/log/squid/目录下找到access.log文件，发现此日志文件确实很大，已经超过了2G。于是将此文件备份后删除。再次运行service squid stop;service squid start，一切恢复正常。</P>
<P>&nbsp;&nbsp;&nbsp; 要提醒的是，将access.log删除之后无须自行建立，Squid会自动建立此文件，自行建立的话反而会造成服务无法启动，请注意！</P>
<P>&nbsp;&nbsp;&nbsp; 再深一步探究此问题后发现，access.log是记录服务器管辖范围内电脑所访问网页的记录，信息量是相当庞大的。因此系统对access.log文件其实已经存在定期压缩释放的策略，只是它默认的周期是weekly,那么如果在一周内access.log的容量大于2G，服务就有可能面临崩溃。因此，我们可以对此策略进行修改。</P>
<P>&nbsp;&nbsp;&nbsp; 打开/etc/logrotate.d目录下squid文件，你可以看到Squid所涉及的三个日志文件的备份策略都可在此修改。其中你可以定义压缩周期是daily,weekly或者是固定周期rotate num(num指天数周期)。经过设置，相信Squid应该不会因为日志文件容量过大而罢工了吧！</P>
<P><STRONG><FONT size=4>国家宝藏2</FONT></STRONG></P>
<P><STRONG><FONT size=4></FONT></STRONG></P>
<P><IMG alt="" src="http://www.cenusblog.com/blogpic/nation.jpg" border=0 alignment=""></P>
<P>&nbsp;&nbsp;&nbsp; 终于等到了国家宝藏2的上映~兴匆匆去到电影院，没想到只留下了第一排座位。。。两个字：我忍~</P>
<P>&nbsp;&nbsp;&nbsp; 终于坐到放映厅~往第一排一座，头一抬，整一个320寸的电视机。。。两个字：我爽~</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp; 终于电影开播了~第一排果然震撼，几个场景一放，几段翻译字幕一看，几个特技效果一闪。。。还是两个字：我晕~</P>
<P>&nbsp;&nbsp;&nbsp; 终于影片进入了状态，探宝者深入白金汉宫，利用高科技监控手段，取走线索一~感想就一个字：扯~</P>
<P>&nbsp;&nbsp;&nbsp; 终于电影走进了高潮期，探宝者绑架总统，对其晓之以理动之以情，诱骗出线索二的下落并取得~感想两个字：胡扯~</P>
<P>&nbsp;&nbsp;&nbsp; 终于影片来到了白热化阶段，探宝者进入总统山，突破重重机关，找到黄金城~并顺利逃脱~感想变成了三个字：瞎胡扯~</P>
<P>&nbsp;&nbsp;&nbsp; 终于放映结束了，看着徐徐拉上的大幕，心里想着四个字：啥时再扯。。。</P>
<P>&nbsp;&nbsp;&nbsp; 咔咔~玩笑拉~正经说片子还是不错的~~在电影院看效果也不错~值得一去哟~</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-3-19</pubDate></item><item><title>Excel数据内容导入MSSQL2005</title><link>www.cenusblog.com/comments.asp?id=30</link><description><![CDATA[<P>&nbsp;&nbsp;&nbsp;&nbsp;最近在着手开始一新系统的制作时，遇到了点小麻烦。<BR>&nbsp;&nbsp;&nbsp;&nbsp;想把原来Excel表格中的数据全部导入到MSSQL2005 Express中，可是MSSQL 2005没有直接针对这样导入的功能，所以参考了一些方法，又经过一点研究，总结出这样一个办法。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;在MSSQL2005中运行这样一条SQL命令：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">SELECT * INTO <FONT color=#ff0000>systemtest</FONT><STRONG> </STRONG>FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','Data Source=<FONT color=#ff0000>e:\book1.xls</FONT>;Extended Properties=Excel 8.0')…<FONT color=#ff0000>[Sheet1$]</FONT></DIV>
<P>&nbsp;&nbsp;&nbsp;&nbsp;其中，红色部分可以根据自己实际情况进行修改，systemtest为表名，e:\book1.xls为你想导入的Excel文件路径，[Sheet1$]为Excel文件中的工作簿名称。</P>
<P><STRONG>ASP连接有密码的ACCESS数据库</STRONG></P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;还有一处想提一下的是，相信大家对ASP连接ACCESS数据库已经驾轻就熟了。不过当笔者将ACCESS进行加密后，再想进行连接时，稍微碰到了点小麻烦~ 就是在连接语句中如何写传入用户名密码的语句,出现诸如“无法启动应用程序，工作组信息文件丢失，或是已被其他用户已独占方式打开”的错误信息。经过研究总结，得出以下语句，经过测试顺利进行了连接：</P>
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #c0e15f; PADDING-BOTTOM: 10px; PADDING-TOP: 10px">&lt;%<BR>db_path = "<FONT color=#ff0000>test.mdb</FONT>"<BR>Set conn= Server.CreateObject("ADODB.Connection")<BR>connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&amp;Server.MapPath(db_path)&amp;";Persist Security Info=False;Jet OLEDB:Database Password=<FONT color=#ff0000>123456</FONT>"<BR>conn.Open connstr<BR>%&gt;<FONT color=#ff0000></FONT></DIV>
<P><BR>&nbsp;&nbsp;&nbsp;&nbsp;语句中红色部分需要针对自己的情况进行修改，分别是数据库文件路径与数据库密码。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;好了，两侧小经验，祝大家编程愉快~</P>]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-3-15</pubDate></item><item><title>通向巴洛克之路：序章</title><link>www.cenusblog.com/comments.asp?id=29</link><description><![CDATA[&nbsp&nbsp&nbsp&nbsp在说明Cenus的诞生之意前，首先想向大家概述一下巴洛克艺术的一些特点：<br>&nbsp&nbsp&nbsp&nbsp巴洛克艺术的特点就是豪华，它既有宗教的特征又有享乐主义的色彩。<br>&nbsp&nbsp&nbsp&nbsp它是一种激情的艺术，它打破理性的宁静和谐，具有浓郁的浪漫主义色彩，非常强调艺术家的丰富想象力。<br>&nbsp&nbsp&nbsp&nbsp它极力强调运动，运动与变化可以说是巴洛克艺术的灵魂。<br>&nbsp&nbsp&nbsp&nbsp它极其关注作品的空间感和立体感。<br>&nbsp&nbsp&nbsp&nbsp它有着浓重的宗教色彩，宗教题材在巴洛克艺术中占有主导的地位；<br>&nbsp&nbsp&nbsp&nbsp大多数巴洛克的艺术家有远离生活和时代的倾向。<br><br>&nbsp&nbsp&nbsp&nbsp当然，Cenus并不想远离生活与时代，Cenus所想的只是为我们的时代注入一丝巴洛克式的豪华，希望人们可以在理性的世界中散发出浪漫主义的光华，在时代的潮流中持续地迸发出思维的火花。无论你扮演着何种角色，担负着何种重任，又或者事物是如何的卑微，想法是如何的简单，但请任何时候都不要忘记你有一种追求完美的权利在心怀。]]></description><author>sunec</author><source>Cenus Design</source><category>Design</category><pubDate>2008-3-10</pubDate></item></channel></rss>