浏览模式: 标准 | 列表2007年04月的文章

Love in December

不俗的歌,天籁一般。
尤其在俗世中,就更应该听听这种干净的声音。
也算偶尔来拂拭一番,末使惹太多尘埃吧。
[wma=300,50]http://www.sxyedu.com/images/uploadfiles/20060824104611.mp3[/wma]
  So this is love
  In the end of December  
  Quiet nights  
  Quiet stars  
  And I"m here  
  Monday to Sunday  
  Cause you"re fragile  
  And I"m weak
  So you fall  
  When the nights grow longer  
  Into sleep  
  And won"t wake up  
  And I"m here  
  I"m sitting  
  Beside you  
  And I wait  
  Until the Spring  
  Don"t you worry  
  I"ll be there for you  
  Don"t worry about me  
  You know me better than that  
  Don"t you worry  
  I"ll be there for you  
  I"ll catch you if you would fall  
  So you drift  
  When the days grow colder  
  Away from me  
  And won"t look back  
  Far away  
  And I can"t guide you  
  But I"m here  
  Until the Spring  
  Don"t you worry  
  I"ll be there for you  
  Don"t worry about me  
  You know me better than that  
  Don"t you worry  
  I"ll be there for you  
  I"ll catch you if you would fall  
  I"ll catch you if you would fall

引用

这就是爱
在十二月的末尾
沉寂的夜晚
安静的星辰
我在这里
从周一到周日
因为你是如此易碎
因为我是脆弱的
所以你降落
当这些长夜变的更加漫长
陷入沉睡
不会再醒来  
不要担心宝贝
我总在那里。只为你
不要担心我宝贝
你知道的,我会比那一切都美好
我会紧紧抓住你,当你为我降落  
所以你停留
当所有的白昼变的更加寒冷
远离我
不要再回忆
遥远的
我会指引你
我在这里
直到来年春天

用清晰的思路做合理的网站,写规范的代码

近日,做网站。
PHP+ACCESS.使用了ADODB类和Smarttemplate模板类。
动手之前分析了N天(N>3),考虑到种种情况后。
结构如下:
点击在新窗口中浏览此图片
展开说明:
点击在新窗口中浏览此图片
为了规范,强迫自己尽量把代码也写规范了[codes=php]<?php
include_once("../config/templateConfig.inc.php");
include_once("../config/databaseConfig.inc.php");
$templateMain   = new SmartTemplate("fuWuYuZhiChi.html");
$templateMenu   = new SmartTemplate("menu.html");
$templateTop    = new SmartTemplate("top.html");
$templateBottom = new SmartTemplate("copyRight.html");
/*
输出头部
*/
$templateTop->output();
/*
输出菜单
*/
$menu="服务与支持";
$submenu="";
$templateMenu->assign("MENU",$menu);
$templateMenu->output();
/*
获取URL后的页码变量
*/
$Qclass = $_GET["class"];
if (empty($Qclass)==true){
    $Qclass = 1;
}else{
    if (!is_numeric($Qclass)) die(参数传递错误!非法操作!);
}
/*
$tn 总记录数
*/
$sqltn="sel&#101;ct count(*) from Article wh&#101;re Aclass = {$Qclass}";
$tn =$db->GetOne($sqltn);
/*
分页设置
计算页数
*/
$page_size = 15;
$tp = ceil($tn / $page_size);
$cp =(int)$_GET["p"];
empty($cp)==true ? $cp=1:$cp=(int)$_GET["p"];
if ($cp < 1) $cp   = 1 ;
if ($cp > $tp) $cp = $tp;
/*
取记录
输出主体部分
*/
$sqlrs="sel&#101;ct ID,Atitle,Aclass,Aeditor,Atime from Article wh&#101;re Aclass = {$Qclass}";
$rs = $db->Sel&#101;ctLimit($sqlrs,$page_size,($cp-1) * $page_size);
$rs = $rs->GetRows();
$templateMain->assign("class",$Qclass);
$templateMain->assign("article",$rs);
$templateMain->assign("CP",$cp);
$templateMain->assign("Pr",$cp-1);
$templateMain->assign("Ne",$cp+1);
$templateMain->assign("TP",$tp);
$templateMain->assign("TN",$tn);
$templateMain->output();
/*
输出页脚
*/
$templateBottom->output();
?>[/codes]
没有进过大公司,只能做到这地步了。

