# :-: 一、从静态资源到动态内容
### 1、从`txt`到`html`
* `demo.txt`: 浏览器对纯文本文档,浏览器无须渲染,原样输出即可
```txt
国产好剧
1. 少年派
2. 带着爸爸去留学
3. 亲爱的, 热爱的
```
* `demo.html`: 根据标签预置的样式进行解析,更加符合人类的阅读习惯,也利于引擎理解文档的内容
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>国产好剧</title>
</head>
<body>
<h2>国产好剧</h2>
<ul>
<li><a href="">少年派</a></li>
<li><a href="">带着爸爸去留学</a></li>
<li><a href="">亲爱的, 热爱的</a></li>
</ul>
</body>
</html>
```
### 2、从`html`到`php`
* `demo.php`:后缀由`html`直接改为`php`,实际上当前页面已经变成了动态的php应用程序脚本
* `demo.php`: 允许通过`<?php ... ?>`标签,添加php代码到当前脚本中
* php标签内部代码由`php.exe`解释, php标签之外的代码原样输出,仍由web服务器解析
```php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>国产好剧</title>
</head>
<body>
<h2><?php echo '国产好剧'; ?></h2>
<ul>
<li><a href=""><?php echo '少年派' ?></a></li>
<li><a href=""><?php echo '带着爸爸去留学' ?></a></li>
<li><a href=""><?php echo '亲爱的, 热爱的' ?></a></li>
</ul>
</body>
</html>
```
>[info] php代码的详细解析过程
* 因为web服务器只能识别和处理html的内容, 遇到`<?php ?>`代码段统统不认识,全部转发给`php解释器`处理
* `html与php混编`:
* 如果想让web服务器能自动转发这些请求, 文档的扩展名就不能是`.html`, 必须是`.php`
* 遇到一个`<?php ?>`就转发一个`cgi`请求, 不管这些标签出现在当前文档的什么地方
* 请放心, 最终生成的,或者说用户最终看到的,仍然是一个`html`文档, php代码中的内容不会被泄漏的
### 3、`php`适合生成动态内容
>[info] 对于动态内容,最直观的想法就是,把页面内容保存到变量中
* php 是创建动态网站的编程工具, 页面内部如果全部写死, 不如直接创建html文档好了
* php 中内容的动态化,最简单的方式就是创建变量来保存这些数据
```php
<?php
// 创建二个变量来保存页面中的动态内容
$headline = '国产好剧';
$movies = ['少年派', '带着爸爸去留学','亲爱的, 热爱的'];
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title><?php echo $headline; ?></title>
</head>
<body>
<h2><?php echo $headline; ?></h2>
<ul>
<li><a href=""><?php echo '少年派' ?></a></li>
<li><a href=""><?php echo '带着爸爸去留学' ?></a></li>
<li><a href=""><?php echo '亲爱的, 热爱的' ?></a></li>
</ul>
<!--对于数组,循环遍历更方便-->
<?php
// 数组可使用foreach()语句输出
// foreach( $array as $key=>$value) {...}
foreach ($movies as $key=>$value) {
echo $key+1 . ': ' . $value . '<br>';
}
// 将php与html代码混编的时候,大括号很容易造成配对错误,最好杜绝它
// 所以php的流程控制语句, 都提供了替代语法,用冒号代替大括号
// php是最优秀, 最原生的模板语言, 替代语法,让php更加的优雅的与html生活在一起
?>
<hr>
<!--使用 php 输出 html-->
<?php
echo '<ul>';
foreach ($movies as $key=>$value) {
echo '<li><a href="">' . ($key+1) . ': ' . $value . '</a></li>';
}
echo '</ul>';
?>
<hr>
<!--使用 php + html 混编, -->
<ul>
<?php foreach ($movies as $key=>$value) { ?>
<li><a href=""><?php echo ($key+1) . ':' . $value; ?></a></li>
<?php } ?>
</ul>
<hr>
<!--php是天生最优秀的模板语言-->
<!--使用foreach替代语法,干掉大括号, 将大括号用冒号代替-->
<ul>
<!--使用php循环结构的替代语法-->
<?php foreach ($movies as $movie): ?>
<li><a href=""><?php echo $movie; ?></a></li>
<?php endforeach;?>
</ul>
</body>
</html>
```
*****
# :-: 二、http请求类型
> 最常用的就是`GET`和`POST`二种请求类型
## 1、GET 请求
* 请求参数以键值对的方式,附加到url地址上,称为查询字符串,用`?`号与当前脚本分隔
* url格式: `index.php?name=peter&age=30`
* 受url长度限制, `GET`方式传递的数据也是有限制的
* 服务器端脚本使用预定义变量数组 `$_GET` 进行接收
```php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>get</title>
</head>
<body>
<form action="" method="get">
<label for="email">邮箱:</label>
<input type="email" id="email" name="email" value="">
<label for="password">密码:</label>
<input type="password" id="password" name="password" value="">
<br/>
<!--将用户输入的内容动态添加到value字段中, 创建具有粘性的表单-->
<label for="email">邮箱:</label>
<input type="email" id="email" name="email" value="<?php echo isset($_GET['email']) ? $_GET['email'] : ''; ?>">
<label for="password">密码:</label>
<input type="password" id="password" name="password" value="<?php echo isset($_GET['password']) ? $_GET['password'] : '';?>">
<br/>
<!--简易写法-->
<label for="email">邮箱:</label>
<input type="email" id="email" name="email" value="<?php echo $_GET['email'] ?? ''; ?>">
<label for="password">密码:</label>
<input type="password" id="password" name="password" value="<?php echo $_GET['password'] ?? ''; ?>">
<button>登录</button>
</form>
</body>
</html>
<?php
// 获取通过url发送的变量参数, php通过超全局变量$_GET获取
// $_GET是一个数组,键名就是get参数名
// 键名=>变量名, 值=>变量值
// print_r()格式化打印输出一个数组
print_r($_GET);
echo $_GET['email'];
// 获取变量之前要进行判断,用isset()
if (isset($_GET['email'])) {
echo $_GET['email'];
} else {
// 给个默认值
$_GET['email'] = '';
}
// 与js类似,可以用三元运算符进行简化
echo isset($_GET['email']) ? $_GET['email'] : '';
// 使用<pre>标签,在网页中可以实现格式化输出
echo '<pre>';
print_r($_GET);
?>
```
## 2、POST 请求
* 请求参数放在`header`请求头中发送, url地址看不到请求参数,适合敏感信息
* 通常是通过表单提交并, 用来更新服务器上的信息
* 适合发送大量的数据到服务器端, 长度受到配置文件限制,但比`GET`要大得多
* 服务器端脚本使用预定义变量数组 `$_POST` 进行接收
```php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>post</title>
</head>
<body>
<form action="" method="post">
<label for="email">邮箱:</label>
<!--将用户输入的内容动态添加到value字段中, 创建具有粘性的表单-->
<input type="email" id="email" name="email" value="<?php echo isset($_POST['email']) ? $_POST['email'] : ''; ?>">
<label for="password">密码:</label>
<input type="password" id="password" name="password" value="<?php echo isset($_POST['email']) ? $_POST['email'] : '';?>">
<button>登录</button>
</form>
</body>
</html>
<?php
// POST请求, 参数不是通过URL传递, 而是通过请求头
// 获取通过url发送的变量参数, php通过超全局变量$_POST获取
// $_POST是一个数组,键名就是POST参数名
// 键名=>变量名, 值=>变量值
// print_r()格式化打印输出一个数组
print_r($_POST);
echo $_POST['email'];
// 获取变量之前要进行判断,用isset()
if (isset($_POST['email'])) {
echo $_POST['email'];
} else { // 给个默认值
$_POST['email'] = '';
}
// 与js类似,可以用三元运算符进行简化
echo isset($_POST['email']) ? $_POST['email'] : '';
// 使用<pre>标签,在网页中可以实现格式化输出
echo '<pre>';
print_r($_POST);
?>
```
- 序言
- PHP基础
- 认识PHP
- 环境安装
- PHP语法
- 流程控制
- PHP数组
- PHP函数
- PHP类与对象
- PHP命名空间
- PHP7新特性
- PHP方法库
- PHP交互
- 前后端交互
- 项目常规开发流程
- MySQL数据库
- 会话控制
- Ajax分页技术
- 细说函数
- 类与对象
- 对象进阶
- 类与对象进阶
- OOP面向对象
- 设计模式
- 路由与模板引擎
- 异常类
- PHP爬虫
- PHP抓取函数
- PHP匹配函数
- 正则表达式
- PHP字符串函数
- 抓取实战
- PHP接口
- 了解接口
- PHP插件
- PHPSpreadsheet
- ThinkPHP6
- 安装
- 架构
- 数据库
- 数据库操作
- 视图
- 模版
- 模型
- 杂项
- 命令行
- 交互
- 微信小程序
- 介绍
- 配置
- 组件
- 交互
- API
- 其他知识
- 百度小程序
- 介绍
- 配置
- 组件
- 交互
- API
- 其他知识
- Linux
- 服务器上线流程
- 安装svn
- MySQL
- 认识MySQL
- MySQL函数
- 杂项
- composer依赖管理工具