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控制台常用 命令

  1. 显示命令: (显示所有的数据库和 某个库中的所有表)
    show databasees;
    show tables
    // 注意, 两个显示都要用 复数! 因为是显示所有的数据库 或所有的表. 不是特指哪一个...
    // 提示, mysql好像也是用c语言写的, 所以他的命令, 也要求用分号; 结束.

  2. 修改表
    alter table table_name //(alter语句)
    /*------------------

  • 特别注意的是: mysql里面(或者说这个5.0.45的版本) 跟sql server有所不同, 里面都不加 关键字 column!
    ------------------/
    add column_name datatype;
    drop column_name;
    change column_name column_name datatype; (是change, 不是alter!)

// 在sql语句中, 要养成 加反引号的习惯: 给 数据库/表/字段 名称加上反引号, 跟其他字段和关键字相区别 !!

字段名也可以 在任何时候 都加上 反引号! 包括insert select语句中的where 子句中的字段名也可以加反引号.

  1. 查看表的结构:
    describe foo_table;  
    // 好像就只有这个命令 关键字可以简写为: desc;
  1. 给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

  1. 连接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';
  1. 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?

  1. background-image中的url地址可以不用 引号: 如: background-image: url(./img/xxx.png);

  2. background-repeat表示是否重复: 默认的是repeat都重复: 共有4种: repeat, repeat-x, repeat-y, no-repeat.都是以repeat开始打头的;

  3. 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的 日期和时间 类型

  1. mysql中的select就是输出, 选择...的意思, 相当于其他语言中的 print, echo等等.
  2. 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附加的处理方法');

要获得全部的post表单, 使用 : I('post.')

posted @ 2016-03-20 20:37  noitanym  阅读(458)  评论(0编辑  收藏  举报