《小白7天入门PHP Web开发》系列文章,面向单纯善良的完全不懂Web开发编程的入门速成课程,小白们如果感兴趣可以研读此系列文章,也可以连线提问。各路大神有何指教还请指点一二。希望各路大神手下留情,注意维护自己的身份和形象。拜谢各位。

上一篇文章 我们已经实现了博客文章功能的前端三个主要页面的设计和编码,并且了解了一些新的知识点,包括元素定位等。这篇文章将作为我们整个入门系列文章的终章,完全实现个人博客文章功能模块的实现。包括前后端交互、后端数据交互、php简单类封装等。开始之前,我们需要注意几点,第一,我们的前端页面上一节课的基本相同,有细微调整我们不再表,大家可以自行优化和补充,都不是很大的变动,我也尽力在文中提到。第二,我们所有的代码定位入门仅为说明相关功能和实现不做或少做安全校验。第三,文章中只提供核心代码,希望大家思考完善,有助于学习和提高。

水巷先生:小白7天入门PHP Web开发 - Day 6[中](前端)个人博客实例讲解用户数据的存储​zhuanlan.zhihu.com

一、分析一下我们要做哪些事情

万事开头难,思考第一步~!(PHP开头不难)

我们知道(我当你们都知道的,毕竟前面这么多课过来了),个人博客文章功能,主要就是涉及了文章的管理,文章要进行发布(增)、删除(删)、查找(查)、修改(改)等操作,才叫管理。那我们就得做到能在前端(页面)去操作文章,提供操作的入口,然后后端接受前端的数据进行相关业务逻辑的处理,处理完把数据存储到数据库中并进行管理,所以我们要做的就是这么几件事情。

第一件事情,前端提供入口,我们上一篇文章已经把页面基本实现了

第二件事情,前后端交互,这篇文章我们去实现,但其实我们早在 Day6上 就已经做过示例了,这节课我们不细讲

第三件事情,后端php和数据库mysql的交互和数据操作,基础的内容我们在 Day5 就已经有过讲解了。

那么,现在我们要?干!

二、万丈高楼平地起,代码生前要先简单“架构”管理一下

首先,我们的整个功能有几个东西,前端页面、后端php业务逻辑、数据库操作,所以我们需要先简单的做一个目录来“架构”管理这些代码。我们需要一个前端页面的目录,暂且叫 views ,届时我们把所有前端的页面移到这里面;然后后端php代码,我们需要一个叫 controllers 的目录来管理一下我们跟前端交互的代码,以及,我们需要php和数据交互的地方,代码放在一个叫 models 的目录里吧;最后我们需要跟数据库进行交互操作,就得连接数据库并单独对此进行管理方便各处都能方便用到,所以放在一个叫 common 的目录下。

以上就是我们简单的目录结构,你可以发现我们有四个东西,一个common,我们可以称作我们的公共类所在的地方,或者叫类库,你也可以取名叫lib,剩下的三个东西就是大家万年都提的 MVC 结构的简易雏形,也就是模型、视图、控制器。最简单的模型就是操作数据,处理数据的,控制器是处理业务逻辑和空值输入输出和前端交互的,视图就是我们的页面了。我们虽然这么进行代码的管理,但并不能称为严格意义上的MVC模式,因为我们采用了ajax前后端完全分离的做法,但是也不能称为非常严格意义上的前后端分离,我做的一切都是为了帮助你们理解这些东西并快速入门。更多相关的东西,大家可以去,嗯,那就百度一下吧。

图 2-1 目录结构图(仅供参考)

三、先拿到文章数据再说

我们先完成添加文章的功能。首先是一个表单页面,通过ajax交互,将表单提交到后端php进行存储。

页面如下,相比较上一篇文章,我们给每一个表单都新增了placeholder属性,用于提示用户输入的内容应该是什么

图 3-1 添加文章页面

我们直接新建一个js文件,用来写前后端交互以及用户交互的相关功能代码。叫 main.js 吧。

1、首先,我们需要一个ajax请求来提交数据到后端

我们把js代码封装成一个函数,方便调用和用户交互事件绑定,我们定义一个函数名叫 saveArticle

// 保存文章的函数

然后,我们需要绑定一个事件到提交按钮上来触发调用这个函数,才能最终将数据提交到后端。可以直接像下面这样绑定

<

2、后端接收数据

在controllers目录下新建一个addarticle.php 的文件,用户直接和前端交互,同时在models 下新建一个Article的类文件(还记得类吗?我们的 Day4 讲过的。)Article.php。之后我们的前端会提交数据到控制器,控制器会讲数据处理后转交给模型来处理,拿到结果后返回给前端使用。

当前端点击按钮,触发数据提交后,我们可以在控制器addarticle.php里面通过全局变量 $_POST 来获取所有的post方式提交上来的数据。

$post_data 

3、所有模型都应该自动连接数据库,数据库连接的基本类封装

