TP框架---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)系统变量的输出
{$Think.server.script_name} // 输出$_SERVER['SCRIPT_NAME']变量{$Think.session.user_id} // 输出$_SESSION['user_id']变量{$Think.get.pageNumber} // 输出$_GET['pageNumber']变量{$Think.cookie.name} // 输出$_COOKIE['name']变量{$Think.const.MODULE_NAME}//输出常量{$Think.config.db_charset}//输出配置参数{$Think.lang.page_error}//取语言
(3)使用函数(用|调用)
{$data.name|md5}//$data.name调用md5表示date函数传入两个参数,每个参数用逗号分割,这里第一个参数是{$create_time|date="y-m-d",###}//y-m-d,第二个参数是前面要输出的create_time变量,因为该变量是第二个参数,因此需要用###标识变量位置,编译后的结果是:<?php echo (date("y-m-d",$create_time)); ?>
(4)默认值输出
{$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标签,标签用法:
<include file="Public/header" /> // 包含头部模版header<include file="Public/menu" /> // 包含菜单模版menu<include file="Blue/Public/menu" /> // 包含blue主题下面的menu模版
(8)比较标签

他们的用法基本是一致的,区别在于判断的条件不同,并且所有的比较标签都可以和else标签一起使用。
例如:<eq name="name" value="value">value</eq>表示name变量的值等于value就输出
(9)import标签
传统方式的导入外部JS和CSS文件的方法是直接在模板文件使用:
<script type='text/javascript' src='/Public/Js/Util/Array.js'><link rel="stylesheet" type="text/css" href="/App/Tpl/default/Public/css/style.css" />
系统提供了专门的标签来简化上面的导入:
第一个是import标签 ,导入方式采用类似ThinkPHP的import函数的命名空间方式,例如:
<import type='js' file="Js.Util.Array" />Type属性默认是js, 所以type='js'可以不写。
还可以支持多个文件批量导入,例如:
<import file="Js.Util.Array,Js.Util.Date" />
9.SESSION和Cookie
SESSION在thinkphp里面不需要加session_start()开启了,在配置文件里面有一项配置是true默认开启的。
SESSION存储数据
session(array('name'=>'session_id','expire'=>3600));

Session初始化设置方法无需手动调用,在Think\App类的初始化工作结束后会自动调用,通常项目只需要配置SESSION_OPTIONS参数即可,SESSION_OPTIONS参数的设置是一个数组,支持的索引名和前面的session初始化参数相同。
默认情况下,初始化之后系统会自动启动session,如果不希望系统自动启动session的话,可以设置SESSION_AUTO_START为false,设置方式:
'SESSION_AUTO_START' =>false
Session赋值比较简单,直接使用:
session('name','value'); //设置session
Session取值使用:
$value = session('name');// 获取所有的session 3.2.2版本新增$value = session();
删除某个session的值使用:
session('name',null); // 删除name
要判断一个session值是否已经设置,可以使用
// 判断名称为name的session值是否已经设置session('?name');

Cookie设置
cookie('name','value'); //设置cookiecookie('name','value',3600); // 指定cookie保存时间
还可以支持参数传入的方式完成复杂的cookie赋值,下面是对cookie的值设置3600秒有效期,并且加上cookie前缀think_
cookie('name','value',array('expire'=>3600,'prefix'=>'think_'))
获取cookie很简单,无论是怎么设置的cookie,只需要使用:
$value = cookie('name');
如果没有设置cookie前缀的话 相当于
value = $_COOKIE['name'];
删除某个cookie的值,使用:
cookie('name',null);
要删除所有的Cookie值,可以使用:
cookie(null); // 清空当前设定前缀的所有cookie值cookie(null,'think_'); // 清空指定前缀的所有cookie值
TP框架---thinkphp修改删除数据的更多相关文章
- TP框架---thinkphp基础知识
php框架 发瑞 一.真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困 ...
- Tp框架—方法中处理数据
Tp框架-方法中处理数据 可以使用函数过滤处理内容. $data[$key]['content_title'] = mb_substr(strip_tags($val['content']) ,0,4 ...
- TP框架的修改,删除
先把数据库的素具显示出来 public function xiugai() { $code= "n001";//修改的主键值 $n = M("nation"); ...
- TP框架---thinkphp表单验证
自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证.验证的代码要写在模型层即Model里面. 数据验证有两种方式: 静态方式:在模型类里面 ...
- TP框架---thinkphp模型
1.获取系统常量信息的方法:在控制器DengLuController里面下写入下面的方法,然后调用该方法. public function test() { //echo "这是测试的&qu ...
- Oracle的学习二:表管理(数据类型、创建/修改表、添加/修改/删除数据、数据查询)
1.Oracle表的管理 表名和列名的命名规则: 必须以字母开头: 长度不能超过30个字符: 不能使用oracle的保留字: 只能使用如下字符:A-Z, a-z, 0-9, $, # 等. Oracl ...
- SQL Server 创建 修改 删除数据表
1. 图形界面方式操作数据表 (1)创建和修改数据表 列名中如果有两个以上单词时,最好用下划线连接,否则可能会给将来的查询维护带来不便.我们公司美国佬做的数据库就很烦,所有列名都有空格,一旦忘记用方括 ...
- 第 一 百 天上课 PHP TP框架 数据库修改和删除
修改的三种方式 //造数组的方式修改 public function xiugai1() { $db=D('yonghu'); $attr=array ( 'zhanghao'=>001, // ...
- TP框架---thinkphp查询和添加数据
查询 <?php namespace Admin\Controller; use Think\Controller; class MainController extends Controlle ...
随机推荐
- hadoop(一)hadoop简介
1. Hadoop 版本衍化历史 Hadoop 是一个由 Apache 基金会所开发的开源分布式系统基础架构.用户可以在不了解 分布式底层细节的情况下,开发分布式程序,充分利用集群的威力进行高速运算和 ...
- Codeforces 912D Fishes (概率&期望,优先队列的应用)
题目链接 Fishes 题意 在一个$n*m$的矩阵中,随机选择一个$r * r$的区域覆盖. 一开始我们可以在这个$n*m$的矩阵中选择$k$个点标记为$1$. 我们要选择一个最佳的标记策略,使得 ...
- POJ 2057 The Lost House [树状DP]
题意:一只蜗牛将壳忘在了一棵树的某一个末结点(叶子)上.它想找回自己的壳,但忘记是丢在哪个结点上了,只好从树根开始网上爬,一个结点一个结点地找.在一些结点上居住着毛毛虫,它们会告诉蜗牛该结点以及它的子 ...
- 2016集训测试赛(十九)Problem C: 无聊的字符串
Solution 傻X题 我的方法是建立后缀后缀树, 然后在DFS序列上直接二分即可. 关键在于如何得到后缀树上每个字符对应的字节点: 我们要在后缀自动机上记录每个点在后缀树上对应的字母. 考虑如何实 ...
- 2016北京集训测试赛(十六)Problem A: 任务安排
Solution 这道题告诉我们, 不能看着数据范围来推测正解的时间复杂度. 事实证明, 只要常数足够小, \(5 \times 10^6\)也是可以跑\(O(n \log n)\)算法的!!! 这道 ...
- OnTouchListener
1.布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...
- http协议中connection头的作用
在http1.1中request和reponse header中都有可能出现一个connection的头,此header的含义是当client和server通信时对于长链接如何进行处理. 在htt ...
- How To Commit Just One Data Block Changes In Oracle Forms
You have an Oracle Form in which you have multiple data blocks and requirement is to commit just one ...
- Drawable 添加过滤色,改变图片颜色
/** * 更改图片颜色 * @param drawable * @param color * @return */ public Drawable getDrawable(Drawable draw ...
- poj 3648 线段树成段更新
线段树成段更新需要用到延迟标记(或者说懒惰标记),简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候.延迟标记的意思是:这个区间的左右儿子都需要被更新,但是当 ...