一.整体介绍:http://m.fang.com/public/qd/
二.碰到的问题:
(1)数据问题:
1.数据库的建立(引擎,编码类型)
a.每个库都会有自己的默认引擎和编码,在建库和表的时候也可以分别指定库、表、字段的编码格式
b.在mysql数据库中,若用“utf8”的编码格式则varchar(12)可以存储12个中文,是以字符为存储单位的;
若用“latin”则varchar(12)可以存储4个中文,它是以字节为存储单位的
c.存储引擎: http://www.ha97.com/4197.html
InnoDB MyISAM
构成上: 数据文件和日志文件, .frm存表的定义 .myd存具体数据 .myi存索引
.frm文件用于存数据
事务处理 : 支持事务和外部键 强调读性能,不支持事务
读表的具体行数: count(*)要扫描全表 count(*)在不使用where的条件下直接读出表的行数
锁: 行锁(如果在执行一个sql语句不能确 表锁
定扫描范围会锁全表,如使用like)
空间结构: B+tree B tree
总结:在合适的字段上建立索引;建索引时也要取合适的长度;组合索引遵循最左前缀匹配原则
2.表该如何建(用什么类型,多长,是否建索引,表的引擎,表的编码类型)
以上是我用的一个表,存在的问题
a.在我的应用中qd_id这个字段没用到就不需要用自增,也没必要用到那么大的长度;
b.根据具体应用varchar()指定合适的长度(这个地方要仔细你的编码格式)
c.sex这类用0和1来标识的字段用enum格式来存储比较好;
d.最好不用NULL而用' '(空);
e.时间类型用int比较好,方便程序处理和比较
f.user_agent字段长度不够,大致在varchar(200)比较合适
(2)程序问题:
- 前端验证 :用正则匹配验证输入的字符
- ajax请求次数限制(可以绕过js直接发送请求,用验证码或用ip限制请求次数)
- 后端数据过滤 (mysql_real_escape_string(), addslashes() strip_tags(),htmlspecialchars())可以查看http://www.111cn.net/phper/phpanqn/58589.htm
- 代码优化(js优化,php优化,页面效果优化)
(3)后期查看问题(如何将签到信息打印成可读的表格)
在输出前加上
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:attachment;filename=dahuiqiandao_data.xls");
这两句可以将输出的数据转成excel类型的
如我获得一个$result数组,代码如下
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:attachment;filename=dahuiqiandao_data.xls");
echo "姓名"."\t";
echo "电话"."\t";
echo "\n";
if (is_array($result) && count($result) >0) {
foreach ($result as $k => $v) {
echo $v['user_name']."\t";
echo $v['user_tel']."\t";
echo "\n";
}
echo "\t 截止".date('Y-m-d H:i:s', time())."已有".count($result)."人\t";
}
就可以将$result中的字段输出到相应的excel中
三.总结
实践出真知,自己做了和自己提前想的结果一般不一致,多动手,技术是练出来,一定的知识储备是前提