目录结构

1.函数调用

2.绑定select下拉框数据

3.PHP查询功能

4.格式化时间和价钱

5.IF标签比较两个变量

6.eq标签比较两个变量

7.新增信息或者修改信息的自动验证和自动填充

8.验证码

9.NotFound

10.字符串处理函数

11.单引号和双引号

最近开始接触PHP编程语言,遇到各种小问题,不断总结,不断进步。由于一开始就用上了ThinkPHP框架,所以不知道和一般的PHP项目有什么区别。有待研究。

1.函数调用

可能是因为我比较菜鸟,刚开始学习编写PHP页面,还没有写控制器,在页面中调试的时候调用了dump()函数,我是这么写的:$dump($pageCount);结果报错了,错误是:php function name must be a string.

大神们别喷,实在是太菜了有木有。然后我改成了dump($pageCount);,错误解决了,原来是调用函数的时候不加'$'符号,看来不能盲目使用编程语言的特殊符号啊。

2.绑定select下拉框的数据

之前想了好久该怎么绑定,想着应该和C#差不多,可就是找不到好的办法,都差点用js写了,后来发现了更加简便的方法。

代码是这样的:

1 <select name="select1" id="select1">
2      <volist name="selectitems" id="row">
3             <option value="{$row.id}">{$row.title}</option>
4      </volist>
5 </select>

其中volist标签中的selectitems是控制器中从数据库取出的数据列表,在控制器中赋值给selectitems,然后直接循环绑定到option,很简单有木有。

3.PHP查询功能

终于能成功查询了,费了不少劲儿。发现其实比较简单,只是刚开始接触,不懂很多语法规则之类的,光写一个sql语句解析都写了半天。具体功能很简单,就是在首页做一个查询功能,一个下拉列表选择模块,一个文本框输入关键字,一个按钮进行查询:

<form id="form1" method="POST" action="{:U('Search/index')}" name="form1"><span class="sbfont">搜索栏目:</span><select name="select1" id="select1" οnchange=setSelectedID()><option value="-1">=请选择=</option><volist name="selectitems" id="row"><option value="{$row.id}">{$row.title}</option></volist></select><span>关键字:</span><input name="search" type="text" size="30"/><input name="submit" type="submit" value=""/><input type="hidden" id="selectedID" name="selectedID"/>
</form><script type="text/javascript">function setSelectedID(){var selector=document.getElementById("select1");var selectedID=document.getElementById("selectedID");for(var i=0;i<selector.options.length;i++){if(selector.options[i].selected){selectedID.value=selector.options[i].value;break;}}
}
</script>

View Code

这块就不用再详细分析了,上面都说了,接下来就是写一个控制器,控制器中的代码如下:

