• thinkphp修改和删除数据


    1.在控制器MainController里面写一个方法,调用Nation表中的数据。

    public function zhuyemian()
        {
            $n = D("Nation");//造一个Nation对象
            $attr = $n->select();//查询所有数据,返回的是一个二维数组。
            $this->assign("n",$attr);//将二维数组注册到模板里面显示.
            $this->show();//调用模板显示
        }

    2.新建一个显示的模板文件zhuyemian.html

    <body>
    <table width="100%" border="1" cellpadding="0" cellspacing="0">
        <tr>
            <td>代号</td>
            <td>名称</td>
            <td>操作</td>
        </tr>
        <foreach name="n" item="v"><!--用foreach内置标签标签循环出表格信息,v代表小数组。-->
        <tr>
            <td>{$v.code}</td><!--注意这里是{$v.code},而不是{$v[0]},因为查到的数据是二维关联数组-->
            <td>{$v.name}</td>
            <td><a href="__CONTROLLER__/xiugai/code/{$v.code}">修改</a><!--因为是在同一个控制器里面,可以直接用__CONTROLLER__获取到该控制器的路径,后面写上xiugai方法,再在后面写要传的值的名称,最后写上值。路径不能写死,要写成动态的,模板里面的所有路径都尽量不要写死,都要用常量信息写。-->
                <a href="__CONTROLLER__/shanchu/code/{$v.code}" onclick="return confirm('确定删除吗?')">删除</a></td><!--指向删除方法并且传一个code值,code值也是{$v.code}-->
        </tr>
        </foreach>
    </table>
    </body>

    3.显示页面

    4.做修改显示页面xiugai.html

    <body>
    <form action="__ACTION__" method="post"><!--action指向当前控制器,只要是找链接、路径都要用常量信息写,不要写死-->
    <input  type="hidden" name="Code" value="{$nation.code}" />
        <div>名称:<input type="text" name="Name" value="{$nation.name}" /></div>
        <div><input type="submit" value="修改" /></div>
    
    </form>
    </body>

    5.在控制器MainController里面写修改方法

    public function xiugai($code="")//xiugai方法里面要实现2个逻辑,1是显示页面,2是修改信息。
        {
            $n = D("Nation");
            if(empty($_POST))//判断POST数组是否为空,如果是空的,就显示页面。
            {
                $nation = $n->find($code);//find只找1条数据,并且是一维数组。
                $this->assign("nation",$nation);
                $this->show();
            }
            else//POST数组不为空就执行修改逻辑
            {
                //修改
                $n->create();//自动收集表单,create收集表单比较智能,有别的表单会自动忽略掉,比如注册账号的时候会让用户输入2个密码,这样就需要把2个密码框中的一个设置成列名,另外一个随便设置一个非列名,这个不是列名的密码框会自动忽略掉。所以不需要提交的表单不用列名就可以。
                $r = $n->save();//save方法是修改的方法
                if($r)
                {
                    $this->success("修改成功","zhuyemian");//修改成功后,提示“修改成功”并且跳转到zhuyemian.html
                }
                else
                {
                    $this->error("修改失败");//修改失败提示“修改失败。”
                }
            }
        }

    6.点击修改,跳转到修改页面,并且传对应的code值。

    修改成功后,点击“修改”。

     7.在控制器MainController里面写删除方法

    public function shanchu($code)//删除方法也需要一个code
        {
            $n=D("Nation");//造对象
            $r = $n->delete($code);//调用删除方法,直接把主键值作为参数放在()里面就可以。
            if($r)
            {
                $url = U("zhuyemian");//用U方法造一个路径
                $this->success("删除成功",$url);//把造的路径放在要跳转的页面里面,注意不能直接也页面,会出错。
            }
            else
            {
                $this->error("删除失败");
            }
        }

    thinkphp3.2.3使用手册

    8.模板

    (1)变量输出

    变量输出和smarty模板时一样的,都是{$name}。

    (2)系统变量的输出

    1. {$Think.server.script_name} // 输出$_SERVER['SCRIPT_NAME']变量
    2. {$Think.session.user_id} // 输出$_SESSION['user_id']变量
    3. {$Think.get.pageNumber} // 输出$_GET['pageNumber']变量
    4. {$Think.cookie.name} // 输出$_COOKIE['name']变量
    5. {$Think.const.MODULE_NAME}//输出常量
    6. {$Think.config.db_charset}//输出配置参数
    7. {$Think.lang.page_error}//取语言

    (3)使用函数(用|调用)

    1. {$data.name|md5}//$data.name调用md5
    2. {$create_time|date="y-m-d",###}//表示date函数传入两个参数,每个参数用逗号分割,这里第一个参数是y-m-d,第二个参数是前面要输出的create_time变量,因为该变量是第二个参数,因此需要用###标识变量位置,编译后的结果是:<?php echo (date("y-m-d",$create_time)); ?>

    (4)默认值输出

    1. {$Think.get.name|default="名称为空"}//默认值输出使用的是default,实际上也是一个函数。

    (5)使用运算符

      对模板输出使用运算符,也包括“+”“ ” “*” “/”和“%”。

    (6)模板继承

      模板继承是一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层。模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局),并且其中定义相关的区块(block),然后继承(extend)该基础模板的子模板中就可以对基础模板中定义的区块进行重载。

    示例:a.做一个父类的方法

    public function fu()
        {
            $this->show();
        }

    b.做父类的显示页面

    <title>无标题文档</title>
    <block name="tou"></block><!--做头部的区域,子类文件可以在这里继承头部-->
    </head>
    <body>
    <div style="100%; height:200px; background-color:red"></div>
    <block name="neirong"></block><!--做body的区域,子类文件可以在这里继承body-->
    <div style="100%; height:100px; background-color:green"></div>
    </body>

    c.做子模板的方法

    public function zi()
        {
            $this->show();
        }

    d.做子类的显示页面

    <extend name="fu" /><!--extend代表继承的意思,name里面是要继承的模板的名字-->
    <block name="tou">
        <title>测试子模板</title>
    </block>
    
    <block name="neirong">
        <div style="100%; height:300px; background-color:black"></div>
    </block>

    这样显示出来的页面就是子页面,但是头部和尾部都继承了父页面。

    (7)包含文件

    在当前模版文件中包含其他的模版文件使用include标签,标签用法:

    1. <include file="Public/header" /> // 包含头部模版header
    2. <include file="Public/menu" /> // 包含菜单模版menu
    3. <include file="Blue/Public/menu" /> // 包含blue主题下面的menu模版

    (8)比较标签

    他们的用法基本是一致的,区别在于判断的条件不同,并且所有的比较标签都可以和else标签一起使用。

    例如:<eq name="name" value="value">value</eq>表示name变量的值等于value就输出

    (9)import标签

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

    1. <script type='text/javascript' src='/Public/Js/Util/Array.js'>
    2. <link rel="stylesheet" type="text/css" href="/App/Tpl/default/Public/css/style.css" />

     系统提供了专门的标签来简化上面的导入:

    第一个是import标签 ,导入方式采用类似ThinkPHP的import函数的命名空间方式,例如:

    1. <import type='js' file="Js.Util.Array" />Type属性默认是js, 所以type='js'可以不写。

    还可以支持多个文件批量导入,例如:

    1. <import file="Js.Util.Array,Js.Util.Date" />

    9.SESSION和Cookie

    SESSION在thinkphp里面不需要加session_start()开启了,在配置文件里面有一项配置是true默认开启的。

    SESSION存储数据

    1. session(array('name'=>'session_id','expire'=>3600));

    Session初始化设置方法无需手动调用,在ThinkApp类的初始化工作结束后会自动调用,通常项目只需要配置SESSION_OPTIONS参数即可,SESSION_OPTIONS参数的设置是一个数组,支持的索引名和前面的session初始化参数相同。

    默认情况下,初始化之后系统会自动启动session,如果不希望系统自动启动session的话,可以设置SESSION_AUTO_START为false,设置方式:

    1. 'SESSION_AUTO_START' =>false

    Session赋值比较简单,直接使用:

    1. session('name','value'); //设置session

    Session取值使用:

    1. $value = session('name');
    2. // 获取所有的session 3.2.2版本新增
    3. $value = session();

    删除某个session的值使用:

    1. session('name',null); // 删除name

    要判断一个session值是否已经设置,可以使用

    1. // 判断名称为name的session值是否已经设置
    2. session('?name');

    Cookie设置

    1. cookie('name','value'); //设置cookie
    2. cookie('name','value',3600); // 指定cookie保存时间

    还可以支持参数传入的方式完成复杂的cookie赋值,下面是对cookie的值设置3600秒有效期,并且加上cookie前缀think_

    1. cookie('name','value',array('expire'=>3600,'prefix'=>'think_'))

    获取cookie很简单,无论是怎么设置的cookie,只需要使用:

    1. $value = cookie('name');

    如果没有设置cookie前缀的话 相当于

    1. value = $_COOKIE['name'];

     

    删除某个cookie的值,使用:

    1. cookie('name',null);

     

    要删除所有的Cookie值,可以使用:

    1. cookie(null); // 清空当前设定前缀的所有cookie值
    2. cookie(null,'think_'); // 清空指定前缀的所有cookie值
  • 相关阅读:
    gc buffer busy/gcs log flush sync与log file sync
    给Oracle年轻的初学者的几点建议
    Android 编程下帧动画在 Activity 启动时自动运行的几种方式
    Android 编程下 Touch 事件的分发和消费机制
    Java 编程下 static 关键字
    Java 编程下 final 关键字
    Android 编程下模拟 HOME 键效果
    Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated ?
    Extjs4 大型项目目录结构重构
    [转]SQLServer 2008 允许远程连接的配置方法
  • 原文地址:https://www.cnblogs.com/Strive-count/p/6215316.html
Copyright © 2020-2023  润新知