6月19 琐碎知识点

1.JS和CSS的路径问题

1.在view中的html静态页面引入js或cs时不是从所在的页面开始找而是从从入口文件index.php开始找的,
2.把所有要引入的js或cs文件全部放在public文件夹下,再把文件引入到当前页面的时候使用:

传统方式的导入外部JS和CSS文件的方法是直接在模板文件使用:

找路径是从入口文件index.php来找的

在存放JS和CSS的时候可以放到public文件夹下

2.第三方类的引用

有两块地方可以放第三方类
(1)模块下面
(2)Library下面新建文件夹或者旧的文件夹里面
放进去之后,需要添加命名空间,命名空间从根命名空间写起
注意类文件的命名规则和类名的规则

之前是使用连贯操作:limit

而现在是想办法将之前的分页类page.class.php引入使用:

Library下面新建文件夹或者旧的文件夹里面

做法1:在ThinkPHP\Library\Think文件夹下新建fenye文件夹并将之前的page.class.php复制到fenye里

page.class.php的命名空间:namespace Think\fenye;(其余不发生变化)

控制器里面写入:use Think\fenye\Page;

<?php
namespace Home\Controller;
use Think\Controller;
use Think\fenye\Page;
class ZhuceController extends Controller
{

    public function FenYe()
    {
        $model = D("Nation");
        $total = $model->count();

        $page = new Page($total,1);

        $sql = "select * from Nation ".$page->limit;
        $attr = $model->query($sql);

        $xinxi = $page->fpage();
        $this->assign("xinxi",$xinxi);
        //var_dump($attr);
        $this->assign("nation",$attr);
        $this->display();
    }

}

模板显示html代码:FenYe.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>分页信息显示</title>
</head>

<body>
<h1>主页面</h1>
<table width="50%" border="1" cellpadding="0" cellspacing="0">
<tr>
    <td>代号</td>
    <td>名称</td>
</tr>
<foreach name="nation" item="v">
<tr>
    <td><{$v.code}></td>
    <td><{$v.name}></td>
</tr>
</foreach>
</table>
<div><{$xinxi}></div>
</body>
</html>

显示效果:

做法2.在Home模块下的做法

在Home下新建文件夹fenye然后引入Page.class.php,其余不发生改变,效果是一样的

分页类里面的命名空间发生改变:namespace Home\fenye

控制器里面的的命名空间改变:use Home\fenye\Page

做法3.不用use的方法改下做法2:

做法4:改变分页的部分条件使用连贯操作的方法

    

方法的改变:

public function FenYe()
    {
        $model = D("Nation");
        $total = $model->count();

        $page = new \Home\fenye\Page($total,1);

        //方法2:分页类发生改变的时候
        $attr = $model->limit($page->limit)->select();

        $xinxi = $page->fpage();
        $this->assign("xinxi",$xinxi);
        //var_dump($attr);
        $this->assign("nation",$attr);
        $this->display();
    }

3.Ajax返回

(1)url要变为MVC模式,指向的不是具体页面,是操作方法

(2)在操作方法里面返回值的时候,使用ajaxReturn()方法返回,注意返回类型,返回类型要和第二个参数一致

ThinkPHP可以很好的支持AJAX请求,系统的\Think\Controller类提供了ajaxReturn方法用于AJAX调用后返回数据给客户端。并且支持JSON、JSONP、XML和EVAL四种方式给客户端接受数据,并且支持配置其他方式的数据格式返回。

1)利用Ajax返回的动态验证-----Zhuce和Yhm的方法:

<?php
namespace Home\Controller;
use Think\Controller;
//use Think\fenye\Page;//在Think下的分页
//use Home\fenye\Page;
class ZhuceController extends Controller
{
    public function ZhuCe()
    {
        //静态的验证
        $cw = "";
        if(!empty($_GET))
        {
            $cw = $_GET["cw"];
        }
        if(empty($_POST))
        {
            $this->assign("error",$cw);
            $this->display();

        }
        else
        {

            //动态的验证,以用户名的验证为例,此时不需要新建模型
            $model = new \Home\Model\TestModel();
            $rules = array(
                array(‘uid‘,‘require‘,‘用户名不能为空‘),
                array(‘pwd‘,‘require‘,‘密码不能为空‘),
                array(‘pwd‘,‘pwd1‘,‘两次输入的密码不一致‘,1,‘confirm‘),
                //array(‘age‘,‘18,50‘,‘年龄必须在18到50之间‘,1,‘between‘),
                //array(‘email‘,‘email‘,‘邮箱格式不正确‘),
                //array(‘email‘,‘‘,‘邮箱已被注册‘,1,‘unique‘),//unique可以验证非主键字段
            );

            if(!$model->validate($rules)->create())
            {
                echo $model->getError();
            }
            else
            {
                $model->add();
            }

        }
    }