男士常用五种领带结法

一、平结:

平结为最多男士选用的领结打法之一,几乎适用于各种材质的领带。
要诀:领结下方所形成的凹洞需让两边均匀且对衬。

""

二、交叉结

这是对于单色素雅质料且较薄领带适合选用的领结
对于喜欢展现流行感的男士不妨多加使用&ldquo;交叉结&rdquo;。

""

三、双环结

一条质地细致的领带再搭配上双环结颇能营造时尚感,适合年轻的上班族选用。
该领结完成的特色就是第一圈会稍露出于第二圈之外,可别刻意给盖住了。

""

四、温莎结

温莎结适合用于宽领型的衬衫,该领结应多往横向发展。
应避免材质过厚的领带,领结也勿打得过大。

""

五、双交叉结

这样的领结很容易让人有种高雅且隆重的感觉,适合正式之活动场合选用。
该领结应多运用在素色且丝质领带上,若搭配大翻领的衬衫不但适合且有种尊贵感。

""

用kingcms练习DIV+CSS标准化建站

点击在新窗口中浏览此图片
嗯,推荐小巧的kingcms。部署移植方便,容易上手。

Tags: kingcms, div+css

两日

四月十七号
80块单人间,全套水电设施。铺面干净洁白。
靠马路,车来车往。夜不成眠。

四月十八号
30块单人间,没有卫生设施。被褥散发异味。
靠马路,车来车往。彻夜难眠。


PHP中“数组”的基础知识

关于数组:
PHP中的数组是复杂的,并且比许多其他高级语言中的数组更灵活。
数组array是一组有序的变量,其中每个变量被叫做一个元素。
数组可以被编号或者相关联,也就是数组的元素可以分别根据数字索引或文本化字符串来访问
PHP中,数组可以包含标量(整数,布尔,字符串,浮点数)或复合值(对象甚至其他数组),并且可以包含不同类型的值
1。创建数组
PHP提供创建数组的array()语言结构
$numbers = array(5,4,3,2,1);
$words = array("web","database","application");
echo $numbers[2];
echo $words[0];
---------------------输出结果----------------------------------------
3web
---------------------------------------------------------------------
默认情况下,数组的第一个元素的索引为0。数组中包含的值可以通过使用方括号[]语法来检索和修改
$numbers[5] = 0;
数字化索引的数组可以创建位从任何索引值开始
$numbers = array(1=>"one","two","three","four");
也可以松散的索引
$numbers = array(1=>"one",3=>"three",5=>"zero");
可以通过给变量赋予一个没有参数的array()来创建空数组。然后可以通过使用方括号[]语法来添加值
$error = array();
$error[] = "no error!!!";
$error[] = "second error!!!";
echo $error[0];
echo $error[1];
---------------------输出结果----------------------------------------
no error!!!second error!!!
---------------------------------------------------------------------
2.关联数组
关联数组(associative array)使用字符串索引(或键)来访问存储在数组中的值
关联索引的数组对于数据库层交互非常有用
$newarray = array("first"=>1,"second"=>2,"third"=>3);
echo $newarray["second"];
$newarray["third"]=5;
echo $newarray["third"];
---------------------输出结果----------------------------------------
25
---------------------------------------------------------------------
3.异构数组
PHP数组可以包含不同种类的值
$mixedBag = array("cat",42,8.5,false);
var_dump(mixedBag);
4.多维数组
创建包含数组的数组,数组维数没有限制,但是一般很难想象一个多于三维的数组的用法
$planets = array(array("MM",1,2),array("NN",3,4),array("BB",5,6),array("VV",7,8));
print $planets[2][0];
$planets2 = array("MM"=>array("AA"=>1,"SS"=>2),
"NN"=>array("DD"=>3,"FF"=>4),
"BB"=>array("GG"=>6,"HH"=>7,"PP"=>array("haha!!!!")),
"VV"=>array("JJ"=>6,"KK"=>7,"LL"=>array("one","two")));
print $planets2["VV"]["LL"][0];
---------------------输出结果----------------------------------------
BBone
---------------------------------------------------------------------
5.使用循环访问数组
遍历数组的方法有很多(使用while,for循环)或者foreach语句,最容易的是foreach 语句
$length = array(0,107,202,400,475);
//将厘米转换为寸
for($i=0;$i<5;$i++)
{
echo ($length[$i]/3);
}
$j=0;
while(isset($length[$j]))
{
echo ($length[$j]/3);
$j++;
}
foreach($length as $cm)
{
echo ($cm/3);
}
---------------------输出结果----------------------------------------
0
35.6666666667
67.3333333333
133.333333333
158.333333333
0
35.6666666667
67.3333333333
133.333333333
158.333333333
0
35.6666666667
67.3333333333
133.333333333
158.333333333

