热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【PHPThinkPHP框架】小bug汇总[更新]

目录结构1.函数调用2.绑定select下拉框数据3.PHP查询功能4.格式化时间和价钱7.新增信息或者修改信息的自动验证和自动填充8.验证码9.NotFound10.字符串处理函数11.单引号和双引号最近开始接触PHP编程语言,遇到各种小问题,不断总结,不断进步。由

目录结构 1.函数调用 2.绑定select下拉框数据 3.PHP查询功能 4.格式化时间和价钱 7.新增信息或者修改信息的自动验证和自动填充 8.验证码 9.NotFound 10.字符串处理函数 11.单引号和双引号 最近开始接触PHP编程语言,遇到各种小问题,不断总结,不断进步。由

目录结构

1.函数调用

2.绑定select下拉框数据

3.PHP查询功能

4.格式化时间和价钱

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 

3.PHP查询功能

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

      class="sbfont">搜索栏目:
      
        关键字:
        
        


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();
    }

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


   
  • {$row.create_time|date="Y-m-d",###} {$row.title}
  • 好了,纠结了一整天的查询功能就分分钟做好了。

    4.格式化时间和价钱

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

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

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

    $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当中就写需要添加的数据就行了,这样:

            
                

    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脚本来实现点击图片刷新验证码的功能:

    
    

    这里注意一个细节:路径里面在“{: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()中需要使用双引号,这样才能正确替换字符串。

    推荐阅读
    • Oracle分析函数first_value()和last_value()的用法及原理
      本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
    • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
    • 如何实现织梦DedeCms全站伪静态
      本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
    • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
    • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
    • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
    • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
    • C# 7.0 新特性:基于Tuple的“多”返回值方法
      本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
    • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
    • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
      本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
    • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
    • Oracle优化新常态的五大禁止及其性能隐患
      本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
    • 本文是关于C#类型系统、值类型和引用类型的概念性笔记。介绍了C#1系统类型的三个特性,静态类型的含义,显式类型和隐式类型的区别。还讨论了类、结构、数组类型、枚举、委托类型和接口类型属于哪一种类型。同时纠正了关于结构、引用类型和对象传递的错误表述。最后提到了C#4中使用动态类型的关键字。 ... [详细]
    • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
    • 在C#中,使用关键字abstract来定义抽象类和抽象方法。抽象类是一种不能被实例化的类,它只提供部分实现,但可以被其他类继承并创建实例。抽象类可以用于类、方法、属性、索引器和事件。在一个类声明中使用abstract表示该类倾向于作为其他类的基类成员被标识为抽象,或者被包含在一个抽象类中,必须由其派生类实现。本文介绍了C#中抽象类和抽象方法的基础知识,并提供了一个示例代码。 ... [详细]
    author-avatar
    十字彩虹00
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有