    public function Yhm()
    {
        $model = D("test");

        $rules = array(
            array("uid","require","用户名不能为空"),
        );
        if(!$model->validate($rules)->create())
        {
            $fh = $model->getError();
            $this->ajaxReturn($fh,‘eval‘);
        }
        else
        {
            $fh = "ok";
            $this->ajaxReturn($fh,‘eval‘);
        }

    }

2)Zhuce.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script src="../../../../../jquery-1.11.2.min.js"></script>
</head>

<body>
<h1>注册</h1>
<form action="__ACTION__" method="post">
<div>用户名:<input type="text" id="uid" name="uid" /><span id="ts"></span></div><br />

<div>密码:&nbsp;&nbsp;<input type="text" name="pwd" /></div>

<div>确认密码:<input type="text" name="pwd1" /></div><br />

<div>年龄:<input type="text" name="age" /></div><br />

<div>邮箱:<input type="text" name="email" /></div><br />

<div>姓名:<input type="text" name="name" /></div><br />
<br />
<div><{$error}></div>
<input type="submit" value="注册" />

</form>
</body>
</html>
<script type="text/javascript">
$(document).ready(function(e) {
    $("#uid").blur(function(){
        var uid = $(this).val();

        $.ajax({
            url:"__CONTROLLER__/Yhm",
            data:{uid:uid},
            type:"POST",
            dataType:"TEXT",
            success: function(data){
                //alert(data);
                $("#ts").html(data);
                }

            });

        })

});

</script>

显示效果:

    

4.Session和Cookie

系统提供了Session管理和操作的完善支持,全部操作可以通过一个内置的session函数完成,该函数可以完成Session的设置、获取、删除和管理操作。

session初始化设置

如果session方法的第一个参数传入数组则表示进行session初始化设置,例如:

关闭自动启动后可以项目的公共文件或者在控制器中通过手动调用session_start或者session(‘[start]‘)启动session。

登录:做法1:特别注意命名空间

LoginController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
class LoginController extends Controller
{
    public function Login()
    {
        if(empty($_POST))
        {
            $this->display();
        }
        else
        {
            $model = D("users");        

            $uid = $_POST["uid"];
            $pwd = $_POST["pwd"];

            $attr = $model->field("Pwd")->find($uid);
            //echo $attr["pwd"];

            if($pwd == $attr["pwd"])
            {
                session("uid",$uid);
                $this->success("登录成功","Main");
            }
            else
            {
                $this->error("登录失败");
            }
        }
    }

    public function Main()
    {
        //var_dump(session(‘?uid‘));
        //有session时返回true

        //判断session
        if(!session(‘?uid‘))
        {
            $this->error("未登录","Login");
            exit();
        }

        echo "主页面";
    }
}

Login.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
<h1>在这里登录好了</h1>
<form action="__ACTION__" method="post">
<div>用户名:<input type="text" name="uid" /></div>
<div>密码:<input type="password" name="pwd" /></div>
<input type="submit" value="登录" />

</form>
</body>
</html>

登录:做法2:注意命名空间,比之前的做法要方便(不论访问哪个都跳转到登录)

CheckController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
class CheckController extends Controller
{
    //这个类要作为所有控制器的父类
        function __construct()
        {
            parent::__construct();
            if(!session(‘?uid‘))
            {
                $this->error("未登录",U("Login/Login"));
            }
        }
}

更改MainController.class.php里面的命名空间:

namespace Home\Controller;
use Home\Controller\CheckController;
class MainController extends CheckController

这是不论访问MainController下的哪个路径都只能到登录

登录的LoginController.class.php命名空间试过两种都是可以的:(与做法1是一样的)

1)

namespace Home\Controller;
use Think\Controller;
class LoginController extends Controller

2)

namespace Home\Controller;
use Home\Controller\CheckController;
class LoginController extends CheckController

改变

5.防止用户绕过登录直接访问操作方法
做一个控制器的父类,在该父类里面写一个构造方法,构造方法里面判断session里面有没有值,如果没值。。。如果有值。。。

时间: 2024-11-13 10:45:23

6月19 琐碎知识点的相关文章

Java琐碎知识点

知识点1: 1 String str1 = "abc";// 没有创建任何对象 2 String str2 = new String("abc");// 创建了2个对象 3 String str3 = new String("abc");// 创建了1个对象 4 System.out.println(str1 == str2);// 输出:false 5 System.out.println(str1 == str3);// 输出:false 6

【蜕变之路】第1天 规划 (2019年2月19日)