---------------------------------------------------------------------
foreach还可以迭代关联数组的值
$sound = array("cow"=>"moo","dog"=>"woof",
"pig"=>"oink","duck"=>"quack");
foreach ($sound as $animal=>$noice)
{
echo "$animal 得叫声是这样的 $noice $noice......";
}
---------------------输出结果----------------------------------------
cow 的叫声是这样的 moo moo......
dog 的叫声是这样的 woof woof......
pig 的叫声是这样的 oink oink......
duck 的叫声是这样的 quack quack......

---------------------------------------------------------------------

6.使用数组指针
与存储在数组中的键和关联值一起,PHP还拥有一个指向数组当前元素的内部索引,
有几个函数使用并更新该数组索引来提供对数组元素的访问
$a = array("a","b","c","d","e","f");
echo current($a);
each($a);
key($a);//目前数组的指针,返回其索引
echo current($a);//当前元素的值
each($a);//返回当前元素的值并将内部索引指向下一个元素
each($a);
echo current($a);
next($a);//指向下一个元素
echo current($a);
prev($a);//指向上一个元素
echo current($a);
end($a);//指向最后一个元素
echo current($a);
key($a);
echo current($a);
---------------------输出结果----------------------------------------
abdedff
---------------------------------------------------------------------
7.基本的数组函数
integer count(mixed var)//在数组中返回元素的个数,也可用于任何的变量
number max(array numbers)//返回数组中的最大值
number min(array numbers)//返回数组中的最小值
boolean in_array(mixed needle,array haystack[,bollean strict])//查找数组中的值,第三个参数可选,强制执行类型检查
mixed array_search(mixed needle,array haystack[,boolean strict])//返回 键 而不是布尔值,
找不到时返回false,找到的元素如果正好是第一个元素,则返回0,而PHP会自动转化为false所以需要使用===判断,如下
$a = array("a","b","c","d","e","f");
$index = array_search("a",$a);
if($index === false)
echo "在数组a中未发现字符"a"";
else
echo "Index = $index";
---------------------输出结果----------------------------------------
Index = 0
---------------------------------------------------------------------
array array_reverse(array source[,bool preserve_keys])//逆转数组,生成一个新数组,可选参数为true时,保留索引和元素之间的关联
$a = array("a","b","c","d","e","f");
$newa = array_reverse($a);//直接翻转
echo $newa[0];
$newb = array_reverse($a,true);//依旧保留了索引和元素之间的关联
echo $newb[0];
---------------------输出结果----------------------------------------
fa
---------------------------------------------------------------------
sort(array subject[,integer sort_flag])//根据 值 进行升序排列(在原数组中重新排列元素)
rsort(array subject[,integer sort_flag])//根据 值 进行降序排列(在原数组中重新排列元素)
可选参数可以指定为按数字方式SORT_NUMERIC还是字符串方式SORT_STRING或者通常的方式SORT_REGULAR排序
sort()、rsort()可以用于关联数组,但是 键 将丢失
asort(array subject[,integer sort_flag])//根据 值 进行升序排列(在原数组中重新排列元素),保持键值关联
arsort(array subject[,integer sort_flag])//根据 值 进行降序排列(在原数组中重新排列元素),保持键值关联
当asort() arsort()用于非关联数组时,元素按排序后的次序重新排列,但是访问元素的索引不改变
integer ksort(ayyay subject [,integer sort_flag])//根据 键或索引 进行升序排列
integer krsort(ayyay subject [,integer sort_flag])//根据 键或索引 进行降序排列
usort(array subject, string compare_function)//根据用户定义排序,用户定义自己的排序规则函数,但函数必须符合
uasort(array subject, string compare_function)//integer my_compare_function(mixed a, mixed b),a>b返回1,a uksort(array subject, string compare_function)//a等于b时返回0
$numbers = array(16,3,2,171,5,24,6,19);
sort($numbers);
foreach($numbers as $n)
echo $n." ";
$numbers = array(16,3,2,171,5,24,6,19);
rsort($numbers);
foreach($numbers as $n)
echo $n." ";
$numbers = array(16,3,2,171,5,24,6,19);
sort($numbers,SORT_STRING);
foreach($numbers as $n)
echo $n." ";

