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 @   l3m0n  阅读(525)  评论(0编辑  收藏  举报
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
L3m0n
点击右上角即可分享
微信分享提示