# 真题
编写一个在线留言本,实现用户的再来留言功能,留言信息存储到数据库,要求设计数据表内容以及使用PHP编码完成。
# 数据表的数据
| 字段 | 类型 | 空 | 默认 | 注释 |
| --- | --- | --- | --- | --- |
| id | int | 否 | | id |
| title | varchar(120) | 否 | '' | 标题 |
| content | varchar(255) | 否 | '' | 内容 |
| create_at | int | 否 | 0 | 创建时间 |
| user_name | varchar(32) | 否 | '' | 用户名 |
# 创建数据表语句
~~~
CREATE TABLE `message` (
`id` int UNSIGNED NOT NULL AUTO_INCREMENT ,
`title` varchar(120) NOT NULL DEFAULT '' ,
`content` varchar(255) NOT NULL DEFAULT '' ,
`create_at` int NOT NULL DEFAULT 0 ,
`user_name` varchar(32) NOT NULL DEFAULT '' ,
PRIMARY KEY (`id`),
INDEX `message_user_name` (`user_name`) USING BTREE
);
~~~
# 选择PHP连接数据库的方式
+ MySQLi
+ MySQL
+ PDO(建议使用)
# 编码能力
form.html
~~~
<form action="message.php" method="post">
标题: <input type="text" name="title" id="">
消息:<textarea name="content" id="" cols="30" rows="10"> </textarea>
用户: <input type="text" name="user_name" id="">
<input type="submit" value="添加">
</form>
~~~
message.php
~~~
<?php
$dbms='mysql'; //数据库类型
$host='localhost'; //数据库主机名
$dbName='test'; //使用的数据库
$user='root'; //数据库连接用户名
$pass='root'; //对应的密码
$dsn="$dbms:dbname=$dbName;host=$host";
//echo $dsn; exit();
$title = $_POST['title'];
$content = $_POST['content'];
$user_name = $_POST['user_name'];
if (empty($title) && empty($content) && empty($user_name)) {
exit("Not Null");
}
try {
$attr = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
];
$pdo = new PDO($dsn, $user, $pass, $attr);
// $sql = 'select id,title,content from message where user_name=:user_name';
$sql = 'insert into message(title, content, create_at, user_name) '.
'VALUE (:title, :content, :create_at, :user_name)';
$stmt = $pdo->prepare($sql);
$data = [
':title'=>$title,
':content'=>$content,
':create_at'=>time(),
':user_name'=>$user_name,
];
$stmt->execute($data);
$row = $stmt->rowCount();
if ($row) {
exit("Add Success");
} else {
exit('Add Failed');
}
}catch (PDOException $e){
echo $e->getMessage();
}
~~~
## 无限分类
**方式一(建议使用)**
这种方式需要使用递归
| 字段 | 类型 | 空 | 默认 | 注释 |
| --- | --- | --- | --- | --- |
| id | int | 否 | | id |
| title | varchar(32) | 否 | '' | 分类名字 |
| pid | int | 否 | 0 | 父级,0-表示没有父级 |
**方式二**
| 字段 | 类型 | 空 | 默认 | 注释 |
| --- | --- | --- | --- | --- |
| id | int | 否 | | id |
| title | varchar(32) | 否 | '' | 分类名字 |
| pid | int | 否 | 0 | 父级,0-表示没有父级 |
| path | int | 否 | 0 | 路径 ,如0-1 |
