TP基础问题第三天
1、如何开启调试模式,开启调试模式有什么用处?
define('APP_DEBUG',true) //便于调试开发
2、如何定义空空控制器和空操作?
class EmptyController extends Controller{
public function _empty(){
}
}
3、控制器的参数的前置和后置操作如何定义?
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller{
//前置操作方法
public function _before_index(){
echo 'before<br/>';
}
public function index(){
echo 'index<br/>';
}
//后置操作方法
public function _after_index(){
echo 'after<br/>';
}
}
4、请写出自动验证的规则,要求在修改和新增时都校验密码字段(pwd)的规则并且不管是否为空都要进行校验,规则为:密码要含有大小写字母和数字并且长度要至少为6位;
protecate $_validate = array(
array('pwd','/^ [0-0a-zA-Z]{6,}$/','提示信息',1,'regex',3);
)
5、3种查询方式和8种查询方法都是什么?
一、使用字符串作为查询条件
这是最传统的方式,但是安全性不高,例如:
$User = M("User"); // 实例化User对象
$User->where('type=1 AND status=1')->select();
最后生成的SQL语句是
SELECT * FROM think_user WHERE type=1 AND status=1
采用字符串查询的时候,我们可以配合使用字符串条件的安全预处理机制。
二、使用数组作为查询条件
这种方式是最常用的查询方式,例如:
$User = M("User"); // 实例化User对象
$condition['name'] = 'thinkphp';
$condition['status'] = 1;
// 把查询条件传入查询方法
$User->where($condition)->select();
最后生成的SQL语句是
SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1
如果进行多字段查询,那么字段之间的默认逻辑关系是 逻辑与 AND,但是用下面的规则可以更改默认的逻辑判断,通过使用 _logic 定义查询逻辑:
$User = M("User"); // 实例化User对象
$condition['name'] = 'thinkphp';
$condition['account'] = 'thinkphp';
$condition['_logic'] = 'OR';
// 把查询条件传入查询方法
$User->where($condition)->select();
最后生成的SQL语句是
SELECT * FROM think_user WHERE `name`='thinkphp' OR `account`='thinkphp'
三、使用对象方式来查询
这里以stdClass内置对象为例:
$User = M("User"); // 实例化User对象
// 定义查询条件
$condition = new stdClass();
$condition->name = 'thinkphp';
$condition->status= 1;
$User->where($condition)->select();
最后生成的SQL语句和上面一样
SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1
使用对象方式查询和使用数组查询的效果是相同的,并且是可以互换的,大多数情况下,我们建议采用数组方式更加高效。
在使用数组和对象方式查询的时候,如果传入了不存在的查询字段是会被自动过滤的,例如:
$User = M("User"); // 实例化User对象
$condition['name'] = 'thinkphp';
$condition['status'] = 1;
$condition['test'] = 'test';
// 把查询条件传入查询方法
$User->where($condition)->select();

6、请写出一个组合查询中复合查询的示例代码;
复合查询相当于封装了一个新的查询条件,然后并入原来的查询条件之中,所以可以完成比较复杂的查询条件组装。 例如:
$where['name'] = array('like', '%thinkphp%');
$where['title'] = array('like','%thinkphp%');
$where['_logic'] = 'or';
$map['_complex'] = $where;
$map['id'] = array('gt',1);
查询条件是
( id > 1) AND ( ( name like '%thinkphp%') OR ( title like '%thinkphp%') )
复制代码
复合查询使用了_complex作为子查询条件来定义,配合之前的查询方式,可以非常灵活的制定更加复杂的查询条件。 很多查询方式可以相互转换,例如上面的查询条件可以改成:
$where['id'] = array('gt',1);
$where['_string'] = ' (name like "%thinkphp%") OR ( title like "%thinkphp") ';
7、请写出连贯操作中可以重复调用的2个操作;
where join
8、请写出登录验证的页面端验证和服务端验证的代码,要求页面前端使用ajax校验验证码是否正确,
争取可以点击提交按钮,错误点击提交按钮无反应,提交后服务端再次校验验证码是否争取,
请写出html的代码中Ajax提交验证码并通过回调函数修改按钮属性的代码,ajax要求使用$.post方式,
服务端要求写出控制器和方法的完整结构性的代码,其中方法中只完成校验验证码的部分代码即可;
控制器

视图层

9、请写出AJAX方式上传图片的服务端代码,要求返回的json数据包含有status(上传的状态)、err_msg(上传错误信息)、avatar(原图地址)、thumb(缩略图地址),
要求写出完整服务端代码,并校验上传文件的后缀名和真实的文件类型是否属于(png、jpg、gif)三种格式,
并将原图添加文字水印、原图没有水印的图片生成100*100的缩略图;
public function ajaxUpload()
{
if (IS_POST) {
$config = array(
'mimes' => array('image/png,image/jpg,image/gif') //判断真实格式
'maxSize' => 3145728,
'rootPath' => './Public/',//保存根路径,一定要重新设置,否则无法找到根路径
'savePath' => 'Uploads/',
'saveName' => array('uniqid', ''),
'exts' => array('jpg', 'gif', 'png', 'jpeg'),
'autoSub' => true,
'subName' => array('date', 'Ymd'),
);
$upload = new Upload($config);
$info = $upload->upload();
if (!$info) {
$data = array(
"err_msg" => $upload->getError(),
"status" => 0,
"avatar" => '',
"thumb" => ""
);
} else {
$logo = $info['file']['savepath'] . $info['file']['savename'];
$thumb = $info['file']['savepath'] . 'thumb_' . $info['file']['savename'];
$dir = ROOT . '/Public/';
$image = new \Think\Image();
$image->open($dir . $logo);
$image->open($dir.$logo)->text('ThinkPHP','./1.ttf',20,'#000000',\Think\Image::IMAGE_WATER_SOUTHEAST)->save($dir.$logo);
$ret = $image->thumb(100, 100)->save($dir . $thumb);
if ($ret) {
$data = array(
"err_msg" => "上传成功!",
"avatar" => $logo,
"thumb" => $thumb,
"status" => 1
);
} else {
$data = array(
"err_msg" => '缩略图生成失败',
"status" => 0,
"avatar" => '',
"thumb" => ""
);
}
}
$this->ajaxReturn($data);
//echo json_encode($data);如果用echo 返回的话 最后要exit();防止下面的html语句输出
exit();
}
}

浙公网安备 33010602011771号