为了方便数据库的连接和相关数据库的操作,我们新建一个数据库类,叫Db吧,新建Db.php,因为是公共的类,我们放到common目录下。这个类主要处理了数据库的pdo连接和数据库连接单例模式。要注意我们的文件路径和命名空间

<?

然后我们要所有模型去调用Db::getInstance(),并传进去参数就可以连接数据库了,但是我们不想每一个模型(毕竟我们会有多个模型,比如这里的文章模型和评论模型)都要去连接一次,那怎么办呢?让他们都继承一个父类,在父类里面完成数据库的连接

我们在 models 目录下建一个父类文件 Base.php ,然后文章模型继承他就可以了。

<?

4、在模型中实现数据的插入

在 models 下新建文章模型 Article.php,并且实现文章的保存,我们需要继承 基础模型类 Base,所以我们的代码如下

<?

实现文章的保存到数据库,主要是我们在之前的文章也讲到过的,数据插入到数据库的sql。

INSERT INTO table_name (column1, column2) VALUES (value1, value2);

所以我们定义一个用来写入数据的方法,save

// 这里我们用类属性的方式来接收数据

5、第二步中的后端接收数据完善

接收数据我们用$_POST即可,这时我们要把数据交给模型处理,并获得处理结果,然后响应给前端。

<?

此时我们已经完成了整个文章的发布过程了。你清楚了吗?你可以试试你能正常运行吗?

接下来为了能够看到我们写入的文章是否成功了,除了看响应结果,那么我们需要写一个详情的功能来获取文章详情。

四、既已写入,是时候取出来了,获取文章详情

基本过程和上面的文章保存发布是一样的。

1、ajax提交请求说我要拿文章详情

拿文章详情就像在超市到储物柜拿自己的东西一样,需要知道柜子的号码,不然路都找不到~!所以我们要拿文章详情,也就需要知道文章id是多少,文章id在上一步中我们其实已经有返回了。所以我们的js很简单,如下。

// 获取文章详情

2、后端控制器处理,并请求模型查询数据返回

<?

3、模型查询文章详情

这里使用的是查询的sql语句,也是当然的我们之前的文章讲过的。

SELECT * FROM table_name WHERE column=val LIMIT 1

因为我们只取一篇文章也就是一条数据,所以可以使用 limit 1 来提高查询效率,模型方法同样写在模型Article.php文件中

