钱柜娱乐777Grid导出页面数据时,点击导出的图标显示不出来选项列表

( 钱柜娱乐777 )

今天下午开始摸索使用grid扩展来展示表格,现在已经能展示出数据来了,但是点击导出的图标却显示不出来选项列表。
现在页面效果如下:

view部分的代码如下:

'pjax' => true,//加载loading动画
'bordered' => true,
'striped' => false,
'condensed' => false,
'responsive' => true,
'hover' => true,
'floatHeader' => true,
'floatHeaderOptions' => ['scrollingTop' => 50],
// 'showPageSummary' => true,
'panel' => [
    'heading'=>'<h3 class="panel-title"><i class="glyphicon glyphicon-globe"></i> Countries</h3>',
     'type'=>'success',
     'before'=>Html::a('<i class="glyphicon glyphicon-plus"></i> Create Country', ['create'], ['class' => 'btn btn-success']),
     'after'=>Html::a('<i class="glyphicon glyphicon-repeat"></i> Reset Grid', ['get-school-in-province'], ['class' => 'btn btn-info']),
     'footer'=>false,
     'export'=>true,
     'toolbar'=>true,
],
        
'exportConfig' => [
     GridView::PDF => [
         'label' => '导出CSV',
         'iconOptions' => ['class' => 'text-primary'],
         'showHeader' => true,
         'showPageSummary' => true,
         'showFooter' => true,
         'showCaption' => true,
         'filename' => '用户表'.date("Y-m-d"),
         'alertMsg' => '确定要导出CSV格式文件?',
         'options' => [
              'title'=>'',
          ],
          'mime' => 'application/pdf',
          'config' => [
                'colDelimiter' => ",",
                'rowDelimiter' => "\r\n",
          ],
     ],
            // GridView::HTML => [],
            // GridView::PDF => [],

]

报错如下:

为什么点击右上角的导出下拉框,却没反应呢。
求答疑解惑!!!

有没有大神了解这个,求指教

(看完/读完)这篇文章有何感想! 钱柜娱乐777的分享…

钱柜777老虎机thinkPHP 自定义 model.class.php 中,这个属性有什么用?

( 钱柜777老虎机 )

class ★Model extends Model
{

    protected $tableName = 'abc';

}

$tableName 这个属性有什么用?
不是 ★号 部分就是表名吗?
为什么再弄一个 protected $tableName = ‘◆’;
要是◆ 和★一样,不就重复了,就多次一举了,

要是不一样,那创建 $mydb = D(“★”) 的时候,不就找不到文件了?

模型的名称可以和数据表名称不同,这样更加灵活,例如 数据表是pre_q_a,模型名称可以是 QaModel,
protected $tableName = 'q_a'

这个是由于php和sql数据库命名的问题:
php类采用驼峰法命名,如UserGroup;方法采用驼峰法命名,如public function getUserInfo(){};php函数的命名使用小写字母和下划线的方式,如function get_string_length(){};
mysql数据库表和字段基本上采用小写字母和下划线的方式,如表名user_group,字段名create_time.

(看完/读完)这篇文章有何感想! 钱柜777老虎机的分享…

钱柜777老虎机Laravel自带的auth验证怎么实现自主的密码修改

( 钱柜777老虎机 )

问题:laravel自带的auth验证只有密码找回功能(发送邮件,重置密码),而现在我想要的是自主修改密码功能,就是怎么实现用户输入旧密码改成新密码,其实这个逻辑我也知道,我只在一步卡住了:就是auth自带的密码加密是怎么验证的呢?我用:

bcrypt(input('old_password')) == old_password

可是一直false,怎么办?求解。

你的问题:就是auth自带的密码加密是怎么验证的呢?
答案:\Hash::check(\Request::input('old_password'), $old_password)
(其中$old_password是从数据库取出来的旧的哈希密码)
相关文档链接:Hashing

相同的明文密码通过bcrypt函数生成的哈希密码是不同的,因为每次使用的都是不同的salt

(看完/读完)这篇文章有何感想! 钱柜777老虎机的分享…

钱柜777老虎机大量图片存储方案选择

( 钱柜777老虎机 )

