留言本的设计:

1 分析数据表结构:
留言板有哪些信息需要存储:
ID,留言标题,留言内容,留言时间,留言人

2 创建数据表
created_at创建时间使用int存入时间戳,MySQL的timestamp有时间范围限制;
5 程序设计 - 图1

3 连接数据库
使用PDO方式进行连接,扩展性好:
5 程序设计 - 图2

5 程序设计 - 图3
详细代码:

  1. <form action="store.php" method="post">
  2. 标题:<input type="text" name="title"><br>
  3. 内容:<textarea cols="35" rows="10" name="content"></textarea><br>
  4. 留言人:<input type="text" name="user_name"><br>
  5. <input type="submit" value="添加">
  6. </form>
<?php
$title = $_POST['title'];
$content = $_POST['content'];
$user_name = $_POST['user_name'];
if (empty($title) || empty($content) || empty($user_name))
{
    exit('标题或者内容或者用户名不能为空');
}

try {
    $dsn = 'mysql:dbname=test;host=localhost';
    $username = 'test';
    $password = 'test';
    // 异常模式,这个模式需要配合 try 使用 : 
    $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->getMessge();
}


无限分类

1 父id形式
5 程序设计 - 图4

展示无限极分类的时候需要使用递归进行显示

也可以加个path字段,显示当前层级路径,优点是根据path字段,可以直接显示当前完整路径,缺点是维护麻烦
2 全路径实现
可以对path字段进行order by排序达到无限极分类的效果
5 程序设计 - 图5

递归

自己调用自己 , 自己设置终止条件
缺点:
多次重复计算 , 性能差
递归优化:尾递归。详细的看算法-递归中优化方法。