多用户博客系统Day1

多用户博客系统

需求:

  1. 支持多用户(1号用户为管理员身份,其他用户为普通用户)
  2. 实现所有用户对自己所些的文章的增删改,以及对所有文章的查阅功能
  3. 实现管理员的对标签页的增删改查功能
  4. 实现一个用户登陆页面,根据用户的等级生成权限不同的页面

模块划分:

  • 客户端:网页的形式
  • 服务器端:HTTP协议
  • 客户端:实现对数据的增删查改(数据库:Mysql)

从数据库开始

1.创建一个数据库(blog_system)

​ 1.1创建一个博客表(blog_table)

表中存储数据及数据类型:

博客id blog_id (int not null primary key auto_increment)

博客标题 title(varchar(50))

博客正文 content(text)

作者id author_id(int)

标签id tag_id(int)

创建时间 create_time(varchar(50))

​ 1.2标签表(tag_table)

标签id tag_id(int not null primary key auto_increment)

标签名 tag_name(varchar)

​ 1.2用户表(作者表、author_table)

用户id author_id(int not null primary key auto_increment)

用户名 user_name(varchar)

用户密码 passwords(varchar)

1.3 将建标的mysql全写在一个sql文件中,方便日后修改,查看,并使用”<”重定向的命令创建数据库。

2.使用mysql API创建一些类来封装数据路操作

2.1 注备工作:

  • 和数据库建立连接,初始化句柄
1
MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long clientflag)
  • 如果连接失败打印错误
1
const char *mysql_error(MYSQL *mysql)
  • 设置字符编码 为utf8(正文会出现中文,mysql默认utf8编码)
1
int mysql_set_character_set(MYSQL *mysql, const char *csname)
  • 创建一个和数据库断开连接的接口
1
2
3
static void MySQLRelease(MYSQL* connect_fd){
mysql_close(connect_fd);
}

创建一个操作博客表的类(BlogTable)

相关参数同一使用json格式,方便扩展

对数据库操作大致总结为以下几点:

  1. 创建sql语句
  2. 分析参数中的数据,拼接sql语句
  3. 执行mysql语句
  4. 判断执行结果,打印错误,返回false
  5. 如果要从数据库获取数据,还要有以下几步
  6. 获取执行结果,获取的执行结果为MYSQL_RES* 类型,通过mysql_num_rows获取结果中有几条数据,对获取结果进行校验
  7. 通过mysql_fetch_row 循环获取每一条执行结果,每条数据写入一个Json对象中,并把json对象,添加到输出的json对象级中(Jsons->append(Json))
  8. 返回true,操作完成

实现功能:

  1. 增(Insert)
  • 在添加一片博客的时候,正文内容可能非常大,正文内容就不能存放在栈上,必须在堆上为其开辟一段空间。
  • 拼接的sql语句因为正文的缘故,也不能在栈上存放,必须在堆上开辟空间
  • 在堆上开辟空间就存在在不使用这段空间时,就要对着段空间进行释放,但是如果在之后使用者段空间的时候因为各种原因会导致,内存内释放,造成内存泄流,所以,将上面提到的量段空间交给智能指针管理(unique_ptr)
  • 博客正文中可能会出现一些特殊符号(\n, ‘’, “” 等),会导致拼接的sql语句存在问题,这里就需要对正文内容进行转义,使用函数unsigned long STDCALL mysql_real_escape_string(MYSQL * mysql, char * to, const char * from, unsigned long length),进行转义,但是用来存储转义之后的内容的to指针所指向的大小,在文档中规定是转义前存放空间的2倍加1字节的空间
  1. 删(Delete)
  2. 改(Update)
  3. 查(Select)
    • 根据tag_id查
    • 根据author_id查
    • 所有博客

所有用户可以对博客表进行操作,但是智能对自己发表的博客进行删和改操作

2.标签表(TagTable)

只有管理员才能进行标签页的增,查

  • 增(Insert)
  • 删(Delete)
  • 查(Select)

3.作者表(AuthorTable)

  • 增(Insert)
  • 改(Update)

新用户注册作者表增

用户改登陆密码,进行改操作

查操作之后管理员身份可以使用