项目现在的架构是 LNMP ,主要的功能是用户上传大图( 5-30M )到服务器,服务器端再将大图切成几百个小图。前端访问后再加载小图。
没有使用 CDN 和 OSS 的经验,只了解类似同行业的公司都用的七牛的图片存储,前几天由于项目里面的某个作品微信转发很多,访问量比较大(当天 10W PV ),造成服务器带宽出现瓶颈,现在临时使用了阿里云的 cdn 加速静态图片,由于前期规划的时候没有考虑用独立的存储来处理图片,现在想把图片这块分离出来。

目前有 3 个瓶颈:
1 、 CPU :大图切成小图的时候, CPU 的使用率很高,如果同时超过 20 个用户在切图, CPU 基本跑到 80%了, CPU 目前是阿里云的 8 核心的,内存是 16G ,内存够用。按照我们目前的用户量,同时在线切图的用户不会超过 20 个。
2 、存储:由于用户可以无限制上传大图,图片存储在单机上也是问题,目前是一块 1T 的普通硬盘
3 、带宽:目前是固定带宽 10M ,流量正常的情况下足够,如果出现作品被用户发到微信朋友圈出现大量转发,高并发的情况下带宽就不行了。

解决方案:
1 、使用七牛的图片存储,用七牛唯一存在的麻烦的地方是图片的同步,用户上传的图片可能会出现修改和删除,需要即时同步到七牛,不知道会不会出现同步比较慢的情况还有一些其他未知的问题。

2 、使用阿里的 OSS+CDN ,由于服务器现在也是阿里的产品,图片同步可以通过内网,速度应该会好些吧。但是看到一些资料上说阿里的费用相对七牛会贵很多,没有对比过,不清楚差距有多大。

这两个方案哪个合理,还有什么更好的方案么?谢谢!

其实七牛会比较好,你担心的问题是可以解决的,很多时候问题的产生是因为设计者钻牛角尖。比如修改,图片要修改吗?删掉建新的就是了,名字都变了自然不会被缓存影响。
而你说的切图问题…为什么要在线切图呢?自己切好不行吗?一定要切原图吗?切30M的原图和切600K的缩略图占用的资源肯定不一样,难道30M的原图你是放大到100%的比例给用户切?

阿里的费用应该比七牛的便宜吧 阿里百川之前有免费100GB的存储空间使用

用户直接传到七牛 具体看官方文档 有demo

(看完/读完)这篇文章有何感想! 钱柜777老虎机的分享…

钱柜777老虎机laravel 框架 数组和对象有点疑惑

( 钱柜777老虎机 )

都知道用到foreach($data as $val)循环的时候,$data可以是是数组、对象,
但是不解的是明明first(),get()方法获得的结果都是对象,first()获得的对象如$data,可以用$data[‘name’]
但是get()获得的$data不可以,大家懂我的意思吗?,帮我解惑吧,谢谢了

假设没有关联查询什么的,并且结果都转换成数组形式了(好表达一点~)。
first()获得的数据是一个一维数组,例如:

$data=[
    'name' => 'zhangsan',
    'age' => 20,
    ...
];

这样的话使用$data['name']是正确输出的。

get()获得的数据是一个二维数组(即使只有1条数据),例如:

$data=[
    0 => [
        'name' => 'zhangsan',
        'age' => 20
        ...
    ],
    ...
];

$data里可能有多条数组,所以要输出name的话要$data[0]['name'],$data[1]['name']

foreach的内容可以是对象数组,数组的每个元素都是对象

第一:首先说说foreach:

foreach ($items as $item){
    //这里面的$items狭义上是一个数组,往外扩可以理解为一个多元素的集合;
    //楼上说的对象数组就可以理解了
    }

第二:first()get():

first()

返回的一个Model对象,并且这个对象实现了ArrayAccess接口,所以你可以使用$data[‘name’]这种方式获取数据

get()

返回的是一个 Model Collection,这里面的Collection就是集合的意思,你可以简单理解为对象数组,里面的每一个元素都是一个Model对象。在使用get()的情况下,哪怕是查询条件返回一条记录,也是一个包含一个元素的Collection,而在一个Collection(集合)对象中使用$data['name']必然会报错。

以上,学习laravel可以关注我的小站:https://laravist.com

楼上的各位大大已经解释的很清楚了,实在不能理解,你就理解为就像一维数组和多维数组的关系,说不定$data[0]['name']就可以访问了,可以好好看看PHP的ArrayAccess

laravel orm获取到的是对象集合.laravel文档里有关于集合的介绍和使用.

很简单,就因为这一行

class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate, Jsonable, JsonSerializable

