一、Web应用程序开发概述
1、Web应用程序是一种基于B/S(Browser/Server,即浏览器/服务器)结构的网络软件。它是一种使用HTTP协议作为通信协议,通过网络让浏览器与服务器进行通信的计算机程序。
2、目前流行的是三层B/S结构,即表现层、事务逻辑层和数据处理层。
3、Web应用程序可以把网站的HTML页面部分和数据部分分离。
4、如果一个网站中含有动态网页文件,这个网站就相当于一个Web应用程序。
5、Web应用程序的组成:HTML文件、服务器端脚本文件和一些资源文件。
6、运行Web应用程序的三个要素:Web服务器、浏览器和HTTP通信协议。
7、Web服务器是运行Web应用程序的载体,一个Web服务器可以放置多个Web应用程序;
浏览器是用于解析HTML文件并显示的应用程序,但无法处理服务器端脚本文件;
HTTP是浏览器与Web服务器之间通信的语言。
8、URL是Internet上任何资源的标准地址,每个网站上的每个网页在Internet上都有一个唯一的URL地址,通过网页的URL,浏览器就能定位到目标网页或资源文件。
9、多个域名可对应一个IP地址,即在一台主机上可架设多个网站。
10、域名的作用:
(1)将域名发送给DNS服务器解析得到域名对应的IP地址以进行连接;
(2)将域名信息发送给Web服务器,通过域名与Web度武器上设置的“主机头”进行匹配,确认客户端请求的是哪个网站。
11、静态网页和动态网页的区别:
(1)静态网页就是纯粹的HTML页面,网页的内容是固定的、不变的。用户每次访问静态网页时,其显示的内容都是一样的。
(2)动态页面是指页面中的内容会根据用户请求的不同而发生变化,同一个网页由于每次请求的不同,可显示不同的内容。
‼️⚠️12、Web应用程序的工作原理:
(1)用户在浏览器中输入要访问的web站点地址或在已打开的站点点击超链接。
(2)由DNS进行域名解析,找到服务器的IP地址,向该地址指向的web服务器发出请求。
(3)web服务器根据请求将URL地址转换为页面所在的服务器的文件全名,查找相应的文件。
(4)若URL指向静态文件,则服务器将文件通过HTTP协议传输给用户浏览器;若HTML文档中嵌入了ASP、PHP、JSP等程序,则由服务器直接运行后返回用户;如果web服务器所运行程序包含对数据库的访问,服务器会将查询指令发送给数据库服务器,对数据库执行查询操作,查询结果由数据库返回给web服务器,再由web服务器将结果潜入页面,并以html格式发送给浏览器。
(5)浏览器解释html文档,在客户端屏幕上展示结果。
‼️13、列举常见的Web服务器软件及动态网页设计语言:
(1)Web服务器软件:Apache、IIS、Tomcat。
(2)动态网页设计语言:PHP、ASP、ASP.NET、JSP。
二、PHP基础
1、PHP是一种可以嵌入到HTML中的脚本语言。一个PHP文件代码可包含如下三部分内容:
(1)HTML和CSS。
(2)客户端脚本(如JavaScript),位于<script></script>之间。
(3)服务器端脚本,通常位于“<?”与“?>”之间。
2、PHP规定所有变量名必须以“$”开头,区分大小写;
变量使用前不需要声明,PHP中也没有声明变量的语句;
变量名不能以数字或其他字符开头,变量名长度应小于255个字符,不能使用关键字作为变量名。
3、PHP代码的4种风格:
(1)XML风格:<?php ?>
(2)简短风格:省略了php,<? ?>
(3)脚本风格:写在<script>标记对中,例如
<h1><script language=‘php’>echo ‘现在是’.date(“m月d日”);</script></h1>
(4)ASP风格:<% %>,不推荐使用。
4、如果一定要在函数内部引用外部定义的全局变量,或者在函数外部引用函数内部定义的局部变量。可以使用global关键字。⚠️global只能写在自定义函数内部。
使用$GLOBALS[ ]全局数组也能实现在函数内部引用外部变量,但不能在函数外部引用函数内部定义的局部变量。
5、变量的生存期
(1)全局变量的生存期从它被定义那一刻起到整个脚本代码执行结束为止;
(2)局部变量的生存期从它被定义开始到该函数运行结束为止。
6、布尔型的True会转换成数值1,False转成数值0。
7、⚠️如果“.”的左右有数字,注意将“.”和数字用空格隔开。(如:$a=‘PHP’. 5)
8、单引号表示包含的是纯粹的字符串;而双引号中可以包含字符串和变量名。⚠️空格也算一个字符。
9、各种函数:
(1)获取字符串的长度,用:strlen()。
(2)元素值升序排列,用:sort();降序,用:rsort()。
(3)搜索函数,假设示例数组为$color=array(‘a’=>‘blue’,‘red’,‘green’,‘red’)
1)检查数组中是否存在某个值,用:array_search(mixed target,array arr)
eg:array_search(‘blue’,$color),返回a
2)返回数组中所有的键名,将起保存到一个新数组中,用:array_keys(array arr,mixed search)
eg:array_keys($color),返回Array([0]=>a[1]=>0[2]=>1[3]=>2)
array_keys($color,‘red’),返回Array([0]=>0[1]=>2)
3)返回数组中所有的值,将其保存到一个新数组中,用:array_values(array arr)
eg:array_values($color),返回Array([0]=>blue[1]=>red[2]=>green[3]=>red)
(4)去掉字符串两端的空格,用:trim()。
(5)从字符串的第start个字符开始,取长为length的子串,用:substr(string,start,[length])。如果省略length,表示取到结尾;如果start为负数表示从末尾开始截取;如果length为负数,则表示取到倒数第length个字符。
(6)替换字符串中的部分字符,用:str_replace(find,replace,string,[&count])。将find替换为replace,如果有参数count,还可以获取替换了多少处。
(7)等量替换字符串中的部分字符,用:strtr(string,find,replace)。将find替换为replace,如果find和replace长度不同,则只替换两者中的较小者。
(8)从字符串的第start个字符开始,用replace替换长度为length的字符,用:substr_replace(string,replace,start,[length])。若省略length,将替换到结尾。
(9)返回子串find在字符串string中第一次出现的位置,用:strpos(string,find,[start])。如果未找到该子串,则返回false,如果有start参数,表示开始搜索的位置。
(10)返回从search开始,字符串的其余部分,用:strstr(string,search)。如果未找到所搜索的字符串,则返回false。可用于查找扩展名。
(11)反转字符串,用:strrev()。
(12)将string中的\n转换为行标记<br/>,用:nl2br(string)。
10、PHP中的数组
(1)索引数组:$citys=array(“长沙”,“衡阳”,“常德”,“湘潭”);
(2)关联数组:$citys=array(‘cs’=>‘长沙’,‘hy’=>‘衡阳’,‘cd’=>‘常德’,‘xt’=>‘湘潭’);
(3)打印数组用print_r($citys);
(4)特点:
1)如果索引值是整数,则称为索引数组;如果索引值是字符串,则称为关联数组;如果既有整数又有字符串,则称为混合数组。
2)数组长度可以自由变化。
3)同一数组各元素的数据类型可以不同。
三、Web交互编程
‼️1、PHP的超全局变量及功能
(1)$_POST,获取客户端以POST方式发送的HTTP请求信息。
(2)$_GET,获取客户端以GET方式发送的HTTP请求信息。
(3)$_REQUEST,包含了$_GET,$_POST和$_COOKIE三类数组中的信息。
(4)$_SERVER,获取HTTP请求中的环境变量信息。
(5)$_SESSION,存储单个用户的信息。
(6)$_COOKIE,获取客户端的Cookie信息。
(7)$_FILE,获取通过POST方式上传文件时的相关信息,为多维数组。
(8)$_ENV,获取服务器名称或系统shell等与服务器相关的信息。
2、表单提交数据的方式分为GET和POST两种,即method=“get”或method=“post”,若不写,则默认为get方法。
⚠️使用GET方式提交数据时,表单数据通过URL参数的形式发送给服务器,而使用POST方式时,数据不会出现在URL参数中。
3、‼️GET方式与POST方式提交的区别:GET方式会将表单中的数据以URL字符串的形式发送给服务器。
4、POST方式提交表单比GET方式提交表单更安全,不会泄露机密数据。POST方式发送的字节数没有限制。
5、设置查询字符串的方法:
(1)在超链接的href属性值中的URL后添加查询字符串。
(2)在表单的action属性值中的URL后添加查询字符串。
(3)直接在浏览器地址栏中的网页URL后手工输入查询字符串。
6、echo和print的唯一区别是:使用echo可以同时输出多个字符串,多个字符串之间用逗号隔开即可,而print一次只能输出一个字符串。
7、print_r()用于输出整个数组,var_dump()用于输出变量的数据类型和值。它们的括号都不能省略。
8、Session的生命期:从用户在Session有效期内第一次访问网站直到不再访问为止的这段时间。即一个Session开始于:用户打开这个网站中的任意一个网页;结束于:用户不再访问这个站点,包括Session超时或主动删除Session两种情况。
⚠️不再访问这个站点(不等于)关闭浏览器
‼️9、Session的有效期:默认为24min(1440s)。
修改Session对象默认的有效期,一种方法是在PHP的配置文件php.ini中修改系统的默认值(session.gc_maxlifetime=1440),另一种方法是利用ini_set()方法更改Session对象的默认有效期。
⚠️不能单独对某个用户的Session设置有效期。
⚠️‼️10、利用Session限制为登录用户的访问的实现思路:
在用户输入的用户名和密码验证通过后,用Session变量存储某些特征信息(如用户名),这个Session变量就相当于“票”,然后在其他对安全性有要求的页面最前面检查这些Session变量是否存在(即验票),如果这些特征值为空,表示没有经过合法认证,而是通过直接输入网页的网址进入的,就拒绝其访问。
11、Session和Cookie的比较:
(1)相似点:
1)功能:存储和跟踪特定用户的信息。
2)优势:在整个网站的所有页面都可以访问。
(2)❗️不同点:
1)建立方式:(Session)每次访问网页时会自动建立Session对象;
(Cookie)需要通过代码建立。
2)存储位置:(Session)服务器端;
(Cookie)客户端。
3)应用场合:(Session)记住正在访问的用户信息;
(Cookie)记住曾经访问过的用户信息。
12、Cookie和Session的优缺点:
(1)Cookie的限制:Cookie的数据大小是有限制的,每个Cookie文件的大小不能超过4KB,每个站点最多设置20个Cookie。
(2)Cookie可能会泄露用户隐私,并带来其他安全问题。
(3)Session仍然要通过Cookie来实现,因为用户的Session ID必须保存在会话Cookie中。
四、程序题预测
1、查询数据库中的记录,以表单或无序列表输出
<?
$conn=mysql_connect(“localhost”,“root”,“123456”);
mysql_query(“set names ‘utf8’”);
mysql_select_db(“xYippeez”,$conn);
?>
(1)表单:
<table border=“1” width=“95%”>
<?
$sqlstr=“select * from news”;
$results=mysql_query($sqlstr,$conn);
while($rows=mysql_fetch_assoc($results)){
echo “<tr>”;
echo “<td>”.$rows[“id”].“</td>”;
echo “<td>”.$rows[“title”].“</td>”;
echo “<td>”.$rows[“content”].“</td>”;
echo “</tr>”;
}
?>
</table>
(2)无序列表:
<ul>
<?
$sqlstr=“select * from news”;
$results=mysql_query($sqlstr,$conn);
while($rows=mysql_fetch_assoc($results)){
echo “<li>”
echo $rows=[“id”];
echo $rows=[“title”];
echo $rows=[“content”];
echo “</li>”;
}
?>
</ul>
2、添加记录的实现
<form action=“SaveNav.php” method=“post”>
<span>新增栏目:</span>
<input type=“text” name=“title”/>
<input type=“submit” value=“保存”/>
<input type=“reset” value=“取消”/>
</form>
SaveNav.php的代码:
<?
$conn=mysql_connect(“localhost”,“root”,“123456”);
mysql_query(“set name ‘utf8’”);
mysql_select_db(“xYippez”,$conn);
$title=$_POST[“title”];
$sqlstr=“insert into news_class(title) values (‘$title’)”;
//若需要添加多个字段,则:$sqlstr=“insert into news_infor(title,id,content) values(‘$title’,‘$id’,‘$content’)”;⚠️只有字段内容为字符串时,才需要加单引号。
mysql_query($sqlstr);
header(“refresh:2;url=shown available.php”);
?>
3、删除记录的实现
<?
$conn=mysql_contect(“localhost”,“root”,“123456”);
mysql_query(“set names ‘utf8’”);
mysql_select_db(“xYippeez”,$conn);
$id=intval($_GET[“id”]);
$sqlstr=“delete from news_class where id=$id”;
mysql_query($sqlstr);
header(“refresh:3;url=shownav.php”);
?>
4、课后编程题
(1)编写PHP程序,计算1~100之间所有偶数的总和,然后把结果输出出来。
<?
$sum=0;
for($i=2;$i<=100;$i+=2){
$sum+=$i;
}
echo $sum;
?>
(2)编写程序,在网页上输出一个三角形形式的九九乘法表。
<?
echo “<table border=1>”;
for($i=1;$i<=9;$i++){
echo “<tr>”;
for($j=1;$j<=$i;$j++){
echo “<td>”;
echo $i.“*”.$j.“=”.($i*$j);
echo “</td>”;
}
echo “</tr>”;
}
echo “</table>”;
?>
(3)编写程序,使用while循环计算4096是2的几次方。
<?
$i=1;
$j=2;
while($i){
$j=$j*2;
$i++;
if($j==4096){
echo $i;
break;
}
}
?>
(4)编写一个函数,实现以下功能,将字符串“cute_boy”转换成“CuteBoy”,“how_are_you”转换成“HowAreYou”。
<?
function big($str){
$t=explode(“_”,$str);
$arr=“”;
for($i=0;$i<count($t);$i++){
$arr=$arr.ucwords($t[$i]);
}
echo $arr;
}
big(“cute_boy”);
echo “<br/>”;
big(“how_are_you”);
?>
(5)编写一个函数,输入是5个分数,输出是去掉一个最高分和去掉一个最低分后的平均分。
<?
function avg(){
$arr=func_get_args();
asort($arr);
$arr=array_slice($arr,1,-1);
return array_sum($arr)/count($arr);
}
echo avg(90,84,68,72,51);
?>