一、HTML基础知识
1、总体框架
<html>
<head>
<title>网页标签</title>
</head>
<body>
网页内容
</body>
</html>
2、表格格式
<table>
<caption>表格标题文字</caption>
<tr 属性=“值” >
<th>第一个列表头</th>
<th>第二个列表头</th>
<th>第二个列表头</th>
</tr>
<tr> #行标记
<td 属性=“值”>第一行第一列数据</td>
<td 属性=“值”>第一行第二列数据</td>
</tr>
</table>
3、表单标记
<form 属性=“值”>...</form> #表单标记
#常用属性:
name:指定表单的名称
id:指定该标记的唯一标识码
method:指定表单数据传输到服务器的方法,取值是POST或GET
action:指定接收表单数据的服务器端程序或动态网页的URL地址
表单输入控件标记
<input 属性=“值”>
其中type属性设置成不同的输入元素:
单行文本框 type="text"
密码框 type="password"
复选框 type="checkbox"
单选按钮 type="radio"
文件域 type="file"
重置按钮 type="reset"
提交按钮 type="submit"
补充:滚动文本框
<textarea 属性=“值”>
文本框里的初始内容
</textarea>
eg:
<textarea name=ta rows 8 cols=20>
这是文本框的初始内容
</textarea>
二、PHP基础语法
1.PHP书写风格
<?php..........?>或者<?....?>
2.变量命名规则
由字母或下划线“_”开头,后跟任意数量的字母、数字或者下划线。变根据量在初始化时,使用“=”给变量赋值,变量类型会根据其赋值自动改变。
3.预定义变量
$_COOKIE。它是由HTTP Cookies传递的变量组成的数组。
$_GET。它是由HTTP GET 方法传递的变量组成的数组。
$_POST。它是由HTTP POST方法传递的变量组成的数组。
$_FILES。它是由HTTP POST方法传递的已上传文件项目组成的数组。
$_REQUEST。它是所有用户输入的变量数组,包括$_GET、$_POST、$_COOKIE所包含的输入内容。
$_SESSION。包含当前脚本中会话变量的数组。
3.运算符
算术运算符 +、-、*、/、取余%、取反-
赋值运算符 =、+=、-=、*=、/=
位运算符 &、|、^
比较运算符 ==、!=、<、>、<=、>=
错误控制运算符 @
递增、递减运算符 ++、--
逻辑运算符 &&、||、!
字符串运算符 “.”
4.流程控制语句
分支语句:if、switch
循环语句:while、do_while、for、foreach
转移语句:break、continue、return
if语句的定义形式:
if(表达式)
{语句块}
else
{语句块2}
switch语句:
switch(表达式){
case 常量1:语句1;[break;]
case 常量2:语句2;[break;]
case 常量3:语句3;[break;]
......
[default:语句n;]
}
eg:switch($n)
{
case1:echo $n;break;
case2:echo $n;break;
}
while语句:
while(A) //循环条件
{ B; //循环条件
}
当A为true时,执行{}中的语句,否则终止循环。
eg:用while语句实现求1~10之和的语句如下:
$i=1,$n=10,$sum=0;
while($i<=$n){
$sum = $sum + $i;
$i++;
}
do-while语句:
do{
A; //循环体
}while (B); //循环条件
for语句:
for(表达式1;表达式2;表达式3)
{语句块}
eg:for($n=0,$n<10;$n++)
{
if($n==$m)
continue;
echo $n;
}
5.Break语句
- 一是在switch语句中,用于终止case语句的执行,跳出switch语句。
- 二是用在循环结构中,用于终止循环语句执行,跳出循环结构。
6.Continue语句
- 一是在循环结构中使用跳过循环中剩余的语句,强行检测判定条件以决定是否进行下一次循环。
- 跳过最最内层循环的剩余语句。
7.使用continue和break的差别:
<? php
$m=5;
for($n=0;$n<10;$n++)
{
if($n==$m)
continue; //break;
echo $n; //如果上面是continue,结果为012346789。如果上面是break,结果为01234
}
三、数据处理
1.数组的创建和初始化
创建数组可以使用array()函数,语法格式如下:
array array([$Keys=>]$values,...)
说明:如果省略了键名,会自动产生从0开始的整数作为键名,如果只对某个给出的值没有指定键名,则取该值的键名为前面最大的整数键名加1。
eg:
<?php
$array1=array(1,2,3,4); //定义不带键名的数组
$array2=array("color"=>"blue","name"=>"picture","number"=>"01"); //定义带键名的数组
$array3=array(1=>2,2=>4,5=>6,8,10); //定义省略某些键名的数组
?>
2.数组的使用
要使用数组中某个值,可以使用$array["键名"]的形式。
eg:
<?php
$array1=array("黄色","蓝色","黑色")
echo $array1[1] //输出蓝色
$array2=array("a"=>5,"b"=>10,"c"=>15);
echo $array2["b"]; //输出10
?>
3.range()函数使用
range()函数自动建立一个值在指定范围的数组
语法格式如下:
array range(mixed $low,mixed $high[,number $step])
$low 为数组开始元素的值,$high为数组结束元素的值。
$step是步长值,默认为1
eg:
<?php
$array1=range(1,5)
$array2=range(2,10,2)
print_r($array1); //输出:Array([0]=>1[1]=>2[2]=>3[3]=>4[4]=>5)
print_r($array2); //输出:Array([0]=>2[1]=>4[2]=>6[3]=>8[4]=>10)
?>
4.数组的遍历和输出
- 使用for循环访问数组(注意:使用for循环只能访问键名是有序的整型的数组,如果是其他类型则无法访问)
eg:
<?php
$array=range(1,10)
for($i=0;$i<10;$i++)
{
echo $array[$i]; //输出:12345678910
}
?>
- 使用foreach循环访问数组(是一个专门用于遍历数组的循环)
语法格式如下:
foreach(array_expression as $value)
{echo $value;} //代码段 遍历给定的array_expression数组。每次循环中,当前单元的值被赋给变量$value并且数组内部的指针向前移一步。
foreach(array_expression as $key=>$value)
{echo $key,$value;} //代码段 做同样的事,只是当前单元的键名也会在每次循环中被赋值给变量$key。
eg:
<?php
$color=array("a"=>"red","blue","white");
foreach($color as $value)
{
echo $value."<br>"; //输出数组的值red、blue、white
}
foreach($color as $key=>$value)
{
echo $key."=>".$value."<br>"; //输出数组的键名和值a=>red、0=>blue、1=>white
}
?>
5.数组的排序
升序排序:
sort()函数:按照数组值从低到高重新索引。语法格式如下:
bool sort(array $array [,int $sort_flags])
$sort_flags的值可以影响排序的行为,$sort_flags可以取下4个值
SORT_REGULAR:正常比较单元(不改变类型),这是默认值
SORT_NUMERIC:单元 被作为数字来比较。
SORT_STRING:单元被作为字符串来比较
SORT_LOCALE_STRING:根据当前的区域设置把单元当作字符串比较
eg:
说明:sort()函数不仅对数组进行排序,同时删除了原来的键名,并重新分配自动索引的键名
<?php
$array1=array("a"=>5,"x"=>3,5=>7,"c"=>1);
if(sort($array1))
print_r($array1); //输出:Array([0]=>1[1]=>3[2]=>5[3]=>7)
else
echo "排序$array失败"; //不输出
?>
asort()函数:也可以对数组的值进行升序排序,但使用asort()函数排序后的数组还保持键名与值之间的关联。
eg:
<?php
$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
sort($fruits);
print_r($fruits);
//输出:Array([c]=>apple[b]=>banana[d]=>lemon[a]=>orange)
?>
ksort()函数:用于对数组的键名进行排序,排序后键名和值之间的关联不改变。
eg:
<?php
$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
ksort($fruits);
print_r($fruits);
//输出:Array([a]=>orange[b]=>banana[c]=>apple[d]=>lemon)
?>
降序排序:
rsort()函数:按数组中的值降序排序
arsort()函数:按数组中的值降序排序,不改变键名和值之间的关联
krsort()函数:将数组中的键名按降序排序
4.数组元素个数计算
count()函数:
sizeof()函数:
array_count_values()函数:计算数组中一个值出现的次数。语法格式如下:
array array_count_values(array $input)
返回一个数组,该数组用$input数组中的值作为键名,该值在$input数组中出现的次数作为值。
eg:
<?php
$arr=arry(1,2,3,3,1,4,1,1,4,2);
$result=array_count_values($arr);
print_r($result);
//输出:Array([1]=>5[2]=>2[3]=>2[4]=>2)
?>
5.计算字符串的长度
strlen()函数:可以计算字符串的长度。语法格式:
int strlen(string $string)
注意:该函数返回字符串的长度,1个英文字母长度为1个字符,1个汉字长度为2个字符,字符串中的空格也算一个字符。
eg:
<?php
$str1="hello ";
echo strlen($str1); //输出6
$str2="中国";
echo strlen($str2); //输出4
?>
6.字符串的比较
- 使用“!=”和“= =”比较的两个对象不一定要类型相等,整型也可以和字符串比较,如“123= ="123"”返回TRUE。而“!= =”和“= = =”比较的对象类型要严格相同才可能返回TRUE,如“123= = ="123"”返回FALSE。
- 字符串比较函数:
strcmp()、strcasecmp()、strncmp()和strncasecmp()。语法格式如下:
int strcmp(string $str1 , string $str2)
int strcasecmp(string $str1 , string $str2)
int strncmp(string $str1 , string $str2 , int $len)
int strncasecmp(string $str1 , string $str2 , int $len)
说明:这4个函数都用于比较字符串的大小,如果$str1比$str2大,则它们都返回1;如果$str1比$str2小,则返回小于-1;如果两者相等,则返回0。
strcmp()函数用于区分大小写的字符串比较;strcasecmp()函数用于不区分大小写的比较;strncmp()和strncasecmp()函数用于比较字符串的一部分。例如:
<?php
echo strcmp(“aBcd”,“abde”); //输出-1, 比较了"B"和"b","B"<"b"
echo strcasecmp("abcd","aBde"); //输出-1, 比较了"c"和"d","c"<"d"
echo strncmp("abcd","aBcd",3); //输出1, 比较了"abc"和"aBc"
echo strncasecmp("abcdd","aBcde",3); //输出0, 比较了"abc"和"aBc"
?>
注:字符串的比较要求能根据函数表达式,知道函数输出结果就可。
7.字符串替换
常用str_replace()函数,语法格式如下:
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
说明:str_replace()函数使用新的字符串$replace替换字符串$subject中的$search字符串。$count是可选参数,表示要执行的替换操作的次数。例如:
<?php
$str=“我是学生"; $str=str_replace(“学生”,“老师”,$str) ; //输出“我是老师"
echo $str;
?>
8.字符串与数组互相转换
字符串转化为数组
explode()函数可以用指定的字符串分割为一个数组。语法格式如下:
array explode(string $separator , string $string [, int $limit ])
说明:此函数返回由字符串$string组成的数组,每个元素都是$string的一个子串,它们被字符串$separator作为边界点分割出来。例如:
<?php
$str="使用 空格 分割 字符串"; $array=explode(" ", $str); print_r($array);
//输出Array ( [0] => 使用 [1] => 空格 [2] => 分割 [3] => 字符串 )
?>
数组转化为字符串
implode()函数可以将数组中的字符串连接成一个字符串。语法格式如下:
string implode(string $glue , array $pieces)
$pieces是被连接成字符串的数组,$glue是连接字符串的连接符。例如:
<?php
$array=array("hello","how","are","you");
$str=implode(",",$array); //使用逗号作为连接符
echo $str; //输出 "hello,how,are,you"
?> //implode()函数还有一个别名,即join()函数。
四、PHP高级编程
- 用户自定义函数
- 定义函数的格式:
function function_name([$parameter[, …]])
{ //函数代码段 }
关键字为function。function_name是用户自定义的函数名,函数名和变量命名规则相同,且不区分大小写,需要注意的是,函数名不能与系统函数或用户已经定义的函数重名。
- 定义函数例:
<?php
function func($a,$b)
{ if($a==$b) echo "a=b";
else if($a>$b) echo "a>b";
else echo "a<b";
} ?>
注:要求会定义一个简单函数。
- 函数的返回值
中断函数执行并不是return语句最常用的功能,许多函数使用return语句返回一个值来与调用它们的代码进行交互。
- 面向对象程序设计的三大特点
封装、继承、多态
- 创建类、属性和方法
- 类是面向对象程序设计的核心,它是一种数据类型。类由变量和函数组成,在类里面,变量称为属性或成员变量,函数称为方法。定义类的语法格式如下:
class classname
{ [ var $property[= value];…]
[function functionname($args)
{ //代码 }
]
}
- 简单的类定义例:
class a
{ var $a;
function fun($b)
{ echo "hello world"; } //不能将类的定义放到多个文件或多个PHP块中!
} 注:此处要求会定义一个简单类。
- 类的实例化
在声明一个类后,类只存在于文件中,程序不能直接调用。需要创建一个对象后程序才能使用,创建一个类对象的过程叫做类的实例化。类的实例化使用new关键字,关键字后面需要指定实例化的类名。
- 类的访问
在对象被创建之后,可以在类的外部对该对象的属性和方法进行访问,访问的方法是在对象后面使用“->”符号加上要访问的属性和方法。
例如:创建了对象“$obj”,类中有“$stunumber”,要访问该属性可以使用:
“$obj->stunumber”,注意属性的前面没有“$”。
- 类的访问控制
- public。声明为公用的属性和方法,可以在类的外部或内部进行访问。public是默认选项。
- private。声明为私有的属性和方法,只可以在类的内部进行访问。私有的属性和方法将不会被继承。
- protected。声明为被保护的属性和方法,只可以在类的内部和子类的内部进行访问。
注:此处能将访问权限描述清楚 。
- 静态属性和方法
静态属性和方法的声明用关键字static,访问静态属性和方法时需要使用到范围解析符“::”,格式如下:
classname::$attribute; //访问静态属性
classname::Cfunction([$args,…]) //访问静态方法
- 类的继承
- 子类访问父类:在PHP中,允许通过继承其他类的方法来调用这些类里已经定义好的属性和方法,PHP不支持多继承,所以一个子类只能继承一个父类。可以使用extends关键字来指明类与类之间的继承关系。
- 继承是单方向的,子类可以从父类中继承特性,但父类却无法从子类中继承特性。
- 抽象类
它是一种特殊的类,使用关键字abstract来定义,不能被实例化。一个抽象类中至少包含一个抽象方法,抽象方法也是由abstract关键字来定义。抽象方法只提供了方法的声明,不提供方法的具体实现。例如:
abstract function func($name, $number);
五、构建PHP互动网页
- 提交和获取表单数据方法
- 表单数据的提交方法主要分为两种:POST方法和GET方法。POST方法是在HTTP请求中嵌入表单数据;GET方法则将表单数据附加到请求该页的URL中。提交表单时要将表单标记<form>的属性method设为post或get。
- 接收表单可以使用$_POST、$_GET和$_REQUEST来完成。$_POST用于接收POST方法传来的值,$_GET用于接收GET方法传来的值,$_REQUEST可以取得包括POST、GET和Cookie在内的外部变量。
- 获取URL参数
以GET方法提交表单到某个页面时,该页面的URL中包含了表单数据的值,通过获取URL中的参数值即可获得需要的数据。
例如: http://localhost/EX6_1_Ppage.php?XH=081101&XM=%C2%DE%C0%FB&SEX=%C4%D0&Birthday=1990-01-09&ZY=%BC%C6%CB%E3%BB%FA&BZ=%B2%E2%CA%D4&BUTTON1=%CC%E1%BD%BB
- 页面跳转方法:
1)使用header()函数:只要在header()函数的参数中使用“Location: xxx”即可实现页面跳转功能。例如:
header("Location: 百度一下,你就知道");
2)通过表单的action属性:将<form>标记的action属性设置为要跳转到的页面,提交表单后就跳转到该页面。例如:
<form method="post" action="index.php"></form>
3)使用超链接:使用HTML的超链接标记<a>实现跳转页面的功能。例如:
<?php echo “<a href=http://www.qq.com “>腾讯</a>"; ?>
4)使用按钮:需要在按钮控件的onclick方法中设置执行的代码。例如:
<?php
echo '<input type="button" name="bt" value="页面跳转”
οnclick=window.location=“index.php">';
?>
5)使用<meta>标记:例如:
<meta http-equiv="refresh" content="5;url=http://www.baidu.com”>
说明:以上代码的作用是5秒之后跳转到百度页面。content属性中数字5表示5s之后跳转。
6)使用客户端脚本:PHP中使用JavaScript跳转到index.php页面的代码如下:
<?php
echo "<script>if(confirm('确认跳转页面?')) ";
echo "location='index.php'</script>";
?>
注:此处要求会3种URL的页面跳转方法。
- 初始化会话
- 实现会话功能之前必须要初始化会话,初始化会话使用session_start()函数。语法格式如下:bool session_start(void)
- 该函数将检查SessionID是否存在,如果不存在则创建一个,并且能够使用预定义数组变量$_SESSION进行访问。如果启动会话成功则函数返回TRUE,否则返回FALSE。会话启动后就可以载入该会话已经注册的会话变量以便使用。
- 注册会话变量
- 会话变量保存在预定义数组$_SESSION中,所以可以以直接定义数组单元的方式来定义一个会话变量,格式如下:$_SESSION["键名"]="值"。
- 会话变量定义后被记录在服务器中,并对该变量的值进行跟踪,直到会话结束或手动注销该变量。
- Cookie变量 例如:<?php
setcookie("user", "administrator"); //设置Cookie的名称和值
setcookie("password", "123456", time()+3600); //设置一个Cookie,1小时后失效
setcookie("name", "david", time()+3600, "\php5" ); //创建只在php5目录下有效的Cookie ?>
注:要求会看cookie的有效期即可。
六、MySQL数据库基础
- 插入表数据INSERT 基本格式如下:
INSERT [INTO] tbl_name [(col_name,...)] VALUES ({expr | DEFAULT},...),(...),...
tbl_name。被操作的表名。
col_name。需要插入数据的列名。如果要给全部列插入数据,列名可以省略。
VALUES子句。包含各列需要插入的数据清单,数据的顺序要与列的顺序相对应。
例:向PXSCJ数据库的表XSB(表中列包括学号、姓名、性别、出生时间、专业、总学分、备注)中插入如下的一行:081101,王林,1,1990-02-10,计算机,50,NULL
使用下列语句:
USE PXSCJ;INSERT INTO XSB VALUES('081101', '王林' , 1, '1990-02-10', '计算机', 50, NULL);
- 修改表数据UPDATE 基本格式如下:
UPDATE tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]
SET子句。根据WHERE子句中指定的条件对符合条件的数据行进行修改
WHERE子句。设定条件确定要修改哪些行,where_definition用于指定条件。
例1:将XSB表中的所有学生的总学分增加10。
USE PXSCJ;UPDATE XSB SET 总学分 = 总学分+10;
例2:将姓名为“罗林琳”的同学的专业改为“软件工程”,备注改为“提前修完学分”,学号改为“081261”。
USE PXSCJ;UPDATE XSB SET 专业 = '软件工程', 备注 = '提前修完学分',
学号 = '081261' WHERE 姓名 = '罗林琳';
- 删除表数据DELETE 基本格式如下:
DELETE FROM tbl_name [WHERE where_definition]
例:数据库mydata中有一个表table1,table1中有如下数据:
姓名 年龄 职业
张三 42 教师
李四 28 工人
要删除张三的信息可使用如下语句:
USE mydata;DELETE FROM table1 WHERE 姓名='张三';
- 查询数据SELECT 基本格式如下:
SELECT
[GROUP BY {col_name | expr | position} [ASC | DESC], ...]
[ORDER BY {col_name | expr | position} [ASC | DESC] , ...]
- GROUP BY子句主要用于根据字段对行分组。
例:将PXSCJ数据库中XSB表各专业输出。
SELECT 专业 FROM XSB GROUP BY 专业;
- ORDER BY子句可以保证结果中的行按一定顺序排列。
例1:将通信工程专业的学生按出生时间先后排序。
SELECT * FROM XSB WHERE 专业= '通信工程' ORDER BY 出生时间;
例2:将计算机专业学生的“计算机基础”课程成绩按降序排列。
SELECT 姓名, 课程名, 成绩
FROM XSB, KCB, CJB
WHERE XSB.学号= CJB.学号 AND CJB.课程号= KCB.课程号 AND 课程名= '计算机基础' AND 专业= '计算机'
ORDER BY 成绩 DESC;
第8章:PHP操作数据库
- 连接MySQL服务器:
使用mysqli_connect()函数。语法格式如下:
resource mysql_connect([string $server [, string $username [, string $password [, bool $new_link [, int $client_flags ]]]]])
$server :服务器名 $username:用户名 $password:密码
例:$conn=mysqli_connect(‘localhost’,‘root’,‘’);
- 选择数据库:
使用mysqli_select_db()函数。语法格式如下:
bool mysqli_select_db(resource $ link_identifier ,string $database_name)
$lin_identifier为一个连接标志符,使用之前已经打开的连接,$database_name参数为要选择的数据库名。本函数运行成功返回TRUE,否则返回FALSE。
例:mysqli_select_db($conn,"new_wen") or die("数据库选择失败");
- 执行SQL语句:
使用mysqli_query()函数。语法格式如下:
resource mysqli_query (resource $link_identifier , string $query )
$lin_identifier为一个连接标志符,使用之前已经打开的连接,$query参数为要选择的数据库名。
例:$sql="select * from XSB"; $result=mysqli_query($conn,$sql);
- 处理返回结果:
使用mysqli_fetch_row()函数可以从返回的结果集中逐行获取记录。语法格式如下: array mysqli_fetch_row(resource $result)
完整事例:
<?php
$conn=mysqli_connect('localhost','root','') or die('数据库连接失败');
mysqli_select_db($conn ,'PXSCJ') or die('选择数据库失败');
mysqli_query($conn,"SET NAMES utf-8");
$sql="select * from XSB where 学号= '081101'";
$result=mysqli_query($conn,$sql);
if($row=mysqli_fetch_row($result)) print_r($row);
//输出:Array ([0] => 081101 [1] => 王林 [2] => 1 [3] => 1990-02-10 [4] => 计算机 [5] => 50 [6] =>)
- 其他数据库函数:
- mysqli_fetch_assoc()函数
mysqli_fetch_assoc()函数可以获取结果集,与mysqli_fetch_row()函数的唯一区别是通过字段名称来获取数据,其声明方式如下:
array mysqli_fetch_assoc(resource $result)
- mysqli_fetch_array()函数
使用字段名作为键名存储在数组中。
- mysqli_fetch_object()函数
从结果集中取出一行数据并保存为对象,使用字段名访问对象的属性。