签到项目总结

一.整体介绍:http://m.fang.com/public/qd/

Image

二.碰到的问题:

(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.表该如何建(用什么类型,多长,是否建索引,表的引擎,表的编码类型)

Image(1)

     以上是我用的一个表,存在的问题

     a.在我的应用中qd_id这个字段没用到就不需要用自增,也没必要用到那么大的长度;

     b.根据具体应用varchar()指定合适的长度(这个地方要仔细你的编码格式)

     c.sex这类用0和1来标识的字段用enum格式来存储比较好;

     d.最好不用NULL而用' '(空);

     e.时间类型用int比较好,方便程序处理和比较

     f.user_agent字段长度不够,大致在varchar(200)比较合适

(2)程序问题:

  1. 前端验证 :用正则匹配验证输入的字符
  2. ajax请求次数限制(可以绕过js直接发送请求,用验证码或用ip限制请求次数)
  3. 后端数据过滤 (mysql_real_escape_string(), addslashes() strip_tags(),htmlspecialchars())可以查看http://www.111cn.net/phper/phpanqn/58589.htm
  4. 代码优化(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 "姓名"." ";
        echo "电话"." ";
        echo " ";
        if (is_array($result) && count($result) >0) {
            foreach ($result as $k => $v) {
                echo $v['user_name']." ";
                echo $v['user_tel']." ";
                echo " ";
            }
            echo " 截止".date('Y-m-d H:i:s', time())."已有".count($result)."人 ";
        }

就可以将$result中的字段输出到相应的excel中

三.总结

实践出真知,自己做了和自己提前想的结果一般不一致,多动手,技术是练出来,一定的知识储备是前提

原文地址:https://www.cnblogs.com/ryanlamp/p/4654128.html