页面伪装异步加载中...
关闭/显示侧边栏
返回首页 mail me! 订阅rss Follow me

Archive for 八月, 2009

我也去接新生了

因为在暑假间学校的老生建了两个群,而我分别是一个群主和管理员,理所当然的在新生中的认识的人比较多,也有比较多的人比较相信我。

然后又理所当然的那些新生让我去接待。

是件比较累的事情。

PHP Smarty 模板输出数据库内容并分页方法。

昨天在写报名系统后台时,首先遇到的第一个问题是关于怎么将数据库中的内容在smarty中表现,因为平常在用PHP输出数据库内容时都是用类似while($row=mysql_fetch_array($sql_query)){………}的方式进行输出,根据while中条件的执行次数而将内容依次往下读取,而用smarty进行这类数据输出时,需要提前将数组定义好。

第二个问题是关于分页,关于分页,我采取的是最简单的分页方式,当然可以视情况进行添加,也可以将我之前在博客中发表的一篇PHP分页函数加以修改用于smarty中。

首先来说第一个问题。

在smarty中,输出数组的循环数据的方式有几种,但我比较偏向于使用{section name=list loop=$title}   {/section}的方式进行输出,用smarty输出数组时,需要将数组进行定义,类似下面形式:

$menu[]=array(“link”=>”index.php”,”name”=>”管理首页”);
$menu[]=array(“link”=>”config.php”,”name”=>”系统配置”);
$menu[]=array(“link”=>”list.php?page=1″,”name”=>”名单查看”);

然后在模板中这样进行输出:

<ul>
{section name=list loop=$menu}

<li><a href=”{$menu[list].link}” target=”_self”>{$menu[list].name}</a></li>
{/section}
</ul>

上面那段是我目前在做的报名系统中的后台菜单栏部分。

而通过PHP在数据库中读写出来的内容只是某一条的数据,所以需要用以往的方式将数据进行重新赋值,类似这样:

while($row=mysql_fetch_array($db_list_list)){

$page_list[]=array(“id”=>$row['link_id'],”url”=>$row['link_url'],”name”=>$row['link_name']);

}

其中,$page_list[]就是我们将数据库中的数据遍历过后并进行重新定义的数组,就类似之前的$menu[]变量,这个时候便可以用smarty输出数组的方式进行输出。

关于分页的问题,先简单的说说原理,其实在smarty中我们可以用{section}{/section}的参数进行分页处理,但那样个人觉得比较麻烦,而且模板文件也会编写的比较复杂。

关于分页我们可以将通获取url参数进行判断,并限制SQL查询数据,通过限制SQL的查询数据而控制smarty解析的内容。详细的思路我将写道下面的源码的注释中。

首先说明一下关于我的源码问题,源码中包含两个文件,PHP文件和html的smarty模板文件。其中不含有数据库,smarty的配置代码,‘wp_links‘是我在测试数据中使用的wordpress数据库中的友情连接部分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
//首先是PHP文件部分。
<?php
 
require("include.php");   //包含smarty配置部分
require 'conn.php';        //包含数据库配置部分
 
$pagesize=10;        //设置每页数据显示数量
 
$url=$_SERVER['REQUEST_URI'];
$url=parse_url($url);
$url=$url['path'];
 
 
$sql="SELECT * FROM `wp_links`";
$db_list=mysql_query($sql);
 
$num=mysql_num_rows($db_list);    //统计数据总数
$pages=$num/$pagesize;
$pages=ceil($pages);           //求出一共需要多少页进行显示
 
 
if ($_GET['page']){
	$pageval=$_GET['page'];
	$page=($pageval-1)*$pagesize;
	}
if($num>$pagesize){
	if (!isset($pageval)) $pageval=1;
}
 
 
if ($pages==1){                  //如果总页面只有一页的话,将“上一页”“下一页”的标签替换为空。
	$pageup="";
	$pagedown="";
 
}else{
switch($pageval){
	case 1 :{
		$pageup="首页";
		$pagedown="<a href=$url?page=".($pageval+1).">下一页</a>";
		break;
	}
	default :{
		$pageup="<a href=$url?page=".($pageval-1).">上一页</a>";
		$pagedown="<a href=$url?page=".($pageval+1).">下一页</a>";
	    break;
	}
	case $pages :{
		$pageup="<a href=$url?page=".($pageval-1).">上一页</a>";
		$pagedown="末页";
		break;
    }
 
}
 
}$smarty->assign("pageconfig",$pageconfig);
//==================================================
$sql_list="SELECT * FROM `wp_links` LIMIT $page,$pagesize";        //由此控制数据显示数量部分
$db_list_list=mysql_query($sql_list);
 