foreach能用的是数组(array)和集合(collection)

如果不确定 每次在查询之后 添加 $query->toArray();就行了 就全部都是数组形式的了

(看完/读完)这篇文章有何感想! 钱柜777老虎机的分享…

钱柜娱乐777PHP怎么往间隔数组中添加数据

( 钱柜娱乐777 )

现有一数组如下:
[site003] => Array

    (
        [0] => Array
            (
                [key] => site003
                [riqi] => 2016-06-14
                [shijian] => 00
                [num] => 1
            )

        [1] => Array
            (
                [key] => site003
                [riqi] => 2016-06-14
                [shijian] => 04
                [num] => 2
            )

        [2] => Array
            (
                [key] => site003
                [riqi] => 2016-06-14
                [shijian] => 07
                [num] => 6
            )

    )

由于时间shijian字段00到-04点中间没有01,02,03时间点,所以想对01,02,03时间点组装数据的num字段补充为0,
后者04-07中间时间点05,06也对num的时间点补充数组为0
麻烦各路高手指点迷津!小弟在此谢谢!

首先你需要确定你是否需要插入相关数据以及你插入的数据的方案,如果你不能确定中间缺失的shijian字段的始末的话,需要遍历这个数组去确定,然后将没有的字段加进去,然后用usort进行排序。
也可以在插入的时候决定你插入的位置,但是由于你插入会影响你数组的下标,所以还是上面第一个方法比较方便。
参考代码

<?php


$max_shijian = date("H");

// 填充主方法
$fill_date = function ($input,$key) use($max_shijian) {
  $hours = range(0,$max_shijian);
  $riqi = null;
  // 筛选出不存在的时间
  // http://php.net/manual/zh/function.array-map.php
  array_map(function(&$item,$key) use(&$hours,&$riqi){
    empty($riqi) and $riqi = $item['riqi'];
    unset($hours[intval($item['shijian'])]);
  },$input);
  // 填充不存在的时间
  foreach ($hours as $hour) {
    $input[] =   [
        'key' => $key,
        'riqi'  => $riqi,
        'shijian' => getFullHour($hour),
        'num' => 0,
      ];
  }
  // 排序
  // http://php.net/manual/zh/function.usort.php
  usort($input,function($a,$b){
    return (intval($a['shijian'])<intval($b['shijian']))?-1:1;
  });
  return $input;
};

// 将小时补全为2位
function getFullHour($hour){
  return (strlen($hour)==1)?("0".$hour):$hour;
}

$json = '{"site001":[{"key":"site001","riqi":"2016-06-14","shijian":"00","num":"10"},{"key":"site001","riqi":"2016-06-14","shijian":"01","num":"4"},{"key":"site001","riqi":"2016-06-14","shijian":"02","num":"1"},{"key":"site001","riqi":"2016-06-14","shijian":"03","num":"3"},{"key":"site001","riqi":"2016-06-14","shijian":"04","num":"2"},{"key":"site001","riqi":"2016-06-14","shijian":"05","num":"1"},{"key":"site001","riqi":"2016-06-14","shijian":"07","num":"9"},{"key":"site001","riqi":"2016-06-14","shijian":"08","num":"2"}],"site002":[{"key":"site002","riqi":"2016-06-14","shijian":"00","num":"3"},{"key":"site002","riqi":"2016-06-14","shijian":"01","num":"13"},{"key":"site002","riqi":"2016-06-14","shijian":"02","num":"8"},{"key":"site002","riqi":"2016-06-14","shijian":"03","num":"23"},{"key":"site002","riqi":"2016-06-14","shijian":"04","num":"14"},{"key":"site002","riqi":"2016-06-14","shijian":"05","num":"6"},{"key":"site002","riqi":"2016-06-14","shijian":"06","num":"4"},{"key":"site002","riqi":"2016-06-14","shijian":"07","num":"7"},{"key":"site002","riqi":"2016-06-14","shijian":"08","num":"18"},{"key":"site002","riqi":"2016-06-14","shijian":"09","num":"6"}],"site003":[{"key":"site003","riqi":"2016-06-14","shijian":"00","num":"1"},{"key":"site003","riqi":"2016-06-14","shijian":"04","num":"2"},{"key":"site003","riqi":"2016-06-14","shijian":"07","num":"6"}],"site004":[{"key":"site004","riqi":"2016-06-14","shijian":"00","num":"3"},{"key":"site004","riqi":"2016-06-14","shijian":"02","num":"1"},{"key":"site004","riqi":"2016-06-14","shijian":"03","num":"4"},{"key":"site004","riqi":"2016-06-14","shijian":"04","num":"7"},{"key":"site004","riqi":"2016-06-14","shijian":"05","num":"4"},{"key":"site004","riqi":"2016-06-14","shijian":"06","num":"2"}]}';
$data = json_decode($json,true);

