上节课使用PHP和HTML代码完成了一个学生分数信息查询一览网页。 这节课来学习将数据存放到服务器的文本文件中,然后新增一个新建页面可以生成这些数据。 保持检索条件输入值 先来解决上节课的2个遗留问题: 1.页面初始化时没有数据,表头的宽度不对。 2.输入的查询条件在点击查询按钮之后不能记住,比如,选择了科目,点击查询之后,不能看到刚刚选择的是哪些科目,这样条件和结果就匹配不上。 第一个问题比较简单,只需要给表头的那行增加上设置宽度的CSS样式就可以了。 studentlist.php修改如下: 刷新网页: 第二个问题的解决办法:在<input type="text" name="studentname"/>这里增加一个 value="<?php echo $studentname;?>"的属性值,然后在通过$_POST读取到用户输入的值之后,将值保存到变量$studentname里面,就可以实现点击查询按钮之后,可以保持上次用户输入的检索条件的值了。 studentlist_do.php修改如下: studentlist.php修改如下: 刷新网页,输入检索条件: 点击查询按钮: 可以看到,所有的输入的查询条件数据都保持住了。 将数据存放在文件当中读取返回 来看一下检索的逻辑,目前还仅仅是一个最简单的根据姓名不同返回不同数据,这离真正的数据查询还很远。 首先,数据的存储肯定不能直接在代码里面写成固定的,肯定要保存在某个地方。那么接下来,就来实现将这些数据存储到文件当中去。然后做一个新建学生分数信息的页面,可以将用户输入的信息保存在这个文件中,然后一览查询页面就从这个文件中把数据读取出来,基本实现一个动态数据的管理功能。 先来将数据复制保存到一个文本文件studentdatas.txt中。 创建一个文本文件,将数据按照一行一个数据记录,字段之间用逗号分隔的形式输入。 分数信息调整一下,方便后面的检索条件查询。 studentdatas.txt修改如下: 然后修改php文件,将固定的数据定义修改为从这个文本文件读取数据。 读取的时候,注意进行字符串分割操作并设置到相应的键值上。 studentlist_do.php修改如下: 刷新网页,输入检索条件姓名为b: 点击检索按钮: 可以看到,显示的数据是文本文件中保存的值。 通过这样的方式,实现了程序逻辑和数据存储的分离,如果要修改显示数据,就很方便了,只需要改数据存储文件就好了,不需要修改程序逻辑了。 编写一个新建学生分数信息的页面 加下来,编写一个新建学生分数信息的页面,收集用户输入的信息,并追加保存到数据文本文件当中。 页面的输入控件的样式可以参考3-4这一节的样式。 新建2个文件studentcreate.php和studentcreate_do.php。 studentcreate.php修改如下: student.css修改如下: studentcreate_do.php修改如下: 为了写入数据逻辑正确,在studentdatas.txt最后增加一个空行: 为了不在查询页面出现查询出空行数据,修改studentlist_do.php: 将此文件部署到本地Web服务器目录下,注意修改studentdatas.txt的文件权限为全部可以读写: 打开浏览器访问此文件url: 然后每个项目都输入相应的的数据: 点击保存按钮: 可以看到网页显示保存好了,然后到服务器后台查看数据文件: 可以看到数据已经被添加到文本文件当中了。 然后到一览网页中,在姓名检索条件输入a,点击查询: 可以看到多出来了一条刚刚创建好的数据记录。 将新建网页链接到一览页面当中 然后修改一览页面,增加一个“新建学生分数信息”的按钮,点击按钮后新弹出一个Tab浏览器窗口显示新建页面。 studentlist.php修改如下: 刷新一览页面: 点击按钮之后: 可以看到通过这种方式将2个功能页面链接起来了。 修改查询逻辑根据条件进行筛选 之前的查询逻辑太简单,需要修改得更真实一些,可以根据输入的姓名进行模糊查询,也就是只要姓名包含了输入的文字则都显示出来,完全不包含则不显示。 例如姓名检索条件输入“张”,则将“张三丰”和“张无忌”给显示出来,其它人不显示。 修改查询逻辑,读取所有的学生记录信息,进行遍历,然后判断姓名是否包含搜索条件的字符串,如果包含则返回此条记录信息。 studentlist_do.php修改如下: 刷新一览网页,姓名输入“张”,点击查询: 利用新增页面,添加一条数据姓名为“张无忌”: 回到一览网页,姓名输入“张”,点击查询: 可以看到,正确的数据被检索出来了。 姓名检索条件修改为“段”,点击查询: 可以看到,正确的数据被检索出来了。 删除姓名检索条件的值,点击查询: 可以看到如果不输入条件,则默认全部数据检索出来。 完成其它查询条件 参照上面的方式,完成其它的检索条件。 性别的判断比较容易,直接等于男或者女即可,如果是全部,则不需要比较全部出来。 分数段的判断可以对分数进行判断即可。 科目的判断可以直接等于科目名称即可。 注意如果有多个条件复合查询的时候,多个条件之间是AND的关系,也就是要同时满足这些条件的数据才能显示。 那么可以先完成1个条件,筛选出的数据作为第2个条件的数据源,后续条件以此类推。 studentlist_do.php修改如下: 刷新网页,性别选择“女”,点击查询: 可以看到,符合条件的数据显示出来了。 性别选择“全部”,分数段选择“75-90”,点击查询: 可以看到,符合条件的数据显示出来了。 性别选择“全部”,分数段选择“全部”,科目选择“语文”和“音乐”,点击查询: 可以看到,符合条件的数据显示出来了。 姓名输入“张”,性别选择“全部”,分数段选择“全部”,科目选择“数学”,点击查询: 可以看到复合条件查询也是正确的了,张无忌的科目不是数学,所以被过滤掉了。 自己新建更多的学生记录信息,然后测试更多的条件组合情况,看看是否都正确。