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; background-color:red"></div>
<block name="neirong"></block><!--做body的区域,子类文件可以在这里继承body-->
<div style="width: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="width:100%; height:300px; background-color:black"></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值
thinkphp修改和删除数据的更多相关文章
- ThinkPHP 修改,删除数据,全部显示
1,修改数据 //数据修改 function Update() { $model = D("info"); /* //1,数组方式 $attr = array( "Cod ...
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据
http://www.cnblogs.com/yukaizhao/archive/2010/05/13/linq_to_sql_1.html LINQ和 LINQ to SQL 都已经不是一个新事物了 ...
- 使用ADO对象添加、修改、删除数据
使用ADO对象对数据库中的数据进行添加.修改和删除等操作.首先创建一个ADO类,通过ADO类连接数据库,并打开记录集.例如,使用ADO对象添加.修改.删除数据,程序设计步骤如下:(1)创建一个基于对话 ...
- 数据库(概念、语法、DBMS、SQL语言:创建数据库、表格,添加、修改、删除数据记录)
关系型数据库:以表作为实体,以主键和外键关系作为联系的一种数据结构. 主键:在关系型数据库中,用一个唯一的标识符来标志每一行,这个标识符就是主键.主键有两个特点:非空和不能重复. 外键:在关系型数据库 ...
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据 (转)
http://www.cnblogs.com/yukaizhao/archive/2010/05/13/linq_to_sql_1.html LINQ和 LINQ to SQL 都已经不是一个新事物了 ...
- Java如何大批量从json数据源中按指定符号隔字符串,并修改、删除数据
原文出自:https://blog.csdn.net/seesun2012 package com.seesun2012.com; /** * Java大批量修改.删除数据,按指定标识符分隔字符串 * ...
- MySQL的修改和删除数据表字段
MySQL的修改和删除数据表字段 写在前面: 数据库存在的意义:数据存储和数据管理. 数据库:行(数据),列(字段) 注意:本页是解决了列的字段问题.下一页是解决行的数据问题. 注意,所有的字段名,最 ...
- sql server 笔记(数据类型/新建、修改、删除数据表/)
1.数据类型: Character 字符串 / Unicode 字符串 / Binary 类型 / Number 类型 / Date 类型 / 其他数据类型 详解:http://www.w3sc ...
- 【JDBC】学习路径6-SQL插入、修改、删除数据
第一章:插入使用.executeUpdate(); 返回的是受到影响的数据条数. public static boolean insert(String username,String passwor ...
随机推荐
- 自定义PopupWindow
PopupWindow,一个弹出窗口控件,可以用来显示任意View,而且会浮动在当前activity的顶部 自定义PopupWindow. 1.extends PopupWindow 2.构造方法中可 ...
- 网页万能排版布局插件,web视图定位布局创意技术演示页
html万能排版布局插件,是不是感觉很强大,原理其实很简单,不过功能很强大哈哈,大量节省排版布局时间啊! test.html <!doctype html> <html> &l ...
- Database first with EntityFramework (Migration)安装和升级
最近看了国外几个项目,发现用EntityFramework做Code First的项目现在很流行. 最让我有兴趣的一个功能则是,EntityFramework对于数据库的安装和升级的无缝完美支持,且很 ...
- CSS3:backgroud-size和background-origin的使用方法
backgroud-size CSS3以前,背景图像大小由图像的实际大小决定,background-size指定背景图像的大小. 你可以指定像素或百分比大小,你指定的大小是相对于父元素的宽度和高度的百 ...
- 查找素数Eratosthenes筛法的mpi程序
思路: 只保留奇数 (1)由输入的整数n确定存储奇数(不包括1)的数组大小: n=(n%2==0)?(n/2-1):((n-1)/2);//n为存储奇数的数组大小,不包括基数1 (2)由数组大小n.进 ...
- linux输入子系统(input subsystem)之按键输入和LED控制
实验现象:在控制台打印按键值,并且通过按键控制相应的LED亮灭. 1.代码 input_subsys_drv.c #include <linux/module.h> #include &l ...
- 如何打开、关闭IIS服务器
问题描述:如题. 使用工具:腾讯云Windows Server 2012 R2 数据中心版 64位中文版. 操作步骤: 1.服务器管理器->IIS
- After the exam
离散数学考完啦!!!自我感觉还行,或许得不到高分,但是过的话是没问题了.(但愿成绩出来后不打脸) 持续了两周的复习,告一段落了.那么,今天就休息休息吧. 今天阴有雨,走过的地儿都是湿漉漉.滑溜溜的.这 ...
- [转]ASP.NET Core--根据方案来限制身份
本文转自:http://www.cnblogs.com/duyao/p/5980105.html 翻译如下: 在某些情况下,比如单页的应用程序,可以与多种认证来方式结合.例如,您的应用程序可能使用基于 ...
- 堆排序(python实现)
堆排序是利用最大最或最小堆,废话不多说: 先给出几个概念: 二叉树:二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树” 完全二叉树:除最后一层外, ...