foreach ($data as $key => $value) {
  $data[$key] = call_user_func($fill_date,$value,$key);
}
print_r($data);


?>

array_map
usort

我说说我理解的思路,首先要先取你这个数组中shijian字段的最大值,然后根据最大值循环填充。

你试下以下方法,
主要采用的思路是:
1.先从给定的数组中过滤出最大的shijian值,同时存储已经存在的时间值,
2.添加小于最大shijian值且不存在数组中的数据

    $srcArray = array
    (array(
                'key'  => 'site003',
                'riqi'=> '2016-06-14',
                'shijian' => 00,
                'num' => 1,
            )
                 ,array
            (
                'key' => 'site003',
                'riqi' => '2016-06-14',
                'shijian' => 02,
                'num'=> 2
            )
     ,array
            (
                'key' => 'site003',
                'riqi' => '2016-06-14',
                'shijian' => 04,
                'num'=> 2
            )
    );

    $data=array(-1);
    foreach($srcArray as $key=>$innerArray){
        array_push($data,$innerArray['shijian']);
        if($innerArray['shijian'] > $data[0]){
            $data[0] = intval($innerArray['shijian']);
        }
    }
    print_r($data);
    for($index = 0;$index<$data[0];$index++){
        $exits= !array_search(intval($index),$data);
        if($exits){
            $temp = array(
                'key'  => 'site003',
                'riqi'=> '2016-06-14',
                'shijian' => $index<10?'0'.$index:$index,
                'num' => 0,
            );
            array_push($srcArray,$temp);
        }
    }
    print_r($srcArray);

(看完/读完)这篇文章有何感想! 钱柜娱乐777的分享…

钱柜777老虎机关于laravel中路由的问题

( 钱柜777老虎机 )

在路由中使用
Route::controller(‘login’, ‘LoginController’);
这样不走构造方法了 请问有什么解决方案

你指的 logincontroller的构造方法么? 如果是,那是你写错方法名了吧,实例化一个类调用构造方法 是语言的特性

你的不走构造方法的描述是错误的, 肯能是走构造方法
测试方法:

  • 在构造方法中输入 \Log::debug('some string') , 你可以在日志中看到这个输出

  • 在构造方法中输出异常也会被框架捕捉到

构造方法不会输出的是

  • return, 也就是你在构造方法中使用return 是不输出任何东西的

调用类的静态函数时不会自动调用类的构造函数。 只有 new对象才会自动调用

(看完/读完)这篇文章有何感想! 钱柜777老虎机的分享…

钱柜777打开phpmyadmin报错Error during session start

( 钱柜777 )

打开phpmyadmin 的时候,报错lease check your PHP and/or webserver log file and configure your PHP instal。。请问这是为什么。看了网上的解释是说需要加session权限,但是我打开php.ini里面;
; The path can be defined as:
;
; session.save_path = “N;/path”
;

不知道需要在哪里修改,求指导!

降低phpmyadmin版本试试

(看完/读完)这篇文章有何感想! 钱柜777的分享…

钱柜777学 thinkPHP 用 D方法,为什么调用 Common/Model 不是 Home/Model ? 哪里设置的?

( 钱柜777 )

学 thinkPHP 用 D方法,为什么调用 Common/Model 不是 Home/Model ?

外部调用的function :

namespace Home\Controller;
use Think\Controller;

public function model_D()
{
    $stmt=D('shop');
    $stmt->say();
}

俩类文件:

被调用的是这个:
C:\AppServ\www\yb1\yangbins\Common\Model\shopModel.class.php
<?php
namespace Common\Model;
use Think\Model;

class shopModel extends Model
{
    function say()
    {
        echo 'i am in namespace Common\Model <br>()';
    }
}
为什么不是这个?
C:\AppServ\www\yb1\yangbins\Home\Model\shopModel.class.php
<?php
namespace Home\Model;
use Think\Model;

class shopModel extends Model
{
    function say()
    {
        echo 'i am in namespace Home\Model <br>';
    }
}

