何为网站
浏览器和服务器
- 用户通过浏览器获取服务器上面的资源,
- 服务器给予响应,返回数据
- 浏览器接受响应
网站的特点
- 长时间运行
- 提供文字、图片、音频、视频、游戏
静态网站和动态网站
静态网站和动态网站最大的区别:动态网站有后端,而静态网站没有
静态网站
静态网站不会因为我们访问者的任何行为触发任何变化,都只会提供固定的静态资源给我们,这样的网站就叫静态网站
动态网站
动态网站是指网站可以根据访问者或者某些触发条件,而执行任务,比如百度搜索:根据用户输入的关键字来查找需要的网页信息,并且会排名;学校的教务系统:根据老师提交的成绩、学校的公告改变网页的呈现方式……
动态网站需要包含:
- 有个静态页面,负责给用户提供和查看输入信息的页面
- 后台系统,可以处理用户的请求,比如说登录、购物等等
- 有存放数据的地方,用来保存业务相关的数据
网站三层架构
界面层 UI user interface
业务逻辑层 处理业务逻辑
数据访问层 (数据库:MySQL、SQLserver、Oracle……)

开发工具 VS code 的安装
双击 安装包,选择我同意,点击下一步

所有打勾的地方都勾上,点击下一步

确认一下,点击安装

USBwebserver 安装
将文件下载下来,解压到一个没有任何中文字的文件夹下面,如果有安全中心的弹窗,全部都点击允许,不要按回车!!!
解压后直接运行 exe 文件,语言选择中文,如果选中文出现乱码,联系 Alice 老师

我们所有的代码都放在 当前目录下的 root 文件夹中
前端简述
标签
- 作用范围:成对的标签,作用范围在标签对内部
<h1>lalalal</h1>
- 标签名称:标签的名称表示标签起什么作用
例如:h1 标签可以改变字体大小,通常情况下会用 h1 标签修饰标题, a 标签就是给网页加一个超链接
前端骨架
在 VS code 中快速生成 HTML 骨架:英文输入法模式下,敲感叹号,选择一个感叹号的那个

<!DOCTYPE html>
<!-- 文档类型声明,这个 html 文档 -->
<html lang="en">
<!-- html 标签的开头部分,并且声明了语言为 en -->
<head>
<!-- head 标签开头的地方,head 标签内是向浏览器传递的内容 -->
<meta charset="UTF-8">
<!-- 字符集 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- 页面大小相关 -->
<title>Document</title>
<!-- 页面标题 -->
</head>
<!-- head 标签结束 -->
<body>
<!--想要在网页里面呈现的内容放这里 -->
</body>
</html>
<!-- html 标签结束 -->
form 和 input 标签
<form action="#" method="POST">
<h1>登录</h1>
<input type="text" name="username" placeholder="用户名">
<input type="password" name="password" placeholder="密码">
<input type="submit" value="登录">
</form>
想要输入数据,并且提交,就需要 input 标签和 form 标签结合起来使用
input 是输入框,如果需要提交数据,别忘了增加一个 submit 的 input 标签
form 标签是表单,收集信息用
CSS 样式
CSS 是为了网页美观的,绝大多数情况下不存在安全性问题,但也可能存在 MS11003 这种漏洞
<style>
.box{
position: absolute;
left: 50%;
top: 30%;
transform: translate(-50%,-50%);
border: 1px solid black;
padding: 20px;
text-align: center;
border-radius: 20px;
height: 300px;
width: 300px;
box-shadow: 5px 5px 5px gray;
input{
display: block;
margin: 20px auto;
padding: 10px 20px;
border-radius: 10px;
}
}
</style>

PHP 基本语法
基本语法格式
PHP脚本以<?php开始,以?>结束
<?php
// 这是 PHP 的注释
/*
多行注释
*/
$username;
$password;
$num = 3;
$str = "hello";
?>
变量的命名
变量以 $ 符号开始,后面跟着变量的名称
变量名必须以字母或者下划线字符开始
变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
变量名不能包含空格
<?php
$num = 3.14;
$str = "hello world";
/*static的关键字的使用
* 当一个函数完成时,它的所有变量通常都会被删除。
* 然而,有时候您希望某个局部变量不要被删除。
* 要做到这一点,请在您第一次声明变量时使用 static 关键字:
* */
function test(){
static $n = 0;
$n++;
echo "调用了". $n . "次<br \>";
}
test();
test();
test();
?>

