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="width:100%; height:200px; </div>
<block name="neirong"></block><!--做body的区域,子类文件可以在这里继承body-->
<div style="width:100%; height:100px; </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="width:100%; height:300px; </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初始化设置方法无需手动调用,在Think\App类的初始化工作结束后会自动调用,通常项目只需要配置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值

TP框架---thinkphp修改删除数据的更多相关文章

  1. TP框架---thinkphp基础知识

    php框架    发瑞 一.真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困 ...

  2. Tp框架—方法中处理数据

    Tp框架-方法中处理数据 可以使用函数过滤处理内容. $data[$key]['content_title'] = mb_substr(strip_tags($val['content']) ,0,4 ...

  3. TP框架的修改,删除

    先把数据库的素具显示出来 public function xiugai() { $code= "n001";//修改的主键值 $n = M("nation"); ...

  4. TP框架---thinkphp表单验证

    自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证.验证的代码要写在模型层即Model里面. 数据验证有两种方式: 静态方式:在模型类里面 ...

  5. TP框架---thinkphp模型

    1.获取系统常量信息的方法:在控制器DengLuController里面下写入下面的方法,然后调用该方法. public function test() { //echo "这是测试的&qu ...

  6. Oracle的学习二:表管理(数据类型、创建/修改表、添加/修改/删除数据、数据查询)

    1.Oracle表的管理 表名和列名的命名规则: 必须以字母开头: 长度不能超过30个字符: 不能使用oracle的保留字: 只能使用如下字符:A-Z, a-z, 0-9, $, # 等. Oracl ...

  7. SQL Server 创建 修改 删除数据表

    1. 图形界面方式操作数据表 (1)创建和修改数据表 列名中如果有两个以上单词时,最好用下划线连接,否则可能会给将来的查询维护带来不便.我们公司美国佬做的数据库就很烦,所有列名都有空格,一旦忘记用方括 ...

  8. 第 一 百 天上课 PHP TP框架 数据库修改和删除

    修改的三种方式 //造数组的方式修改 public function xiugai1() { $db=D('yonghu'); $attr=array ( 'zhanghao'=>001, // ...

  9. TP框架---thinkphp查询和添加数据

    查询 <?php namespace Admin\Controller; use Think\Controller; class MainController extends Controlle ...

随机推荐

  1. java基于udp实现键盘录入聊天

    发送端 package demo02; import java.io.IOException; import java.net.DatagramPacket; import java.net.Data ...

  2. HTML5-contentEditable属性规定是否可编辑元素的内容

    contentEditable='true' :可以编辑 contentEditable='false' :不可以编辑

  3. ef core 2.1 利用Query Type查询视图

    ef core新加入的功能“Query Type”可以让我们很方便的查询视图而不需要做任何特殊处理.不过在代码上和普通的查询有些不同. 先贴文档:https://docs.microsoft.com/ ...

  4. linux定时问题

    手动运行java脚本,可以,但定时运行没效果 查看脚本是否赋予执行权限:若无则赋予可执行权限,若还是没用,则在脚本增添环境变量,百度搜索.

  5. BZOJ——3412: [Usaco2009 Dec]Music Notes乐谱

    http://www.lydsy.com/JudgeOnline/problem.php?id=3412 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit:  ...

  6. [AHOI2005] SHUFFLE 洗牌

    1965: [Ahoi2005]SHUFFLE 洗牌 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 952  Solved: 630[Submit][St ...

  7. Storage protocol stacks

    http://brasstacksblog.typepad.com/brass-tacks/ http://brasstacksblog.typepad.com/brass-tacks/2016/02 ...

  8. 【Android】attr、style和theme

    一.Attr 属性,风格样式的最小单元: Attr 的定义 在自定义 View 的时候,在 res/attrs.xml 文件中声明属性,而Android 系统的属性也是以同样的方式定义的.比如 lay ...

  9. django如何用邮箱代替用户名登录

    有两种方法 方法一,修改username字段,让他跟email字段一模一样,然后把email放到username,email字段里面,username放到firstname或者lastname里面,这 ...

  10. linux 下 ifcfg-eth0 配置 以及ifconfig、ifup、ifdown区别

    这3个命令的用途都是启动网络接口,不过,ifup与ifdown仅就 /etc/sysconfig/network- scripts内的ifcfg-ethx(x为数字)进行启动或关闭的操作,并不能直接修 ...