<script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
<script>
// 原理:
// 1. J_endtime 获取到期时间的时间戳
// 2. 将 J_endtime 转化为 datetime-local 格式,并赋值给 J_newtime 显示
// 3. 检测 J_newtime 值是否有改动
// 4. J_newtime 值有改动,则将其 value 转化为时间戳,并赋值给 J_endtime
// 说明:
// newtime.val(getDateTime(endtime));
// newtime.val() 是给 newtime 进行赋值
// 值为 getDateTime(endtime);endtime 是获取的数据库的值;getDateTime 是格式化时间戳为 datatime-local
//这个 getzf 作用是给 1一位数的时间加个前导0,2022-1-26 改成 2022-01-26
var times = $('.J_time');
if (times.length) {
$('.J_endtime').each(function() {
var endtime = $(this).val();
var newtime = $(this).parent().find('.J_newtime');
newtime.val(getDateTime(endtime));
});
}
$('.J_newtime').on('input propertychange', function() {
var newtime = $(this).val().replace('T', ' ').replace(/-/g, '/');
$('.J_endtime').val(Date.parse(newtime) / 1000);
});
// 将时间戳转化为 datetime-local 格式---------getzf(date.getSeconds()秒;
function getDateTime(str) {
var date = new Date(parseInt(str + '000'));
return date.getFullYear() + '-' + getzf(date.getMonth() + 1) + '-' + getzf(date.getDate()) + 'T' + getzf(date.getHours()) + ':' + getzf(date.getMinutes());
}
// 两位数的前导零
function getzf(num) {
if (parseInt(num) < 10) {
num = '0' + num;
}
return num;
}
</script>
think-captcha
thinkphp5 验证码类库
安装
composer require topthink/think-captcha
使用
模板里输出验证码
<div>{:captcha_img()}</div>
或者
<div><img src="{:captcha_src()}" alt="captcha" /></div>
上面两种的最终效果是一样的
控制器里验证
使用TP5的内置验证功能即可
$this->validate($data,[
'captcha|验证码'=>'require|captcha'
]);
或者手动验证
if(!captcha_check($captcha)){
//验证失败
};
简介:
<?php
/**
* 支付宝支付
*/
return [
//应用ID,您的APPID。
'app_id' => "",
//商户私钥, 请把生成的私钥文件中字符串拷贝在此
'merchant_private_key' => "",
//异步通知地址
'notify_url' => "",
//同步跳转
'return_url' => "",
//编码格式
'charset' => "UTF-8",
//签名方式
'sign_type'=>"RSA2",
//支付宝网关
'gatewayUrl' => "https://openapi.alipay.com/gateway.do",
//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
'alipay_public_key' => "",
];
ThinkPHP5 支付宝支付扩展库, 包括手机网站支付、电脑网站支付、支付查询、退款、退款查询、对账单等。
用法
电脑网站支付 Pagepay.php
调用 \alipay\Pagepay::pay($params) 即可
手机网站支付 Wappay.php
调用 \alipay\Wappay::pay($params) 即可
交易查询接口 Query.php
调用 \alipay\Query::exec($query_no) 即可
交易退款接口 Refund.php
调用 \alipay\Refund::exec($params) 即可
退款统一订单查询 RefundQuery.php
调用 \alipay\RefundQuery::exec($params) 即可
交易关闭接口 Close.php
调用 \alipay\Close::exec($query_no) 即可
查询账单下载地址接口 Datadownload.php
调用 \alipay\Datadownload::exec($bill_type, $bill_date) 即可
验签 Notify.php
调用 \alipay\Notify::checkSign($params) 即可
查询1条数据
Db::table('think_user')->where('id',1)->find();
查询数据集
Db::table('think_user')->where('status',1)->select();
如果设置了数据表前缀参数的话,可以使用
Db::name('user')->where('id',1)->find();
Db::name('user')->where('status',1)->select();
一般这个这样的写法 比较 常见!
删除数据
// 根据主键删除
Db::table('think_user')->delete(1);
Db::table('think_user')->delete([1,2,3]);
// 条件删除
Db::table('think_user')->where('id',1)->delete();
Db::table('think_user')->where('id','<',10)->delete();
最终生成的SQL语句可能是:
DELETE FROM think_user
WHERE id
= 1
DELETE FROM think_user
WHERE id
IN (1,2,3)
DELETE FROM think_user
WHERE id
= 1
DELETE FROM think_user
WHERE id
< 10
通过上面可以看出,无论TP的删除语法是什么样的,都是 通过PHP原生语句转化来的;
今天给客户做一个网络网站,用到了用户积分管理,经常用到thinkphp的积分加减法,感觉thinkphp的累加蛮方便的,用的setInc、setDec方法
thinkphp3.0增加setInc、setDec方法,今天查看thinkphp2.0的方法setInc、setDec时是这样写的:
而对于统计字段(通常指的是数字类型)的更新,系统还提供了 setInc 和 setDec 方法:
$User = M( "User" ); // 实例化 User 对象
$User->setInc( 'score','id=5',3 ); // 用户的积分加 3
$User->setInc( 'score','id=5' ); // 用户的积分加 1
$User->setDec( 'score','id=5',5 ); // 用户的积分减 5
$User->setDec( 'score','id=5' ); // 用户的积分减 1
而tp3.0有了新的改动,这样写了,方便了不少:
必须配合连贯操作where一起使用
$User = M("User"); // 实例化User对象
$User->where('id=5')->setInc('score',3); // 用户的积分加3
$User->where('id=5')->setInc('score'); // 用户的积分加1
$User->where('id=5')->setDec('score',5); // 用户的积分减5
$User->where('id=5')->setDec('score'); // 用户的积分减1
use think\Db;
$map['a.id'] = input('id');
$info = Db::table('table1_name')
->alias('a')
->join('table2_name w','a.id = w.id')
->where($map)
->find();
注意:这里如果两个表的联表查询的字段名称一样,需要在查询条件map里指定表名,否则会报错!比如这里的map[‘a.id’],不能写map[‘id’];
使用 Db 类的 insert 方法向数据库提交数据
$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::table('think_user')->insert($data);
从上面可以看出,直接使用Db的方法,讲$data 进行数据的写入!
添加数据后如果需要返回新增数据的自增主键,可以使用getLastInsID方法:
Db::name('user')->insert($data);
$userId = Db::name('user')->getLastInsID();
或者直接使用insertGetId方法新增数据并返回主键值:
Db::name('user')->insertGetId($data);
添加多条数据直接向 Db 类的 insertAll 方法传入需要添加的数据即可
$data = [
['foo' => 'bar', 'bar' => 'foo'],
['foo' => 'bar1', 'bar' => 'foo1'],
['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->insertAll ($data);
相对于5.0来说,5.1版本目录结构的主要变化是配置目录和路由定义目录独立出来,不再放入应用类库目录(并且不可更改)!
www WEB部署目录(或者子目录)
├─application 应用目录
│ ├─common 公共模块目录(可以更改)
│ ├─module_name 模块目录
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ ├─config 配置目录
│ │ └─ ... 更多类库目录
│ │
│ ├─command.php 命令行定义文件
│ ├─common.php 公共函数文件
│ └─tags.php 应用行为扩展定义文件
│
├─config 应用配置目录
│ ├─module_name 模块配置目录
│ │ ├─database.php 数据库配置
│ │ ├─cache 缓存配置
│ │ └─ ...
│ │
│ ├─app.php 应用配置
│ ├─cache.php 缓存配置
│ ├─cookie.php Cookie配置
│ ├─database.php 数据库配置
│ ├─log.php 日志配置
│ ├─session.php Session配置
│ ├─template.php 模板引擎配置
│ └─trace.php Trace配置
│
├─route 路由定义目录
│ ├─route.php 路由定义
│ └─... 更多
│
├─public WEB目录(对外访问目录)
│ ├─index.php 入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于apache的重写
│
├─thinkphp 框架系统目录
│ ├─lang 语言文件目录
│ ├─library 框架类库目录
│ │ ├─think Think类库包目录
│ │ └─traits 系统Trait目录
│ │
│ ├─tpl 系统模板目录
│ ├─base.php 基础定义文件
│ ├─convention.php 框架惯例配置文件
│ ├─helper.php 助手函数文件
│ └─logo.png 框架LOGO文件
│
├─extend 扩展类库目录
├─runtime 应用的运行时目录(可写,可定制)
├─vendor 第三方类库目录(Composer依赖库)
├─build.php 自动生成定义文件(参考)
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think 命令行入口文件
public function Udengzc() //注册执行
{
$usersinfo = input();
$data['useremails'] = input('post.useremails'); //定义个获取邮箱的变量
$usersif = Db::name('users')->where($data )->find();//查询
if(count($usersif) >1 ){
$this->error('抱歉,您的注册邮箱已经存在!请重新注册!');
exit;
}
if(!input('post.useremails') || !input('post.usertel') ){
header("Content-Type: text/html;charset=utf-8");
echo "<script> alert('抱歉,您还有注册信息没填写哦!');parent.location.href='../Index'; </script>";
// $this->error('抱歉,注册用户名、密码、邮箱不能为空!');
exit;
}
Db::table('users')->insert($usersinfo);
echo "<script> alert('注册成功,请重新登录!');parent.location.href='../Index'; </script>";
}