【程序功能设计】先写一个在线留言本,实现用户的在线留言功能,留言信息存储到数据库,要求书籍数据表内容以及使用PHP编码完成。

冷暖自知 提交于 2019-12-07 22:40:16

一、考点

1、数据表设计

分析数据表结构

留言板有哪些信息需要存储?
  • 留言信息:ID,留言标题,留言内容,留言时间,留言人

2、数据表创建语句

// 留言本表 message
create table message(
    id int unsigned not null auto_increment primary key,
    title varchar(120) not null default '',
    content varchar(255) not null default '',
    created_at int unsigned not null default '0',
    user_name varchar(32) not null default '',
    key message_user_name(user_name)
)engine=innodb default charset=utf8;

在这里插入图片描述


3、选择PHP连接数据库的方式

1)PDO【推荐使用】

  • 可扩展性更好、支持预处理、面向对象
  • 推荐使用PDO,因为扩展性非常好,将来换其他库也是没有问题的,而且它里面的方法都是比较完善的。

2)MySQLi

  • 只支持MySQL操作(不支持其他库)、支持预处理、面向对象和过程,效率较高(效率比PDO稍微高点)

3)MySQL库

  • 只支持MySQL数据库、没有预处理的支持、面向过程

4、编码能力

1)PDO的基本操作

try {
    // 操作数据库代码
    // ...
} catch(PDOException $e) {
    echo $e->getMessage();
}

2)操作数据库代码

// 操作数据库代码
$pdo = new PDO($dsn, $username, $password, $attr);
$sql = 'SELECT `id`, `title`, `content` FROM `message` WHERE `user_name` = :user_name';
$stmt = $pdo->prepare($sql);
$stmt->execute([':user_name'=>$user_name]);
$result = $stmt->fetchALL(PDO::FETCH_ASSOC);

3)代码实现

① 准备一个表单 form.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>留言本</title>
</head>
<body>
    <form action="./store.php" method="post">
        标题:<input type="text" name="title"><br>
        内容:<textarea name="content" cols="30" rows="10"></textarea><br>
        留言人:<input type="text" name="user_name"><br>
        <input type="submit" value="添加">
    </form>
</body>
</html>

效果如下:

在这里插入图片描述

② 接收数据 store.php

// 接收表单提交过来的数据
$title = $_POST['title'];
$content = $_POST['content'];
$user_name = $_POST['user_name'];

if (empty($title) || empty($content) || empty($user_name)) {
    exit('标题或者内容或者用户名不能为空');
}

// PDO操作数据库
try {
    $dsn = 'mysql:dbname=test; host=localhost';
    $username = 'root';
    $password = '123456';
    $attr = [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ];

    $pdo = new PDO($dsn, $username, $password, $attr);
    $sql = 'insert into message(title, content, created_at, user_name) values(:title, :content, :created_at, :user_name)';
    $stmt = $pdo->prepare($sql);
    $data = [
        ':title' => $title,
        ':content' => $content,
        ':created_at' => time(),
        ':user_name' => $user_name
    ];
    $stmt->execute($data);
    $rows = $stmt->rowCount();

    if ($rows) {
        exit('添加成功');
    } else {
        exit('添加失败');
    }
} catch(PDOException $e) {
    // 异常
    echo $e->getMessage();
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


二、解题方法

根据考题所出功能,先分析应该存储哪些信息,设计好数据表,这一步很关键,如果编码时才发现设计有问题,会浪费大量的时间,基本没有时间改,所以要先设计好,然后根据设计好的数据表创建数据表,通常建议大家使用PDO来连接MySQL,最终完成编码,所以一定要熟悉PDO的基本操作。


三、真题

设计一个无限分类表

1)方法一:存 id,title,在表中加一个 pid,再配合递归实现。【推荐使用】
id title pid
1 服装 0
2 上衣 1
3 长袖 2
2)方法二:存 id,title,加 pidpath (path是为了显示顺序,如果不加 path的话,需要用递归才能把级别显示出来)
id title pid path(pid + id
1 服装 0 0- 1
2 上衣 1 0-1- 2
3 长袖 2 0-1-2- 3

在这里插入图片描述

综上所述,此题推荐使用 pid + 递归的方法实现,pid 关联的是 主键ID

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!