上节课完成了一览查询功能页面。

这节课来做详细页面,将新建页面和编辑页面合并编写成一个详细页面。

防止SQL注入

一览查询页面实现了输入检索条件进行SQL查询数据库表,得到满足条件的数据。

这里需要注意一点:编写代码要注意防止SQL注入。

那么什么是SQL注入呢?

SQL注入就是由于程序编写不严谨,导致用户可以在界面上通过输入特殊的字符串,匹配特殊的SQL语句,执行了非预期的SQL语句,从而对数据库造成破坏或者泄漏的现象。

举例说明一下。

假设有一个登录的SQL语句:

select * from user where account='

password';

那么account随意输入一个比如aaa,密码如果输入特殊的字符串:' or 1=1;-- 则拼接好的SQL如下:

select * from user where account='aaa' and password='' or 1=1;--';

那么这条语句就可以满足条件,本来是查询不到数据的,但是通过输入特殊字符串就可以达到查询到数据的目的了。

这样就可以实现登录的目的了。

所以通过以上例子说明,大家就能了解SQL注入的危害性。

那么如何修改代码,避免发生SQL注入呢?

方法有很多种,一种办法是通过限制连接数据库的用户的相关权限来防止用户执行删除等的动作。

还有一种办法是修改代码进行SQL拼接的方式。

还有一种办法是对输入的条件参数进行转换,防止非法的拼接字符串出现。

entity.php代码修改如下:

image

可以看到在拼接输入参数变量之前,运行了函数mysql_real_escape_string,它的作用就是进行特殊字符转义,防止数据库攻击。

后面的代码实现执行SQL语句的时候都要对参数执行这个函数操作。

编写新闻创建和编辑网页

接下来实现新闻信息详细页面,由于新建页面和编辑页面大部分项目都是一样的,除了ID项目。ID项目新建的时候是不知道的,要创建完数据之后才能知道,而编辑的时候,ID是要传递到详细页面的,因此对这个字段做特殊处理即可。

这样就不需要做2个页面,只用1个页面就可以完成新建和编辑功能。

news_detail.php代码如下:

image

image

image

image

news_detail_do.php代码如下:

image

image

image

image

news.css代码如下:

image

image

news.js代码如下:

image

common.php代码如下:

image

entity.php代码如下:

image

image

image

image

测试新建功能和编辑功能

打开一览页面,点击新增按钮,进入详细页面:

image

可以看到ID显示为空,然后输入如下数据:

image

点击新增明细按钮:

image

然后在明细当中输入下列文字:

image

然后点击“选择文件”按钮:

image

在文件选择框当中选择一个图片文件,点击打开:

image

为了保证上传成功,需要在Web服务器的WWW目录下创建一个upload目录。

然后点击上传按钮:

image

可以看到提示消息,说明上传成功了。点击确定按钮让消息窗口关闭:

image

可以看到上传好的图片文件前面多了一个查看的链接,点击这个链接:

image

可以看到新打开了一个窗口,显示这个图片的内容。

回到详细页面,再次点击新增明细按钮:

image

可以看到又多了一条明细输入行。

输入序号为2,文本内容输入一些内容如下:

image

然后点击“选择文件”按钮,选择一个图片文件,点击打开,然后点击“上传”按钮。

看到提示消息,说明上传成功了。点击确定按钮让消息窗口关闭:

image

点击保存按钮,确认窗口点击“确定”按钮:

image

显示保存成功的消息,点击确定,再点击返回按钮,然后点击查询按钮:

image

可以看到新的数据出现了。

然后修改这条新的数据,点击右侧的“修改”按钮,进入详细页面:

image

可以看到ID有数值了,并且所有输入的数据都正确显示出来了,修改数据如下:

image

然后将第2条明细记录删除,点击第2条明细行右侧的删除按钮,确认窗口点击“确定”按钮:

image

可以看到只剩一个明细行了。点击保存按钮:

显示修改成功的消息,点击确定,再点击返回按钮,然后点击查询按钮:

image

可以看到数据修改成功了。

异常输入情况测试

为了防止用户在输入数据的时候输入一些不合适的数据,需要对输入的数据做数据检查。

数据检查的手段有2种,一种是前端用JavaScript实现,另一种是后段接收输入数据时进行检查。

这2种方式最好都做,前者是方便用户不需要等到提交才知道错误,后者是防止一些脚本程序绕过JavaScript直接提交到服务器。

学哥这里因为输入项目比较简单,所以前端JavaScript的检查就省略了。

打开一览页面,点击新增按钮进入详细页面。

直接点击保存按钮:

image

会提示必须输入的信息,输入错误的数据,比如长度超过规定长度,姓名输入超过30个字符,点击保存按钮:

image

可以看到提示了相应的信息。

后台功能整体测试

将数据库表中的数据全部删除,然后按照逻辑顺序进行下列测试:

1.查询0条记录

2.新建1条记录

3.查询1条记录,确认数据字段全部正确

4.修改1条记录

5.查询1条记录,确认数据字段全部正确

6.删除1条记录

7.查询0条记录

8.新建2条记录

9.查询2条记录,翻页数据正确

10.插入1条记录