while($row=mysql_fetch_array($db_list_list)){
 
	$page_list[]=array("id"=>$row['link_id'],"url"=>$row['link_url'],"name"=>$row['link_name']);      //将数据库中查询内容重新赋值
 
 
}
 
$pageconfig="当前第 $pageval 页,共 $pages 页";
 
 
$smarty->assign("pageconfig",$pageconfig);
$smarty->assign("pageup",$pageup);
$smarty->assign("pagedown",$pagedown);
$smarty->assign("title",$page_list);
$smarty->display("index.htm");
 
 
?>

下面为模板的编写部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<table>
 <tr>
 <td>id</td>
 <td>url</td>
 <td>name</td>
 </tr>
{section name=list loop=$title}
 <tr>
 <td>{$title[list].id}</td>
 <td>{$title[list].url}</td>
 <td>{$title[list].name}</td>
 
 </tr>
{/section}
 </table>
 
 
 {$pageup}{$pagedown}{$pageconfig}

Post by 8-27

这篇文章用于叙述最近事宜,却不知道该去用什么样的标题。

今天27号,没有几天便是开学的日子。

从交大那边工作室搬回来不到3天的日子,我发现自己是一个很难闲下来的人,总觉得无所事事是一件浪费而有烦躁的事情,总想要给自己找点自己喜欢的事情来做,昨天上午用了10分钟和鸡蛋敲定,做一个社团报名页面用于社团长期招新,主要是考虑到社团技术部确实人手不够,能用的人没几个。

这次这个报名程序仍然继续使用PHP编写,因为这次练手的成分很大,便想到能够怎样完善就怎样完善(就在打下刚才的句子时,我突然想到,我还可以在个人简介的Longtext中使用fckeditor在线编辑器),采用smarty模板输出页面,因为想到鸡蛋一直都是在做静态页面,这次准备叫她做前台页面,然后我加以修改成smarty模板文件,倒是我会给她说作页面的注意事项,如果顺利的话,便可以开始告知鸡蛋如何去制作smarty模板,比如其中数组的输出,变量控制等等。

社团技术部缺人,这是一直想解决的问题,新生群中不少的人热情很高,说是要跟着我学东西,就是不知道能否坚持到这份热情,毕竟,这些在我们眼中看起来很有意思的东西,在别人眼中是件很枯燥的事情。

今天下午1点还要去英语补考,说起来长期混迹于英文博客,论坛,网站,英语竟然挂了。

Linux下锐捷上网解决方案。

凌晨四点50分现在。比较兴奋,终于解决了锐捷在Linux的认证问题,外面闪着猛雷,压抑不住内心的激动,记下这篇心得。

从去年开始就开始在关注Linux下瑞解的解决方案,官方有个Supplicant For Linux V1.1.1 但只能解决到ruijie3.32版本,我们入学的时候,学校好像刚换到ruijie3.35的动态DHCP认证,在windows下多了一个 802.1x的进程,纠结的事情就出在这个进程上面,Linux下很难解决这个问题。

大概是前面不久,小夕告诉我在google code上有个ruijieclient的开源程序,说是可以解决了ruijie3.35以上的认证问题,当时使用的是ubuntu,要在无网络下的情况解决那些依赖问题着实麻烦,后来便放弃了。

直到这几天,因为要回学校,不得不重新关注起这个问题。

ruijieclient 到现在已经发行到了0.8.1,昨天我在准备回学校的时候,从小汐的电脑上拷贝过来了ruijieclient0.7.9的archlinux安装包文件(因为google code 上的 ruijieclient都没有提供能直接在archlinux下安装的包文件)。

