给个人博客的文件添加类型标签

个人需求说明:

之前搭建的个人博客主页,为了更好的进行分类管理,我决定对每一篇添加分类标签,就像CSDN博客上的文章一样,如图:

这里写图片描述

标签:git ,就是我们这次要做的事情。


后端数据库设计:

为了保证后期标签名称修改的方便,我们需要把标签和文章表分开存储,在文章表中只存储一个标签的整型标识,在另一张label表中我们真正存储标签的名称,这样可以在修改标签名称是不触动到文章表。

我们先修改文章表article,如下图所示:

这里写图片描述

然后再添加label表:
这里写图片描述


网页前端设计:

数据库端设计完毕,接下来我们要去设计网页的前端,在相应位置去防止我们的标签,一如既往,我们前端框架使用bootstrap。

<span class="label label-info">Info</span>

我们使用bootstrap的标签类元素,效果图如下:。
这里写图片描述


PHP控制逻辑设计:

当我们在加载文章数据的时候,我们需要加载文章的标签信息,从数据库中查询:

SELECT name
FROM label
WHERE id = ( SELECT label_id
             FROM article
             WHERE article_id = 22 )

这是个SQL的嵌套查询语句,首先从article表中查出来文章的标签整型标识,然后利用这个整型标识从label表中查出标签的名称。
接下来是对应的PHP代码:

/*
**加载文章标签
*/
//构造查询语句
$label_sql = "SELECT name\n"
    . "FROM label\n"
    . "WHERE id = ( \n"
    . "SELECT label_id\n"
    . "FROM article\n"
    . "WHERE article_id = '$article_id')";

//查询出数据库表中的标签
$label = mysql_query($label_sql);
//结果集合为一个数组,虽然只有一行数据,但是还是得转换为一行string
$label_row = mysql_result($label, 0, 'name');
//echo $label_row;

这里有一点要注意:PHP从数据库中查出来的数据是一种数组形式,即使我们的结果集只有一行数据,这个时候我们要显式的将结果转换为单行数据,否则会报错的,这里面设计到动态语言与静态语言的不同,不能从C语言的角度来看问题。
到这我们就给文章加上标签,可以进行后续的分类处理啦。


写文章界面的处理:

给文章添加了标签后,我们在写文章的时候需要添加相应的标签,在这里我们使用下拉列表来实现,页面效果如下:
这里写图片描述
实现的前端代码为:

write_article.php页面

        <p>文章分类:
            <select id="label_id" name="label_id">
              <option value="1">算法设计</option>
              <option value="2">Git使用技巧</option>
              <option value= "3">Web开发</option>
              <option value="4">Emacs</option>
            </select>
          </p>

写页面修改以后,我们需要修改后台向数据库表存储文章的php文件,因为我们article表添加了label_id字段了。create_article.php就是我们向数据库表中插入文章信息的后台文件,我们修改如下:

create_article.php

<?php
header("content-Type: text/html; charset=utf-8");

require_once 'app_config.php';
require_once 'database_connection.php';

if(isset($_REQUEST['title']) && isset($_REQUEST['content'])){
        $title = trim($_REQUEST['title']);
        $content = trim($_REQUEST['content']);
        $label_id = trim($_REQUEST['label_id']);

        if($title == "" || $content == "" || $label_id == ""){
            echo "<h1>文章相关内容不能为空!</h1>";
            exit();
        }
        $author_id = 7; //初期先这么写
        $create_time = date("D F d Y",time());//文章的生成时间

        $insert_sql = sprintf("INSERT INTO article " .
                              "(title, content, author_id, " .
                              "create_time, label_id) " .
                              "VALUES ('%s', '%s', '%d', '%s', '%d');",
                              mysql_real_escape_string($title),
                              mysql_real_escape_string($content),
                                              mysql_real_escape_string($author_id),
                                  mysql_real_escape_string($create_time),
                              mysql_real_escape_string($label_id)
        );
        //设置读取数据库的数据编码格式
        mysql_query("set character set 'utf8'");//读库 
        mysql_query("set names 'utf8'");//写库

        //将文章数据插入到数据库中
        mysql_query($insert_sql)
            or die(mysql_error());

        //将页面定位到博客显示页
        header("Location: ../index.php?article_id=" .      mysql_insert_id()); 

        exit();

}else{
        echo "<h1>外面文章内容不能为空!</h1>";
        echo $_REQUEST['title'];
    }

?>

我们在添加了相应的label_id字段。


ok,到这我们就大功告成咯,一晚上没白干,嘻嘻。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值