网站开发应用
前端 HTML
- HTML(超文本标记语言)是构建网页的基础。
- 学习网站:w3school
基本结构
头部 (< head >)
头部包含文档的元信息,例如字符编码和标题。
<!-- 指定当前的文档是 html  -->
<!DOCTYPE html>
<!-- 指定文档的语言为英语 -->
<html lang="en">
<!-- HTML头 -->
<head>
    <!-- 设置字符编码为 UTF-8 -->
    <meta charset="UTF-8">
    <!-- 设置浏览器兼容性 -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 网站标题 -->
    <title>HTML STUDY</title>
</head>
主体 (< body >)
主体包含网页可见内容,如文本、图片和表格。
<!-- 一级标题,用于突出主要内容 -->
<h1>一级标题</h1>
<!-- 段落标签,用于撰写文本段落 -->
<p>段落标签</p>
<!-- 创建可点击的链接,href 属性指定目标URL -->
<a href="url">超链接</a>
<!-- 插入图片,src 属性指定图片路径 -->
<img src="url">
<!-- table 定义表格结构 -->
<table>
	<!-- tr 定义表格行 -->
	<tr>
		<!-- td 定义表格单元格 -->
		<td></td>
	</tr>
</table>
<!-- form 创建用户输入表单 -->
<form action="">
	<input type="text">
</form>
数据库 MySQL
- 学习网站:w3school
基础命令
创建 MySQL 容器
#下载 mysql 容器
docker pull mysql:5.7
#启动 mysql 容器
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=[password] --name=[otherName] mysql:5.7
#进入容器
docker exec -it [containerId] bash
#登录 mysql
mysql -uroot -p[password]
MySQL 的 CRUD 语句
#查看数据库
show databases
#创建数据库
create database [databaseName]
#使用数据库
use [databaseName]

#创建表
create table users(
	username varchar(50),
	password varchar(50)
);
#向表中插入数据
insert into users values ("zhangsan", "123456"), ("lisi", "123123");
#查询数据
select username,password from users;
select * from users;

#查询 mysql 的密码在哪儿
show databases;
use mysql;
select host,user,authentication_string from user;
select authentication_string from mysql.user where user="root" and host="localhost";
- HOST 是 localhost 代表是本地用户,%代表是远程用户。

#更新数据
update users set password="admin123" where username="lisi";
			#将用户名为 lisi 的密码改为 admin123
#删除数据
delete from users where username="lisi";
			#删除用户名为 lisi 的数据
			
#删除表
drop table [tableName];
#删除数据库
drop database [databaseName];
编写 MySQL 初始化文件
CREATE DATABASE IF NOT EXISTS test;
USE test;
CREATE table users (
    username VARCHAR(100) NOT NULL,
    password VARCHAR(100) NOT NULL
);
insert into users VALUES ("zhangsan","123456"), ( "lisi","123123");
- 一般开发者会留下数据库初始化文件 XXX.sql
#将 XXX.sql 初始化文件导入到容器中
docker exec -i [containerId] mysql -uroot -p[password] < data.sql

服务端 PHP
教程
编写 login.php
<?php
    // 接收用户的输入
    $username = $_POST['username'];
    $password=$_POST['password'];
			#此处的 POST 应与前端 form 表单的 methon 一致
			#要不都是 GET,要不都是 POST
    // echo "用户输入的用户名是 $username, 用户输入的密码是 $password";
    if($username == "admin" && $password == "123456"){
        echo "登录成功";
    }else{
        echo "登录失败";
    }
?>
开启服务
编写 Dockerfile
FROM php:7.4-apache
RUN docker-php-ext-install mysqli pdo pdo_mysql
编写 docker-compose.yml
version: '3.8'
services:
  web:
    build: .
    ports:
      - "80:80"
    volumes:
      - ./src:/var/www/html
    networks:
      - net1
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    ports:
      - "3306:3306"
    networks:
      -net1
networks:
  net1:
构建文件结构
- 将 index.html和login.php文件放入src文件夹中。

启动服务
docker-compose up -d

前后端交互
<?php
    // 接收用户的输入
    $username = $_POST['username'];
    $password=$_POST['password'];
			#此处的 POST 应与前端 form 表单的 methon 一致
			#要不都是 GET,要不都是 POST
			#实现前后端交互,即将前端提交的数据交由后端处理
	
    echo "用户输入的用户名是 $username, 用户输入的密码是 $password";
    if($username == "admin" && $password == "123456"){
		echo "登录成功";
    }else{
		echo "登录失败";
	}
