一、分页修改
1 、需要修改的php
/thinkphp/library/think/paginator/driver/Bootstrap.php
2、需要修改的样式
二、数据库读取
1、php读取
$list = Db::name(‘user’)->where(‘status’,1)->paginate(10); (如果分页的话不用加select 否则会出错)
$this->assign(‘list’, $list);
return $this->fetch();
2、模板输出
{volist name=“list” id=“vo”}
{KaTeX parse error: Expected 'EOF', got '}' at position 6: vo.id}̲:{vo.name}
{/volist}
三、URL 传值
html 传值
1,'producttype'=>2])})}">查看
php 获取
$id = input(‘id’);
四、划横线
五、字符串转数组
s
t
r
=
"
H
e
l
l
o
w
o
r
l
d
.
I
l
o
v
e
S
h
a
n
g
h
a
i
!
"
;
p
r
i
n
t
r
(
e
x
p
l
o
d
e
(
"
"
,
str = "Hello world. I love Shanghai!"; print_r (explode(" ",
str="Helloworld.IloveShanghai!";printr(explode("",str));
implode(’,’,
i
m
a
g
e
U
r
l
)
数
组
转
字
符
串
a
r
r
a
y
d
i
f
f
(
imageUrl) 数组转字符串 array_diff(
imageUrl)数组转字符串arraydiff(arr,$arr2)差集比较
1、参数多的在前面 2、只执行数数组
六 、获取多条件
where(‘id’,‘in’,‘1,5,8’);
七、html 赋值变量
KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲data p").html("…name+""); html
$("#da ").text(“asd”);给标签赋值
$(“img”).attr(“width”,“180”); 指定参数赋值
attr 一定要使用 双引号
ticketid = $(this).attr(“ticketid”);
八、复选框提交
1
2
九、id 触发函数
$("#conserve").click(function(){
console.log(‘123’);
});
十、查找的结果
select 查找后为数组
find 查找后不为数组
十一、ajax 成功后跳转
$.ajax({
url: “{:url(‘index/index’)}”,
data:{‘image’:imageUrl},
type:‘post’,
success: function(data){
location.href = “{:url(‘index.php/index/’)}”;
},
error:function(data) {
location.href = “{:url(‘index.php/index/’)}”;
}
});
十三、 二维数组转换成合并成一个数组(可以存入数据库中的类型)
foreach ($tourer as $key => KaTeX parse error: Expected '}', got 'EOF' at end of input: … foreach (value as
k
=
>
k =>
k=>v){
t
o
u
r
e
r
s
[
tourers[
tourers[k][$key]= KaTeX parse error: Expected 'EOF', got '}' at position 16: v; }̲ } arra…promotionid,‘id’)
两个二维数组 合并成一个二维数组
1、
d
a
t
a
=
a
r
r
a
y
m
e
r
g
e
(
data =array_merge(
data=arraymerge(a,
b
)
;
2
、
f
o
r
e
a
c
h
(
b); 2、 foreach (
b);2、foreach(ticket as $key => KaTeX parse error: Expected '}', got 'EOF' at end of input: … foreach (param[‘id’] as $k => $v){
t
i
c
k
e
t
[
ticket[
ticket[key][‘num’] =
p
a
r
a
m
[
′
i
d
′
]
[
param['id'][
param[′id′][k][‘num’];
}
}
十四、日期控件
onfocus="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})" class="input-text radius size-M" style="width:150px"/>
十五、数据库别名设置
$where = " a.id=1 ";
$data['spot_ticket'] = Db::name('user a')
->join('data c ','a.id = c.ticketid')
->field('a.number a.cnumber,c.number ,a.*,c.*')
->where($where)
->select();
十六、二维转一维数组
//查询同一类的id
l
i
s
t
=
D
(
′
S
o
r
t
′
)
−
>
w
h
e
r
e
(
a
r
r
a
y
(
′
t
y
p
e
′
=
>
list = D('Sort')->where(array('type'=>
list=D(′Sort′)−>where(array(′type′=>this->type))->field(‘tableid’)->select();
//二维转一维数组
a
r
r
=
i
a
r
r
a
y
c
o
l
u
m
n
(
arr = i_array_column(
arr=iarraycolumn(list,‘tableid’);
return $arr;
十七、批量更新
u
p
d
a
t
e
D
a
t
a
=
s
e
l
f
:
:
a
l
l
o
w
F
i
e
l
d
(
t
r
u
e
)
−
>
s
a
v
e
A
l
l
(
updateData = self::allowField(true)->saveAll(
updateData=self::allowField(true)−>saveAll(updateData);
use app\index\model\SpotTicketPrice as SpotTicketPriceModel; //先调用
n
u
m
b
e
r
s
s
=
(
n
e
w
S
p
o
t
T
i
c
k
e
t
P
r
i
c
e
M
o
d
e
l
(
)
)
−
>
s
a
v
e
A
l
l
(
numberss = (new SpotTicketPriceModel())->saveAll(
numberss=(newSpotTicketPriceModel())−>saveAll(numbers); 需先创建一个model然后更新
批量查找
u
s
e
r
=
s
e
l
f
:
:
a
l
l
(
user = self::all(
user=self::all(arr);
u
s
e
r
=
s
e
l
f
:
:
g
e
t
(
user = self::get(
user=self::get(arr)->field(‘id’)->select();
或
->where(‘id’,‘in’,‘1,2,3’)
十八、获取数据库键名
a
r
r
=
a
r
r
a
y
k
e
y
s
(
arr = array_keys(
arr=arraykeys(data);
十九、字符串拼接
$txt1 . " ," . $txt2
二十、Indirect modification of overloaded element of think\ tp分页问题
先转化
$datas = $data->toArray();
二十一、转换成时间戳
strtotime()
二十二 、join in 同时使用
w
h
e
r
e
=
"
a
i
n
(
b
)
"
;
j
o
i
n
(
′
a
′
,
where = " a in(b)"; join ('a',
where="ain(b)";join(′a′,where)
二十三 、更新时需要条件
r
e
s
=
D
b
:
:
n
a
m
e
(
′
u
s
e
r
′
)
−
>
w
h
e
r
e
(
′
i
d
′
,
1
)
−
>
u
p
d
a
t
e
(
res = Db::name('user')->where('id',1)->update(
res=Db::name(′user′)−>where(′id′,1)−>update(where); //更新时需要条件
$sql = Db::name(‘user’)->where(‘id’,1)->buildsql(); //返回sql 语句
二十四、字符串家变量 用大括号处理
“限领:{$value[‘limitnumber’]}”;
二十五 、秒数转换成天数
function time2string($second){
d
a
y
=
f
l
o
o
r
(
day = floor(
day=floor(second/(360024));
$second = $second%(360024);//除去整天之后剩余的时间
h
o
u
r
=
f
l
o
o
r
(
hour = floor(
hour=floor(second/3600);
$second = $second%3600;//除去整小时之后剩余的时间
m
i
n
u
t
e
=
f
l
o
o
r
(
minute = floor(
minute=floor(second/60);
$second = $second%60;//除去整分钟之后剩余的时间
//返回字符串
return
d
a
y
.
′
天
′
.
day.'天'.
day.′天′.hour.‘小时’.
m
i
n
u
t
e
.
′
分
′
.
minute.'分'.
minute.′分′.second.‘秒’;
}
二十六
$request->domain() 获取当前域名
h
t
t
p
=
′
h
t
t
p
:
/
/
′
.
http = 'http://'.
http=′http://′._SERVER[‘HTTP_HOST’];
二十七 、
多维数组 SORT_REGULAR 去掉重复的值
array_unique(
B
u
n
d
a
s
s
o
c
O
b
j
−
>
p
r
o
d
i
d
(
BundassocObj->prodid(
BundassocObj−>prodid(productid),SORT_REGULAR);
二十八 、二维转一维 然后转成字符串
d
e
l
d
a
t
a
=
i
m
p
l
o
d
e
(
′
,
′
,
a
r
r
a
y
c
o
l
u
m
n
(
deldata = implode(',',array_column(
deldata=implode(′,′,arraycolumn(deldata,‘id’));
二十九 、去掉字符串最后一个符号
rtrim($arr_str, “,”) php
s=s.substring(0,s.Length-1); jq
三十、layer子弹窗返回给父值
var v = ‘选择区域’;
parent.KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲sel").append(v)…(’#mcsdaa’).text(data[‘0’][‘prodname’]);
parent.layui.form.render(‘select’);
三十一、url 传值
window.location.href=’{:url(“Index/detail”)}?id=’+ iD ;//解析成功
三十二、jq 循环取值
$(“input[name=‘productid[]’]”).each(
function(){
prodid += $(this).val()+’,’;
}
);
三十三、同时获取两张表的数据联表查询
public function beloncar()
{
return $this->belongsTo('Car','carid','id');
}
//一定要有关联的id值
public function getcarsulist($supId)
{
return self::where('trashflag',1)
->with(['beloncar'=>function($query) use ($supId){
$query->field('id')->where('supplierid',$supId);
}])
->paginate();
}
关联两张表 relation with belongsTo 什么的 分别测试
return self::relation(['belonType'=>function($query){
$query->field('id,kindname');
}])
->relation(['getPrice'=>function($query){
$query->field('id,min(adultprice) minprice,max(adultprice) maxprice');
}])
->where($where)->paginate();
三十四 php 传变量给html
1、先将数据转成json 格式
d
a
t
a
=
j
s
o
n
e
n
c
o
d
e
(
data = json_encode(
data=jsonencode(data,true);
html
console.log($data)
三十五、按搜索条件分页
paginate(10,false,[‘query’=>request()->param()]);
三十六、从数据库获取然后插入数据库中需要重新编码
foreach 处理
三十七、获取最大最小值
field(‘min(adultprice) minprice,max(adultprice) maxprice’)
三十八 、获取器的处理
getData();
三十九、成功失败跳转页面
if($result){
//设置成功后跳转页面的地址,默认的返回页面是$_SERVER['HTTP_REFERER']
$this->success('新增成功', 'User/list');
} else {
//错误页面的默认跳转页面是返回前一页,通常不需要设置
$this->error('新增失败');
}
四十 、当时用select 时 无法使用toArray()
1、改为paginate
2、打开 database.php 增加或修改参数
‘resultset_type’ => ‘\think\Collection’,
四十一、html
{notempty name="ticket_type"}
当为空时 不执行
{/notempty}
判断是否为空
<input name="title" value="{$door_edit.title??''}">'
{volist name="ticket_type" id="vo" key="key"}
<tr>
<td>1</td>
<td>新增</td>
<td>测试</td>
<td>2018/01/30</td>
<td>路人甲</td>
</tr>
{/volist}
四十二、搜索条件
php
$id=\request()->param('id','');
$where['trashflag'] = ['eq',1];
if ($id){
$where['id']=['like',"%$id%"];
}
html
$('#search').on('click',function () {
let id=$('input[name="id"]').val()
,url="{:url('agreement/transfer')}";
window.location.href=url+'?id='+id;
});
四十三、关联查询
$list = (new User())
->where($where)
->whereIn('id',function ($query) use($supplierId,$wh){
$query->table('access')->where($wh)->whereIn('id',function ($query) use($supplierId){
$query->table('sline_auth_group')->whereIn('supplierid',$supplierId)->where('type','eq',1)->field('id');
})->field('uid');
})
->relation(['rule'])
->order('createtime desc')
->paginate();
四十五、join 继续查询whereTime 需要空格
$data = Db::name('insurance i')
->field('i.id')
->join('insurance d','i.insuranceid=d.id')
->whereTime(' d.expirytime','=>',$date)
->select();
四十六、数据库为数组
find_in_set 使用这个来查找
area = '440000,441600';(数据库内容)
cityId = '440000';
whereOr("find_in_set('".$cityId."',area)")
四十七、写日志
Log::init([
‘type’ => ‘File’,
‘level’ => [‘sql’,‘info’]
]);
四十八、生成二维码
/*
* 生成二维码
* $url 二维码所带参数,url需写完整,如:http://www.baidu.com
* $save 二维码保存地址 ,不需要保存二维码则为不写,默认直接输出二维码
* $str 为img标签输出图片
* */
function createCode($url,$save=false)
{
Loader::import('phpqrcode.phpqrcode');
$obj = new \QRcode();
ob_end_clean();
$value = $url;
$errorCorrectionLevel = "L"; // 纠错级别:L、M、Q、H
$matrixPointSize = "10"; //生成图片大小 :1到10
// $obj::png($value, $save, $errorCorrectionLevel, $matrixPointSize);
if ($save != false){
$obj::png($value, $save, $errorCorrectionLevel, $matrixPointSize);
$str = "<img id='image' src='/{$save}'>";
return $str;
}
$obj::png($value, $save, $errorCorrectionLevel, $matrixPointSize);
}
四十九、return $this->fetch(’’,compact());
五十 、去重->distinct(true) ->field()
五十一、round(1.131, 2); 数据库保留两位小数
五十二、th5 excel导出
注意事项 一定要用url 链接不能用ajax 否则会冲突
window.location.href = "/../../excel.html?a="+a+"&b="+b+"&c="+c+"";
common.php
/**
* excel表格导出
* @param string $fileName 文件名称
* @param array $headArr 表头名称
* @param array $data 要导出的数据
* @author static7 */
function excelExport($fileName = '', $headArr = [], $data = []) {
Loader::import('PHPExcel.PHPExcel');
Loader::import('PHPExcel.PHPExcel.IOFactory.PHPExcel_IOFactory');
Loader::import('PHPExcel.PHPExcel.Reader.Excel5');
$fileName .= "_" . date("Y_m_d") . ".xls";
$objPHPExcel = new \PHPExcel();
$objPHPExcel->getProperties();
$key = ord("A"); // 设置表头
foreach ($headArr as $v) {
$colum = chr($key);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);
$key += 1;
}
$column = 2;
$objActSheet = $objPHPExcel->getActiveSheet();
foreach ($data as $key => $rows) { // 行写入
$span = ord("A");
foreach ($rows as $keyName => $value) { // 列写入
$objActSheet->setCellValue(chr($span) . $column, $value);
$span++;
}
$column++;
}
$fileName = iconv("utf-8", "gb2312", $fileName); // 重命名表
$objPHPExcel->setActiveSheetIndex(0); // 设置活动单指数到第一个表,所以Excel打开这是第一个表
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename='$fileName'");
header('Cache-Control: max-age=0');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output'); // 文件通过浏览器下载
exit();
控制器
/**
* tp5 使用excel导出
* @param
* @author staitc7 * @return mixed
*/
public function excel() {
$name='测试导出';
$header=['表头A','表头B'];
$data=[
['嘿嘿','heihei'],
['哈哈','haha']
];
excelExport($name,$header,$data);
}
//数据转换成可输出的数据类型
function combination($options)
{
$rows = [];
foreach ($options as $option => $v) {
$rows[] = array_values($v);
}
return $rows;
}
//转 https://blog.csdn.net/xiaowan206/article/details/78052846
五十二、 一维数组转换成带符号的字符串
s
t
r
=
j
o
i
n
(
"
,
"
,
str = join(",",
str=join(",",arr);
i
n
S
t
r
=
"
′
"
.
s
t
r
r
e
p
l
a
c
e
(
"
,
"
,
"
′
,
′
"
,
inStr = "'".str_replace(",","','",
inStr="′".strreplace(",","′,′",str)."’";
五十三 、autocomplete=“new-password” 禁止浏览器 input 输入密码
五十四、软删除 指定模型
use think\model\concern\SoftDelete;
use SoftDelete;
protected $deleteTime = ‘delete_time’;
public function deluser()
{
UserModel::destroy(7);
}
五十五 、collection(
a
s
s
d
a
t
a
)
−
>
t
o
A
r
r
a
y
(
)
;
a
l
l
对
象
转
数
组
五
十
六
、
/
/
指
点
某
个
键
值
相
同
的
组
成
一
个
新
的
二
维
数
组
f
o
r
e
a
c
h
(
assdata)->toArray(); all 对象转数组 五十六、 //指点某个键值相同的组成一个新的二维数组 foreach (
assdata)−>toArray();all对象转数组五十六、//指点某个键值相同的组成一个新的二维数组foreach(list as $key => $val){
l
i
s
t
d
a
t
e
[
listdate[
listdate[val[‘bundledid’]][] = KaTeX parse error: Expected 'EOF', got '}' at position 14: val; }̲ 五十七、 return se…where)->fieldRaw("
sum(case when businesstype = 1 and when inorout = 2 then sumtotal) as recharge,
")->find()->toArray();统计分类
五十八、判断是字符串否包含f某个字符
if(strpos(‘1,2,3’,‘1’) !==false){
echo true;
}
五十九、html 内容截取
{$vo.content|mb_substr=0,30,‘utf-8’}
六十 、create 更新后
r
e
s
=
s
e
l
f
:
:
c
r
e
a
t
e
(
res = self::create(
res=self::create(addSpotTicket,true);
t
i
c
k
e
t
i
d
=
ticketid=
ticketid=res->id; 获取产品id
六十一、
whereExp(’’,‘find_in_set(3,asscontracttable) > 0’) 查找某个字段中包含的值
六十二 array_column($oledate,‘id’,‘date’);
六十三 判断数组是否为空 加 二维转一维
r
e
b
a
t
e
=
i
n
a
r
r
a
y
(
′
′
,
a
r
r
a
y
r
e
d
u
c
e
(
rebate = in_array('', array_reduce(
rebate=inarray(′′,arrayreduce(param[‘rebate’], ‘array_merge’, array()));
array (size=2)
0 =>
array (size=1)
‘id’ => ‘8’
1 =>
array (size=1)
‘id’ => ‘9’
i
d
s
=
a
r
r
a
y
r
e
d
u
c
e
(
ids = array_reduce(
ids=arrayreduce(order_id, function($ids, KaTeX parse error: Expected '}', got 'EOF' at end of input: …rn array_merge(ids, array_values($value));
}, array());
六十四、定义模型关联查询获取器别名
控制器
productlist 获取的变量名
foreach ($productlist as $val)
{
$val->append(['promotion.Sales'])->toArray();
}
模型定义
public function getSalesAttr($value,$data)
{
$status = SupplierProductStatisticsService::getProductsales($data['oldproductid']);
return $status;
}
thinkphp5.1 验证码 一直验证失败 在cookkie
把配置项’secure’ => true,改成false
//数组查询 find_in_set
$where[]=[’’,‘EXP’,Db::raw(“FIND_IN_SET(4,roleid)”)];
注意,V5.1.7+版本数组方式如果使用exp查询的话,一定要用raw方法。
// 自定义验证规则
protected $rule = [
'user_name' => 'require|checkName:tt',
'email' => 'email',
];
protected function checkName($value,$rule,$data=[])
{
return $rule == $value ? true : '名称错误';
}
不支持redis
1、安装redis
下载地址:https://github.com/MSOpenTech/redis/releases。
redis-server.exe redis.windows.conf 启动
phpStudy 安装php_reids
http://pecl.php.net/package/redis 选择 64 或32 位的
然后再php.ini 加上
extension=php_redis.dll
重启即可
thinkphp 分页样式
.pagination{overflow:hidden;display:block;border-left:1px solid #eee;float:right;}
.pagination li{float:left;border:1px solid #eee;margin-left:-1px;font-size:16px;overflow:hidden;cursor:pointer;}
.pagination li a,
.pagination li span{display:block;padding:6px 18px;}
.pagination li.active{background-color:#393e49;color:#fff;border-color:#393e49;}
array_reduce($datalinesuit, ‘array_merge’, array()) //二维转一维
tp5.1 错误 No input file specified.
修改/public/.htaccess
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
钩子实例
1、使用run
namespace app\home\behavior;
class Header
{
public function run(){
echo "hello world"."<br/>";
}
}
tags.php
<?php
return [
// 应用初始化
'app_init'=> [
'app\\home\\behavior\\Header'
],
// 应用开始
'app_begin' => [
// 'app\\home\\behavior\\Header'
],
// 模块初始化
'module_init' => [],
// 操作开始执行
'action_begin' => [],
// 视图内容过滤
'view_filter' => [],
// 日志写入
'log_write' => [],
// 应用结束
'app_end' => [],
];
2、使用begin
namespace app\home\behavior;
class Header
{
public function appBegin(){
echo "hello world"."<br/>";
}
}
public function behaviordemo()
{
$request = request();
$params = $request->param();
Hook::add('app_begin','app\\home\\behavior\\Header');
Hook::add('app_begin','app\\home\\behavior\\Header');
}