站三界导航
首页 TP代码
  • TP5 查询构造器之查询语法、链式操作、聚合查询、左连接、右连接、子查询以及其他
    TP5 查询构造器之查询语法、链式操作、聚合查询、左连接、右连接、子查询以及其他

    列查询和值查询//查询值,返回某个字段的值Db::table('think_user')->where('id',1)->value('name');//查询列,返回数组Db::table('think_user')->where('status',1)->column('name');//指定索引Db::table('think_user')->where('status',1)->column('name','id');Db::table('think_user')->where('status',1)->column('id,name');//同tp3的getField添加数据//使用Db类的insert方法向数据库提交一条数据$data=['foo'=>'bar','bar'=>'foo'];Db::table('think_user')->insert($data);//使用insertGetId方法新增数据并返回主键值:Db::name('user')->insertGetId($data);//添加多条数据直接向Db类的insertAll方法传入需要添加的数据即可```php$data=[['foo'=>'bar','bar'=>'foo'],['foo'=>'bar1','bar'=>'foo1'],['foo'=>'bar2','bar'=>'foo2']];Db::name('user')->insertAll($data);name和table区别//Db::table()使用这个必须指定完整的表名Db::table('think_user')->where('id',1)->find();/*如果数据库中的表统一了表前缀,在application/database.php中的也写明prefix=>'前缀_'就可以使用*/Db::name('think_user')->where('id',1)->find();//db('')是助手函数,//注意此助手函数,每次都会重新连接mysql!所以这个助手函数少使用db('user')->where(['id'=>1])->select();//数据库中的表名为fa_userfind和select的区别现象:find()返回一个一维数组,select()返回一个二维数组原因:find转换为sql语句时会加一个limit1,因此会只查第一条数据$admin_role_name=Db::name('admin_role')->field('id,name')->select();/*Sql语句:SELECT`id`,`name`FROM`admin_role查询结果:array(3){[0]=>array(2){["id"]=>int(1)["name"]=>string(6)"专员"}[1]=>array(2){["id"]=>int(4)["name"]=>string(6)"仓库"}[2]=>array(2){["id"]=>int(5)["name"]=>string(19)"普通用户-大屏"}}*/$admin_role_name=Db::name('admin_role')->field('id,name')->find();/*Sql语句:SELECT`id`,`name`FROM`admin_role`LIMIT1查询结果:array(2){["id"]=>int(1)["name"]=>string(6)"专员"}*/

    • TP代码
    • 46阅读
    • 2023-07-23

  • tp5.0要查询内容但不包含某个ID
    tp5.0要查询内容但不包含某个ID

    要查询内容但不包含某个ID,可以使用以下方法:使用TP5的查询构造器,通过whereNotIn方法排除某个ID:$result=Db::name('table')->whereNotIn('id',$excludeId)->select();使用TP5的查询构造器,通过whereNotLike方法排除某个ID:$result=Db::name('table')->whereNotLike('id',$excludeId)->select();使用TP5的查询构造器,通过whereRaw方法排除某个ID:$result=Db::name('table')->whereRaw('id!=?',[$excludeId])->select();使用TP5的查询构造器$result=Db::name('table')->where('id','<>',$excludeId)->select();以上方法都可以根据具体的需求来选择使用,根据你的数据结构和查询条件来决定使用哪种方法。

    • TP代码
    • 47阅读
    • 2023-07-23

  • TP5中Session和Cookie的基础用法
    TP5中Session和Cookie的基础用法

    Session的基础用法赋值//赋值(当前作用域)Session::set('name','thinkphp');//赋值think作用域Session::set('name','thinkphp','think');判断是否存在//判断(当前作用域)是否赋值Session::has('name');//判断think作用域下面是否赋值Session::has('name','think');取值//取值(当前作用域)Session::get('name');//取值think作用域Session::get('name','think');如果name的值不存在,返回null。删除//删除(当前作用域)Session::delete('name');//删除think作用域下面的值Session::delete('name','think');指定作用域//指定当前作用域Session::prefix('think');取值并删除//取值并删除Session::pull('name');如果name的值不存在,返回Null。清空//清除session(当前作用域)Session::clear();//清除think作用域Session::clear('think');Cookie设置//设置Cookie有效期为3600秒Cookie::set('name','value',3600);//设置cookie前缀为think_Cookie::set('name','value',['prefix'=>'think_','expire'=>3600]);//支持数组Cookie::set('name',[1,2,3]);判断Cookie-502-本文档使用看云构建Cookie::has('name');//判断指定前缀的cookie值是否存在Cookie::has('name','think_');获取Cookie::get('name');//获取指定前缀的cookie值Cookie::get('name','think_');删除删除cookieCookie::delete('name');//删除指定前缀的cookieCookie::delete('name','think_');清空//清空指定前缀的cookieCookie::clear('think_');是结合项目在这里我遇到的问题是前台这个位置的问题。开始时是这样写的{Session::get('变量名')}因为要换成TP5的格式,看前台需要用{$Request.session.name}或者{$Think.session.name}的格式,但是我因为已经用了php标签再用这个会报错,因为他是默认解析成<?phpecho....?>的格式的。所以我改成了这个样子。说到底解决的问题就是tp5版本的session信息怎么在前台输出,而且在输出前用PHP进行预处理(比如一些简单的判断判断)。

    • TP代码
    • 112阅读
    • 2023-06-06

  • tp5.0的一些常用类及介绍
    tp5.0的一些常用类及介绍

    Request:封装了HTTP请求的类,可以方便地进行GET、POST等请求操作。Response:封装了HTTP响应的类,可以方便地进行响应操作。Config:封装了配置文件的类,可以方便地读取和修改配置文件。Session:封装了Session操作的类,可以方便地进行Session的读取和写入操作。Cookie:封装了Cookie操作的类,可以方便地进行Cookie的读取和写入操作。Db:封装了数据库操作的类,可以方便地进行数据库的连接、查询、更新等操作。Model:封装了模型操作的类,可以方便地进行模型的查询、更新等操作。View:封装了视图操作的类,可以方便地进行视图的渲染和输出操作。Validate:封装了数据验证的类,可以方便地进行数据的验证操作。Log:封装了日志操作的类,可以方便地进行日志的记录和输出操作。Route:封装了路由操作的类,可以方便地进行路由的定义和匹配操作。Cache:封装了缓存操作的类,可以方便地进行缓存的读取和写入操作。File:封装了文件操作的类,可以方便地进行文件的读取、写入、上传、下载等操作。Image:封装了图片操作的类,可以方便地进行图片的处理、缩放、裁剪等操作。Crypt:封装了加密操作的类,可以方便地进行数据的加密和解密操作。Hook:封装了钩子操作的类,可以方便地进行钩子的注册和触发操作。Lang:封装了多语言操作的类,可以方便地进行多语言的读取和切换操作。Debug:封装了调试操作的类,可以方便地进行调试信息的输出和查看操作。Env:封装了环境变量操作的类,可以方便地读取和修改环境变量。Loader:封装了自动加载操作的类,可以方便地进行类文件的自动加载操作。Http:封装了HTTP请求和响应的类,可以方便地进行HTTP请求和响应操作。Paginator:封装了分页操作的类,可以方便地进行分页的计算和输出操作。Filesystem:封装了文件系统操作的类,可以方便地进行文件系统的读取、写入、复制、移动等操作。Queue:封装了队列操作的类,可以方便地进行队列的读取、写入、删除等操作。Redis:封装了Redis操作的类,可以方便地进行Redis的连接、读取、写入等操作。HttpException:封装了HTTP异常的类,可以方便地进行HTTP异常的抛出和处理操作。RouteNotFoundException:封装了路由未找到异常的类,可以方便地进行路由未找到异常的抛出和处理操作。MethodNotAllowedException:封装了方法不允许异常的类,可以方便地进行方法不允许异常的抛出和处理操作。TokenMismatchException:封装了令牌不匹配异常的类,可以方便地进行令牌不匹配异常的抛出和处理操作。InvalidArgumentException:封装了无效参数异常的类,可以方便地进行无效参数异常的抛出和处理操作。希望这些类能够帮助您更好地开发TP5.0应用!

    • TP代码
    • 46阅读
    • 2023-05-27

  • FastAdmin和QueryList框架实现后台自动采集的示例代码
    FastAdmin和QueryList框架实现后台自动采集的示例代码

    在FastAdmin中创建一个名为“采集”(Collect)的模型(model),并添加需要采集的字段。例如,我们可以添加如下字段:<?phpnamespaceapp\admin\model;usethink\Model;classCollectextendsModel{protected$name='collect';//数据表名protected$autoWriteTimestamp=true;//自动写入时间戳字段//定义数据表字段protected$schema=['id'=>'int','title'=>'string','url'=>'string','content'=>'text','update_time'=>'datetime','create_time'=>'datetime','status'=>'int',];}创建一个名为“采集源”(Source)的模型,并添加需要采集的字段。例如,我们可以添加如下字段:<?phpnamespaceapp\admin\model;usethink\Model;classSourceextendsModel{protected$name='collect_source';//数据表名protected$autoWriteTimestamp=true;//自动写入时间戳字段//定义数据表字段protected$schema=['id'=>'int','name'=>'string','url'=>'string','content_selector'=>'string','url_selector'=>'string','title_selector'=>'string','status'=>'int','update_time'=>'datetime','create_time'=>'datetime',];}在FastAdmin中创建一个名为“采集”(Collect)的控制器(controller),并添加如下方法:<?phpnamespaceapp\admin\controller;usethink\Controller;useQL\QueryList;classCollectextendsController{/***执行采集任务*/publicfunctionexecute(){//获取所有启用状态的采集源$sources=model('Source')->where('status',1)->select();//遍历所有采集源,执行采集任务foreach($sourcesas$source){$html=file_get_contents($source->url);//采集页面内容//使用QueryList解析HTML页面$data=QueryList::html($html)->find($source->content_selector)->map(function($item)use($source){return['title'=>$item->find($source->title_selector)->text(),'url'=>$item->find($source->url_selector)->attr('href'),];})->toArray();//遍历采集结果,保存到数据库中foreach($dataas$item){$collect=new\app\admin\model\Collect();$collect->title=$item['title'];$collect->url=$item['url'];$collect->status=1;$collect->save();}}$this->success('执行任务成功');}}在这个方法中,我们首先获取所有启用状态的采集源,然后遍历所有采集源,执行采集任务。我们使用file_get_contents函数从采集源的URL地址中获取页面内容,并使用QueryList库对页面内容进行解析。最后,我们遍历采集结果,并将每个结果保存到数据库中。在FastAdmin中创建一个名为“采集任务”(Task)的菜单,并添加一个名为“执行任务”(Execute)的操作,为该操作绑定Collect控制器中的execute方法。<?phpreturn['name'=>'采集任务','icon'=>'fafa-cloud-download','children'=>[['name'=>'执行任务','act'=>'collect/execute','icon'=>'fafa-play',],],];这样,在FastAdmin的菜单栏中,你就可以看到采集任务菜单,点击“执行任务”操作即可执行采集任务了。

    • TP代码
    • 75阅读
    • 2023-05-23

  • TP5.0框架和querylist采集抖音热搜榜列表的示例代码
    TP5.0框架和querylist采集抖音热搜榜列表的示例代码

    首先,在项目根目录下创建一个名为“douyin”的控制器(controller)。在控制器中编写方法来采集抖音热搜榜。以下是示例代码:<?phpnamespaceapp\index\controller;usethink\Controller;useQL\QueryList;classDouyinextendsController{publicfunctionhot(){$url='https://www.douyin.com/discover/';//抖音热搜榜页面地址//采集页面内容$html=file_get_contents($url);//使用QueryList解析HTML页面$data=QueryList::html($html)->find('.hot-search.search-rankingli')->map(function($item){return['rank'=>$item->find('.num')->text(),'title'=>$item->find('.link-content')->text(),'url'=>$item->find('.link-content')->attr('href'),];})->toArray();//输出结果dump($data);}}在这个方法中,我们首先定义了抖音热搜榜页面的URL地址。然后,我们使用file_get_contents函数从URL地址中获取页面内容,并使用QueryList库对页面内容进行解析。最后,我们使用map函数将解析结果转换为数组,并输出结果。访问控制器的hot方法,即可采集并输出抖音热搜榜列表。例如,如果你的控制器位于应用目录下的index/controller/Douyin.php文件中,你可以通过URL地址http://your_domain/index/douyin/hot来访问该方法。注意替换your_domain为你的域名。

    • TP代码
    • 49阅读
    • 2023-05-23

  • tp5.0编写的采集微博热搜榜列表的代码
    tp5.0编写的采集微博热搜榜列表的代码

    <?phpnamespaceapp\index\controller;usethink\Controller;usethink\Db;classWeiboextendsController{publicfunctionindex(){//设置请求头信息$headers=array('User-Agent:Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/58.0.3029.110Safari/537.36','Referer:https://weibo.com/','Cookie:your_cookie_here');//发送请求获取热搜榜列表$url='https://s.weibo.com/top/summary?cate=realtimehot';$ch=curl_init();curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);$result=curl_exec($ch);curl_close($ch);//解析HTML获取热搜榜列表$pattern='/<tdclass="td-02">.*?<a.*?>(.*?)<\/a>.*?<\/td>.*?<tdclass="td-03">.*?<span>(.*?)<\/span>.*?<\/td>/s';preg_match_all($pattern,$result,$matches);//将热搜榜列表存入数据库$data=array();foreach($matches[1]as$key=>$value){$data[]=array('title'=>$value,'hot'=>$matches[2][$key]);}Db::name('weibo_hot')->insertAll($data);//输出结果echo'采集成功!';}}请注意,此代码中的“your_cookie_here”需要替换为您自己的微博登录cookie。此外,您还需要在tp5.0中创建一个名为“weibo_hot”的数据表,用于存储热搜榜列表数据。

    • TP代码
    • 44阅读
    • 2023-05-23

  • 使用PHP的TP5.0框架来调用OpenAI的Chat GPT接口的方法及相关设置代码
    使用PHP的TP5.0框架来调用OpenAI的Chat GPT接口的方法及相关设置代码

    首先,我们需要在config目录下创建一个新文件openai.php,这个文件用于存放我们的OpenAIAPI密钥和APIURL。<?php//openai.phpreturn['api_key'=>'YOUR_API_KEY','api_url'=>'https://api.openai.com/v1/',];请将YOUR_API_KEY替换为你在OpenAI网站上获取的API密钥。接下来,我们可以创建一个ChatGPT类来处理调用OpenAIAPI。我们将这个类放在app\utils目录下。<?php//app\utils\ChatGPT.phpnamespaceapp\utils;usethink\facade\Config;usethink\facade\Log;useGuzzleHttp\Client;classChatGPT{private$client;private$api_key;private$api_url;publicfunction__construct(){$this->client=newClient();$this->api_key=Config::get('openai.api_key');$this->api_url=Config::get('openai.api_url');}publicfunctionsendMessage($message){$headers=['Content-Type'=>'application/json','Authorization'=>'Bearer'.$this->api_key,];$params=['prompt'=>$message,'max_tokens'=>150,'n'=>1,'stop'=>['\n'],];try{$response=$this->client->post($this->api_url.'engines/davinci-codex/completions',['headers'=>$headers,'json'=>$params,]);$data=json_decode($response->getBody(),true);return$data['choices'][0]['text'];}catch(\Exception$e){Log::error($e->getMessage());}return'';}}这个类的主要作用是调用OpenAIAPI来发送消息并返回机器人的回复。在这里,我们使用了GuzzleHttp库来进行HTTP请求。我们还从Config中获取了我们之前定义的API密钥和APIURL。接下来,我们可以在Controller中使用这个ChatGPT类。以下是一个简单的例子,我们将ChatGPT类注入到index方法中,并将用户输入的消息传递给sendMessage()方法。<?php//app\controller\Index.phpnamespaceapp\controller;usethink\facade\View;usethink\Request;useapp\utils\ChatGPT;classIndex{publicfunctionindex(){returnView::fetch();}publicfunctionchat(Request$request){$message=$request->post('message');$chatbot=newChatGPT();$response=$chatbot->sendMessage($message);returnjson(['message'=>$response]);}}最后,我们需要在前端页面上调用chat()方法,并将用户输入的消息通过POST请求发送给chat()方法。以下是一个简单的例子。<!DOCTYPEhtml><html><head><title>ChatGPT</title><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><scriptsrc="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><styletype="text/css">body{margin:0;padding:0;font-family:Arial,sans-serif;background-color:#f7f7f7;}.container{width:100%;max-width:600px;margin:0auto;padding:20px;box-sizing:border-box;background-color:#fff;border-radius:5px;box-shadow:0px0px10px#ddd;}h1{margin:0;font-size:24px;font-weight:bold;text-align:center;}.chatbox{height:400px;overflow-y:scroll;margin-bottom:10px;padding:10px;box-sizing:border-box;background-color:#f7f7f7;border-radius:5px;box-shadow:inset0px0px10px#ddd;}.inputbox{display:flex;flex-wrap:wrap;align-items:center;margin-bottom:10px;}.inputboxinput[type="text"]{flex-grow:1;padding:10px;box-sizing:border-box;background-color:#fff;border:none;border-radius:5px;box-shadow:0px0px10px#ddd;font-size:16px;margin-right:10px;}.inputboxbutton[type="submit"]{padding:10px;box-sizing:border-box;background-color:#007bff;border:none;border-radius:5px;color:#fff;text-transform:uppercase;font-size:16px;font-weight:bold;cursor:pointer;transition:background-color0.3sease;-webkit-transition:background-color0.3sease;-moz-transition:background-color0.3sease;-o-transition:background-color0.3sease;}.inputboxbutton[type="submit"]:hover{background-color:#0062cc;}.message-wrapper{display:flex;justify-content:flex-start;align-items:center;margin-bottom:10px;}.message-bubble{padding:10px;box-sizing:border-box;background-color:#007bff;border-radius:5px;color:#fff;max-width:50%;word-wrap:break-word;}.bot.message-wrapper{justify-content:flex-end;}.bot.message-bubble{background-color:#ddd;}</style></head><body><divclass="container"><h1>ChatGPT</h1><divclass="chatbox"id="chatbox"></div><formid="chatForm"><divclass="inputbox"><inputtype="text"name="message"id="message"placeholder="Typeyourmessagehere..."><buttontype="submit">Send</button></div></form></div><scripttype="text/javascript">constchatForm=document.getElementById('chatForm');constchatbox=document.getElementById('chatbox');chatForm.addEventListener('submit',event=>{event.preventDefault();constmessageInput=document.getElementById('message');constmessage=messageInput.value;if(message!=''){displayMessage(message,'user');messageInput.value='';axios.post('/index.php/Index/chat',{message:message,}).then(response=>{constbotMessage=response.data.message;displayMessage(botMessage,'bot');}).catch(error=>console.log(error));}returnfalse;});functiondisplayMessage(message,userType){constmessageWrapper=document.createElement('div');constmessageBubble=document.createElement('div');messageBubble.textContent=message;messageBubble.classList.add('message-bubble');messageWrapper.classList.add('message-wrapper');messageWrapper.classList.add(userType);messageWrapper.appendChild(messageBubble);chatbox.appendChild(messageWrapper);chatbox.scrollTop=chatbox.scrollHeight;}</script></body></html>在这个页面中,我们通过监听表单的submit事件来调用chat()方法,并使用Axios库将用户输入的消息发送到服务器端的chat()方法。我们还定义了一个displayMessage()函数来在聊天框中显示发送和接收的消息。注意:你需要在路由中定义/chat路由,并将其指向Index控制器的chat()方法。

    • TP代码
    • 35阅读
    • 2023-05-23

  • tp5.0一个简单的验证码接口
    tp5.0一个简单的验证码接口

    首先,你需要在config.php文件中配置验证码,例如:'captcha'=>[//验证码字符集合'codeSet'=>'0123456789',//验证码字体大小(px)'fontSize'=>25,//是否画混淆曲线'useCurve'=>false,//验证码图片高度'imageH'=>50,//验证码图片宽度'imageW'=>200,//验证码位数'length'=>4],然后,在Controller中定义一个生成验证码的方法,如下所示:usethink\captcha\Captcha;publicfunctioncaptcha(){$captcha=newCaptcha();return$captcha->entry();}最后,在前端页面中,您可以使用<img>标签来显示验证码,例如:<imgsrc="/captcha"alt="captcha">```上述代码将使用默认的GET路由访问captcha()方法,生成并返回验证码图片。您可以使用样式表自定义验证码的样式和位置。如果您需要多个验证码实例,请将调用entry()方法的参数传递给Captcha构造函数。另外,Captcha类还提供了一些其他方法,例如check()方法,可以用于验证用户输入的验证码是否正确。

    • TP代码
    • 55阅读
    • 2023-05-23

  • 一个简单的TP5.0方法,可以用来采集百度热搜榜列表方法代码
    一个简单的TP5.0方法,可以用来采集百度热搜榜列表方法代码

    publicfunctiongetBaiduHotSearch(){$url="https://www.baidu.com/s?wd=%E7%83%AD%E6%90%9C%E6%A6%9C&tn=json&rn=20";$result=[];$content=file_get_contents($url);$content=json_decode($content,true);if(isset($content['data']['result'])){foreach($content['data']['result']as$key=>$value){$result[]=$value['title'];}}return$result;}这里使用了file_get_contents函数获取百度热搜榜页面内容,然后使用json_decode函数将内容转换成数组类型。最后遍历数组获取热搜榜的标题,并将其添加到结果中。您可以将该方法添加到您的Controller中,然后在需要使用时直接调用它即可。

    • TP代码
    • 66阅读
    • 2023-05-22

站三界导航
本站声明:本站严格遵守国家相关法律规定,非正规网站一概不予收录。本站所有资料取之于互联网,任何公司或个人参考使用本资料请自辨真伪、后果自负,站三界导航不承担任何责任。在此特别感谢您对站三界导航的支持与厚爱。