用D方法,并不会按命名空间指定的路径去找class。
D方法是按优先级加载最先找到的Class,而且顺序就是从comon开始。

有两个方法解决你的问题。

$model = D("Home/Shop");

使用命令空间

use Home\Model\shopModel;
$model = new shopModel();

外部调用不应该指定 use Home\Model\shop

(看完/读完)这篇文章有何感想! 钱柜777的分享…

钱柜777模拟数据,如何制造大量IP地址并且带有区域?

( 钱柜777 )

我要模拟大量数据用作测试,
格式如下,“广东省广州市,180.88.42.155”
如果ip随机生成的话,前面的省市怎么办?

第一步,关注PHP技术大全(微信公众号:phpgod);
第二步,研究百度的这个API,可以帮到你,http://lbsyun.baidu.com/index.php?title=webapi/ip-api
第三步,请事先申请百度API的调用权限,然后拿到ak等信息,拿到之后就可以通过调用百度的ip-api获取信息了;

可能会遇到的问题:
1.ip随机生成的话,可能会生成很多国外的地址;
2.每个ip地址都调用一次百度的API速度会很慢,可以尝试使用curl_multi_exec执行多个并发请求,尽量多的使用网络,处理完成之后放到一个格式化的文件当中,比如用英文逗号分隔的文件行作一行信息,然后新写一个脚本批量把指定信息插入数据库;
3.ip-api的调用限制,请根据百度的这个api的调用限制说明进行操作。“

地点也随机不行吗?没有必要真实一一对应真实吧。

(看完/读完)这篇文章有何感想! 钱柜777的分享…

钱柜777为什么jQuery的$.get()收不到php的返回信息?

( 钱柜777 )

HTML部分

    <p>姓名<input type="text" name="name"></p>
    <p>性别<input type="radio" name="sex" value="m">男<input type="radio" name="sex" value="f">女</p>
    <p>手机号码<input type="text" name="mobile"></p>
    <button id="sub">提交</button>
    <script type="text/javascript">
        $("#sub").click(function() {
            var name = $("input[name='name']").val();
            var sex = $("input[name='sex']:checked").attr('value');
            var mobile = $("input[name='mobile']").val();
            if (name&&sex&&mobile) {
                alert(name+sex+mobile);
                $.get('user_info_save.php',{name: name,sex: sex,mobile: mobile},function(data){console.log(data);});
            }
            else{alert("信息未填写完整");}
        });
    </script>

服务器的php

$db=mysqli_connect($host,$user,$password,$database);
if($db){
        $db->query("set names utf8");//设置UTF-8编码(JSON的唯一编码)
}else{
        echo 'DATABASE_CONNECTION_DIE';//数据库连接失败
        exit;
}
$name = $_REQUEST['name'];
$sex = $_REQUEST['sex'];
$mobile = $_REQUEST['mobile'];
$sql = "insert `customer`(`name`,`sex`,`mobile`) values('".$name."','".$sex."','".$mobile."')";
$result=$db->query($sql);
echo "ok";

结果是数据库已经录入数据了,但是function似乎无效了,到底为什么呢?

这个问题已被关闭,原因:无法获得确切结果的问题

if 里面 && 是不是要有空格 ?
这样呢?
name && sex && mobile

还有,$.get有四个参数,一般最后的那个参数设置为json
你php文件中相应也要改
echo json_encode(array(‘status’ => 1, ‘info’ => ‘ok’));

打开控制台看看返回的什么结果

$.get('user_info_save.php',{name: name,sex: sex,mobile: mobile},function(data){console.log(data);},'JSON')

申明返回的数据类型

先看看后台有没有返回数据,然后再看看PHP后台返回的数据是不是json数据,然后百度下$.get的用法,然后看看有没有报什么提示信息,一步一步的检测,或者你直接调试代码,监测看看是哪里的问题,单纯的看你发的代码,很难找准问题的所在,建议使用Phpstorm调试下看看

(看完/读完)这篇文章有何感想! 钱柜777的分享…

钱柜777老虎机laravel5.0 清除cookie后,为啥还能取到值呢?

( 钱柜777老虎机 )

登录成功后,cookie中保留了一些值,退出后{Cookie::queue($val, null, -1);}但是还是能获取cookie中的值。

// 移除 Cookie
Cookie::forget('key');

用这个试一试