$a = array("o"=>"kk","e"=>"zz","z"=>"hh","a"=>"rr");
asort($a);
foreach ($a as $keyname=>$keyvalue)
echo $keyvalue;

$a = array("o"=>"kk","e"=>"zz","z"=>"hh","a"=>"rr");
ksort($a);
foreach ($a as $keyname=>$keyvalue)
echo $keyvalue;

//基于长度比较两个字符串
function cmp_length($a,$b)
{
if(strlen($a) < strlen($b))
return -1;
if(strlen($a) > strlen($b))
return 1;
return 0;
}
$animals = array("cow","ox","monkey","mimi");
usort($animals,"cmp_length");
foreach($animals as $an)
echo $an;
---------------------输出结果----------------------------------------
2 3 5 6 16 19 24 171 171 24 19 16 6 5 3 2 16 171 19 2 24 3 5 6 hhkkrrzzrrzzkkhhoxcowmimimonkey
---------------------------------------------------------------------
array_merge($a,$b)//组合数组,个人认为是比较有趣的函数之一,从两个数组生成一个数组,具有相同 键 的值会被覆盖
////////////////////////////代码部分////////////////////////////////////////
$a = array("name"=>"zhangsan",10,100);
$b = array("name"=>"lisi",4,6,8);
$c = array_merge($a,$b);
var_dump($c);
//////////////////////////////////////////////////////////////////////////
---------------------输出结果----------------------------------------
array(6) { ["name"]=> string(4) "lisi" [0]=> int(10) [1]=> int(100) [2]=> int(4) [3]=> int(6) [4]=> int(8) }
---------------------------------------------------------------------
array array_combine(array $a,array $b)//a数组的值为新数组的键,b数组的值为新数组的值,数组长度不同时,返回false
////////////////////////////代码部分////////////////////////////////////////
$a = array("name","math","china");
$b = array("zhangsan",4,6);
$c = array_combine($a,$b);
var_dump($c);
//////////////////////////////////////////////////////////////////////////
---------------------输出结果----------------------------------------
array(3) { ["name"]=> string(8) "zhangsan" ["math"]=> int(4) ["china"]=> int(6) }

Tags: 数组