今天下午`因该是昨天下午了,昨天下午回到学校的时候,开始着手准备认证的问题,中间出现了许多莫名其妙的问题,在xp和Arch Linux下重启换来换去无数次,无关紧要的我便不在述说。

理论上,ruijieclient到现在的发行版本都能够解决了锐捷登录的问题。

http://code.google.com/p/ruijieclient/

但我在使用时,系统提示“不允许使用的客户端类型”,虽然开发者说ruijieclient能够支持客户端版本欺骗,但却不成功,发现在google code上面有人遇到和我一样的问题。

因为可能学校的认证服务器打开了802.1x的MD5校验,所以ruijieclient没能够成功的欺骗,然后发现了这款软件MentoHUST.

http://pcyard.qupan.com/?folder=1117507

这款便能够成功的欺骗过锐捷的版本认证。

简单说下操作过程:

首先在windows下面下载文件

http://forum.ubuntu.org.cn/download/file.php?id=75607&sid=ac5a2cc7663fbc7861fcaf1d986edd46

运行时可能会报错说缺少一个DLL组建,到网上搜索一下,下载后放到system32下面。

然后在上面的趣盘中下载对应学校使用锐捷版本的MPF文件和linux程序文件。

在软件中载入对应版本的MPF文件,然后点开始抓包,这个时候开始正常在windows下面登录锐捷,锐捷登录成功后,抓包完成,保存文件。

回到Linux下面首先需要准备一个包:可以手动到源里面下载:

libpcap-1.0.0-1-i686.pkg.tar.gz

在Linxu下,首先用pacman安装上面的软件包。

然后在/etc/下面新建一个文件夹 mentohust

将抓取的MPF包文件和linux程序文件包中的配置文件mentohust.conf拷贝到 /etc/mentohust/中

为了方便,将主程序MentoHUST拷贝到 /bin 中。

这个时候按照你在windows下的配置,按照说明配置好mentohust.conf中的内容。

其中Package的路径为指向抓取的那个MPF包文件。

配置好后,在终端中运行 MentoHUST

这个时候如果提示错误,没有找到 libpcap.so.0.9 的话,那么在终端中输入下面那句:

ln -s /usr/lib/libpcap.so.1 /usr/lib/libpcap.so.0.9

然后再执行,这个时候应该能够成功的登录锐捷了。锐捷3.35测试通过,以后版本请自测.

(待我整理好后,会给出上面提到的所有下载)

-----------我是华丽的分割线---------------
[root@localhost ~]# MentoHUST

欢迎使用MentoHUST 版本: 0.2.0
Copyright (C) 2009 HustMoon Studio
人到华中大,有甜亦有辣。明德厚学地,求是创新家。

** 用户名: 2008113577
** 网卡: eth0
** 网关地址: 0.0.0.0
** DNS地址: 0.0.0.0
** 数据包: /etc/mentohust/3_35.mpf
** 认证超时: 3秒
** 响应间隔: 30秒
** 自动重连: 240分钟
** 组播地址: 私有
** DHCP方式: 认证后
** DHCP脚本: dhclient
** 本机MAC: 00:22:15:2e:75:72
** 使用IP: 10.20.14.32
** 子网掩码: 255.255.254.0
>> 寻找服务器…
** 认证MAC: 00:1a:a9:06:7b:12
>> 发送用户名…
>> 发送密码…
** 客户端版本:3.35 适用:Windows 类型:2
** MD5校验值: 95487c7df16c637320c4316b7f18c292
>> 认证成功!
$$ 计费信息: 您当前使用的服务为st_room,账户余额为0.00元;
计费策略为学生宿舍包月;
>> 正在获取IP…
Internet Systems Consortium DHCP Client V3.1.2p1
Copyright 2004-2009 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/

can’t create /var/state/dhcp/dhclient.leases: No such file or directory
Listening on LPF/wlan0/00:1f:3c:8d:ab:54
Sending on LPF/wlan0/00:1f:3c:8d:ab:54
Listening on LPF/eth0/00:22:15:2e:75:72
Sending on LPF/eth0/00:22:15:2e:75:72
Sending on Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 6
DHCPOFFER from 10.20.15.1
DHCPREQUEST on eth0 to 255.255.255.255 port 67
DHCPACK from 10.20.15.1
can’t create /var/state/dhcp/dhclient.leases: No such file or directory
bound to 10.20.14.32 — renewal in 14008 seconds.
>> 操作结束。
** 本机MAC: 00:22:15:2e:75:72
** 使用IP: 10.20.14.32
** 子网掩码: 255.255.254.0
>> 发送心跳包以保持在线…

Zend Studio 7

在windows下用的php 编辑环境一直都是Zend Studio,因为习惯且知道软件有Linux的发行版本,所以到Linux下用的PHP环境仍然是Zend Stduio,现在用的是7.0,并没有发现有什么中文包,所以干脆就安心的使用英文版本,可怜我的英语水平,还好在windows下用熟悉了,还能使用。

关于一些常用的配置,还在整理,暂且不放出,此文用于作一个标记。
过几天就要开学了。

Page 1 of 3123