(看完/读完)这篇文章有何感想! 钱柜777老虎机的分享…

钱柜777用 PHP 的 file_get_contents 函数出现乱码怎么破

( 钱柜777 )

$url = "http://i.ifeng.com/";
$str = file_get_contents($url);

var_dump($str);

结果乱码了,怎么破?求大神帮助,万分感激!

在线等

乱码的原因主要就是两个,一个是GZIP压缩的问题,一个是编码的问题。对PHP来说,使用file_get_contents来取一个网页内容并不是非常合适,我推荐使用curl来做。它的稳定性是无与伦比的,不管是http还是https都可以解决。

设置一下编码就行了。你试试看

header("Content-Type:text/html;charset=utf-8");

$url = "http://i.ifeng.com/";
$str = file_get_contents($url);

var_dump($str);

找到方法了

file_get_contents("compress.zlib://".$url);

(看完/读完)这篇文章有何感想! 钱柜777的分享…

钱柜娱乐777这条sql在thinkphp里面用join方法怎么写?

( 钱柜娱乐777 )

SELECT a.,count() as num FROM sys_article a join sys_comment b on a.article_id=b.article_id where a.article_id=20

$Article->field('sys.article.article_id, count(*) as count')->join('__ARTICLE__ ON __COMMENT__.article_id = __ARTICLE__.article_id')->where('sys.article.article_id = 20')->select();

(看完/读完)这篇文章有何感想! 钱柜娱乐777的分享…

钱柜娱乐777tp框架中的模糊查询怎么用

( 钱柜娱乐777 )

$con=$_POST['con'];
        
        $User = M("Activity"); // 实例化User对象
        
        $User->where("LIKE")->select(); 

where()中间应该怎么写查询的词是$con 求大神解答

$con=$_POST['con'];
        
$User = M("Activity"); // 实例化User对象

$data['con'] = array('like', "%$con%");
        
$User->where($data)->select(); 

这个问题比较初级,我建议你还是看一下tp的模型关于查询的文档。等能力达到了一定程度再看看tp模型的代码实现是怎样。百度一下thinkphp官方文档查看关于模型的查询一节即可。

楼主兄弟刚看到邀请不好意思,一楼兄弟回答完美。解决了就好,相互学习

(看完/读完)这篇文章有何感想! 钱柜娱乐777的分享…

钱柜777PHP MVC中RBAC的最佳实现方案的比较

( 钱柜777 )

个人认为的PHP MVC框架中实现RBAC的原理 顺序:

数据表

1.tb_user(id,uname,roleid)
2.tb_role(roleid,rolename)
3.tb_module(moduleid,moudulename,mvc_url)
4.tb_access(accessid,roleid,mouduleid)

实现原理

1. 根据$uid 得到 $roleid。
2. 根据当前MVC参数 __CLASS__ __METHOD__ 拼接成路由网址 $mvc_url
3. 根据 $mvc_url 去表 tb_module中查询,得到 $moduleid
4. 根据 $roleid,$mouduleid 查询表 tb_access中是否有此条记录
5. 如果 有,可以访问;如果没有,禁止访问该动作 action 方法

缺点
假如有一个模块, class Article,方法function lists();。
如果当前用户只有查看权限却没有修改、添加、删除权限,那么lists页面中关于 添加 修改 删除 按钮如何判断?

另外一个方法

数据表

1.tb_user(userid,username,roleid)
2.tb_role(roleid,rolename)
3.tb_module(moduleid,moudulename,link,upid)
4.tb_permission(roleid,title,mouduleid,permission) 

其中 permission 的值有这几种

{1:查看,2:添加,4:修改,8:删除,16:...}

RBAC实现流程
1.通过用户的 $userid 得到 $roleid
2.通过用户当前的网址去查询tb_module表中对应的link,得到 $moduleid。如果该module有父模块。那么获得他的父模块。比如当前模块MVC网址是 article/add,那么他的真正moduleid是

select moduleid from tb_module 
where id=(
    select upid from tb_module where link='article/add'
)

3.通过 $roleid 和 $moduleid 去查询 tb_permission,得到记录总和

select sum(permission) as permission from tb_permission
where roleid=$roleid and moduleid=$moduleid

4.如果当前访问 article/lst

switch($permission){
    case 1: //只有访问权限
        break;

    case 2://访问、添加权限
        break;

    case 4://访问、添加、修改权限
        break;

    case 8://访问、添加、修改、删除权限
        break;

    case 16:
        break;
}

