Inhaltsverzeichnis
1.函数调用
2.绑定select下拉框的数据
3.PHP查询功能
4.格式化时间和价钱
7.新增信息或者修改信息的自动验证和自动填充
" > 9.ThinkPHP "NotFound"错误
10.字符串处理的一些常用函数
11.单引号和双引号
Heim php教程 php手册 【PHP ThinkPHP框架】小bug汇总[更新]

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

Jun 06, 2016 pm 07:42 PM
bug php thinkphp 更新 框架 汇总 目录

目录结构 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写了,后来发现了更加简便的方法。

代码是这样的:

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

3.PHP查询功能

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

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

Nach dem Login kopieren
class="sbfont">搜索栏目: 关键字:
View Code

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

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

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

<volist name="searchResultList" id="row">
   <li>
      <span>{<span>$row</span>.create_time|<span>date</span>="Y-m-d",<span>#</span><span>##}</span></span>
      <a href="%7B<span>%24row</span>.link_url%7D" target="_blank">{<span>$row</span>.title}</a>
   </li> 
</volist>
Nach dem Login kopieren

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

4.格式化时间和价钱

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

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

 

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

 

<eq name="”item.group_id”" value="”<span">$one.group_id”> 这里注意name不带$,value带$.</eq>
Nach dem Login kopieren

 

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

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

<span>protected</span> <span>$tableName</span> = 'think_user';  //这里的think_user就是数据表的名称
Nach dem Login kopieren

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

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

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

Action中要这样写:

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

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

        
Nach dem Login kopieren

 8.验证码

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

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

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

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

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

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

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

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

这里注意一个细节:路径里面在“{: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.字符串处理的一些常用函数

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

    trim($string,',');

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

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

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

    explode("-",$string);

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

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

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

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

.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()中需要使用双引号,这样才能正确替换字符串。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

CakePHP-Kurzanleitung CakePHP-Kurzanleitung Sep 10, 2024 pm 05:27 PM

CakePHP ist ein Open-Source-MVC-Framework. Es erleichtert die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich. CakePHP verfügt über eine Reihe von Bibliotheken, um die Überlastung der häufigsten Aufgaben zu reduzieren.

See all articles