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

  

posted @ 2018-01-24 23:39  仙兔不吃胡萝卜  阅读(154)  评论(0)    收藏  举报