PHP容易出错在十四个问题

  【1】页面之间无法传递变量 get,post,session在最新的php版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用$_GET["foo"],$_POST["foo"],$_SESSION["foo"]来得到。当然也可以修改自动全局变量为开(php.ini改为register_globals = On);考虑到兼容性,还是强迫自己熟悉新的写法比较好。

  【2】Win32下apache2 用get方法传递中文参数会出错:

  test.php?a=你好&amp;b=你也好

  传递参数是会导致一个内部错误
 
  解决办法:"test.php?a=".urlencode(你好)."&amp;b=".urlencode(你也好)

   .............

  【3】win32下的session不能正常工作

  php.ini默认的session.save_path = /tmp

  这显然是linux下的配置,win32下php无法读写session文件导致session无法使用,把它改成一个绝对路径就可以了,例如session.save_path = c:windows emp

  【4】显示错误信息

  当php.ini的display_errors = On并且error_reporting = E_ALL时,将显示所有的错误和提示,调试的时候最好打开以便纠错,如果你用以前php写法错误信息多半是关于未定义变量的。变量在赋值以前调用会有提示,解决办法是探测或者屏蔽。

  例如显示$foo,可以if(isset($foo)) echo $foo 或者echo @$foo

  【5】Win32下mail()不能发送电子邮件

  在linux下配置好的sendmail可以发送,在win32下需要调用smtp服务器来发送电子邮件,修改php.ini的SMTP = ip //ip是不带验证功能的smtp服务器(网上很难找到)

  php发送邮件的最好解决方法是用socket直接发送到对方email服务器而不用转发服务器。

  【6】初装的mysql如果没有设置密码,应该使用up&#100;ate mysql.user set password="yourpassword" wh&#101;re user="root" 修改密码

  【7】header already sent

  这个错误通常会在你使用HEADER的时候出现,他可能是几种原因:1,你在使用HEADER前PRING或者ECHO了2.你当前文件前面有空行3.你可能INCLUDE了一个文件,该文件尾部有空行或者输出也会出现这种错误。!

  【8】更改php.ini后没有变化

  重新启动web server,比如IIS,Apache等等,然后才会应用最新的设置。

  【9】php在2003上面安装(ISAPI的安装方法恳请高手指教)

  PHP4的php4isapi.dll好像和2003有些冲突,只能用CGI模式安装

  步骤一,先www.php.net 下在一个安装程序,我是装的是:php-4.2.3-installer.exe,你也可以去找最新的版本,在安装php-4.2.3-installer.exe之前保证你的IIS6.0启动了,并能够访问。安装好以后,在默认网站-->应用程序配置。

  步骤二:点击 web服务扩展 -->新建web服务扩展。

  步骤三: 扩展名-->php,然后添加

  步骤四:找到php.exe的路径添加上去。

  步骤五: 确定就可以了!
 
  步骤六: 选择php的服务扩展,然后点击允许。

  【10】有时候sql语句不起作用,对数据库操作失败,最简便的调试方法,echo那句sql,看看变量的值能得到不。

  【11】include和require的区别

  两者没有太大的区别,如果要包含的文件不存在,include提示notice,然后继续执行下面的语句,require提示致命错误并且退出。

  据我测试,win32平台下它们都是先包含后执行,所以被包含文件里最好不要再有include或require语句,这样会造成目录混乱。或许*nux下情况不同,暂时还没测试。

  如果一个文件不想被包含多次可以使用include_once或require_once## 读取,写入文档数据。


