某站会员提交漏洞被抓的事情

今天刚刚听说,其实不管怎么提交,使用什么方式提交,都是属于非法的,也不管哪些网站有什么背景,跟什么人对接。只要刑十没针对此处做专项修改,他就是违法。但是啊,有句老话说的好, 中国的法律有一个好处,就是讲究人情的,考虑到人已经被逮捕,假设并没有主观故意,恶意行为,脱的数据只是作为漏洞验证,没有出售,传播,他的结果应该是2年以内+缓并处罚金或者不处罚金。 其实小弟我感觉,黑别人网站,浪费大把的时间去验证所谓的漏洞,并不能学到什么技术,只会容易带来麻烦给自己,真对计算机热爱就努力去研究自己的领域,争取能有一个好的发展,而不是以炫耀和贬低他人为乐。

看到有人说,世纪佳缘被脱跟白帽没关系。

执法人员在证据未确凿的情况下,一般是不会执行逮捕的。

发表在 Uncategorized | 某站会员提交漏洞被抓的事情已关闭评论

菜单项添加流程

添加菜单项前,要知道上级菜单项的id和path,所以在添加的form表单里,就要给一个hidden用来获取上级菜单的id, 点提交后,首先实例化模型类,实例化模型类过程中就会把通过POST获取到的pid里的id带入getById查询出对应的信息后再按照格式返回,这个时候就自动得到了上级的path,通过表单创建数据-添加。

发表在 thinkphp | 标签为 | 菜单项添加流程已关闭评论

菜单的无限分类2分层原理

通过查询和order排序后, 再把数据分配到模板中,这个时候再回到模板页查看是不会有层级感的, 因为做的是菜单-子菜单这样的结构,所以为了区分,就要重新写一个功能, 因为子菜单的path是主菜单的path+id, 比如count(array(0,1))-1 说明这个就为主菜单下的一级子菜单项, 如果想要排序, 可以乘以一个偶数, (奇数没法取确定值),比如我是一级菜单,就为1*20=20,二级就为2*20-40,一种类型存一个索引。

$list[$key]['signnum'] = count(explode('-',$val['mpath']))-1;
$list[$key]['marignnum'] = (count(explode('-',$val['mpath']))-1)*20;

然后回到模板页, 首先取出option里的name值, 然后再option里进行for循环

for($i=0;$i<$vlist["marignnum"]/5;$i++)
  {
   echo "&nbsp;";
  }

程序的执行流程就是, 取出第一级数据, 分割成数组计算位数减一,如果当前为第一个走到第一个数组下标处就为1,走到第二个数组下标处就为20, 回到模板里, 在取出option前会进行一次判断, 这个判断就是为了缩进用的, 比如第一次为20, 那么20/5 = 4 $i=0, 自然输出4个缩进, 第二次为array(0,1,2)-1 * 20 = 40/5=8,自然输出8个空格, 以此达到缩进效果。

发表在 thinkphp | 标签为 , , | 菜单的无限分类2分层原理已关闭评论

菜单的无限级分类

菜单项属于菜单,菜单被模块调用,菜单项中又可以分为子菜单项, 这样一直无限级分, 比如

1 首页 0 0
2 新闻 0 0
3 国内新闻 2 0-2
4 国际新闻 2 0-2
5 民生 3 0-2-3
6 城市周边 3 0-2-3-5
7 国际要闻 0-2-4

首页和新闻都是属于一级分类, 所以所属id和path都为0, 国内新闻是新闻的子菜单项, 所以所属id就为2, path就为0-2, 民生是属于国内新闻的, 所以id就为3, path就为0-2-3, 从这里就可以知道了, 子项的path, 等于父菜单的path+id。 比如城市周边是属于国内新闻下的民生, (0-2-3),那么城市周边的path就为0-2-3-5(民生path+id)。

如果要添加菜单项, 就要先获取菜单项的所属id是什么,这里可以通过获取表单传过来的父id, 然后调用getById把父id作为条件查出父id的id和path, 然后用path连接id就为当前的path, 如果父id的id和path都为0, 说明是主菜单, 直接返回就可以了, 回到前台, 再通过filed生成concat语句通过连接后的字符串和所属id排序, 就完成了菜单级别分类。

发表在 thinkphp | 标签为 , , , | 菜单的无限级分类已关闭评论

thinkphp中的关联模型

thinkphp中的关联模型其实就是thinkphp自己实现的数据库关联查询功能,主要是为了方便解决CURD多关联业务操作的, 它和视图模型类似,但不完全一样, 视图模型是通过操作映射字段查询生成虚拟的表结构,关联模型里的结构真实存在。通常说的关联关系有以下几种。