11.查询3条记录,翻页数据正确

12.点击翻页链接正确翻页

13.插入2条记录

14.查询5条记录,翻页数据正确

15.点击翻页链接正确翻页

16.修改第2页的1条记录

17.删除第2页的1条记录

18.查询记录确认修改和删除都正确

下节课来编写前端网页用于显示新闻消息的内容。

php编辑页面代码,0069 PHP编程实现后台网页:新闻创建和编辑相关推荐

  1. SAP RETAIL 使用事务代码WB03去显示一个后台配置的工厂

    SAP RETAIL 使用事务代码WB03去显示一个后台配置的工厂 1, 如下的工厂,都是在SPRO后台配置的用于制造业的工厂代码. 比如工厂代码0001. 2, 试图使用WB03去显示这个工厂数据, ...

  2. SAP LSMW 事务代码HUPAST的录屏后台执行报错 - Runtime error RAISE_EXCEPTION has occurred - 之分析

    SAP LSMW 事务代码HUPAST的录屏后台执行报错 - Runtime error RAISE_EXCEPTION has occurred - 之分析 因项目上成品库存管理启用了handlin ...

  3. C语言代码规范(编程规范)

    首页 > 编程笔记 > C语言笔记 阅读:7,165 C语言代码规范(编程规范) C语言中文网推出辅导班啦,包括「C语言辅导班.C++辅导班.算法/数据结构辅导班」,全部都是一对一教学:一 ...

  4. [.NET] 怎样使用 async await 一步步将同步代码转换为异步编程

    怎样使用 async & await 一步步将同步代码转换为异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6079707.html  ...

  5. 敏捷开发“松结对编程”系列之十五:L型代码结构(编程篇之一)

    本文是"松结对编程"系列的第十五篇.(松结对编程栏目目录) 之前的L型代码结构的前三篇提到过,L型代码结构的微观计划和估算过程会与一般的编程方法不同,今天正好要编写一些新代码,边写 ...

  6. 为什么说抄代码是学编程的正确打开方式?

    今天看到一个有意思的问题,抄代码对学习编程有没有帮助? 抄代码不但有帮助,而且帮助非常大,特别是抄那些优秀的开源项目. 说到抄,普遍给人的印象不太好,但在学编程这件事上,抄是屡试不爽的奇招.这里的抄, ...

  7. 长文梳理Muduo库核心代码及优秀编程细节剖析

    一.前言: 代码地址: https://github.com/yyg192/Cpp11-Muduo-MultiReactor  Muduo库是陈硕个人开发的Tcp网络编程库,支持Reactor模型.本 ...

  8. [转载]Object-C 声明属性为什么用下划线,代码规范和编程风格_s芃成_新浪博客...

    原文地址:Object-C 声明属性为什么用下划线,代码规范和编程风格 作者:贞娃儿 在阅读和书写关于iPhone编程的代码的时候,发现有很多这样的情况: 看到很多源代码里面,使用前面带下划线变量,然 ...

  9. Java黑皮书课后题第10章:**10.7(游戏:ATM机)使用编程练习题9.7中创建的Account类来模拟一台ATM级

    **10.7(游戏:ATM机)使用编程练习题9.7中创建的Account类来模拟一台ATM级 题目 程序 代码 Test7.java Test7_Account.java 运行示例 题目 程序 Tes ...

最新文章

  1. 免费创办网站_足够好的工程来创办一家互联网公司
  2. Sublime Text保存文件时自动去掉行末空格
  3. 微软私有云分享(R2)26配置基线与更新
  4. linux运行raxml,RAxML安装
  5. 详解JavaScript数组(一)
  6. 编写 Debugging Tools for Windows 扩展,第 3 部分:客户端和回调 (windbg 插件 扩展)
  7. python读文本文件的过程是怎样的_读写文本文件的步骤_Python读写txt文本文件的操作方法全解析...
  8. r语言 小树转化百分数_“小树”机器人1.0新品发布会
  9. 【交换机】MAC-VLAN的功能作用是什么,如何设置
  10. 北京热风文化传媒有限公司 公司介绍
  11. 关于Struts2中的ognl-2.6.11.jar和ognl-2.7.3.jar解决思路
  12. congatec AG acquires Real-Time Systems GmbH
  13. 作为90后迈向成为一个优秀的男人系列之二
  14. 深度学习2.0-36.循环神经网络RNN-时间序列表示方法
  15. activiti 源码笔记之startProcess
  16. 模拟电子技术基础 思维导图
  17. sitemesh应用
  18. 删除表记录(delete from where )
  19. win7系统域服务器,win7安装域服务器
  20. Scrapy爬虫入门教程十 Feed exports(导出文件)

热门文章

  1. Go Web 编程--如何确保Cookie数据的安全传输
  2. Laravel核心解读 -- Request
  3. php 英文引号转义,如何用引号转义php exec()命令
  4. 单链表实现反转的三种方法
  5. Eureka服务注册源码分析
  6. pandas切片操作
  7. nodejs通过响应回写的方式渲染页面资源
  8. Redis系统管理相关指令简介
  9. Day9-HTML body属性
  10. (需要大神,请求解决,遇见runtime error 错误)poj 1009 java