搭建PHP开发环境
1、理解BS/CS架构;
答:B/s:browser/server:服务器与浏览器架构的软件,特点:依靠浏览器为依托,不需要安装客户端,打开网页就能使用的软件。例如:京东、淘宝、百度
C/s:client/server:客户端与服务器架构的软件,特点:必须要安装客户端才能使用的软件。例如:QQ、酷狗
2、理解一个网站从请求到响应的交互过程
答:客户端-->浏览器-->服务器-->php-->Mysql 一步步返回
说明:当用户在浏览器的地址栏里输入域名或者ip时,浏览器会承载着这个请求找到指定的服务器,服务器根据请求的语言,调用相对应的服务器端脚本语言,服务器端语言调用数据库没数据库将查询结果返回给服务器端,服务器再承载着这个结果返回给浏览器,插入到页面的指定位置,从而完成整个响应过程。
3、理解http协议
答:超文本传输协议,特点是:无状态的,是万维网发布的一个规则 上网的时候就是:http://域名。
4、掌握如何搭建WAMP(单独安装Apache MySQL PHP);(搭建WAMP环境的步骤)
答:
① 在任意一个盘符下新建一个名为web的文件夹,在里面分别新建三个文件夹:Apahce、mysql、php。
② 首先安装Apache,安装完成后,在浏览器的地址栏里输入localhost或者是127.0.0.1页面显示It works!表明安装成功
③ 安装PHP,让Apache加载php,安装完成重启服务器。
④ 安装MySQL,安装完成使用命令net start mysql来启动服务
⑤ 配置php,打开php的错误提示,配置默认时区,打开相对应的扩展,配置完成重启服务,编写程序输出hello world!整个安装完成。
5、掌握Apache与PHP的关系,如何配置能够解析PHP;
答:Apache是一个服务器,在客户端和服务器端语言之间进行服务的,php是一个服务器端的嵌套在html里的解释性脚本语言,它要想在浏览器里正常运行必须依靠Apahce作为支撑,没有了php,Apahce能正常运行,没有了php,php代码在浏览器里是无法运行的,但是php有自带的命令行,它是可以运行的。
在Apache的主配置文件httpd.conf里加上:
PHPIniDir "E:/web/PHP/php.ini"
LoadModule php5_module "E:/web/PHP/php5apache2_2.dll"
这就是Apache加载php
6、掌握如何找到服务器所使用的php.ini所处的位置;
答:编写程序输出:phpinfo()函数将php的所有信息打印在了浏览器上,其中有一个选项是说明Apache加载的php的配置文件,php的配置文件名是:php.ini
7、掌握如何找到php的扩展目录,并开启某些PHP扩展;
答:在php.ini里有这个选项:extension_dir ,把这个选项的前面的分号去掉,然后再后面写上php的扩展目录所在具体路径,例如:extension_dir = "E:/web/php/ext" 重启服务器才会生效
8、了解PHP文件标签,能够编写一个hellord输出;
答:<?Php echo “hello world!”;?> 要想使用php的短标记:修改php.ini里:short_open_tag,把前面的分号去掉,把参数写成on,例如:short_open_tag = On 重启服务器才会生效
9、了解端口的概念,知道(Apache、MySQL)服务器的默认端口;
答:端口就是一个软件的标记,相当于门牌号。Apache的端口号是:listen 80,mysql的端口号是:port 3306 php没有自己的端口号默认和服务器保持一致 端口可以修改,修改后要重启服务器,并在以后的访问中加上端口号,例如:http://www.baidu.com:8080
10、理解网站,掌握区分动态网站与静态网站
答:网站是由html、css、js和服务器端语言以及数据库进行动态开发的B\S架构的软件。
静态网站:只能浏览不能进行增删改查操作的网站;
动态网站:凡是与数据库交互的网站都是动态网站;
11、掌握serverroot,servername,DocumentRoot
答:serverroot:服务器所在的目录
Servername:网站的域名
DocumentRoot:网站存放的根目录。刚刚安装完成后,默认的路径是:盘符:/web/Apache/htdocs,当然这个位置可以更改
12、理解客户端、服务器端、浏览器、服务器
答:客户端:就是用户上网的终端,也就是谁上网谁就是客户端
服务器端:就是服务器所在的终端
浏览器:就是用户用来上网的一种工具
服务器:给用户上网提供服务和给服务器端语言提供运行平台的终端
PHP基本语法
1、理解PHP的来龙去脉
答:上网查找来龙去脉。
Php特点:开源、免费、跨平台,功能强大,执行效率高。
Php环境分为:WAMP和LAMP
WAMP:windows+Apache+Mysql+php
LAMP:linux+Apache+Mysql+php
注:php不仅仅只支持Apahce作为服务器还有很多服务器他都可以的,例如:nginx,等。还有数据库,现今所有的数据库php都能连上。例如:SQLserver、oracl等。
2、理解PHP与其他语言(java、asp、.net平台)的异同(跨平台、执行效率、开发效率、稳定性、开源、移动互联)
答:java:uninx+tomcate+oracl+javaee
.net:windows+IIS+SQLserver+ASP
PHP:
WAMP:windows+Apache+Mysql+php
LAMP:linux+Apache+Mysql+php
Php非常强大,主要做web开发,开发起来效率高,用户体验好,服务器优化性能好,是当今开发网站首选语言。
3、掌握编写代码时正确使用注释
答:php的单行注释; // # 多行注释: /* */
注:写注释是一个程序员必备的基本素质,写注释能让代码一目了然,每个php文件的功能更加清晰的展现给其他开发者,学会写注释能帮助你高新就业!
4、掌握isset()、unset(),empty()
答:此处遇到了函数,函数查手册,三要素:
① 首先明白函数的功能
② 明白函数有几个参数
③ 明白函数的返回值
Isset():检测变量是否被设置,参数只有一个就是变量名,返回值如果设置了,返回true,否则返回false
Unset():销毁给定的变量,也只有一个参数就是变量名,没有返回值
Empty():判断变量是否为空,如果为空返回为true,否则返回false,要是想判断非空就用:!Empty(变量名)
5、掌握可变变量,变量的引用(值传递与地址传递)
答:值传递就是将一个变量的值赋值给另一个变量,其中任何一方的改变不会影响另一方,引用赋值是在直接赋值的基础上加一个&,这时两变量就指向了同一内存空间,任何一方的改变都将牵动另一方。
例如: $b=20; $a=$c=$b; $c=30; echo $a; 结果是:20
例如:$a=10; $b=&$a; $c=&$b; $a++; echo $c; 结果是:11
6、掌握变量的声明以及命名
答:① 必须由$修饰开头
② 变量名严格区分大小写
③ 变量可以是中文,但一般不用
④ 不能包含特殊字符,由字母数字下滑线组成,不能以数字开头
声明 :$a=10; $b=”erwerwer”
7、掌握变量的八大类型
答:四种标量数据类型:整型、实型,字符型,布尔型
两种特殊数据类型:资源、空类型
两种复合数据类型:数组、对象
8、掌握var_dump()、echo、print_r():
答:echo :输出一个或者多个的字符串
Print_r():打印关于变量的易于理解的信息。
Var_dump():打印变量的详细信息
9、掌握在各种变量类型之间进行转换
答:强制转换和自动转换
例如:强制转换:$a=10; echo (float)$a
例如:自动转换:$a=10; $a=1.2; var_dump($a) 此时的$a为浮点型
10、掌握常量的定义和使用
答:define(“ 常量名”,”常量值”) 例如:define(“B”,10); echo B; 结果是:10
注:常量一旦被定义不能被修改
例如:define(“A”,10); @define(“A”,20); echo A; 结果是:10
11、掌握常量和变量的区别
答:常量就是在程序运行过程中值不能发生改变的量,一旦被定义不能被修改
变量就是在程序运行过程中值可以发生改变的量,变量的数据类型根据值做决定
12、掌握使用各种运算符和表达式 (算术运算符、自增自减运算符、比较运算符、字符串连接运算符、逻辑运算符、错误控制运算符和表达式)
答:算术运算符:+ - * / % += *= -=
逻辑运算符:! && ||
比较运算符:> < >= <= != == ===
注:双等号只比较两边的值是否相等 三等号:既判断两边的值也判断两边的数据类型
自增自减运算符: ++ --
字符串连接运算符: .
错误控制运算符: @
表达式: ? :
PHP语言结构
1、php的语言结构有哪些
答:顺序结构、选择结构、循环结构
2、掌握if…else if…else...if的基本语法;
答:if(条件){ 判断结果} if(判断条件){肯定的结果}...elseif{否定的结果}else{两个条件都没成立}
2、掌握switch … case 语法
答:case后面必须有break断开,否则就会继续执行,一直到遇到break为止或者一直到结束
3、掌握for循环
答:for(初值;终值;步长){循环体}
4、掌握特殊控制语句(break continue)
答:break是结束本层循环,continue是结束本次循环进行下一次循环
例如:$a=0;
for($i=1;$i<5;$i++){
If($i==2){
continue;
}
For($j=1;$j<=3;$j++){
If($j==2){
Break;
}
$a++;
}
} echo $a; 结果是:3
5、掌握while/do…while的基本语法;
答:while是先判断循环条件,再执行循环体,do...while是先执行循环体,再判断循环条件,当循环条件不成立时,do...while比while多循环一次
例如:$a=3;
Do{
$a++;
}while($a<2);
While{$a<3}{
$a++;
}
Echo $a; 结果是:4
6、灵活运用函数的定义与调用
答:定义函数:function 函数名(形参){函数体 return 返回值} 调用函数:fun(实参)
注意:在函数体内,如果遇到了return 将返回该处的值,下面的代码将不再执行
例如:function fun(){
global $a;
$a=1;
$a++;
Return $a;
++$a;
}
fun();
echo $a; 结果是:2
7、灵活运用变量的作用域
答:局部变量(就是在函数体内定义的变量,作用域是整个函数体内部,要想在函数提内部使用全局变量需要加global声明)全局变量(就是在函数体外定义的变量,作用域是整个php脚本)静态变量(static定义的变量,他保存的数据是静态的也就是不变的)
8、掌握参数的传递(传值、传地址)
答:值传递是以形参接收实参的值的方式进行传递的,在没有声明全局变量的情况下,形参做出的修改不会影响函数体外实参的值,地址传递就是在值传递的基础上加&,此时形参与实参指向同一内存空间,形参做出的修改会直接影响函数体外实参的值,不管有没有global。
例如:function fun($a,&$b){
Global $a;
$a+=$b;
$b+=$a;
}
Fun(4,5);
Echo $a.’#’.$b; 结果是:9#14
9、简单运用递归函数
答:递归就是函数自身调用自身,递归精度大,但是耗费资源
例如:求n!
Function fun($n){
If($n==1){
Return 1;
}Else{
Return Fun($n-1)*$n
}
}
Echo fun(5); 结果是:120
10、掌握include require include_once require_once的区别
答:当程序遇到一个致命性错误时,include会产生一个警告,而程序继续执行;require会终止执行;include_once()和require_once()都是仅仅对一个文件包含一次的意思,为了避免多次包含同一个文件产生的错误,我们用include_once()和require_once()来代替他们
字符串
1、字符串的定义
答:单引号,双引号,定界符
例如:$a=’aaaaa’; echo $a; 结果是:aaaaa;
$a=”sdsadfsfd”; echo $a; 结果是:sdsadfsfd
$b=10;
$a=”$b 20”; echo $a; 结果是:10 20
$a=10;
定界符格式:<<<大写的自己随便定义的格式 字符串 以你自己定义的格式顶头结尾
$str=<<<HELLO
QWERQWRQWRQ $a WRQWRQWERQWRQWRQWASJFDASJKFGSDOF
HELLO;
echo $str;
2、单引号与双引号的区别
答:双引号解析以$开头的变量名,单引号不解析
3、掌握使用print printf、sprintf输出字符串;
答:print()输出字符串 实际上不是一个函数(它是一个语言结构),因此你可以不必使用圆括号来括起它的参数列表。
Printf():输出格式化字符串 例如:$a=printf(“%d”,17); echo $a 结果是:172
Sprintf():和Printf()一致
5、掌握字符串处理函数(strlen、substr、strpos、trim、ltrim、rtrim)
$a=’qweqweqweqwe’
Strlen(字符串):求字符串长度
Substr(字符串,开始截取的位置,截取的长度【可省,如果省掉就将从开始的位置一直截取到结束】):截取字符串,返回截取后的字符串
例如:有一个url:http://www.php.com/index/ext/index.php.html,回答些列问题:
(1)如果想要获取到.php,怎么办?请你写出你的解题思路和伪代码。
$str=”http://www.php.com/index/ext/index.php.html”;
思路:
① 先将这个url变成一个字符串赋值给一个变量
② 查找x最后一次出现的位置,用strrpos查找;
③ 将查找后的返回值作为截取的第二个参数,也就是截取开始的位置
④ 截取,用substr开始截取,截取的长度为4
⑤ 返回输出
代码:
$index=Substr($str,strrpos($str,”x”)+1,4);
Echo $index;
(2)如果想要获取.html怎么办?写出你的实现思路和伪代码。
思路:
思路:
① 先将这个url变成一个字符串赋值给一个变量
② 查找.最后一次出现的位置,用strrpos查找;
③ 将查找后的返回值作为截取的第二个参数,也就是截取开始的位置
④ 截取,用substr开始截取,不用写第三个参数,直接截取到最后
⑤ 返回输出
代码:
$index=Substr($str,strrpos($str,”.”));
Echo $index;
6、通过结合手册实现如下功能(看到函数能知道功能,知道需求能查到相关函数):
① 将字符串中的换行替换为<br/>
答:str_replace(要替换的值,替换成谁,在谁里替换也就是字符串名):
例如:$a=”hello world!”; echo str_replace(“l”,”Q”,$a); 输出结果是:heQQo worQd!
② 将所有字母转换为大写(小写)
答:strtolower():将整个字符串转换成小写
例如:$str=”HELLO world!” echo strtolower($str); 输出结果是:hello world!
Strtoupper():将整个字符串转化成大写
例如:$str=”HELLO world!” echo strtoupper($str); 输出结果是:HELLO WORLD!
③ 去除字符串两端(左侧、右侧)的空白
答:trim():去除字符串两端的空白字符
例如:$a=” aaa ”; echo trim($a); 结果是:没有空格的aaa
Ltrim():去除字符串左边的空格
Rtrim():去除字符串右边的空格
④ 将字符串中每个单词的首字母大写、将字符串的首字母大写
Ucfirst():将字符串的首字母大写
Ucwords():将字符串中每个单词的首字母大写
数 组
1、掌握数组的分类
答:根据类型分:关联数组和索引数组; 根据维度分:一维数组、二维数组、多维数组
定义数组:变量名=array(元素,元素,元素) 或者 $a[]=1; $a[]=4; 不写下标的声明也是可以的,下标就从0开始,只要是带有[]的变量都是数组
例如:$arr=array(1,2,3,4,5);
2、理解索引数组与关联数组,键名与值;
答:索引数组:数组中元素的下表全部是数字的数组,索引数组的下表默认都是从0开始的
例如:$a=array(“a”,”b”);
或者 $a=array(2,4,5,6);
或者 $a=array(1=>2,2=>3)
或者 $a=array(1=>”wqeqwe”,4=>”weqweqwe”)
关联数组:数组元素的下表有一个是字符串的数组
例如:$a=array(“a”=>1111,”b”=>222);
或者 $a=array(“a”=>”hello”,”b”=>”world!”)
或者 $a=array(1,2,3,”name”=>”zhangsan”)
键、索引、下标都是指的是元素的位置
元素指的是数组中的值
3、掌握数组的增删改查,例如如以下情况:
注:凡是涉及数组中的增加、删除、修改这些操作的时候必须要通过更改数组的下标这个值才会发生改变,否则无效。
增加:在数组元素增加的时候,如果数组的下标存在,值将会被覆盖掉
例如:$arr=array(1,2,3,4,5,6)
$arr[] = ‘a‘; //此时这段代码会将$arr中的1覆盖
$arr[‘y‘][] = 10;
$arr[‘y‘][‘3‘] = 20;
删除:unset(数组名[下标])
从一维数组中删除一个元素(unset($arr[3]))
从多维数组中删除一个元素(unset($arr[‘3‘][‘7‘]))
修改:注意,如果修改的下标不存在的时候就变成了追加
如何修改一个一维或多维数组中的值$arr[‘y‘][‘3‘] = 20;
4、掌握一维索引数组和一维关联数组的遍历(也就是循环输出)
答:一维索引数组:
$arr=array(1,2,4,5,6,7,8,9);
//$i代表的是数组的下标,要想在循环里使用某个元素,就用$arr[$i],只写$i,是没意义的
//count是统计数组的长度作为循环的终止条件
For($i=0;$i<count($arr);$i++){
Echo $arr[$i]; //就是将一维索引数组中的元素全部输出在浏览器上
}
一维关联数组:
$arr=array(“name”=>”zhangsan”,”sex”=>”男”);
//关联数组的遍历必须使用foreach,索引数组也可以使用foreach
//foreach的格式:
//foreach(数组名 as 键的变量名=>值得变量名){ 循环体} 它同属于循环结构
Foreach($arr as $k=>$v){
Echo $k.“->”.$v; //这就是将数值中的元素输出,格式是:键->值
}
5、掌握二维索引数组和二维关联数组的遍历(也就是循环输出)
答:二维索引数组:(也就是两层array的索引数组)
$arr=array(array(1,2,4,5,6,7,8,9));
//$i代表的是第一个一维数组的下标,$j代表的是数组中的数组的下标,要想在循环里使用某个元素,就用$arr[$i][$j],只写$i,是没意义的
//count是统计数组的长度作为循环的终止条件
For($i=0;$i<count($arr);$i++){
For($j=0;$j<count($arr[$i]);$j++){
Echo $arr[$i][$j]; //就是将二维索引数组中的元素全部输出在浏览器上
}
}
二维关联数组:
$arr=array(array(“name”=>”zhangsan”,”sex”=>”男”),array(“name”=>”lisi”,”sex”=>”男”));
Foreach($arr as $k=>$v){
Foreach($v as $key=>$val){
Echo $key.“->”.$val; //这就是将数值中的元素输出,格式是:键->值
}
}
6、掌握将二维关联数组或者索引数组放入表格里
$arr=array(
array("age"=>"17","sex"=>"女"),
array("age"=>"17","sex"=>"男"),
array("age"=>"20","sex"=>"女"),
);
echo "<table border=1>";
foreach($arr as $val){
echo "<tr>";
foreach($val as $v){
echo "<td>";
echo $v;
echo "</td>";
}
echo "</tr>";
}
echo "</table>";
7、从数组中查询是否存在某个值(键)(in_array、array_search、array_key_exists)
in_array():查找某个元素手否存在于数组中
Array_seatch():在数组中搜索给定的值,如果存在将返回键名
array_key_exists():判断数组中的键或者索引是否存在于数组中
8、掌握数组与字符串相关函数explode、implode
Explode():将一个字符串根据标记分割成数组
例如:[email protected] 变成 0=>861745122 1=>qq.com
Print_r(Explode(“@”,$str));
Implode():将是一个数组连接成字符串
9、掌握看到如下函数知道如下函数的意思,知道需求能够通过手册查找到相关函数(
array_values():将数组中所有的值返回组成一个索引数组
array_keys():将数组中所有的键返回组成一个索引数组
array_flip():将数组中的键个值进行交换,键名如果存在值将会被替换掉,不存在相当于追加
array_reverse():将数组进行翻转
Count():计算数组的长度
array_count_values():统计数组中相同元素出现的次数,格式为:值-->次数
array_unique():去除数组中的重复项,返回去除后的新数组
Sort():将数组进行从低到高排序(正向)
Rsort():将数组进行从高到低排序(逆向)
Ksort():按照数组的键名进行排序(正向)
Krsort():按照数组的键名进行排序(逆向向)
Asort():将数组进行排序,并保持索引关系
Arsort():将数组进行逆向排序并保持索引关系
array_merge():合并一个或者多个数组
array_rand():随机从数组中产生一个或者多个键组成一个新数组返回
array_sum():计算数组中所有元素的和
Apache服务器配置
1、理解httpd.conf与httpd-vhosts.conf
答:httpd.conf:Apache的主配置文件,httpd-vhosts.conf是配置虚拟主机的文件,要想让Aapche加载此文件,需要在Apache的主配置文件里将#Include conf/extra/httpd-vhosts.conf前面的”#“去掉,去掉后Aapche就加载了此文件,可以在这里面配置虚拟主机
2、通过修改apache的配置禁止或显示目录列表(Options Indexes FollowSymLinks)
答:Options Indexes FollowSymLinks 配置完成的该虚拟主机,在访问的时候可以显示该目录下的所有文件列表
3、Order、Allow、Deny、DocumentRoot、ServerName的作用
答:AllowOverride None:是否允许域名重写 ,None不允许 on 允许 允许后会将网站跟木下的.htacess文件生效
Order:访问 allow 允许deny 禁止 谁在前谁先生效
Allow from all:允许来自一切的访问
DocumentRoot:网站发布根目录
ServerName:设置域名
4、掌握独立完成虚拟主机的配置过程,并深刻理解每一步的作用
答:① 找到:C:\Windows\System32\drivers\etc\hosts文件,打开,修改成如下格式:
127.0.0.1 (ip) www.a.com (域名)
② 找到Apache的主配置文件,找到:
#Include conf/extra/httpd-vhosts.conf前面的”#“去掉,去掉后Aapche就加载了配置虚拟主机的文件,可以在conf/extra/httpd-vhosts.conf里面配置虚拟主机
③ 打开:conf/extra/httpd-vhosts.conf
将文件清空,写入:
NameVirtualHost *:80 //不管你配置任何虚拟主机,访问的端口都是80
<VirtualHost *:80> //此虚拟主机
ServerNamelocalhost //访问的网站域名
documentRoot E:\web\Apache\htdocs //网站的存放根目录
</VirtualHost>
<Directory "E:\web\Apache\htdocs"> //网站存放的历史目录跟documentRoot保持一致
Options Indexes FollowSymLinks //设置该虚拟主机下的特性,访问时显示该目录下的所有文件列表
AllowOverride None //允许或者不允许域名重写 None 不允许 on 允许
Order allow,deny //访问 Allow允许一些访问 Deny 禁止访问,Allow先生效,deny后生效
Allow from all 允许来自所有的访问
</Directory>
表单处理
1、掌握表单的写法(form action method )及常见的表单元素(text、password、hidden、radio、checkbox、select File、submit、button、texteara、reset)
表单标签:<form></form>
Action:代表表单的提交地址 问:当点击提交按钮,页面跳转到了哪里? Action指定的文件里
Method:代表表单的提交方式 分为get和post 默认为get
Get与post 的区别:
Get传值为明文传值,受地址栏长度限制,传送数据量较小,相对于不安全,在服务器短用$_GET接收传递过来的值;
Post传值为非明文传输,传送数据量大,相对与安全,在服务器端用$_POST接收传递过来的值
文本框:<input type=”text”>
单选按钮:<input type=”radio”>
如何实现单选按钮?
答:要给这个input的name属性起一样的名字,例如:
<input type=”radio” name=”sex” value=”男”>男
<input type=”radio” name=”sex” value=”女”>女
复选框:<input type=”checkbox”>
如何实现复选框?
答:要么将复选框的name设置成数组格式,例如:<input name=”hobby[]” type=”checkbox”>
要么把每个复选框的name设置的都不一样
密码框:<input type=”password”>
隐藏域:<input type=”hidden”> 隐藏域的值不会被显示在页面上,但是会随着表单提交,值被提交到后台
下拉列表:<select> <option></option> </select>
普通按钮:<input type=”button”>
重置按钮:<input type=”reset”>
提交按钮:<input type=”submit”>
文件上传域:<input type=”file”>
文本域:<textarea cols=””rows=””></textarea>
问题:
1)为什么要给表单的每个元素起name属性?用id或者class代替name可以吗?为什么?
答:要想在服务器端接收到前台表单提交过来的值,必须要给表单元素声明name属性,否则表单的值将无法在服务器端获取。不能用其他属性来代替name,服务器只识别name属性
2)当点击提交按钮,页面没有发生任何变化,请你解释是什么原因。
答:表单的action属性未设置,或者提交按钮的type属性的值非submit
3)点击提交按钮后,页面显示404错误,这是什么原因造成的。
答:action指定的文件不存在,404是未找到文件的错误状态码
2、掌握服务器端如何通过$_POST和$_GET和$_REQUEST接收客户端提交的数据
答:在服务器端用$_POST或者$_GET来接受与表单提交方式一致的客户端数据,简而言之:如果表单的method属性设置成post,那么在服务器端就必须用$_POST或者$_REQUEST来接收表单提交的值;
如果表单的method属性设置成get,那么在服务器端就必须用$_GET或者$_REQUEST来接收表单提交的值;
$_POST和$_GET和$_REQUEST是php中的全局预定义数组,他们在使用的时候一般运用于表单,既然是数组,就有键和值,键就是前台表单设置的name属性,值就是该name属性所对应的value
3、掌握动态拼接option
答:首先定义一个数组,例如:$arr=array(1,2,3,4,5,6,7);
<select name=”city”>
Foreach($arr as $key=>$val){
Echo “<option value=”$arr[$i]”>”.$arr[$i].”</option>”
}
</select>
文件操作
1、理解(file_exists、copy、unlink、filesize、filemtime)
答:file_exists():判断给定的文件是否存在
Copy():将一个文件拷贝到另一个文件里
Unlink():删除服务器端的文件
Filesize():获取文件的大小
Filetime():获取文件上次修改的时间
2、理解fopen、fgets、fread、fwrite和fclose系列函数对文件进行操作
答:fopen():打开文件,返回一个已经打开的文件资源
Fgets():获取文件的一行内容,读取文件
Fread():读取文件,根据参数决定读取几行
Fwrite():将一个字符串写入文件中
Fclose():关闭文件,释放fopen后的文件资源流
3、掌握通过file_get_contents读取文件
答:file_get_contents():将一个文件的内容读入到一个字符串中去,或者是获取一个url的内容
4、掌握通过file_put_contents将数据写入文件
答:file_put_contents():将整个字符串写入到文件里
5、掌握相对路径与据对路径
答:相对路径就是相对于上级目录而言,例如:../a.php
绝对路径就是直接写出文件的位置:例如:C:/web/Apche/a/a.php
MySQL简介与安装
1、理解MySQL的历史
2、掌握MySQL的安装步骤
3、掌握navicat工具
4、掌握MySQL常见的数据类型(整型、浮点型、日期类型、字符串类型)
答:int float date text char和varchar decimal
Char与varchar的区别:
MySQL数据的基本操作
1、创建数据库:create database 数据库名
2、查看所有数据库:show databases
3、打开数据库:use 数据库名
4、删除数据库:drop database 数据库名
5、创建表:create table 表名(列名 数据类型 约束,列名 数据类型 约束。。。。。。)
6、查看当前数据库下所有表:show tables
7、查看当前表结构:desc 表名
8、删除表:drop table 表名
9、插入数据:insert into 表名(【自增列的值可以省略不写不插入】列名,列名。。。。。)values(值1,值2【数据类型为char、varchar、text要加上单引号】)
10、查看数据:select * 或者是具体的字段名 from 表名 where 条件 11、修改数据:update 表名 set 字段名=新值 where 条件 如果不加where条件整张表的数据都将会更新
12、删除数据:delete from 表名 where 如果不加where条件整张表的数据都将会删除 也就是清空表
MySQL其他查询
1、where子句
Select * from stu where id=1 or id=2 or id=5
Select * from stu where id in (1,2,5)
2、排序order by
order by 排序列 desc(降序)asc(默认的升序)
3、limit限制记录条数
limit 限制结果集 (如果写了一个参数,就是从第几条开始,但不包括那一条,取几条,如果有两个参数,第一个参数还是从哪条开始不包括那条,第二个参数就是取几条)
4、distinct去掉重复项
Select distinct(列名) from 表名 where 条件
5、列起别名与表起别名
6、内连接 inner join ... On
左外连接left join ... On
右外连接right join ... On
7、模糊查询语法
like 模糊匹配 %代表有任意多个字符 _代表任意一个字符
8、掌握between…and…
between…and…:在。。。。之间
例如:查询出学生年龄在18到25之间的学生信息 年龄大于18 并且 小于25
Select * from stu where age between 18 and 25
MySQL存储引擎和字符集
12.1 存储引擎概述;
12.2 字符串
【考核要求】
1.掌握常见的存储引擎的区别(MyISAM InnoDB MEMORY);
2.了解常见的字符集(GB2312,GBK,UNICODE)
PHP操作MySQL
13.1 PHP连接MySQL;
13.2 通过PHP对MySQL进行增删改查;
【考核要求】
1.掌握在不查阅手册的情况下实现通过mysql_***系列函数对MySQL进行CRUD操作(mysql_connect、mysql_select_db、mysql_query、mysql_fetch_array、mysql_fetch_assoc、mysql_fetch_row、mysql_insert_id)
问: 使用mysql系列函数用不用php开启mysql扩展?
必须用 否则出现 :undefined 。。。警告
问:mysql_connect()能不能连接远程数据库 ?
能 函数强大 必须能 只要第一个参数写对了,密码和用户名匹配对了,就能连接
mysql_connect():打开一个数据库连接,三个参数,第一个参数是数据库的地址,第二个参数是管理员名,第三个参数是密码 返回一个数据库连接标识
mysql_select_db():选择数据库,有两个参数 第一个参数是数据库名称,第二个参数,mysql_connect返回的数据库标识
mysql_query():执行sql语句 对select返回的是资源 对于其它类型的 SQL 语句,mysql_query() 在执行成功时返回 TRUE,出错时返回 FALSE。
mysql_fetch_array():从结果集中取得一行作为关联数组,或数字数组,或二者兼有
例如:mysql_fetch_array($res,MYSQL_NUM) 这将是索引数组
mysql_fetch_array($res,MYSQL_ASSOC) 这将是关联数组
mysql_fetch_assoc:从结果集中取得一行作为关联数组
mysql_fetch_row:从结果集中取得一行作为索引数组
mysql_insert_id:取得刚刚插入自动增长的id 不需要写任何参数
CMS项目开发与总结
1、管理员登录功能的开发思路及伪代码:
① 先建立一个登录表单,内容包括用户名、密码和登录按钮
② 将action地址设置为将要进行服务器端验证的文件,method属性为post
③ 在这个服务器端验证的文件进行连接数据库的等操作
④ 书写规范的sql查询语句:select *from 表名 where name=$_POST[‘name’]
⑤ 如果词条语句执行成功那么说明用户名存在,紧接着进行判断密码,如果失败说明用户不存在,提示跳转进入到注册页面
⑥ 因为我是select * 是将所有的字段都查询出来,那么只需要将提交过来的密码与查询出来的密码进行匹配,匹配成功则登录成功,否则登录失败,失败原因是密码错误,提示跳转到登陆页面,重新输入密码!
2、搭建后台主框架并添加功能菜单(frameset):
答:<frameset rows="80,*">
<frame name="top" src="top.php">
<frameset cols="150,*">
<frame name="lower_left" src="left.php">
<frame name="lower_right" src="right.php">
</frameset>
</frameset>
3、新闻添加的思路:
① 组建新闻添加的表单页面,有新闻标题、内容、所属分类、添加人员
② 分类不能是静态的,应该是从数据库里面读出来的拼接成的下拉列表
③ 需要将表单的提交按钮属性设置成为submit,method设置成为post,action为进行插入的服务器端的文件名
④ 页面跳转到实现添加功能的文件里,进行一系列验证,验证完成后连接数据库,组合sql语句:insert into 表名(列名)values(post提交过来的值),完成插入操作,插入成功跳转到列表页面
⑤ 列表页面的显示信息需要进行两表联合查询:select * from 新闻表 inner join 分类表 on新闻表.分类id=分类表.id,一张是新闻表一张是分类表
4、删除新闻的思路:
① 该操作是在新闻列表里面进行的操作
② 首先要保证有一个a标签来让管理员进行点击,还要注意,要删除那条新闻要将新闻id传递给服务器端,那就需要进行get传值:<a href=’del.php?Id=刚才列表所查询出来的新闻id’>
③ 服务器端用$_GET[‘id’]来获取刚才的传递过来的id值
④ 进行连接数据库等操作,组合sql语句:delete from 新闻表 where id=$_GET[‘id’]
⑤ 执行sql语句,执行成功跳转到列表页面,失败给出提示
5、修改新闻的思路:
① 该操作是在新闻列表里面进行的操作,但是需要有一个表单页面,类似于添加页面,与添加页面不同的是,文本框里面会有值
② 首先要保证有一个a标签来让管理员进行点击,还要注意,要修改那条新闻要将新闻id传递给服务器端,那就需要进行get传值:<a href=’update_news.php?Id=刚才列表所查询出来的新闻id’>
③ 服务器端用$_GET[‘id’]来获取刚才的传递过来的id值先进行的操作查询,将这条记录的信息查询出来输出到页面的表单里面,还要注意一会修改的时候需要id,就将id 放到表单里面的一个隐藏域里面
④ 用户点击保存,服务器端得到新的数据,验证非空,连接数据库等操作
⑤ 组合sql语句,进行update操作:update 表名 set 字段名=新值($_POST新提交过来的),字段名=新值($_POST新提交过来的),。。。。。。修改完成跳转到列表页面
6、搜索新闻的思路
7、
① 在新闻列表页面写一个搜索框,和一个分类的下拉菜单(动态读取的),搜索按钮
② 点击搜索按钮,仍提交到显示列表的php文件里
判断提交过来的文本框里的值,如果有,将这些信息组装成以一个where条件
④ 执行sql语句:
select news.id,title,content,fenlei.name,user_name,add_time,click from news inner join fenlei on news.fenlei_id=fenlei.id order by news.id where (title like “%提交过来的文本框里面的值%”or content like “%提交过来的文本框里面的值%”) and news.fenlei_id=提交过来的下拉框里面的值
⑤ 执行完成,重新输出表单
7、首页导航功能开发(导航即展示新闻分类)
答:① 建立一个前台主页,要有一个导航栏
② 因为导航是从数据库里面动态读出来的,所以要用php操作mysql读取分类表中的数据
拼写sql语句:select * from 分类表 然后执行sql语句
④ 读出数据后,将数据循环到ul的列表中去
8、首页最新新闻功能开发
① 在前台页面上建立一个最新新闻的模块,也就是一个ul列表
② 最新新闻是从数据库里面读出来的,所以要用php操作mysql读取新闻表中的数据
③ 因为是最新新闻,肯定是添加时间最新的,所以查询的条件就应该是根据添加时间降序排列
④ 拼写sql语句:select title,add_time from news order by add_time desc limit 3
⑤ 读出数据后,将数据循环到ul的列表中去
9、首页最热新闻功能的开发
① 在前台页面上建立一个最热新闻的模块,也就是一个ul列表
② 最热新闻是从数据库里面读出来的,所以要用php操作mysql读取新闻表中的数据
因为是最新新闻,肯定是点击量时最多的,所以查询的条件就应该是根据点击量降序排列
④ 拼写sql语句:select id,title,add_time,click from news order by click desc limit 3⑤ 读出数据后,将数据循环到ul的列表中去