留言板小系统程序开发
-
表示回复的字段varchar存储规则:
4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)
5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节 **
回复memo字段, 采用varchar类型. varchar在 mysql 5中, 最大限制是 65535 个字节. (注意是字节, 不是字符!)
对于汉字是 2个字节一个汉字, 所以 汉字不能超过 32766.
对于英文是 65535
字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845
若超过了限制, 则会自动转换为 text 类型, 并显示一个warning.
nvarchar 是 只存储utf8字符的.
总之, 对于普通的文字内容, 如回复, 备忘, memo等文字内容, 基本上 都可以用 varchar来 存储. 因为 varchar的限制是: 中文32766, 3万多个汉字, 完全足够了!** -
使用thinkphp确实要省事很多, 因为像数据库连接的事, 都不用自己去管了. 只需要 自己专注 数据的增删改查就好了.
-
插入记录的时候,
$sql = "insert into message (id,user,title,content,lastdate)" .
"values ( '','$_POST[userName]','$_POST[title]','$_POST[content]',now())";
mysql_query($sql);
- 注意区别php和mysql中的时间函数的区别?
mysql中的时间函数是: now(); curdate(), curtime(); 而在插入记录的时候, 虽然是用php语言来写, 但是最后执行的是mysql,所以在插入字符串中 要写 now()函数.
php中的函数是 time(). 格式化函数是: date();
Note: 如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中 "显式" 地 调用 parent::__construct()。如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承(假如没有被定义为 private 的话)。
- php的类和类的继承
<?php
class BaseClass {
function __construct() {
print "In BaseClass constructor\n";
}
}
class SubClass extends BaseClass {
function __construct() {
parent::__construct(); // 这个要 "显式的" 写出来
print "In SubClass constructor\n";
}
}
class OtherSubClass extends BaseClass {
// inherits BaseClass's constructor
}
vim的默认目录
在windows下, 设置gvim的默认属性, 路径是: c:\wamp\www\注意 用 "反斜杠", 如果用 "/" , 可能会不认, 所以设置失败.
感觉在windows下使用 gvim, 还是赶不上 在linux下的体验, 因为很多操作, 好像在win gvim下都 使用不上??
解决方案:
-
要分清楚 个人配置和系统默认配置: 在linux下是 ~/.vimrc 和 /etc/vimrc, 相对应的, 在windows下就是 在 c:\uses\administrator\下的 _vimrc和 program files\vim_vimrc. 是前者覆盖后者的配置. 所以注意他们之间的优先级先后关系. 通常就不要设置 个人配置 了, 只是设置 软件的"系统配置" 就好了.
-
而且 关于 ll,jj, jk, c-l 等都直接设置了, 不要判断 if autocmd了.
-
" 给 Win32 下的 gVim 窗口设置透明度, 直接就这样设置了, 不用判断if autocmd了.
au GUIEnter * call libcallnr("vimtweak.dll", "SetAlpha", 245) ,要求在 program files/vim/vim73中要有 vimtweak.dll, 其中 setAlpha的值为0时表示完全透明, 255表示完全不透明. 通常设置为245.就好了 -
即使设置了 set incsearch. 在搜索的时候, 要以 斜杠 来 开头, 不能直接用字符开头. 因为后者是 normal命令字符(串). 要以/ 斜杠开头, 斜杠就表示 搜索!
**mysql服务器错误: #2002 服务器没有响应(或者本地mysql服务器套接字没有正确配置). ** 是因为 mysql服务器的ip地址 要设置为具体的 ip地址, 不管是本地,还是外网, mysql的地址都要设置为 ip地址, 不要设置为 "域名" 即使是本地服务器 localhost.也要设置为 127.0.0.1
解决方法: 参考:http://www.2cto.com/database/201207/139519.html
- host.myd 文件因为优化被删除, 因为mysql要往这个文件中写数据, 方法是自己重新创建一个;
- 防火墙阻塞了mysql
- 套接字socket=/tmp/mysql.sock无法创建 , 修改/wamp/phpmyadmin中的 config.inc.php中的\(cfg['Servers'][\)i]['host']='localhost' 为 127.0.0.1
但是, 重装wampserver的时候, 仍然为localhost但是也可以正常工作的???
或者干脆重新安装 wampserver.
卸载wampserver的时候, 并不会删除 mysql/data中的数据如: data文件夹和 my.ini 等文件.
无法删除mysql下的test数据库?
是因为, 原来出现故障的时候, 遗留了test数据库的"非数据库"文件, 所以, 不能删除, 要把原来遗留的文件 /wamp/bin/mysql/mysql5.5.8/data/test(这是一个数据库)文件夹删除就好了.
只有说在emmet的时候, html的标签会自动形成缩进层级的方式. 但是, 如果原来的html文件 已经有了, 而且没有缩进和层级, vim的等号=命令,也不可能 自动给你 加上空格 /tab等形成缩进的, 毕竟他还没有这么智能!
avatar: 中间没有 字母n, 不是avantar.
volist和 foreach都可以用来输出二维 数组 结果集, 区别是?
- volist比foreach的属性更多, 支持更复杂的 输出和格式控制; 所以要进行间单的输出就用foreach, 要进行复杂的输出,如偏移输出, 格式mod输出等就用 volist.
- 都有默认的索引 属性 key, 默认的key=i, 也可以指定 key="k"
- 区别: 数据源都是name, 但是循环变量分别是: id, 而另一个是 item.
- volist支持偏移输出offset + length; 模式输出mod="5" eq name="mod" value="1"><...; 为空提示: empty="为空时提示的输出信息", 不支持html格式但是支持
empty=$empty
之类的变量输出... - 共同点: 在标签中的name, item/id, key等属性值, 通常是不用
$
的, 因为它是属于html的标签属性. 但是标签内部的变量要用$
, 也就是说: **凡是 表示 标签输出 的 大括号{\(output-var} 中的 变量都要用 `\) ` ** - 两者表示成员的符号 都用 点号, 句号; 不要用方括号; 是把它当作对象来输出???
关于tp中include标签的写法: 注意, 在html中, include被看作是一个 html标签, 因此, 后面 被包含的 文件名是 它的属性 值, 是属性file 的值, 所以 在 写html内置标签的时候, 一定 要 随时 有 "这是html标签, 后面只能跟 属性=属性值 "的思想, 而不是随便乱写! 而不是像C++/C语言中的 include "文件名" 的写法!
在mysql的控制台中, 使用插入语句 insert语句???:
- 凡是关于数据库/ 数据表/ 表中的字段 等东西, 都是用 反引号, 而内容里面, 表示字符串的用(单/双) 引号如:
insert into `mb_msg`(`id`, `mestle`, `mescont`) values (NULL, '...', '...'), (), (),...
而且可以一次性的 插入多个记录, 其中values,就表示可以同时插入多个值, 每个值用小括号括起来, 多个值之间用 逗号分隔.
对于primary key的 auto_increment的 id字段值, 你可以给他一个 NUll值, 或 空的单引号, 但是不能不写, 因为要站位...
- 在windows的 gvim的syntax语法着色中, h1,h2,...h6,之间的字符串显示是紫色的, 而其他地方的字符串显示是白色的. 这是默认的着色, 并不是错误
以前写边框的时候, 写虚线和点线 总是 不能 生效, 原因 原来是, 没有加上 ed: 要给 dash和 dot加上ed: 即是 dashed, dotted, 而不是 dash, dot.
关于animate中的margin-left 错误: 控制台提示: 解析margin时出错, color值出错, 声明被丢弃????
因为animate方法的实现原理是用 "定时器" 根据"步长" 来逐渐改变属性值,因此 jquery只支持数值型的属性改变, 颜色不具有十进制的增减性,所以实现不了。要实现颜色的渐变 需要另外一些插件可以实现的。而 高度/宽度, 字体大小, 透明度等 都具有线性增减性, 即前面说的, 十进制的 增减性, 所以他们可以设置 jquery动画
而真的要实现hover时,颜色的 渐变的话, 可以使用 链接元素, 将要颜色渐变 的元素设置为a, 然后设置: a:hover的样式;
以后, 在设置 元素的效果的时候, 要 优先考虑 用css实现, 而不要一开始就用js, 因为js一定比 css的效率要慢. 并且要优先使用 链接a , 因为链接既有鼠标样式, 又能产生a:hover的变色 效果! 所以 多使用 链接a!!
关于a:hover和 a:link, a:visited, a:active的问题??
- 就是一定要把a:hover放在 link/visited/active等的后面, 这样a:hover的时候, 才会显示颜色! 否则是不会有变色效果的
- css属性: transition: all 0.5s linear 0s;的意思是: transition-property transition-duration transition-timing-function transition-delay:
transition-property: 指定什么属性需要进行渐变改变 , 可以有: all, specified-attr, none;
transition-duration: 渐变持续的时间;
transition-timing-func: 渐变的方式, 如果是匀速的就是: linear
transition-delay: 是指延迟多少时间后, 开始渐变?
**解决thinkphp的include包含无效, 内容不显示的问题? **
- 包含的file属性值, 可以是 "模板表达式,或者 模板文件名"
- 模板表达式, 是指从 "Public或者Commnon等模块开始的文件", 这种情况下, 是不能加 html后缀名的, 而使用完整的模板文件名, 要加 后缀名.html
- 完整的模板文件名, 通常是相对于项目的入口文件即: /index.php 而言的. 在tp中, 绝大多数路径都是相对于 项目的入口文件而言的...
- 被包含的模板文件被修改后, 是不会自动更新的, 所以要删除 缓存(在部署模式下); 被包含的模板文件中的变量是不会自动执行的, 要在当前控制器操作中完成赋值...?
-
tp模板 数组变量的 输出, 可以用 "点语法和【】", 推荐使用 点语法; 如果是对象变量,使用 "冒号和-> " 两种方法
-
include 标签 可以传递 参数( 实参), 然后在被包含文件中, 用 【para】来引用/输出/(形参)
如何对输出变量使用函数 处理?有两种方案:
一是, 如何理解和记忆 在tp中 对输出变量的函数操作? tp是借鉴 php linux的思路的, 在linux中, 要对数据进行 过滤操作处理, 就是使用的 “管道”命令, 操作符是 “|”, 参数就是使用的 等号=para1, para2,###, ..., 所以, tp中对输出变量 进行函数 过滤, 也是用管道操作: “|” , 当然也支持多级管道操作.
二是, 如果不用管道命令, 也可以直接使用函数, 在模板中,使用函数的 通用方法都是: {: func1(func2($bar)) }
关于thinkphp的模块表达式?
因为 通常在开发中, 都没有使用 主题, 所以在模块表达式/ 操作表达式/ 模板表达式中, 都是不需要加 主题目录名称的;
而且, 好像在使用 上面这些 模块表达式的时候, 都是一个 统一的 写法 : module@controller/method, 比如,当前在 Home模块, 要包含/引用 Admin 模块的 Login控制器的 index方法, 就是: Admin@Login/index
就只有 三级 , 而且很多时候, 都是在同一模块,如Home模块中 引用的, 所以通常直接就是: Index/methodName了, 甚至可以直接用 methodName就可以了, 比如在 {:U('methodName')} 引用 函数生成 路径
, 这样 就好记忆了, 又清晰又简单明了. 因为后面的index是 方法method 操作名称, 因此, 后面就不能加 html了!
**当然, 很多时候, 要包含头部或尾部 模板的时候, 并没有 /通常也不会 专门去写一个 模块/控制器/方法, 所以 就直接去包含一个 具体路径下的 完整文件名称就好了 **
通常包含头部和尾部的文件名, 一般用header.html 和 footer.html, 一般 不用 head.html, 或者 foot.html , 因为 head foot通常都用作关键字, 或者标签名称了, 所以还是用 -er, -er 了
**gvim本身就 具有 自动缩进的功能了:set autoindent ** 并不需要安装什么插件了, 但是对于拷贝过去的内容不会自动缩进???
关于附近几行的 复制和删除 操作
- 关于行数的操作, yy 和 dd只是 针对 "一行 " 的操作, 要操作多行, 必须使用 倍数: 如 4j,5k, 等等, y, d, c, s才是真正的复制/删除命令!
- 对多行的操作, 单命令名 仍然是 : d, y, x, 所以 结合起来就是 d4j, y5k,...
- 最重要的是: 要明白 d4j 究竟操作了什么? 它是: 对当前行的操作 + 倍数j 或k, 意思是说, 除了要 对本行进行复制或删除操作外, 另外还要加上 该行上面或下面的 倍数行. 因为j 或 k 本身就是 指 该行的上面或 下面, 所以 这个倍数, 是不包括当前行的. 因此 d4j: 总共删除 的就是 (倍数 +1)行, 即共有5行被删除.
不要在哪里都去用 container容器, 有时候, 用container 将会带来很痛苦的 经历, 如 这里 在 做左边的 carousel的时候, 把它放在 container中, 就会出现 很奇怪的问题, 最后,把 container容器 去掉 , 一下子就好了, 耗用了 很多的时间 来 解决这个问题!!
如何调整 carousel中的 图片大小 ? 和 文字 内容跟 图片之间的相对位置关系?
原来上面这两项, 是根据 carousel-inner中的 item的 尺寸 和 img 的尺寸, 来 自动 调节图片的大小和 图片跟文字 之间的 相对位置关系的, 所以 需要 额外设置css样式:
比如:
.carousel-indicators .active{
background-color: orange;
}
.carousel-inner .item {height: 330px;}
.carousel-inner .item img {height: 300px;}
line-height: 20px; 和 1.5的区别?
当有单位时, 表示行高是固定的, 由子元素继承这个固定的值;
当没有单位时, 表示的是一个系数, 表示 行高=子元素的font-size字体大小*该系数; 各个子元素会根据自己的字体大小, 而自动计算 行高, 通常是 (推荐使用的)
以下两个属性都是css3 的属性!!
border和outline的区别?
border是边框线, 而outine是 咋边框线 之外的, 线条...
background-size: cover, 是规定背景图像的大小, 为"拉伸背景图像, 完全覆盖div区域"
校园的单词区别?
Campus主要指大学校园,固定搭配on campus campus: 注意中间的那个字母是 m, 不是n
school主要学校,中、小学
university主要是指综合性大学,较偏重于本科
college主要指学院,较偏重于专科学院
百事通
用英文说是: knowledge'able person; know-all, presto[prest2u], 本意是"快板""快速的说", 音译也正好是: "百事通".
vim的快速选择, 特别是在 visual可是模式下的 快速选择, 让人感觉很老火?
参考: http://dpinglee.blog.163.com/blog/static/1440977532011819103534804/
1. 简单的移动光标
0 → 数字零,到行头
^ → 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
$ → 到本行行尾
g_ → 到本行最后一个不是blank字符的位置。
// 这里注意0和^ , $ 和 g_ 的区别, 既然是0, 当然就是行头, 不管是不是blank字符. $ 是到本行的最后, 不管最后这个字符是不是blank字符, 而g_, 则只是到最后一个不是blank(空白字符)的字符处. 这个 在 一行的 行首和 行尾 输入了 空格的 时候, 区别就很明显了.
在visual模式下的选择( === 就是当你 单击v的时候, ) 即以 可视化的方式 进行选择, 这时候, v就是 一个操作命令了, 如同 d, y等命令一样.
v + i + <object> 或者: v + a + <object> 这里的对象可以是: w, W(以空格为分隔的单词), 引号 ', ", 所有的括号, 而且支持 倍数括号, 如有两个括号的, `v2i)`
支持 <起始位置> action<结束位置> , 但是, 要求, 起始位置和 结束位置 必须是 特殊符号 , 如0, $ ^ gg, G等, 但是不支持数字开头~
例如 0y$ 命令意味着:
0 → 先到行头
y → 从这里开始拷贝
$ → 拷贝到本行最后一个字符
你可可以输入 ye,从当前位置拷贝到本单词的最后一个字符。
你也可以输入 y2/foo 来拷贝2个 “foo” 之间的字符串。
你也可以输入 dta 来删除所有的内容,直到遇到字符a。 dta: 其中的t表示 to 到...
很奇怪的问题是, 当把 文件中的style 拷贝到 外置的 css文件中时, 如果指定 @charset utf8 可能会 使原来的 样式有一些 "细微的" 不想看到的变化! 所以干脆不要写什么, 直接就 拷贝过去就行了....
gvim中的标记/ 书签的使用, 很重要
如同在NerdTree中使用 B 打开 bookmark一样 在 gvim中 使用的是 m命令 来操作 mark 标记的! 参考:http://www.cnblogs.com/jianyungsun/archive/2011/02/14/1954057.html
-
操作模式, 是在 normal 普通模式下, 进行, 输入 ma 就表示 在当前位置处 设置 名称为 "a" 的mark, 当然m和a之间不能加空格的, 因为加了空格后, 前面的m命令就失效了, 只有a命令, 这个表示的就是 在当前位置后面insert了!
-
也可以在 命令行模式下, 输入: mark a
-
要查看 所有的 标记, 使用 :marks 命令, 注意这里 要在mark后面加s. 因为mark命令 会引起模糊
-
标记, 主要是在 一个很长的文件中, 编辑 前后两个 (隔得较远的) 相关的位置 处 的情况下, 会很有用
-
通常 如果临时 使用的话, 就 命名为 ma, mb 用 "a" "b" 两个标记就好了 , 当然你可以使用 任意的26 个字符.
-
在 :marks 命令下, 你可以看到 所有的 详细 的 标记 位置信息
-
在标记mark之间进行跳转, 使用的是 单引号和反引号 命令: 其中 单引号是定位到 标记所在的行首, 而反引号是定位到 标记所在行的 具体列 位置处.
**要注意, 区别 定义标记和 跳转标记的区别!!
你会注意到有一些特殊的标记,包括: // 像 常说的 单引号, 两个单引号, [, ] 就是一些 ,"特殊" 的标记!
' 跳转前的位置
" 最后编辑的位置
[ 最后修改的位置的开头
] 最后修改的位置的结尾
补充:如果想要删除marks,可用命令delmarks + markname
在html中, 选择 html标签 中的内容时, 可以使用 normal模式下的 vat 和 vit 命令, dat, dit, yat, yit等, 其中的t表示 tag 标签的意思 , 这个操作好强大, 好方便, 这也是一直要 想要解决的问题, 怎么强调他的意义, 都不为过!
感觉还是, 只有在实践中, 才能加深对知识点理解和掌握! 比如对, vim /gvim 使用得越深,越多, 就会对vim的理解越深刻, 随着操作技巧的熟练, 编辑的效率就会越来越高, 现在这样的效率以前是不可以想象的! 所以, 人生啊, 关键还是在于选择, 有了正确的选择, 随着时间 的推移, 就会显得越来越重要和差距的拉远了! 如果当初没有选择vim,后果...??? 除了用 jk 或 n*jk倍数来移动外, 还有 更快速的移动方式, 那就是 用小括号,和 中括号, 大括号: 小括号是以句子为单位移动, 大括号是以段落为单位移动光标, 而 一个中括号本身是 表示 "特殊的位置标记", 所以 要用 两个 中括号 [[, 或]] 来移动 ,是在 函数之间进行移动, 问题的关键就是, 要弄清楚在html中, 什么是 一个句子, 什么是一个段落, 什么是一个函数?
- 在html的vim中, 凡是中间没有 "空白行" 的 连续行 的一块 代码, 都会被看作是一个句子;
- 凡是 有空白行的 地方 都会被看作是 段落, 所以说, 大括号总是在 空白行之间进行跳转;
- 而 [[, ]] 是在函数之间跳转, 这个主要是针对 php 等文件中, 以 function定义的 代码块 之间 跳转 比较有用. 而在html中, (不管js中的funtion) 总是以html开始标签为函数开始, 以 html结束标签 为函数的结尾. 所以 [[就等效于 gg, 而 ]] 就等效于 G.
// 注意, 小括号和大括号的区别, 不是很大, 但是也有较小的差别, 毕竟句子和段落是不同的 vim对 文本而言 句子和段落的理解, 参考 markdown 的思想 就好理解了....
为什么vim中用y表示复制命令呢?
这个主要是为了和 剪贴板 相区别. 复制, 是针对 操作系统 的 剪贴板而言的;
而 vim中 的复制和粘贴命令, 是对 他内置的 "寄存器" 而言的, 所以两者操作的 东西都不一样, 所以 他们的名字和命令也不一样!