对于第二种方法,说下看法,类似于电脑文件的 0777这种权限。

(看完/读完)这篇文章有何感想! 钱柜777的分享…

钱柜777老虎机MYSQL和PDO_MYSQL 那个更好速度更

( 钱柜777老虎机 )

RT
MYSQL和PDO_MYSQL 那个更好速度更

PDO 是官方推荐的,更为通用的数据库访问方式,如果你没有特殊需求,那么你最好学习和使用 PDO.
但如果你需要使用 MySQL 所特有的高级功能,那么你可能需要尝试一下 MySQLi, 因为 PDO 为了能够同时在多种数据库上使用,不会包含那些 MySQL 独有的功能。

MySQLi 是 MySQL 的增强接口,同时提供面向过程和面向对象接口,也是目前推荐的 MySQL 驱动,旧的C风格 MySQL 接口将会在今后被默认关闭。

http://blog.segmentfault.com/jysperm/1190000000403307

速度没有比过。

但是哪个更好来说,当然是PDO更好。mysql那套接口根本就没有预编译的功能,防止注入的话最好还是用PDO(或者mysqli)。

Mysqli 或 PDO 都可以,不要再使用 Mysql 驱动 了

(看完/读完)这篇文章有何感想! 钱柜777老虎机的分享…

钱柜777怎么捕获passbook 注册pass时候的 push token

( 钱柜777 )

服务器环境 nginx php mysql
iphone 7.0 /8.1
push token

  if($_SERVER['REQUEST_METHOD']=="POST"){

//            判断是否注册
//            MailModel::getFirst()
            $payload = json_decode($_POST);

//            $payload->pushToken;

            $data['pushtoken']="";
            $data['Devicelibraryidentifier']= $urlsegment[5];
            $data['Authenticationtoken']=$_SERVER['HTTP_AUTHORIZATION'];
            $data['serialnumber']=$urlsegment[8];
            $data['typeId']=$urlsegment[7];
            $data['Update_tag']="";
            $result=DevicesModel::create($data);
            if($result){
                header("HTTP/1.0 201");
            }
            MailModel::send('945627077@qq.com', 'passupdate', '注册pass'. json_decode($data));

            DevicesModel::create($data);
            return;
        }


(看完/读完)这篇文章有何感想! 钱柜777的分享…

钱柜777老虎机php读取.svg图片的SVG里d=”XXXXX”,就是XXXXX

( 钱柜777老虎机 )

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 width="64px" height="64px" viewBox="0 0 64 64" enable-background="new 0 0 64 64" xml:space="preserve">
<g id="CIRCLE_1_" enable-background="new    ">
<g id="CIRCLE">
<g>
<path d="M32,0C14.327,0,0,14.327,0,32s14.327,32,32,32s32-14.327,32-32S49.673,0,32,0z M32,58C17.641,58,6,46.359,6,32
            C6,17.64,17.641,6,32,6c14.359,0,26,11.64,26,26C58,46.359,46.359,58,32,58z"/>
</g>
</g>

$content = include "xxx.svg";
preg_match("/<path\s(.*)d=\"(.*)\"/is", $content, $arr);
var_dump($arr[2]);exit;

以下是具体的:

$content = '<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 width="64px" height="64px" viewBox="0 0 64 64" enable-background="new 0 0 64 64" xml:space="preserve">
<g id="CIRCLE_1_" enable-background="new    ">
<g id="CIRCLE">
<g>
<path d="M32,0C14.327,0,0,14.327,0,32s14.327,32,32,32s32-14.327,32-32S49.673,0,32,0z M32,58C17.641,58,6,46.359,6,32
            C6,17.64,17.641,6,32,6c14.359,0,26,11.64,26,26C58,46.359,46.359,58,32,58z"/>
</g>
</g>';
preg_match("/<path\s(.*)d=\"(.*)\"/is", $content, $arr);
var_dump($arr[2]);
exit;

输出结果:
string ‘M32,0C14.327,0,0,14.327,0,32s14.327,32,32,32s32-14.327,32-32S49.673,0,32,0z M32,58C17.641,58,6,46.359,6,32

        C6,17.64,17.641,6,32,6c14.359,0,26,11.64,26,26C58,46.359,46.359,58,32,58z' (length=193)

(看完/读完)这篇文章有何感想! 钱柜777老虎机的分享…