?>
与数据库交互
<?php
    // 接收用户的输入
    $username = $_POST['username'];
    $password=$_POST['password'];
    // php 连接数据库
    $conn = mysqli_connect("db","root","123456","test");
    if(!$conn){
        die("连接失败" . mysqli_connect_error());
    }
    // 从数据库中取出用户输入的用户名对应的密码
    $sql = "select password from users where username = '$username'";
    // 执行 sql 语句得到结果集
    $result = mysqli_query($conn, $sql);
    // 从结果集中取出第一行密码
    $row = mysqli_fetch_assoc($result);
    // 判断用户输入的密码是否和数据库中的密码一致
    if($password == $row['password']){
        echo "欢迎!$username";
        echo "登录成功";
    }else{
        echo "登录失败";
    }
?>
功能扩展
用户登录成功跳转管理页面
//编写用户登录功能实现文件 login.php
<?php
    //创建 session
    session_start();
    // 接收用户的输入
    $username = $_POST['username'];
    $password=$_POST['password'];
    // php 连接数据库
    $conn = mysqli_connect("db","root","123456","test");
    if(!$conn){
        die("连接失败" . mysqli_connect_error());
    }
    // 从数据库中取出用户输入的用户名对应的密码
    $sql = "select password from users where username = '$username'";
    // 执行 sql 语句得到结果集
    $result = mysqli_query($conn, $sql);
    // 从结果集中取出第一行密码
    $row = mysqli_fetch_assoc($result);
    // 判断用户输入的密码是否和数据库中的密码一致
    if($password == $row['password']){
        // echo "欢迎!$username";
        // echo "登录成功";
        $_SESSION['username'] = $username;
        echo "<script>window.location.href='admin.php';</script>";
    }else{
        echo "登录失败";
    }
?>
//编写用户登录后的 admin.php 页面
<?php
    session_start();
    if(!isset($_SESSION['username'])){
        exit("请先登录");
    }
    echo "欢迎!$username";
    echo "登录成功 <br/>";
    echo "这是后台页面,这个页面通常有大量的敏感信息<br/>";
?>

用户退出登录
//在 admin.php 页面增加用户退出登录选项
<?php
    session_start();
    if(!isset($_SESSION['username'])){
        exit("请先登录");
    }
    echo "欢迎!$username";
    echo "登录成功 <br/>";
    echo "这是后台页面,这个页面通常有大量的敏感信息<br/>";
	
	//用户退出登录并清除用户的 session
    echo "<a href='logout.php'>退出登录</a>";
?>
//编写用户退出登录并清除用户的 session 的 logout.php 文件
<?php
    session_start();
    unset($_SESSION['username']);
    echo "<script>window.location.href='index.html';</script>";
?>

用户注册
<!-- 编写用户注册页面 register.html  -->
<!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>
    <form action="register.php" method="get">
        用户名:<input type="text" name="username" placeholder="请输入用户名">
        密码:<input type="password" name="password" placeholder="请输入密码">
        <input type="submit" value="注册">
    </form>
</body>
</html>
//写 register.php 用户注册模块
<?php
    $conn = mysqli_connect("db", "root", "123456", "test");
    if(!$conn){
        die("连接失败: " . mysqli_connect_error());
    }
    $username = $_GET['username'];
    $password = $_GET['password'];
    $sql = "insert into users (username, password) values ('$username', '$password')";
    $result = mysqli_query($conn, $sql);
    if($result){
        echo "注册成功 <a href='index.html'>登录</a>";
    }else{
        echo "注册失败";
    }
?>


用户修改密码
//在 admin.php 页面中增加修改密码模块
<?php
    session_start();
    if(!isset($_SESSION['username'])){
        exit("请先登录");
    }
    echo "欢迎!$username";
    echo "登录成功 <br/>";
    echo "这是后台页面,这个页面通常有大量的敏感信息<br/>";
	echo "<a href='logout.php'>退出登录</a>";
	echo "<a href='change_password.php?username=" . $_SESSION['username'] . "'>修改密码</a>";
?>
<!--  写 change_password.php 修改密码文件  -->
<?php
    // 修改密码
    session_start();
    if(!isset($_SESSION['username'])){
        exit("请先登录");
    }
    ?>
	
	<!--  用户输入新密码  -->
    <form action="change_password.php" method="get">
        新密码:<input type="password" name="password" placeholder="请输入新密码">
        <input type="submit" value="修改密码">
    </form>
	
	<!--  连接数据库并修改密码  -->
    <?php
    $username = $_SESSION['username'];
    $password = $_GET['password'];
    $conn = mysqli_connect("db", "root", "123456", "test");
    if(!$conn){
        die("连接失败: " . mysqli_connect_error());
    }
	
	//检查 $password 是否为空。如果 $password 包含有效值,执行代码块;否则跳过。
    if(!empty($password)){
        $sql = "update users set password = '$password' where username = '$username'";
        $result = mysqli_query($conn, $sql);
		
        //检查 $result 是否为 true,即更新操作是否成功。
        if($result){
            echo "修改密码成功 <a href='admin.php'>返回</a>";
        }else{
            echo "修改密码失败";
        }
    }
?>