声明: 本人是一名刚步入社会的职场小白,主要从事Java后端开发.开启[蜕变一路]系列主要是为了记录每日学习.思考以及总结的情况,目的是为了不断挑战自己,提升自己!此系列全程公开,欢迎见证! 内容: 1.每天学习一道编程题或者一个Java知识点(Java相关) 2.每周发表一篇技术文章(由浅入深) 3.每三天进行一次运动(跑步.打篮球.羽毛球等等) 4.每天睡前阅读三十分钟 5.每天学习英语三十分钟 时间: 2019年2月19日~2020年2月19日 期望: 1.提高Java编程能力 2.提高文

23.密码学知识-加密介绍-1——2019年12月19日

2019年12月19日14:51:00 1. 第1天 - 对称加密 1.1 基础知识点 知识点大纲介绍 密码的基础概念 对称加密 非对称加密 单向散列函数 哈希函数 消息认证码 数字签名 证书 ssl/tls - https 为什么要加密, 以及解决方案 保证数据安全 加密三要素 明文/密文 秘钥 定长的字符串 需要根据加密算法确定其长度 算法 加密算法 解密算法 加密算法和解密算法有可能是互逆的, 也有可能相同 常用的两种加密方式 对称加密 秘钥: 加密解密使用的是同一个秘钥, 秘钥有一个 特

老男孩教育每日一题-2017年5月11-基础知识点: linux系统中监听端口概念是什么?

1.题目 老男孩教育每日一题-2017年5月11-基础知识点:linux系统中监听端口概念是什么? 2.参考答案 监听端口的概念涉及到网络概念与TCP状态集转化概念,可能比较复杂不便理解,可以按照下图简单进行理解? 将整个服务器操作系统比喻作为一个别墅 服务器上的每一个网卡比作是别墅中每间房间 服务器网卡上配置的IP地址比喻作为房间中每个人 而房间里面人的耳朵就好比是监听的端口 当默认采用监听0.0.0.0地址时,表示房间中的每个人都竖起耳朵等待别墅外面的人呼唤当别墅外面的用户向房间1的人呼喊时

06月19日【迅雷王】已更新可用迅雷会员114个

关注迅雷王迅雷王博客中的所有迅雷账号由Python程序自动验证可用后发送到Blog中供大家免费享用,如果很快被查封可以扫描微信二维码免费领取每日专享迅雷VIP账号! [迅雷王Blog]ID:xunleiaccount 按[Ctrl + D]收藏 [迅雷王]迅雷账号_迅雷王坚持在博客园至少每天更新10个可用迅雷账号!06月19日[迅雷王]已更新可用迅雷会员114个 [迅雷王迅雷钻石会员]81267[密码]size517984 [迅雷王迅雷钻石会员]tlxnvyw[密码]tlxnvyw:240735

8月19号=》436页-440页

16.1 Web Storage 在传统的HTML时代,浏览器的主要功能只是负责展现HTML页面,即使增加了JavaScript脚本,依然只是为动态地修改HTML页面服务.因此 浏览器只是一个“界面呈现工作”. 如果开发者需要在客户端存储少量数据,早起只能通过Cookie来实现,但Cookie存在如下3点不足: Cookie的大小被限制为4KB. Cookie会包含在每个HTTP请求中向服务器发送,这样势必导致多次发送重复数据. Cookie在网络传输时并未加密(除非整个应用都使用SSL),因此

抱团App iOS版1.6已于5月19日0点10分发布

抱团App iOS版1.6已于5月19日0点10分发布, App Store 下载地址:https://itunes.apple.com/cn/app/bao-tuan-tuan-gou-jing-pin/id789571099?ls=1&mt=8 欢迎各种吐槽,技术交流,等等. 抱团App iOS版1.6已于5月19日0点10分发布,布布扣,bubuko.com

2016年7月19日学习笔记

2016年7月19日学习笔记 计算机系统的组成部分 计算机系统由硬件系统和软件系统两大部分组成 硬件系统 冯.诺依曼体系结构: 1946年数学家冯.诺依曼提出运算器,控制器,存储器,输入设备,输出设备. 具体变现为一下硬件: 运算器,控制器  ------>  CPU 存储器          ------>  内存(断电数据清空),硬盘(可永久存储数据) 输入设备------>  键盘,鼠标等 输出设备------>  显示器 打印机等 软件系统 OS : Operating S

Scala琐碎知识点

tuple scala中的tuple数据结构,是用来包含不同数据类型的容器,定义如下: 访问tuple中的元素,需要使用._n的语法,索引从1开始: scala中的tuple的长度最多为22,超过22报错: 上述定义scala中的tuple的方式是下面这种方式的缩写: scala中的cons(:: 和 :::  ) 首先要知道在Scala中Nil代表的是空的列表List cons定义: x :: xs 如下就是把一个Int类型添加到Int类型的List中 ::: 这个运算符在scala中表示的是