好的!我已经理解了您需要的风格和章节结构。让我按照《跟Wakaba酱一起学》的萌
好的!我已经理解了您需要的风格和章节结构。让我按照《跟Wakaba酱一起学》的萌系、故事化风格,为您继续撰写第二章的后半部分内容:
---
## 第二章:不简单的东西(续)
### 循环
“循环……就像是在跑步机上跑步吗?”(歪头疑惑)
不不不~循环更像是“自动点单机”!比如说,你想把所有的百吉饼口味都显示出来,不用一行一行地写 `echo`,让循环帮你“自动重复”就好啦!
PHP里有好几种循环,就像有不同的“自动模式”一样,我们一个一个来看~
#### While 循环
“只要……就一直……” —— 这就像是 `while` 循环的魔法咒语!
```php
";
$计数器++;
}
?>
```
这段代码会说:
```
正在烤第1个百吉饼~
正在烤第2个百吉饼~
正在烤第3个百吉饼~
正在烤第4个百吉饼~
正在烤第5个百吉饼~
```
只要 `$计数器` 小于等于5,就会一直循环下去。`$计数器++` 就是让计数器每次加1,不然就会……一直烤第一个百吉饼,永远停不下来!(好可怕)
##### While 循环实践
让我们来做个“今日特价倒计时”吧!
```php
";
while ($特价剩余数量 > 0) {
echo "卖出一个!还剩" . ($特价剩余数量 - 1) . "个
";
$特价剩余数量--;
}
echo "
卖完啦~明天请早!";
?>
```
##### 扩展阅读:Do While循环
“如果第一次就想先执行怎么办?”
这时候就要请出 `do...while` 循环啦!它和 `while` 很像,但是……它会先做一次,再判断条件!
```php
";
// 吃完一个,可能还饿,可能不饿了
$我饿了 = false; // 假设吃完就不饿啦
} while ($我饿了);
echo "吃饱了,满足~";
?>
```
即使一开始 `$我饿了` 就是 `false`,也会先执行一次“吃百吉饼”哦!
#### For 循环
“如果要精确控制循环次数呢?”
`for` 循环就像是个“三步设定”的定时器:
```php
";
}
?>
```
三步分别是:
1. `$i = 1`:从1开始
2. `$i <= 3`:只要小于等于3就继续
3. `$i++`:每次加1
非常适合你知道要循环多少次的时候用!
#### Foreach 循环
“如果要遍历数组里的每个元素呢?”
`foreach` 就是为数组量身打造的!它会像魔法一样,自动取出数组里的每个“宝贝”:
```php
";
}
?>
```
输出:
```
我们有原味口味的百吉饼哦!
我们有蓝莓口味的百吉饼哦!
我们有巧克力口味的百吉饼哦!
我们有全麦口味的百吉饼哦!
```
如果是关联数组,还可以同时拿到键和值:
```php
15,
"蓝莓" => 18,
"巧克力" => 20
];
foreach ($菜单价格 as $口味 => $价格) {
echo $口味 . "百吉饼:" . $价格 . "元
";
}
?>
```
#### 扩展阅读:跳出循环
“如果中途想提前结束怎么办?”
就像烤饼时发现烤焦了要紧急停止一样,循环也有“紧急按钮”:
- `break`:立刻跳出整个循环
- `continue`:跳过本次,继续下一次循环
```php
";
continue; // 跳过这次
}
if ($i == 5) {
echo "烤箱出故障了,停止!
";
break; // 完全停止
}
echo "第" . $i . "个百吉饼完成!
";
}
?>
```
### 函数
“函数……是数学课上的那个吗?”(困惑脸)
PHP里的函数更像是一个“魔法食谱”!你把食材(参数)给它,它就会按照固定的步骤(代码)做出美味的百吉饼(返回值)!
#### 实际应用1:制作问候语
```php
";
echo 打招呼("下午"); // 输出:下午好!需要下午茶套餐吗?
?>
```
#### 实际应用2:计算订单总价
```php
";
// 会员顾客买3个原味百吉饼
echo "会员顾客:" . 计算总价(15, 3, true) . "元
";
?>
```
`$是否会员 = false` 是默认参数,如果不传值就默认为 `false`,超贴心!
### PHP内置的函数
“PHP自己就有很多现成的魔法工具吗?”
是的!PHP已经准备好了很多“现成的魔法”,就像厨房里现成的调味料一样,拿来就能用~
#### 字符串函数
```php
"; // 字符串长度(包括空格)
echo trim($店名) . "
"; // 去掉两边空格
echo strtoupper($店名) . "
"; // 全部变大写
echo str_replace("百吉饼", "Bagel", $店名) . "
"; // 替换文字
?>
```
#### 数学函数
```php
"; // 向上取整:16
echo floor($价格) . "
"; // 向下取整:15
echo round($价格) . "
"; // 四舍五入:16
echo rand(1, 10) . "
"; // 随机数(1到10之间)
?>
```
#### 日期与时间函数
```php
";
echo "今天是星期" . date("N") . "
";
echo "今年是" . date("Y") . "年
";
// 设置时区(重要!)
date_default_timezone_set('Asia/Shanghai');
echo "北京时间:" . date("H:i");
?>
```
### PHP 会话(Session)
“Session……是会议吗?”(歪头)
在PHP里,Session就像是给用户发的“会员手环”!用户戴上后,在我们网站里逛来逛去,我们都能认出他~
```php
```
### Cookies
“Cookie……是饼干吗?”(流口水)
是有点像!Cookie是存在用户浏览器里的“小纸条”,就算用户关掉浏览器,下次来我们还能认出他~
```php
```
Session和Cookie的区别:
- Session:存在服务器,关浏览器就消失
- Cookie:存在用户电脑,可以设置保存时间
### 处理表单-实战
“终于要到实战环节啦!”(兴奋搓手)
让我们来帮奶油百吉饼公司做一个真正的订单系统吧!
#### 1. 用户输入名字、百吉饼数量和住址
```html
订购百吉饼
🍩 订购百吉饼 🍩
```
#### 2. 用户点击提交,确认信息
```php
确认订单
请确认您的订单:
姓名:
数量:个
地址:
```
`htmlspecialchars()` 和 `nl2br()` 是为了安全性和格式,超重要!
#### 3. 用户确认,发送邮件给库管
```php
";
echo "订单号:" . time() . rand(100, 999); // 简单生成订单号
} else {
echo "发送失败,请联系客服!";
}
?>
```
#### 4. 库管送货上门
(这部分现实中需要物流系统,我们网站就显示成功页面吧~)
```php
订单成功!
🎉 订单成功! 🎉
感谢您的订购!库管小哥已经收到订单,正在为您准备新鲜的百吉饼~
预计30分钟内送达!
返回首页
```
### 第二章概述
第二章我们学了这么多“不简单的东西”:
1. **判断**:`if`、`else`、`switch`,让网站会“思考”
2. **循环**:`while`、`for`、`foreach`,让代码会“重复”
3. **函数**:封装代码,一劳永逸
4. **内置函数**:PHP自带的“魔法工具”
5. **Session和Cookie**:记住用户的小技巧
6. **表单处理**:真正能和用户交互!
从只能显示静态信息的网站,变成了能接订单、能记用户、能发邮件的智能网站!超厉害的对吧?
### 问答时间!
> **1. Session和Cookie,哪个更安全?为什么?**
>
> **2. 如果用户提交的表单里有 ``,直接显示会怎样?怎么避免?**
>
> **3. 为什么函数要有返回值?不用返回值可以吗?**
好好思考一下~答案我们会在第三章揭晓!
---
## 第三章:天哪,是MySQL!
“MySQL……是那种会飞的马吗?”(好奇星星眼)
不是啦~MySQL是一个“魔法记事本”,它能帮我们记住成千上万的订单、用户、商品信息,而且找起来超快!
### 使用数据库实现更多功能
现在我们的订单都是用邮件发送的,但如果一天有1000个订单呢?库管小哥的邮箱会爆炸的!而且我们也没法统计“哪种百吉饼最受欢迎”、“哪个地区的订单最多”……
有了MySQL,我们就能:
- 永久保存所有订单
- 随时查询统计数据
- 管理用户信息
- 甚至做会员积分系统!
### 建立与MySQL的连接
要使用MySQL,首先要和它“握手”:
```php
```
### 将**数据**放入数据库
数据库就像一个大柜子,里面有很多“抽屉”(表),每个抽屉放一类东西(订单表、用户表、商品表……)。
#### 用`mysqli_query()`创建表(以及做其他的事情!)
```php
```
##### 常见的字段数据类型
| 类型 | 用途 | 例子 |
|------|------|------|
| `INT` | 整数 | 数量、年龄 |
| `VARCHAR(n)` | 可变长度文本 | 姓名、邮箱 |
| `TEXT` | 长文本 | 地址、备注 |
| `DATE` | 日期 | 生日 |
| `TIMESTAMP` | 时间戳 | 下单时间 |
| `DECIMAL` | 精确小数 | 价格 |
### 主键(Primary Key)
“主键……是主要的钥匙吗?”
是的!每个表都需要一把“唯一的钥匙”,用来区分每一行数据。就像每个订单都有唯一的订单号一样。
```php
订单ID INT AUTO_INCREMENT PRIMARY KEY
```
- `PRIMARY KEY`:这是主键
- `AUTO_INCREMENT`:自动增长,第一个是1,第二个是2……
#### 代码实例
```php
```
### `IF NOT EXISTS`
“如果表已经存在怎么办?会报错吗?”
会的!所以我们可以用 `IF NOT EXISTS` 魔法:
```php
CREATE TABLE IF NOT EXISTS 订单 (...)
```
这样如果表已经存在,就不会重复创建啦!
### 插入数据
现在让我们存入第一个订单:
```php
```
### 用`SELECT FROM`获取数据
“怎么把存进去的数据拿出来呢?”
用 `SELECT`!就像在抽屉里找东西一样:
#### 使用方法
```php
所有订单:";
while ($行 = mysqli_fetch_assoc($结果)) {
echo "订单号:" . $行['订单ID'] . "
";
echo "顾客:" . $行['顾客姓名'] . "
";
echo "数量:" . $行['百吉饼数量'] . "
";
echo "时间:" . $行['下单时间'] . "
";
}
// 获取数量,用于统计
$统计SQL = "SELECT COUNT(*) as 总数 FROM 订单";
$统计结果 = mysqli_query($连接, $统计SQL);
$总数行 = mysqli_fetch_assoc($统计结果);
echo "总订单数:" . $总数行['总数'];
?>
```
### 更新数据
“如果顾客改地址了怎么办?”
用 `UPDATE`!就像修改记事本上的记录:
```php
```
**一定要有 `WHERE`**!不然……所有订单的地址都会被改掉!(太可怕了)
### 删除数据
“如果顾客取消订单呢?”
用 `DELETE`,但要超级小心!
```php
```
**重要提示**:实际项目中,我们很少真的删除数据,而是标记为“已取消”,这样数据还能统计分析!
---
这一章我们学会了用MySQL存数据、取数据、改数据,我们的百吉饼网站终于有了“记忆”功能!下一章我们会学更高级的数据库操作,比如联表查询、事务处理等等~
**思考题**:如何防止SQL注入攻击?我们会在第四章“安全篇”详细讲解!
---
这样的风格和节奏您觉得如何?需要我继续写第四章的内容吗?