thinkphp- 许愿墙-1
控制器的方法, 要显示的模板默认的跟方法名相同. 也可以不同, 但应该 仍然是对应文件夹下的html模板文件:
$this->display('其他的模板html文件名, 不用加html扩展名');
在windows图形界面下, 可以支持 "/" 和 ""两种路径分隔符, 但是在cmd下, 只能用 ""
wamp包括: Apache2, php, mysql , logs lang, www等文件夹, 和一些可执行文件, 如wampserver.exe等
一般情况下, 建议都使用mysql的控制台, 只有特殊情况下才用web可视化视图管理.
mysql的控制台文件: c:\wamp\mysql\bin\mysql.exe
可以设置控制台的属性, 如窗口宽度=110, "保存属性, 供以后 具有相同标题 "C:\wamp\mysql\bin\mysql.exe" 的窗口使用!"
mysql数据库: use db_name; //指的是你要使用哪一个数据库
/--------------------------------/
mysql控制台常用 命令
-
显示命令: (显示所有的数据库和 某个库中的所有表)
show databasees;
show tables
// 注意, 两个显示都要用 复数! 因为是显示所有的数据库 或所有的表. 不是特指哪一个...
// 提示, mysql好像也是用c语言写的, 所以他的命令, 也要求用分号; 结束. -
修改表
alter tabletable_name
//(alter语句)
/*------------------
- 特别注意的是: mysql里面(或者说这个5.0.45的版本) 跟sql server有所不同, 里面都不加 关键字 column!
------------------/
addcolumn_name
datatype;
dropcolumn_name
;
changecolumn_name
column_name
datatype; (是change, 不是alter!)
// 在sql语句中, 要养成 加反引号的习惯: 给 数据库/表/字段 名称加上反引号, 跟其他字段和关键字相区别 !!
字段名也可以 在任何时候 都加上 反引号! 包括insert select语句中的where 子句中的字段名也可以加反引号.
- 查看表的结构:
describe foo_table;
// 好像就只有这个命令 关键字可以简写为: desc;
- 给mysql服务器设置 user用户root密码后, 无法登陆服务器, 错误error 1130?
/* 好像是 很严重的问题, 设置root密码后, 控制台和phpMyAdmin都不能登陆
* error 1130: the host "localhost" is not allowed to connect to the Mysql Server
*****/
# Solve 1130 error:
skip-name-resolve
skip-grant-tables
- 连接mysql服务器及数据库等命令:
连接:
mysql -uroot -p123; // 本机上的mysql
// -u指定用户, -p指定密码, 中间可以加空格也可以不加空格
连接 远程服务器, 非本地机器, 需要指定 -h localhost
// 也可以修改 "mysql" 数据库中的 "user" 表, 里面的Host字段值为 "%".
// 百分号就表示 百分百的可以连接, 允许远程客户端 连接mysql服务器
update mysql.user
set Host='%'
where User='root';
要修改mysql服务器上的用户密码, 主要还是通过 phpMyAdmin来实现,
用update语句
update mysql.user
set password='root'
where User='root';
- mysql的服务名是?
用wamp安装的mysqld的服务名称不是: mysqld, 而是 wampmysqld.
===========================================================
对于列表, 可以使用图标进行形象化: /* iconic view for ul items */
li#database {
list-style-image: url('...');
list-style-type: circle(圆, 环,是空心的)/disc(圆盘,唱片, 是实心的)/还可以是任意的罗马/希腊等数字字母
}
最需要注意的是: list-style-type是 仅仅针对 列表的li 而言的, 而不管这个li是在ul还是ol中!
ul同样可以使用数字,字母来列序, ol同样也可以使用 circle,disc, square等等来列序.
也就说, ul/ol都可以通过css style 使用相同的数字/图形化的列表符.
列表项目标志 : 的位置: 有inside/outside, 默认的是outside.
inside: 项目标志放在列表项的内容里面, 列表内容根据标志来对齐.
outside: 项目列表标志 放在列表项的内容外面, 不根据标志对齐.
////// 注: 通过 给列表内容加上 边框 就可以看得很清楚了.
当给每个列表项加上边框的时候, 中间相邻的边框看起来 宽度就会加粗, 等于原本边框的2倍, 这时可以添加一个类,让它们的
下边框宽度等于0:
ol .no-bottom {
border-bottom-width: 0;
}
==========================================
有时候, 看到横着的一条 分割线?
分割线不一定都是
有时候, 有时候可以 利用 border-top 或者 border-bottom来实现, 而且还可以用 margin-top
margin-bottom来调整相邻元素的垂直距离等等
==========================================================
两个div 水平并列的css设置:
需要: 它们: float: left; width:49%. // 为了准确起见, 不用 刚好设置成 50%, 留一点空西 更安全!
=====================================================================
css中的 相对尺寸?
通常在css中 , 要表示更大/更小的尺寸, 通常/最好/推荐 使用 百分比, 而不是使用具体的 写死的数值
如: font-size: 120%,
在 "需要自适应 宽度/高度" 的时候, 也推荐使用 百分比来写! 如上面的width: 49%
=============================================================================
css中的background-image?
-
background-image中的url地址可以不用 引号: 如: background-image: url(./img/xxx.png);
-
background-repeat表示是否重复: 默认的是repeat都重复: 共有4种: repeat, repeat-x, repeat-y, no-repeat.都是以repeat开始打头的;
-
background-position: 是说背景图像的起始位置, 两种理解都可以:
a. 包围背景图像构成的方框/ 盒子的左上角 的坐标;
b. 或者说是: 包围背景图像构成的方框/ 盒子, 离容器的左边距离和 离容器的上边的距离.
这两种说法都是可以的, 注意都是 以 容器的盒子的 左上角的坐标 为(0,0) 或(0%, 0%).background-position的指定方法有3种:
a 关键字法: 垂直方向top center bottom 水平方向 left center right. 注意两个方向上 居中都是center
b 百分比法: 0%, 0%左上角, 100% , 100%右下角
c 数值法: 0px, 0px, ....
指定时, 可以用百分比法和数值法混用.
如只指定一个值, 则第二个值将 默认为: center 或者为 50%. 即垂直方向居中布局.
如果指定了background-image的位置后, 由于background-image本身占用一定的位置(包括水平的/垂直的), 因此, 要使后面的
文字内容等, 要保持较好的布局时, 通常: ""background-position""属性 应该和 padding: 相搭配使用, 利用padding-left将
背景图片的位置给 腾出来!!
background-attachment: 规定图片在屏幕上的付着关系.
默认的是scroll, 滚动, 背景图片跟随 其他内容的滚动而滚动, 这个也是绝大多数情况下的值.
fixed, 固定, 那么背景图片固定在桌面上, 不会随其他内容的滚动而滚动, 不随垂直/水平滚动条的滚动而移动! 这个一般不用.
写css 时, 如果能够将 一个规则的 多个子规则合起来写的, 就尽量合起来写! 这样更简洁. 可以说这也是一种风格和习惯!
mysql的 日期和时间 类型
- mysql中的select就是输出, 选择...的意思, 相当于其他语言中的 print, echo等等.
- date是日期年月日, time是时间HH:MM:SS. 同时获取 date+time的函数是: now();
列类型 需要的存储量
DATE 3 个字节(yyyy-mm-dd)
TIME 3 个字节(hh:ii:ss)
datetime 4个字节(yyyy-mm-dd hh:ii:ss) // 是日期和时间的组合
YEAR 1 字节
TIMESTAMP 4 个字节
DATETIME 8 个字节
================= ====================
mysql中的null与空值?
在mysql中, 不区分大小写,字段名和函数都不区分大小写, 因为mysql引擎最后都会转换为全部大写!
所以, null=Null=NULL
注意null不是 "空" :真的空, 如同 杯子放在真空中, 确实什么都没有, 不占存储空间, 用 空的引号来表示空值: '', "".!!!
而null是 如同" 杯子放在空气中" , 是要占1个字节的空间的.
注意: 在命令行和phpMyadmin图形界面 还是有区别的! 它们使用的一些命令都是不同的, 要记忆命令行的!
mysql定义表, 字段 采用的是 一种 自然语言 描述性的 语法, 直接书写:
alter table foo
change `col1` `col1` int unsigned auto_increment; (一般不写这个not null, 因为auto_increment字段的默认值就是null);
// unsigned 表示大于等于0, 不能为负数, 注意的是: "int 等数字类型的字段, 不能指定字符集 和 collate? )!!!"
// "非数字类型如 char, varchar等 类型 的字段, 才能指定字符集 和 collate? )!!!"
// 以后写字符集都统一写成 utf8, 后面的collate(校对, 不是collation)是 utf8_gerneral_ci( 不是generic)
not null的允许取值是: 'abc有具体的实在的内容...', 或者为空值 '', "".
=================================================
- 即便 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。
如果某个字段的值为'', 那么判断该字段值 <>'', 和is not null的结果是不同的:
select * from foo
where bar
is not null; 这时包含该字段值的行会被返回;
select * from foo
where bar
<> '' // 这时 包含该字段值的行不会被返回
使用phpmyadmin跟mysql控制台还是有区别的,
比如在insert时, 如果某个字段not null类型, 你不输入, phpmyadmin会自动给你加上空值'' 或id的NULL
而用控制台, 则必须显式的输入NUll, 空值''.
INSERT INTO `test`.`foo` (
`id` ,
`name` ,
`col1` ,
`col2`
)
VALUES (
NULL , '', '', NOW( )
);
在对数据库的表 进行 增删改查的时候, 可以允许, 同时进行多个相同的操作:
// 插入的时候, 将多个要插入的数据集 用括号括起来, 用逗号隔开就可以
insert foo
values(NULL, '', ''), (Null, 'abc', '123'),(...);
// 删改的时候, 就写多个同样的子句, 用逗号隔开:
alter table foo
drop col1
,
drop col2
;
alter table phper
change col1
col1
....,
change col2
col2
....;
==============================================
因为一般字段都会设计为 not null, 同时为了避免在插入记录时 的问题, 都会设置默认值: default '';
mysql的语句都是"自然语言". 在创建表foo时, foo(字段记录描述)+ 接着 其他特征描述, 如: engine myisam default charset utf8;
如何选择mysql的存储引擎?
主要有myisam, 和 innodb
一般来说:
-
myisam的适合场景: 默认存储引擎, 小项目, 小规模数据, 增删改查速度块(读写高性能), 支持全文索引fulltext, 获得count(*)快, 因为该引擎中直接就有这个数据. 所以一般在小项目, 小demo中都是使用myisam.
-
innodb的适合场景: 大项目, 大数据, 高并发, 需要事务(资金交易), 存储过程, 外键支持, 故障检测和数据恢复要求高的.
count()操作对InnoDB很慢, 因为他要扫描整个表, 才能得到记录数...*
create table时, 有些描述可以有多种写法, 如: character set utf8, 也可以写为: charset utf8, 又如: engine=myisam, 也可以
写为 engine myisam.
在实际开发的时候, 对数据库的操作, 要先做自定义配置, 在项目的 Conf下配置:'DB_HOST' 'DB_PREFIX'等等.
thinkphp的url方法: U('Index/index');
可以通过在配置文件config.php的配置项来统一的修改
'URL_MODEL' => 0(传统的index.php?m=Index&a=index),
=> 1(pathinfo模式, index.php/Index/index)
=> 2(apache模式, 省略index.php...)
//// 推荐使用, 约定用法, 要有自己的 程序员习惯...
thinkphp中的 p方法:
function p($array) {
dump($array, 1, '<pre>',0);
}
// 1: 是否输出
// '<pre>'预加标签
// 0: 表示用print_r来打印
thinkphp的伪静态?
在配置config.php中设置:
'URL_HTML_SUFFIX' => 'html' 或者为'' // html可以是任意的, 如Php, asp, 一般用html对seo有好处,
thinkphp的U方法的参数:
U('地址如: Index/index', 传递给地址的参数array('user'=>'???', 'passwd'=>'???'), '伪静态的扩展名', '是否跳转','是否显示域名');
一般只用到前两个参数.
在form表单中使用控制器中的U方法传递地址?
<form action="{: U['当前控制器名称/] handle处理方法名称}" method="post"> ....</form>
在模板中的 {}, 就相当于 <?php .... ?>
在模板中的冒号: , 就相当于 echo 语句.
控制不能通过地址直接访问提交页面? 有两种方法?
-
可以用thinkphp的常量: IS_POST
-
可以用方法: $this->isPost();
-
错误处理方法有: _404方法和halt方法:
_404('错误提示信息/只有在调试模式下才显示', U('index')跳转地址); halt('错误提示信息'); // _404方法本身就直接返回了, 其后不用再加return
thinkphp中获取 从前台 通过post方法 提交过来的表单 的内容 有三种方法
- 传统的$_POST['xxx'];
- 使用 $this -> _post('xxx'); // 使用thinkphp提供的 _post方法
-
使用新的 I方法: I('xxx'); // 好像也可以用于get方法提交过来的表单内容, 原来的用法是: I('post.username'), 可以直接就用: I('username').
// _post('xxx');方法, 默认的进行了 htmlspecialchars()函数进行了html实体化处理
// I('xxx', '为空时的默认值', 'htmlspecialchars附加的处理方法');