写html的时候, 在头脑中, 要等同于/实际上就相当于写一篇图文混排的word文档, 有主标题/子标题, 有正文段落等等.
要根据这些标签的本身的语义来使用!
div=division, 是块, 分块, 是用来表示结构布局的. table不应该作为结构布局, 而是应该用来表示表格化的数据
p是有具体语义的, 表示段落, 不一定只是用来表示文字的
h1, h2的语义就是用来表示标题的.
span是纯粹是为了应用样式而存在的, 它是行级内联元素. 当然你可以随意使用span, 但规范的,最好的方式是:
一般只把span用在h1,hx标题以及段落p中. 一般不直接放在div中!
html叫标记语言,也就是说,真正显示/输出到浏览器的都是标记之外的内容/文字, 标记<...>都只是对这些
文字的一种说明/规范/修饰/补充等等
strlen和strcmp等都是二进制安全的?
二进制安全, 是指在php函数操作二进制数据时能够保证得到预期的效果, 主要是因为zval结构体变量在保存字符串时
既有char* 指向字符串, 又有一个int型的len成员保存了字符串的长度: strlen("abc\0d")=5; strlen('ab\0c')=5;
form表单中的enctype编码空格和get编码空格的不同
enctype是指表单在从浏览器post请求到服务器时要编码的方式, 有三种编码:
application/x-www-form-urlencoded(这个是默认的编码): 空格编码成+号...
multipart/form-data: 不编码
text/plain: 空格编码成+号, 不编码特殊符号
但是: 在get传递查询参数时的编码中,空格编码成:%20=0x20=(32)十进制
你编写的web应用程序, 除了img, 声音等资源文件, html等标记文件外, 其余的php脚本文件就是所谓的"程序文件"
text,passwd, radio,checkbox, hidden, submit,reset
等等<select ...> (那中间自然就是要选择的选项吧: <option value="..." selected...>...</select>
<textarea...>...</textarea>
通过var_dump($_REQUEST $_GET $_POST)
通过action=xx?xx=??方式传递到目标页面的变量保存在\(_GET中, 同时\)_REquest确实包含了\(_GET和\)_POST的集合.
要注意, 当POST和GET变量中有相同名称"键"的元素时, 在$_REQUEST中将只保留
\(_POSt中的元素值. 但是, 在\)_GET和$_POST中, 仍然各自保留着相应的元素
register_globals的含义
打开"注册全局变量: register_globals"后, 真的就是将action=index.php?para1=1¶2=2
的值传递到目标页面, 并作为可用的\(变量, 如: 这里有`\)para1=1, $para2=2.`
为什么要检查if(isset($_POST['user'])?
因为在php.ini的配置文件中, 有这样的配置指令:
max_input_time=60 ; spending max-time to parse request data.
有最大input解析时间限制以及脚本最大执行时间post_max_size=8M等的限制,
所以, 从客户端传递过来的请求数据不一定每次都成功, 所以需要判断一下.
首先在客户端通过js进行验证
然后, 如果需要存入数据库的数据, 需要在服务器端进行验证, 验证的错误提示信息, 通常就发到当前页面!
PUBLIC 后面是三个双斜线 3个部分 : "-//W3C//DTD XTHML 1.0 Transitional//EN"
类型标志符的网站: "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
org后面是TR和DTD中间的xhtml1.
可以是大写的, 用连字符-, 也可以是小写的: UTF-8 , utf8.
通常用小写的吧, 看mysql服务器的变量和设置中的 字符集就知道了.
在目录/wamp/apache2/conf/alias/中, 直接删除某个alias好像会启动失败?
算法步骤: range-> shuffle -> array_rand/array_slice
用空白区域;
水平线
方框
表格
但是, 要在browser浏览查看数据记录的时候, 才会显示.
mysql_query("$query_string")的结果:
对于select, show等语句, 成功时返回的是 resource标识符type(mysql result), 失败时返回false;
对于非select语句, 如: delete, insert, update, 成功时返回true, 失败时返回false.
select的mysql_num_rows()返回结果集中的行数, delete等用mysql_affected_rows()返回被影响的行数
select的mysql_query("...")返回的是一个结果集, 是一个包含字段名和记录的二维数组样式的资源标识符...
所以, 是不能直接使用的. 要通过mysql_fetch_array等: 从结果集$resource中获取一行作为关联或数字数组...
标准的获取方法是: while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
printf ("ID: %s Name: %s", $row[0], $row[1]); //比 echo 'id:'.$row[0]...更好.
}
mysql_free_result($result);
blob大块类型, 存储的是二进制文件, 如图片/声音等
在声明表字段类型的时候, char(n)中的n指的是"字符"个数, 而不是存储字节!
一个中文文字和一个西文字母都只是算一个字符!
而我们说的, 字段类型的长度=存储所占的空间, 是说的多少个"字节".
char默认的是255个字节.
varchar默认的是65535个字节.
根据3个因素来确定:
首先,varchar不是从第一个字节/(而是从第二个字节)开始存放数据的, 而且大于255字节
时在头部还要用2个字节来表示该字段的实际长度, 所以要减3;
其次, 要看中文字符的编码;
最后, 还要遵守" 在一个记录行中, 行的最大字节总和不超过65535个字节.
所以, varchar(n)中的n最大为: (65535-1-2)/3 个utf8编码的中文字符.
所以一般"题干/答案选项" 用varchar(800)/varchar(300)完全足够了!
char和varchar都不分大小写比较和转换.
char的内容如果不够长, 则在** 后面** 补空格 **
varchar不会补, 实际是多少就只分配多少存储空间.
char和varchar的存储和检索/更新/删除等原理不同. char用空间的牺牲为代价, 换来操作效率的提升.
都是根据字节长度来分配大小的.
text和int在字节分配上是不同的/相反的:
tinyint 占一个字节0~255./-128~127
smallint 占2个字节,0~ 2^16-1: 0~65535
mediumint 占3个字节: 0 ~ 2^24-1
int 占4个字节...
bigint 占8个字节, 基本上不会用到.
而text/blob的存储范围:
tinytext: 占1个字节长度, 最多为255个字符.
text: 最多占2个字节, 最多65535个字符
mediumtext: 最多3个字节...
longtext: 最多4个字节...
GNU版
主版本号 . 子版本号 [. 修正版本号 [. 编译版本号 ]]
Major_Version_Number.Minor_Version_Number[.Revision_Number[.Build_Number]]
示例 : 1.2.1, 2.0, 5.0.0 build-13124
管理策略:
项目初版本时,版本号可以为 0.1 或 0.1.0,也可以为 1.0 或 1.0.0,如果你为人很低调,我想你会选择那个主版本号为 0 的方式;
当项目在进行了局部修改或 bug 修正时,主版本号和子版本号都不变,修正版本号加 1;
当项目在原有的基础上增加了部分功能时,主版本号不变,子版本号加 1,修正版本号复位为 0,因而可以被忽略掉;
当项目在进行了* 重大修改或局部修正累积较多,而导致项目** 整体发生全局变化时,主版本号加 1;
编译版本号一般是编译器在编译过程中自动生成的,我们只定义其格式,并不进行人为控制。
有的还有: 日期版本号, 希腊字母版本号
希腊字母版本号有5种: base, alpha, beta, RC, release. 表示"当前版本的软件处于哪个开发阶段".
类文件用cls_做前缀, 库公用文件, 用lib_做前缀
库函数文件, 类文件通常放在includes目录中, 通常是被其他文件所"包含的"
一般在/includes/的init.php中, 要完成所有的/绝大部分/大部分的初始化工作, 包括@ini_set("自定义的php.ini设置").
define是定义常量.
而defined是判断某个字符串是否定义为常量?
大中小括号跟单词紧邻, !-句尾的分号; ->成员运算符等紧邻单词
函数或结构if while等的大括号单独占一行
其他每个单词, 包括运算符如== !== . 等都隔一个空格, 函数的参数每个也要隔空格
!!! 注意行与行的内容的缩进, 在对多个变量进行赋值, 特别是类内部的变量进行赋值的时候, 注意对齐(风格需要).
简单的if---else语句通通用 ?:三元运算符来代替.
uri: 是统一资源标识符identifier, url是统一资源定位符locator
uri可以表示所有的资源, 包括网络和本地的资源, 本地资源可以使用相对路径, 如: ./ ../
还可以使用 #:指向当前资源内部的片段标识符(anchor标识符)
url: 则是uri的子集, 主要是用来表示/定位网络资源.
FILE:表示当前文件本身
basename: index.php=filename+extension
dirname: c:\wamp\www\wes, 没有最后的反斜线
pathinfo: 关于文件目录的数组.
/* */这种注释是对下面的代码片段进行注释时使用的
// 则主要是对单个语句进行注释, 写在语句后面的.
=preformat
使用
标签, 就不再为空格和换行而烦恼!
通常有两种情况使用标签:
tty是teletype电传打字机, 由键盘/收发报器/印字机组成, 是传真之前的主要"收发有文字内容的电报"
的主要设备, 后来成为计算机的实时"输入/输出"设备. 后被键盘和显示器代替.
teletype使用的最广泛的是ibm公司的Bud Kettler等宽(a monospaced typeface)字体:courier:
Courier: 小写的i和大写的W宽度都是一样的. Courier代表的是一种尊严, 威望和稳重.
courier: n. 送快递的人, 信差; 导游; 情报员. he worked as a motorcyle courier.
单引号不会替换$变量
但是, 单引号会转义, 但是:只转义两个: 反斜线\, 和单引号'本身.其他都不转义!
因此: str_replace('\', '/', FILE);会替换反斜线为正斜线.
code>只是暗示是代码, 但不能保持空格和换行等等
pre>跟code都会显示等宽电传字体courier...
pre>中不能包含引起段落变化的标签如:p> div>等
NULL既是一种类型:NULL类型,
也是一个值, 是NULL类型的唯一一个值, 尽管大小写不分, 但通常作为专有名词大写之
<<<str 和str的用法
这种perl风格的字符串, <<< 和str开始标识符之间可以有空格, 也不一定跟echo在同一行,
但是: 结束标识符一定要顶行写. 否则, 不认而报错.
在php中, &&和and, ||和or两种写法都是可以的. 通常逻辑量用true/false小写的表示.