数据类型
PHP有以下几种数据类型
- String:字符串
- Integer:整数型
- Float:浮点型
- Boolean:布尔型
- Array:数组
- Object:对象
- NULL:空值
- Resource:资源类型
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<?php
$s = "Hello world";
$i = 123;
$f = 3.14;
$b = true;
$a = array("a", "b", "c");
class obj{
var $num;
function name(){}
}
$o = new obj();
$n = NULL;
var_dump($s);echo "<br>";
var_dump($n);echo "<br>";
var_dump($o);echo "<br>";
var_dump($a);echo "<br>";
var_dump($b);echo "<br>";
var_dump($f);echo "<br>";
var_dump($i);echo "<br>";
?>

案例
完成简单的逻辑判断
<?php
if(isset($_REQUEST['username']) && isset($_REQUEST['password'])){
$username = $_REQUEST['username'];
$password = $_REQUEST['password'];
if($username == '张三' && $password == '123456'){
echo '登录成功';
echo '<meta http-equiv="refresh" content="0;url=main.php">';
}else{
echo '登录失败';
}
}
?>
SQL语句
数据库概述
定义
数据库 (DataBase,DB): 存储在磁带、磁盘、光盘或其他外存介质上、按一定结构组织在一起的相关数据的集合。
数据库管理系统 (DataBase Management System,DBMS):一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库
数据库系统 (DataBase System,DBS) :通常由软件、数据库 (DB) 和数据库管理员组成。软件主要包括操作系统、各种宿主语言、实用程序以及数据库管理系统(DBMS)
数据库 (DB) 由数据库管理系统 (DBMS) 统一管理,数据的插入、修改和检索均要通过数据库管理系统 (DBMS) 进行。数据库管理员负责创建、监控和维护整个数据库使数据能被任何有权使用的人有效使用。
分类
关系型数据库
关系型数据库模型是把复杂的数据结构归结为简单的二元关系 (即二维表格形式)。关系型数据库的典型产品: MySQL、Microsoft SQL Server、 OraclePostgreSQL、IBM DB2、Access 等。
非关系型数据库
非关系型数据库也被成为NOSQL数据库,NOSQL的本意是“Not Only SQL”指的是非关系型数据库,而不是“No SQL”的意思。因此,NOSQL的产生并不是要彻底地否定关系型数据库,而是作为传统关系型数据库的一个有效补充。NOSOL数据库在特定的场景下可以发挥出难以想象的高效率和高性能非关系型数据库的典型产品: Memcached、Redis、mongoDB 等。
DBMS对比
功能对比
| 关系型数据库 | 非关系型数据库 | |
|---|---|---|
| 强大的查询功能 | √ | × |
| 强一致性 | √ | × |
| 二级索引 | √ | × |
| 灵活模式 | × | √ |
| 扩展性 | × | √ |
| 性能 | × | √ |
特点对比
关系型数据库(RDBMS)的特点:
- 二维表
- 典型产品Oracle传统企业,MySQL互联网企业
- 数据存取是通过SQL(Structured Query Language结构化查询语言)
- 最大特点数据安全性方面强(ACID)
非关系型数据库(NoSQL:Not only SQL)的特点:
- 不是否定关系型数据库,而是做关系型数据库的补充
数据库基本操作
1.连接数据库
输入命令:
mysql -uroot -pusbw
按下回车

成功登录数据库后,会出现“mysql”的提示符。
2.显示系统中所有数据库的名称
输入命令:
show databases;

注意:绝大部分SQL命令都以分号作为结束符,请不要遗漏!
3.新建数据库student
命令:
create database student;
新建成功后,可再次使用下列命令查看结果:
show databases;

4.使用数据库student
命令:
use student;

5.在数据库student中创建表result
命令:
create table result(id int(8),name varchar(20),city varchar(20),score int(5));

6.在表result中增加数据
本步骤在result中插入如下5行数据:
命令:
insert into result(id,name,city,score) values(1,"wang","beijing",75);
insert into result(id,name,city,score) values(3,"li","shanghai",80);
insert into result(id,name,city,score) values(5,"chen","fuzhou",70);
insert into result(id,name,city,score) values(2,"zhou","xian",90);
insert into result(id,name,city,score) values(7,"han","guangzhou",65);
注意:如果数据是字符型(varchar),必须使用单引号或者双引号包裹!

插入成功后,可用如下命令查询result表中的全部内容:
select * from result;