/**

就这样,我们就完成了获取文章详情的内容。文章写到这里,我们已经进行了文章的发布、文章的查询了,那如果需要编辑文章的话,怎么办呢?

我们想一下,我们要编辑文章,是不是得先拿到文章呢。没错,这就是查询的过程,跟上面的获取文章详情一毛一样。然后呢?保存到数据库,交互过程跟发布文章几乎一样,唯一的不同就是,sql语句不太一样。插入用 INSERT INTO,而更新用的是 UPDATE

UPDATE table_name SET column1=value1, column2=value2 WHERE column=value

那么我们更新文章和新增文章差不多,区别的sql语句,所以我们的模型方法 save 就改成了这样

/**

当我们需要更新文章的时候需要给后端传一个id值,跟获取文章详情一个样子的。请学会举一反三。

咳咳,说了这么多,其实也不多,都是大同小异的,这里有几个地方需要大家注意一下

关于PDO数据库连接和查询我一直没提,大家可以直接在官方文档查看一下具体用法。我们这里主要理解sql语句的使用。

五、我们现在还差什么?

文章发布有了、详情有了、编辑更新有了,从页面来看,我们是不是还差首页文章列表和文章评论了?对不起,我要留给你们作业来实现这一部分的功能了。给几个重要的方向提示。

1、多条数据查询,pdo使用的是 fetchAll,相对的单条数据的话,使用的是fetch

// 多条

2、数据过多时我们需要使用分页,分页的本质就是sql中的limit和offset,参数就是需要当前页码和每页的数量

// 其中 offset表示数据库查询从第几条数据开始拿数据,limit表示从offset条开始拿limit跳数据

鉴于这个简单的功能,已经没有什么别的东西了。我把 代码 也统一放出来了。大家先看完上面再去看看代码对比一下吧。有什么问题可以留言或者私信我哦。

六、作业和任务

经过上面和前面文章的所有东西,我觉得你们已经完全有能力独立实现一个个人简单的博客了。恭喜你读到这里的时候,已经完成了PHP web开发的全部入门学习。这篇文章我们留了两个东西,一个文章列表、一个文章评论,希望你们能去搞一搞试一试。我提供的代码已经完成了文章评论列表和分页。希望你们能够学习临摹或者创新,完成文章列表首页的数据交互和处理。

ztree树封装 json实例_小白7天入门PHP Web开发 - Day 6[下](综合)个人博客实例讲解用户数据的存储...相关推荐

  1. [python爬虫] 正则表达式使用技巧及爬取个人博客实例

    这篇博客是自己<数据挖掘与分析>课程讲到正则表达式爬虫的相关内容,主要简单介绍Python正则表达式爬虫,同时讲述常见的正则表达式分析方法,最后通过实例爬取作者的个人博客网站.希望这篇基础 ...

  2. Web 开发中应用 HTML5 技术的10个实例教程

    HTML5 作为下一代网站开发技术,无论你是一个 Web 开发人员或者想探索新的平台的游戏开发者,都值得去研究.借助尖端功能,技术和 API,HTML5 允许你创建响应性.创新性.互动性以及令人惊叹的 ...

  3. BeautifulSoup爬取博客实例

    BeautifulSoup爬取博客实例 爬取对象はてなブックマーク博客(日本网站) 用for循环爬取每个类别博客的前两页博客 使用python BeautifulSoup库 第一步: 爬取所有类别的文 ...

  4. figma客户端_小白的Figma入门手册

    全世界都在用Figma 不知道你们有没有这种感觉,仿佛有一天,很突然的,全世界都在使用figma,一个软件从无人问津到现在的如日中天,用了不到3年,而现在,它不仅仅是当下的最优生产力工具,在疫情掀起的 ...

  5. mysql知识总结体会博客_可能是全网最好的MySQL重要知识点/面试题总结||CSDN博客精选...

    什么是MySQL?MySQL 是一种关系型数据库,在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展.阿里巴巴数据库系统也大量用到了 MySQL,因此它的稳定性是有保障的.M ...

  6. python网络爬虫的第三方库_Python常用第三方库_网络爬虫、数据分析与WEB开发、机器学习...

    Python语言有超过12万个第三方库,覆盖信息技术几乎所有领域.下面简单介绍下网络爬虫.自动化.数据分析与可视化.WEB开发.机器学习和其他常用的一些第三方库,如果有你感兴趣的库,不妨去试试它的功能 ...

  7. Node.js 博客实例(一)简单博客

    原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第一章.因为版本号等的原因,在原教程基础上稍加修改就可以实现. 环境: win7旗舰版64位 Node ...

  8. java坦克大战 实训报告_坦克大战系统《Java程序开发实训》综合实训报告.doc

    坦克大战系统<Java程序开发实训>综合实训报告 <Java程序开发实训>综合实训报告 题目: 坦克大战系统 姓名: 方庆 学号: 2010203206 班级: 10软件(2) ...

  9. ztree 标准得json数据格式_酷站推荐 - json-c.github.io/json-c - json-c API

    json-c.github.io/json-c/ http://json-c.github.io/json-c/ JSON:JavaScript 对象表示法(JavaScript Object Not ...

最新文章

  1. SAP PLM市场广阔(转自e-works制造业信息化Researcher)
  2. python如何对人数向上取整_python中的向上取整向下取整以及四舍五入的方法
  3. java 8 string_java8、jdk8日期转化成字符串
  4. 受半导体短缺及疫情影响,丰田已下调9月10月及当前财年产量预期
  5. 基于JAVA+SpringMVC+MYSQL的便利店运营管理系统
  6. Java学习第七课...枚举.自动装箱.静态导入...-asp.net关注
  7. sql azure 语法_如何:Azure中SQL Server文件快照备份
  8. [Serializable]在C#中的作用——实现.NET对象序列化
  9. Spring随笔(04)
  10. DSP28335学习记录(三)——ePWM
  11. Charles的使用方法
  12. Skyline软件二次开发初级——3如何在WEB页面中的三维地图上创建几何对象
  13. Java之美[从蛮荒到撬动地球]之设计模式四
  14. 趣味运动会项目及规则
  15. 英语面试自我介绍范文
  16. Linux以百万兆字节显示内存大小
  17. 职能式管理和流程式管理
  18. 海马玩模拟器离线安装包下载方法
  19. vue 、前端rsa加密遇到的问题,message too long for RSA
  20. Human Pose Estimation浅述

热门文章

  1. javascript中对象在OOP方面的一些知识(主要是prototype和__proto__相关)
  2. 数据库迁移_【干货分享】DM数据库迁移方法(物理迁移)
  3. ksql 数量大于2_504深入解读路基土石方说明,路基填方数量组成?运距>15km咋办...
  4. php数据库查询中文方块,解决Python数据可视化中文部分显示方块问题
  5. b树与b+树的区别_Linux内核-数据结构系列(B树、B-树、B+树)的区别
  6. ttf能改成gfont吗_粉丝喊话岳云鹏改回本名 小岳岳在线蒙圈:我还能改成岳云啥...
  7. 51单片机usb烧录电路_51单片机怎么用usb烧写程序 - 全文
  8. html脱离标准文档流,关于css脱离标准文档流的两种方式
  9. idea maven打jar包_Dev 日志 | 如何将 jar 包发布到 Maven 中央仓库
  10. c语言e怎么表示_C语言程序设计(山东联盟)