1. 一对一关联 (ONE TO ONE, 包括 HAS_ONE, BELONGS_TO)

我有一件商品, 就是 HAS_ONE, 这件商品属于我, 就是BELONGS_TO

2. 一对多关联 (ONE TO MANY, 包括 HAS_MANY, BELONGS_TO)

很多篇文章是我写的,就是HAS_MANY, 这些文章属于我, 就是BELONGS_TO

3. 多对多关联(MANY TO MANY)

我可以有多个商品, 多个商品又可能会属于其他订单

在thinkphp中, 实现关联模型也是通过模型类实现的, 包含RelationModel, 重写$_link属性就可以了。

比如文章系统, 一个单元可能包括多个分类, 就是HAS_MANY,一个分类下面可能又有不同文章, 也是HAS_MANY, 定义格式是这样的

假使当前是在单元里

protected $_link=array(
   
    'Category'=>array(
       
    'mapping_type'=>self::HAS_MANY,  //定义关联类型 , 一对多的关系, 因为一个单元下面可能会有不同分类。
    'class_name'=>'Category',  //定义关联模型类, 该类其实无需定义, 对应关联数据表名, 只要对应就可以。这里获取的是模型类里定义的信息, 取到的是模型类里定义的关联信息。
    'foreign_key'=>'sectionid', // 定义外键字段, 所属哪个单元
    'mapping_name'=>'categorys', //这里相当于是给当前关联表取的一个别名, 是用来获取数据的, 这里是映射的当前关联表, 取到的是表里的信息。
    'mapping_order'=>'sectionid desc', //这里是关联查询排序, 升序还是降序。

    ),
    'Artcle'=>array(
       
    'mapping_type'=>self::HAS_MANY,
    'class_name'=>'Artcle',
    'foreign_key'=>'sectionid',
    'mapping_name'=>'artcles',
    ),

定义好单元关联模型后, 就可以去单元控制下, 通过

       $list = $sec->relation(true)->select();

查出单元下的分类下的文章, 很是方便。

如果是定义分类关联模型, 首先考虑的就是分类属于哪个单元? 这里关联类型就是BELONGS_TO, 关联模型类就是单元表名, 外键就是所属单元id, 然后给一个别名就可以了。

查询时要把relation设置为true是因为默认是普通查询, 开启后才会变成关联查询。

发表在 thinkphp | 标签为 , , , | thinkphp中的关联模型已关闭评论

thinkphp中的视图模型

thinkphp中也实现了视图, 它是用模型类来定义的, 视图其实就是数据库视图, 它是一张虚拟的表, 表(视图)本身不存在于数据中, 而是根据映射字段查询时自动生成, 主要是被用来解决关联查询或者说筛选的。

在thinkphp3.2.3中, 可以在模型Model和表名中间加View来表示这是一个视图模型, 然后引入Model下的ViewModel再创建一个继承自系统视图的自定义视图模型, 然后可以重写$viewFields属性, 它提供的是一个多维数组, 你可以通过array(‘表名’=>array(‘字段名’))的形式设置视图模型, 如果存在多表, 就要给重名的定义别名, 然后通过_on定义关联查询条件, 视图模型算基本定义完成。 回到对应的控制器里, 实例化自定义视图模型, 然后查出, 就可以了。

_on 其实就是 inner join , inner join的意思是只有右边结果为真才会查出左边结果, 比如

SELECT bud_category.id as cid, bud_category.title as ctitle from `bud_category` inner join `bud_section` ON bud_category.id = bud_section.title

就不会显示出任何结果, 因为 id 不等于title, 这里如果要让它不等于也查出, 只要把inner 换成 left 就可以了, 因为left 不需要右边条件相等也会给出结果。

发表在 thinkphp | 标签为 , , , , , | thinkphp中的视图模型已关闭评论

在thinkphp中使用ueditor

首先渲染出模板文件, 然后去ueditor.baidu.com下载所需要的版本,解压到public目录下, 因为可能前台后台都需要,所以需要在public目录下新建一个目录,部署好后, 回到模板文件, 加载这两个js文件

 <script type="text/javascript" charset="utf-8" src="__PUBLIC__/Static/ueditor/ueditor.config.js"></script>
 <script type="text/javascript" charset="utf-8" src="__PUBLIC__/Static/ueditor/ueditor.all.js"> </script>

然后设置编辑器的属性信息

<script type="text/javascript" charset="utf-8">
   window.UEDITOR_HOME_URL = "__PUBLIC__/admin/ueditor/";
   window.onload=function(){
   window.UEDITOR_CONFIG.initialFrameHeight=300;//编辑器的高度
   window.UEDITOR_CONFIG.initialFrameWidth=800;//编辑器的宽度
   var editor = new UE.ui.Editor({
   imageUrl : '__PUBLIC__/Static/ueditor/uploadImage',
   fileUrl : '__PUBLIC__/Static/ueditor/uploadFile',
   imagePath : '',
   filePath : '',
   imageManagerUrl:'__PUBLIC__/Static/ueditor/imageManage', //图片在线管理的处理地址
   imageManagerPath:'__ROOT__/'
   });
   editor.render("description");  //此处id对应编辑器的html属性id
}
</script>

然后再在需要的html标签里填上对应的属性id就可以了, 比如在文本域里

 <textarea type="text" cols="50" rows="12" name="description" id="description"></textarea><br>

刷新页面, 编辑器就出来了, 如果你需要修改一些默认配置信息, 比如文件的上传路径, 打开php目录下的config.json, 就可以修改了。

发表在 thinkphp | 标签为 , , , , | 在thinkphp中使用ueditor已关闭评论

会员管理之增删改查

会员管理模块大概包含会员注册,会员列表的显示,会员信息搜索,会员编辑,会员删除,即所谓的增删改查。

首先来看会员注册, 因为我现在使用的thinkphp版本是3.2.3,所以文件命名上也得遵循一下它的规则(比如tp5下,定义控制器命名已经可以不加Controller。)首先到Index控制器同级目录下新建一RegisterController.class.php(注册控制器),然后定义控制器, 导入控制器基础类文件,然后再新建一个index方法一个add方法,index方法里调用注册页,注册页是个form表单,提交地址对应当前控制器下的add方法, 回到控制器,在add方法里通过模型类实例化一个对象,调用->create方法判断如果接收到了表单数据就调用->add方法写入数据库, 如果失败就通过->getError获取具体的错误信息。 到此, 用户注册完成。

回到Admin控制器同级目录,新建一个UserController.class.php, 新建index,add,del,edit,update方法,在index方法里调出会员管理首页模板,然后接收前台查询的类型和关键字, 中间可以加一些判断什么的, 然后拼接like sql语句, 实例化一个模型类, 加一个where条件, 条件就是拼接好的sql语句, 然后调用assign方法, 把数据分配到模板当中, 通过volist取出所有数据, 通过search的关键字和类型查出包含指定关键字的字段对应数据,到此, 会员搜索和会员展示完成。

做好了会员展示和会员搜索, 我们想通过点击指定会员id就可以编辑指定会员,这个时候需要给id一个a标签, 然后在a标签里通过模板变量获取当前的id,回到控制器,首先调用模板文件, 调出模板文件后在之前接收GET过来的id,然后可以判断一下这个id, 可以用is_numeric, 达成条件后, 调用->getById方法查出一条数据, 然后分配模板变量, 到此,编辑展示完成。

有了编辑展示, 还得对取出的信息进行更新, 所以我们得知道当前更新的是谁, 所以这里得在edit form里新建一个隐藏表单取出id。然后回到控制器, 在edit方法里通过模型类实例化对象, 然后通过表单过来的信息创建一个数据对象, 判断id是否为空是否是数字,判断调用->save结果是否为false, 到此, update完成。

接收删除id, 通过where条件和delete方法删除数据。

发表在 thinkphp | 标签为 , , , , , | 会员管理之增删改查已关闭评论

thinkphp获取上一次的sql执行记录

有时候执行一些数据库操作的时候会不成功但是也不会有任何错误出现, 这个时候就要观察sql语句, 其实开启Debug后,thinkphp也给你提供了SQL语句显示界面, 如果你不想去点那个图标,然后翻到sql选项再去查看sql语句就可以使用thinkphp提供的一个方法getLastSql(); 这个方法可以获取上一次的sql执行记录, 具体的用法是这样的。

比如在数据插入前

public function insert()
    {
      $data = array();
      $data = M('User');
      if($data->create())
        {
          $data->add();
          $sql = $data->getLastSql();
        }
        echo $sql;
    }

触发post后, 就会在当前页打印出add时的sql语句。 这个方法在thinkphp5下也同样有效。

发表在 thinkphp5 | 标签为 , , | thinkphp获取上一次的sql执行记录已关闭评论

解决thinkphp乱码问题

最近在用thinkphp做个东西, 在向模板变量分配数据的时候, 打开页面, 发现存在乱码, 网上搜了一下, 有人告诉说可以重新控制器里的构造方法里的方法, 其实只需要php文件编码类型和模板编码类型对应就可以正常显示了, thinkphp默认编码是utf-8编码, 把php保存文件编码改为utf-8,然后在模板里设置 问题即可解决。

发表在 thinkphp5 | 标签为 , , | 解决thinkphp乱码问题已关闭评论