7.在表result中删除1条数据
例如,删除id=7的数据,可使用以下命令:
delete from result where id=7;
删除成功后,仍然可以用以下命令查看结果:
select * from result;

8.修改表result中的1条数据
例如,修改id=5的数据,将其score设置为60,可使用以下命令:
update result set score=60 where id=5;
修改成功后,仍然可以用以下命令查看结果:
select * from result;

9.查询表result中的数据
例如:
select * from result;
//查询表中所有字段

select name,score from result;
//查询表中的name和score字段

select score from result where name="li";
//查询name为li的学生的分数

练习
==建立登录数据库==
CREATE DATABASE login
DEFAULT CHARACTER SET = 'utf8';
create table user(
id int PRIMARY KEY AUTO_INCREMENT,
username varchar(255),
password VARCHAR(255),
logo varchar(255)
)DEFAULT CHAR SET utf8;
insert into user(username,password,logo) values('张三','123456','file_upload/eagle.jpg');
PHP 中的 MySQL 函数
<?php
$host = 'localhost';
$dbuser = 'root';
$dbpass = 'usbw';
$db = 'login';
// 用四个变量分别接受连接数据库时需要用到的信息
$conn = mysqli_connect($host,$dbuser,$dbpass,$db) or exit('数据库连接失败');
// 连接数据库,注意顺序,如果连接失败退出程序并且提示数据库连接失败,方便我们排错
mysqli_query($conn,'set names utf8');
// 对 $conn 去执行 SQL 语句
?>
实战:==使用 SQL 语句优化代码==
Cookie 与 Session
Cookie
存在浏览器上的表示用户身份的信息
用户可以修改,注意:一切可以被用户修改的东西都不安全!

Session
存在服务器上的表示用户身份的信息
和 Cookie 配套使用,用于鉴权
案例
实现身份鉴权
在 login.php 和 main.php 中记录 Session
login.php 的 PHP 代码部分
<?php
session_start();
$host = 'localhost';
$dbuser = 'root';
$dbpass = 'usbw';
$db = 'login';
$conn = mysqli_connect($host,$dbuser,$dbpass,$db) or exit('数据库连接失败');
mysqli_query($conn,'set names utf8');
$flag = '登录';
if(isset($_REQUEST['username']) && isset($_REQUEST['password'])){
$username = $_REQUEST['username'];
$password = $_REQUEST['password'];
$sql = "select * from user where username = '$username' and password = '$password'";
$result = mysqli_query($conn,$sql);
if(mysqli_num_rows($result) > 0 ){
$flag = '登录成功';
echo "<meta http-equiv='refresh' content='3;url=main.php'>";
$_SESSION['username'] = $username;
}else{
$flag = '登录失败';
}
}
?>
main.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
session_start();
if (!isset($_SESSION['username'])) {
echo "<script>alert('请登录')</script>";
echo "<meta http-equiv='refresh' content='0;url=login.php'>";
} else {
$username = $_SESSION['username'];
}
?>
<h1>欢迎用户<?php echo $username; ?></h1>
</body>
</html>
实现注册功能
php 部分
if (isset($_REQUEST['register'])) {
$sql = "insert into user(username,password) values('$username','$password')";
$result = mysqli_query($conn, $sql);
if($result){
$flag = '注册成功,请登录';
echo "<meta http-equiv='refresh' content='1;url=login.php'>";
// 跳回本页面可以起到一个刷新的作用
}else{
$flag = '注册失败,用户名已存在';
}
}
HTML 部分
<div class="box">
<form action="" method="post">
<h1><?php echo $flag ?></h1>
<input type="text" name="username" placeholder="用户名">
<input type="password" name="password" placeholder="密码">
<input type="submit" name="login" value="登录">
<input type="submit" name="register" value="注册">
</form>
</div>
实现注销登录
<body>
<?php
session_start();
if (!isset($_SESSION['username'])) {
echo "<script>alert('请登录')</script>";
echo "<meta http-equiv='refresh' content='0;url=login.php'>";
} else {
$username = $_SESSION['username'];
}
if(isset($_REQUEST['logout'])){
echo "<script>alert('退出成功')</script>";
echo "<meta http-equiv='refresh' content='0;url=login.php'>";
session_destroy();
}
?>
<h1>欢迎用户<?php echo $username; ?></h1>
<a href="?logout">退出登录</a>
</body>
优化代码
将数据库连接语句统一存在 db.php 文件下,并且在需要的文件中 include 此文件