我也去接新生了
因为在暑假间学校的老生建了两个群,而我分别是一个群主和管理员,理所当然的在新生中的认识的人比较多,也有比较多的人比较相信我。
然后又理所当然的那些新生让我去接待。
是件比较累的事情。
昨天在写报名系统后台时,首先遇到的第一个问题是关于怎么将数据库中的内容在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} |
这篇文章用于叙述最近事宜,却不知道该去用什么样的标题。
今天27号,没有几天便是开学的日子。
从交大那边工作室搬回来不到3天的日子,我发现自己是一个很难闲下来的人,总觉得无所事事是一件浪费而有烦躁的事情,总想要给自己找点自己喜欢的事情来做,昨天上午用了10分钟和鸡蛋敲定,做一个社团报名页面用于社团长期招新,主要是考虑到社团技术部确实人手不够,能用的人没几个。
这次这个报名程序仍然继续使用PHP编写,因为这次练手的成分很大,便想到能够怎样完善就怎样完善(就在打下刚才的句子时,我突然想到,我还可以在个人简介的Longtext中使用fckeditor在线编辑器),采用smarty模板输出页面,因为想到鸡蛋一直都是在做静态页面,这次准备叫她做前台页面,然后我加以修改成smarty模板文件,倒是我会给她说作页面的注意事项,如果顺利的话,便可以开始告知鸡蛋如何去制作smarty模板,比如其中数组的输出,变量控制等等。
社团技术部缺人,这是一直想解决的问题,新生群中不少的人热情很高,说是要跟着我学东西,就是不知道能否坚持到这份热情,毕竟,这些在我们眼中看起来很有意思的东西,在别人眼中是件很枯燥的事情。
今天下午1点还要去英语补考,说起来长期混迹于英文博客,论坛,网站,英语竟然挂了。
凌晨四点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
>> 发送心跳包以保持在线…
在windows下用的php 编辑环境一直都是Zend Studio,因为习惯且知道软件有Linux的发行版本,所以到Linux下用的PHP环境仍然是Zend Stduio,现在用的是7.0,并没有发现有什么中文包,所以干脆就安心的使用英文版本,可怜我的英语水平,还好在windows下用熟悉了,还能使用。
关于一些常用的配置,还在整理,暂且不放出,此文用于作一个标记。
过几天就要开学了。