blog开发记录

前言

算是在完成作业的前提下花了6天弄完,功能少而且存在大量bug以及安全问题,主要是练习mvc框架的构思,也算是第一次从前端设计到框架构写再到后端逻辑处理。记录一下遇到的坑点。

前端:bootstrap + jquery

后端:php

数据库:mysql

开发时的运行环境:phpstudy + windows

网站样貌

首页:

文章:

搜索:

后台:

mvc设计

大概思想:
index.php进行路由转发,分配到指定的控制器并实例化以及其控制器方法。

controller层:
一旦实例化就new一个view
还有一个model方法,也就是在controller进行数据库连接的时候需要它

view层:
主要是实现assign、display
assign也就是变量往html模版发送变量
display就是将html最后显示出来

model层:
进行数据连接,操作,等等。

数据库

数据库设计

评论:
主键:article article_id
外键:message article_id

类别:
主键:category category_id
外键:article category_id

作者:
主键:admin name
外键:article name

数据库遇上一个编码问题:

连接数据库之前有:set names utf8;
却还是中文乱码

创建数据库之前就应该:

CREATE DATABASE `test`
CHARACTER SET 'utf8'
COLLATE 'utf8_general_ci';

如果是像我一样已经创建过的话,
查看默认的编码哪些有问题:show variables like "%char%"

因为默认的是latin1
如果字段latin1_swedish_ci,就需要改成utf8_general_ci

sql语句问题

想实现一个每个分类有多少文章,左连接是有一个情况的,如果连接的表没有数据,会将字段以null值填写,这时如果分类没有文章的话,count(*)是会返回1的。

SELECT category,count(*) as num FROM `category` left join article on category.category_id = article.category_id group by category;

正确姿势应该是count(article_id)一个可能为null字段,count(null) = 0

SELECT category.category,count(article.article_id) as num FROM `category` left join `article` on category.category_id = article.category_id group by category;

页面实现

由于是在view层,一开始并没有想到怎么好好的去处理一下侧栏的数据,它们在几个页面都有用到,然而不可能在控制器中的每个方法都写一次数据交互。

1、弄一个模版,最后include进去

2、做一个api,然后再用ajax去获取,jquery去操作dom实现。

第一条开始没想通,然后就舍近求远的实现了第二条。

功能实现

后台富文本

本来是想使用markdown引擎,无奈考试快来了,只能快点写完,简化了很多,直接post内容。
div有一个contentEditable=true属性,可以直接实现富文本,也就是从网上复制内容的时候,会保留其原有的html格式。

<form id="testform" action="" method="post">
<div contentEditable=true style="height:300px;width:400px" id="content" placeholder="填写内容....."></div>
<input type="text" name="content" id="test" style="display:none"/>
<input type="submit" value="发表"/>
</form>

div的name值,form提交后是收不到的值的,所以可以在submit之前,将div里面的内容弄到一个表单标签再发送就好。

<script type="text/javascript">
	$("#testform").submit(function(e){
		e.preventDefault();
		$("#test").val($("#content").html());
		e.target.submit();
	});
</script>

其中e.preventDefault();是需要的,因为把div数据放到input之前需要阻塞一下表单的发送。

文章的数据处理:

进库处理:

$content = htmlspecialchars(addslashes($_POST['content']));

出库处理:

htmlspecialchars_decode($content);

文章摘要处理:

mb_strimwidth(strip_tags(htmlspecialchars_decode($v->content)),0,404,'...');

项目地址:https://github.com/l3m0n/LBlog

posted @ 2016-05-29 13:57  l3m0n  阅读(525)  评论(0编辑  收藏  举报