public function index(){$searchs=$_POST['search'];//接收post传来的参数$selectedID=$_POST['selectedID'];//同传参数$condition['category_id']=array('eq',$selectedID);//定义查询规则$condition['title']=array('like','%'.$searchs.'%');$resultList=$this->dao->where($condition)->select();//查询数据集$this->assign('searchResultList',$resultList);//赋值$this->display();}

控制器查询出数据并且已经保存好了,接下来就是视图显示了,视图只需要将保存好的查询结果数据集显示出来就好了:

<volist name="searchResultList" id="row"><li><span>{$row.create_time|date="Y-m-d",###}</span><a href="{$row.link_url}" target="_blank">{$row.title}</a></li>
</volist>

好了,纠结了一整天的查询功能就分分钟做好了。

4.格式化时间和价钱

价钱格式化:{$p.sale|number_format=###, 2, '.', ''} 两位有效数字

时间格式化:{$p.time|date='Y-m-d H:i:s',###} 年月日时分秒

5.IF标签比较两个变量

<if condition="$row.name eq $col['name']">==需要的操作==
</if>

6.eq标签比较两个变量

<eq name=”item.group_id” value=”$one.group_id”> 这里注意name不带$,value带$.

7.新增信息或者修改信息的自动验证和自动填充

自动验证部分是框架自带的验证,需要在项目的lib目录下Model文件夹里创建一个和需要验证的数据所在数据表同名的类文件,说简单了就是这个类的名字需要和我们添加或者修改数据的表的名字一致,比如,表的名字是think_user,类的名字就是UserModel.class.php。这里需要说一句题外话,如果表的名字和Model类名字不一致,需要在类里面声明表名:

protected $tableName = 'think_user';  //这里的think_user就是数据表的名称

这个类里面写验证信息,当Action类当中调用了create()方法的时候就会进行自动验证了,具体验证的写法如下:

<?php
class UserModel extends Model
{    //自动验证protected $_validate = array(array('username','require','请输入用户名'),       //用户名必须输入array('username', '', '用户已存在', 0,'unique',1),    //用户名唯一性验证array('password', 'require', '登录密码必填', 1),       //密码必须array('PID','^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$','请填入正确的身份证号',1),       //身份证号验证array('address','require','地址必须填',1),          //地址必须array('cellphone','number','手机号为11位数字',1),        //手机号array('email','email','Email格式不符合',1),      //Email格式array('telephone','\d{3}-\d{8}|\d{4}-\{7,8}','电话格式不正确',1),   //国内电话号array('repassword','password','确认密码不正确',0,'confirm'),    //确认密码是否正确
    );   //自动填充   protected $_auto=array(        array('create_time','time','doRegist','function'),  //在增加时自动将时间擢填入表中    );
}
?>

这里有一点需要注意,官方文档中有这么一句话:如果定义了字段映射的话,这里的验证字段名称应该是实际的数据表字段而不是表单字段。

Action中要这样写:

$user=D('User');   //实例化Model类$daoCreate=$user->create();   //创建新增数据的model   验证在这时候就起作用了if($daoCreate){$daoAdd = $user->add();if(false != $daoAdd){....  //成功}else{....  //失败}}else{exit($user->getError());   //输出验证结果}

View当中就写需要添加的数据就行了,这样:

        <form method="post" action="{:U('Public/doRegist')}"><table><tr><td><label>用户名:</label></td><td><input type="text" name="username" id="username"/></td></tr><tr><td><label>密  码:</label></td><td><input type="password" name="password" id="password"/></td></tr><tr><td><label>确认密码:</label></td><td><input type="password" name="repassword" id="repassword"/></td></tr><tr><td><label>身份证号:</label></td><td><input type="text" name="PID" id="PID" maxlength="18"/></td></tr><tr><td><label>地址:</label></td><td><input type="text" name="address" id="address"/></td></tr><tr><td><label>手机号:</label></td><td><input type="text" name="cellphone" id="cellphone" maxlength="11"/></td></tr><tr><td><label>Email:</label></td><td><input type="text" name="email" id="email"/></td></tr><tr><td><label>电话:</label></td><td><input type="text" name="telephone" id="telephone"/></td></tr><tr><td></td><td><input  type="submit" id="submit" value="注册"/></td></tr></table></form>

8.验证码

我现在用的是3.1.3版本的TP,框架不是完整版,所以我又从完整版里面拷贝了一个Extend文件夹替换了现在这个,因为所有扩展包都在完整版里面有。

要实现验证码功能,只需要在控制器内添加一个生成验证码的方法即可:

public function verify() {import('ORG.Util.Image');ob_end_clean();  //很关键,如果Image.class.php文件里的output方法中没有调用ob_clean();方法,那么这里需要写,可以防止出现“载入指定URL失败”的错误Image::buildImageVerify();}

import 方法是 ThinkPHP 内置的类库和文件导入方法,上例导入的文件为 ThinkPHP 系统目录下 Lib/ORG/Util/Image.class.php 文件。所以要保证这个目录下的文件存在,如果没有这个目录,创建一个,并且将完整版里面的Image.class.php文件拷贝到该目录下就可以使用了。

视图文件中只需要调用方法就能正常显示验证码了:

<img src="{:U('Public/verify')}" align="absmiddle" title="如果您无法识别验证码,请点图片更换" id="verifyImage" onclick=resetVerifyCode() />
<input type="text" name="verifyCode" id="verifyCode" size="8" maxlength="4" />

同时要写一个js脚本来实现点击图片刷新验证码的功能:

<script type="text/javascript" >function resetVerifyCode(){$("#verifyImage").attr('src', "{:U('Public/verify/',0,0,0)}/__"+ Math.random());}
</script>

这里注意一个细节:路径里面在“{:U('Public/verify/',0,0,0)}/__”里,verify后面必须有一个“/”,或者写在"__"前面,这样"/__",而我这里为什么两个地方都写了呢,因为这里只在verify后面添加"/"出现一个问题,就是F5刷新界面的时候可以显示验证码无误,可是点击的时候刷新不出验证码,使用了页面调试发现错误是“加载指定URL失败”,问题就出在解析后的验证码路径中verify后面没有“/”,于是我就在“__”前面添加,这样问题就解决了。

 9.ThinkPHP "NotFound"错误

刚部署PHP项目的时候不太了解URL生成和重写之类的知识,总是会出现如下错误:

Not Found

The requested URL /Public/login was not found on this server.

后来发现是URL_MODEL设置问题,一般设置成1就不会有问题,设置为其他会出现问题,这个不知道是为什么,有待解决,先记录在这。

10.字符串处理的一些常用函数

<1>.trim():将字符串末尾的逗号去掉

trim($string,',');

<2>.strstr():返回字符串中,逗号出现的位移量,如果没有出现逗号则返回false

$index=strstr($string,',');

<3>.explode():将字符串用‘-’分开返回一个数组,类似于split()

explode("-",$string);

<4>.array_intersect($array1,$array2):返回两个数组中相同的部分,求交集

$sameitems=array_intersect($array1,$array2);

<5>.array_diff():返回两个数组的差集

$different=array_diff($array1,$array2);

<6>.str_replace('a','b',$str):将字符串$str中的a换成b

$str=str_replace('a','b',$str);

11.单引号和双引号

在PHP中,单引号和双引号的处理是不相同的,双引号中的内容可以被解释和替换,而单引号中的内容总被认为是普通字符。

比如:

$str = 7;
echo "str is $str"; // 打印结果: str is 7
echo 'str is $str'; // 打印结果: str is $str
echo "str is $str\n"; // 打印结果: str is 7 (同时换行)
echo 'str is $str\n'; // 打印结果: str is $str\n

所以在某些函数,比如str_replace()中需要使用双引号,这样才能正确替换字符串。

转载于:https://www.cnblogs.com/theblueberry/p/3635114.html

【PHP ThinkPHP框架】小bug汇总[更新]相关推荐

  1. Ubuntu小点汇总,更新中...

    转自:http://blog.csdn.net/zxz_tsgx/article/details/39713627 昨天重装了Ubuntu14.04 64位版,又被一些基础操作/设置给搞怕了,以前安装 ...

  2. python的问题_Python小问题汇总(更新1)

    继续上篇文章,持续更新一波...... 1. 文件读写操作 这个问题别人的博客写的很好很详细了 f = open(r'C:\Movie\test2.txt','w') 直接打开一个文件,如果文件不存在 ...

  3. Android与Asp.Net Web服务器的文件上传下载BUG汇总[更新]

    遇到的问题: 1.java.io.IOException: open failed: EINVAL (Invalid argument)异常,在模拟器中的sd卡创建文件夹和文件时报错 出错原因可能是: ...

  4. php框架语法,PHP框架之ThinkPHP框架

    原标题:PHP框架之ThinkPHP框架 小编张老师企鹅:1079943010 ThinkPHP框架人们习惯性又叫它TP框架,是一个轻量级的国产PHP开发框架,快速.兼容而且简单, ThinkPHP可 ...

  5. unity ui框架_[教程汇总+持续更新]Unity从入门到入坟——收藏这一篇就够了

    ----------------塔防(更新中),作者重写了基础篇(下方目录为:1.1(新) 基础)目前还在持续连载了5篇,因为不多我们更新完就能追到原作者的进度了------------------- ...

  6. (已更新)Thinkphp课程表小程序源码v1.0.0全开源版(前后端分离)

    源码功能介绍 1.情侣功能 2.情侣间留言 3.情侣间互相设置课程表背景 4.自己日.周课程表背景设置 5.教务系统课程表导入 6.导入别人分享的课表 7.导入别人分享的单课 8.多校支持 9.首页顶 ...

  7. bug汇总——golang遇到的小问题

    bug汇总--golang遇到的小问题 dial tcp: lookup proxy.golang.org: no such host 换一个国内能访问的代理地址:https://goproxy.cn ...

  8. php学生考勤在线请假系统,学生请假管理系统: 使用PHP开发的学生请假管理系统,基于thinkphp框架开发...

    请假管理系统 最近有一个公众号公布了我的项目,大家都在问SQL文件在哪里,所以我在这里解释一下,我还在上学,这个项目是给学院写的一个请假管理系统,他们正在使用,所以不太方便把这个SQL发布出去,您如果 ...

  9. THINKPHP框架的优秀开源系统推荐

    THINKPHP框架的优秀开源系统推荐 众所周知,国内众多优秀的开源框架,ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性.并且拥有众多的原创功能 ...

最新文章

  1. Day4-springmvc中文乱码处理和客户端跳转
  2. Qt tableWidget导入\导出Excel表格 自用
  3. python发邮件实例_python 发送邮件实例
  4. Ubuntu 10.04下安装jekyll
  5. jquery获取iframe里的js事件
  6. 陈式心意混元太极拳功要
  7. 本地信息搜索php程序,PHP搜索引擎
  8. 获取列表的最后一个元素
  9. 正面管教之PHP_主题体验活动之亲密关系
  10. utorrent无传入连接_uTorrent常见问题解答中文版
  11. FAST FW150R软件版本升级解决一些网页无法加载问题
  12. 行为树 --- [3] BehaviorTree.CPP在Windows下的使用(基于VSCode)
  13. Java获取字符串长度
  14. ps高低频磨皮详细教学
  15. 计算机网络显示正常 但无法上网怎么办,如何解决显示网络已连接但无法上网...
  16. 华为血压表WATCH D测量血压的数据可靠吗
  17. 论文专利博客写作总结
  18. mac 字体微软雅黑字体_如何在Mac上验证和删除字体
  19. python的pyecharts(群图乱舞)可视化神器
  20. TGRS2022/遥感:An Empirical Study of Remote Sensing Pretraining遥感预训练的实证研究

热门文章

  1. 两个Double相加,小数点有很多位问题
  2. Building Android App Without an IDE
  3. Android SO逆向2-实例分析
  4. 【问链-EOS公开课】第十四课 EOS从单签名到多签名
  5. JZOJ 5603. 【NOI2018模拟3.27】Xjz
  6. iTunes只能装C盘吗_C盘清理简单汇总
  7. html表单页脚,HTML 表格
  8. dubbo是长连接还是短连接_从快手短视频看,内容平台如何做好产品与用户的连接及运营实操...
  9. matlab优化工具箱
  10. BZOJ-1923-外星千足虫-SDOI2010