我正在学李老师的第二季,第一季看了一点点,直接就看第二季了,因为第二季是oop嘛,要是先看第一集又需要用很长时间,为了省时间我迫不及待的直接从项目看的,前面粗略的看了看,在之前我通过其他书籍和视频学的php,但是看到李老师的项目确实好.
学到验证码那个地方出错了,怎么也弄不好,最后发现,可能是由于李老师讲课时的php版本与现在的版本相差比较大,现在我的是wamp里带的5.5.12,导致有些代码需要改一下才能用,在解决问题时花了很多时间,不知道早看了李老师视频的有没有早就解决了问题,我才看到项目的第38节,所以请早学了李老师第二季视频的同学们给我分享下后面有没有需要修改的,我先分享之前我发现的.
下面是我遇到问题时自己网上搜索解决的,不一定是好答案或者不一定正确,但是可以顺利执行下去的,修改后执行的与老师的是一样的.
1_______ 在验证码的地方,如果按老师的是不行的现在,需要修改,1 是在ValidateCode.class.php 的outPut()方面第一行加入ob_end_clean(), 2 是在code.php 的$_vc=new ValidateCode()上面也加上这句话ob_end_clean(),我的就成功了.
ValidateCode.class.php需要修改的地方
private function outPut(){
ob_end_clean(); //需要增加
header(‘Content-type:image/png‘);
imagepng($this->img);
imagedestroy($this->img);
}
code.php 需要修改的地方
<?php
require dirname(__FILE__).‘/init.inc.php‘;
ob_end_clean(); //需要增加
$_vc=new ValidateCode();
$_vc->doimg();
$_SESSION[‘code‘] = $_vc->getCode();
?>
2________再一个就是今天在学的项目的38节,现在的php版本已经不自动转义了,用那个判断是否已开启自动转换函数PHP 5.3.0 起废弃并将自 PHP 5.4.0 起移除,我想php开发者觉得有点画蛇添足了,所以又改回来了,还有就是老师用的转换函数是mysql_real_escape_string(),但点击增加时,会因为此函数出现警告错误,错误提示是建议用mysqli或pdo,以后可能会移除mysql,所以需要把此函数改成mysqli_real_escape_string(),不用Tool里的方法了
ManageModel.calss.php和LevelModel.calss.php需要修改的地方是一样的,需要改的代码是这样的:
public function __set($_key,$_value){
$this->$_key= mysqli_real_escape_string( DB::getDB(),$_value);
}
这个是我蒙的,不知道对不,运行是可以的.
3._________安装老师的写法会出现一些通知类错误,错误提示未定义某些变量或数组索引,是因为老师当时的php版本低才没有提示错误还是因为老师修改了php.ini配置文件里的错误提示等级呢,php本来就不需要先定义类型,网上说是为了规范,通知类错误可以忽略么,如果可以就改错误提示等级,在php.ini改或者是在:
第一种方法只要在init.inc.php 的session_start();下面加上这句error_reporting(E_ALL & ~E_NOTICE);这句是忽略通知错误提示.
第二种方法是,也可以不修改错误等级,就是把错误提示的未定义变量或数组索引给初始化,我遇到的有page..class.php 里的$_pagelist和$_page这个变量的问题,只要在此变量所在方法的第一行加上$_pagelist=null 或 $_page = null就可以了,我想的是给他初始化为空字符串,果然行了,不知道是否规范.
还一处是,这里不好描述啊,纠结,估计描述麻烦,简单说是manage.tpl生成的编译文件里的if语句里面的tpl对象的成员变量_vars数组需要判断是否存在,否则就会出现我遇到的通知错误提示,提示未定义的数组索引,
需要修改parser.class.php里的parIf()方法里的一条代码
$this->_tpl = preg_replace($_pattenIf,"<?php if (isset(\$this->_vars[‘$1‘])) {?>",$this->_tpl);
这是改好的,只是在里面加了判断数组索引是否存在isset()方法.
想到的就这么多了,这是截止项目第38节我所遇到的问题.php版本5.5.12
4____________第二季项目第40节,如果数据库cms_nav或cms_manage或cms_level里面没有数据就会出错,因为foreach里面的值为空,老师是在tpl里面判断是否为空,三个页面都要改比较麻烦,我就发现了一个比较简单的解决这个问题的方法,不用在tpl里判断,需要修改Tool.class.php里的htmlString()方法
Tool.class.php需要修改的内容:
static function htmlString($_date) {
if (is_array($_date)) {
$_string = array(); //添加这句
foreach ($_date as $_key => $_value) {
$_string[$_key] = Tool::htmlString($_value); //递归
}
} elseif (is_object($_date)) {
$_string = new stdClass(); //添加这句
foreach ($_date as $_key => $_value) {
$_string->$_key = Tool::htmlString($_value); //递归
}
} else {
$_string = htmlspecialchars($_date);
}
return $_string;
}
我的电脑中了arp病毒了,打开网页有百分之八十的网页在右下角弹框,百度贴吧知道百科都弹,杀毒软件都不好用啊,怎么弄
我的验证码又出问题了,又修改了个地方
code.php 需要修改的地方
<?php
require dirname(__FILE__).‘/init.inc.php‘;
if(!IS_CACHE) ob_start();//添加
ob_end_clean(); //需要增加
$_vc=new ValidateCode();
$_vc->doimg();
$_SESSION[‘code‘] = $_vc->getCode();
?>
5________项目第47节,我遇到了错误,修改如下
NavModel.class.php里面修改
public function __set($_key, $_value) {
if (is_array($_value)) {
$_Zvalue = array();
foreach ($_value as $_Vkey =>$_Vvalue) {
$_Zvalue[$_Vkey] = mysqli_real_escape_string(DB::getDB(), $_Vvalue);
}
$this->$_key = $_Zvalue;
} else {
$this->$_key = mysqli_real_escape_string(DB::getDB(), $_value);
}
}
为什么我的需要改成判断数组才正确呢
还有遇到很多未声明错误,就不写了,大同小异,不行就修改错误等级.