function r($file_name) {
 $filenum=@fopen($file_name,"r");
 @flock($filenum,LOCK_SH);
 $file_data=@fread($filenum,filesize($file_name));
 @fclose($filenum);
 return $file_data;
}
function w($file_name,$data,$method="w"){
 $filenum=@fopen($file_name,$method);
 flock($filenum,LOCK_EX);
 $file_data=fwrite($filenum,$data);
 fclose($filenum);
 return $file_data;
}


  【12】isset()和empty()的区别

  两者都是测试变量用的,但是isset()是测试变量是否被赋值,而empty()是测试一个已经被赋值的变量是否为空。

  如果一个变量没被赋值就引用在php里是被允许的,但会有notice提示,如果一个变量被赋空值,$foo=""或者$foo=0或者 $foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。
 
  要注销一个变量,可以用 unset($foo)或者$foo=NULL

  【13】mysql查询语句包含有关键字

  php查询mysql的时候,有时候mysql表名或者列名会有关键字,这时候查询会有错误。例如表名是order,查询时候会出错,简单的办法是sql语句里表名或者列名加上`[tab键上面]来加以区别,例如sel&#101;ct * from `order`

  【14】通过HTTP协议一次上传多个文件的方法

  有两个思路,是同一个方法的两种实现。具体程序还需自己去设计。

  1、在form中设置多个文件输入框,用数组命名他们的名字,如下:


<form action="" method=post>
<input type=file name=usefile[]>
<input type=file name=usefile[]>
<input type=file name=usefile[]>
</form>


  这样,在服务器端做以下测试:


echo "<pre>";
print_r($_FILES);
echo "</pre>";


  2、在form中设置多个文件输入框,但名字不同,如下:


<form action="" method=post>
<input type=file name=usefile_a>
<input type=file name=usefile_b>
<input type=file name=usefile_c>
</form>


  在服务器端做同样测试:

echo "<pre>";
print_r($_FILES);
echo "</pre>";

Smarttemplate的嵌套循环

说说Smarttemplate的嵌套循环吧。常用的地方就是各个一级菜单下各有其子菜单。前几天一直没有能解决的问题,今天豁然开朗。关键还是在php程式得到数组那里。下面是由淡水河边这厮的试验(使用ADODB实现,习惯了,方便的说)。
模板:
代码:

<table width="150" border="0" cellpadding="1" cellspacing="1" bgcolor="#FFFFFF">
    <!-- BEGIN menu_grp -->
    <tr bgcolor="#FFFF99">
        <td height="35" colspan="2" class="menu_head"> {grp_name} </td>
    </tr>
        <!-- BEGIN menu_prg -->
    <tr bgcolor="#FFFFFF" class="menu_list">
        <td width="10%" height="30" bgcolor="#FFFFCC"> </td>
        <td height="30" bgcolor="#FFFFCC"> {prg_name} </td>
    </tr>
        <!-- END menu_prg -->
    <!-- END menu_grp -->
</table>


程序:
代码:

<?php
include_once("smarttemplate.inc.php");
include_once("conn.inc.php");
$SQLStr="sel&#101;ct * from menu_group";
$rs_mgrp=$conn->Execute($SQLStr);

if($rs_mgrp){
    $i=0;
    while($arr_mgrp=$rs_mgrp->FetchRow()){
        $menu["menu_grp"][$i]["grp_name"]=$arr_mgrp["group_name"]; // 将menu group 的值传入到$menu数组
        $SQLStr="sel&#101;ct * from menu_prg wh&#101;re prg_group_id=" . $arr_mgrp[prg_group_id];
        $rs_prg=&amp;$conn->Execute($SQLStr);
            if($rs_prg){
                while($arr_prg=$rs_prg->FetchRow()){
                    $menu["menu_grp"][$i]["menu_prg"][]["prg_name"]=$arr_prg[prg_name];
                     // 将相同的group的prg合并同并放进相同的数组里
                }
            }
        $i++;
    }
}

$tpl=new SmartTemplate("menu.html");
$tpl->assign($menu);
$tpl->output();
?>

结果:点击在新窗口中浏览此图片

Tags: adodb, SmartTemplate

PHP中的权限管理

PHP中的权限管理的两个备份。都没测试。因为相关资料较少,先记下。

» 阅读全文

Tags: 权限管理

php系cms的春天来了?

最近php的各种cms都出新版了:
php168出了4.0版
phpcms出了2007版
帝国(Ecms)出4.6测试版
织梦(DeDeCMS)出4.0biz版
verycms也要出3.0beta2了

用帝国建过三个站,模板和标签差不多熟悉了。
感觉后台上手不错,只是加载比较慢。

verycms3.0测试过,感觉不错,模板比较简单。
后台载入很快。等正式版出了,用来建站(beta版功能不全,期待中)。

其他的没用过,不多说了。

Tags: cms

Records:1712