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

文章目录

  • 一、考点
      • 1、数据表设计
        • 分析数据表结构
          • 留言板有哪些信息需要存储?
      • 2、数据表创建语句
      • 3、选择PHP连接数据库的方式
        • 1)PDO【推荐使用】
        • 2)MySQLi
        • 3)MySQL库
      • 4、编码能力
        • 1)PDO的基本操作
        • 2)操作数据库代码
        • 3)代码实现
  • 二、解题方法
  • 三、真题
      • 设计一个无限分类表
          • 1)方法一:存 id,title,在表中加一个 `pid`,再配合递归实现。【推荐使用】
          • 2)方法二:存 id,title,加 `pid` 和 `path` (path是为了显示顺序,如果不加 path的话,需要用递归才能把级别显示出来)
        • 综上所述,此题推荐使用 `pid` + 递归的方法实现,`pid` 关联的是 `主键ID`。

一、考点

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;

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


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




    
    留言本


    
标题:
内容:
留言人:

效果如下:

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

② 接收数据 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();
}

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

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

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


二、解题方法

根据考题所出功能,先分析应该存储哪些信息,设计好数据表,这一步很关键,如果编码时才发现设计有问题,会浪费大量的时间,基本没有时间改,所以要先设计好,然后根据设计好的数据表创建数据表,通常建议大家使用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

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

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

你可能感兴趣的:(PHP面试题,程序功能设计)