![PHP项目开发全程实录(第4版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/587/24172587/b_24172587.jpg)
1.9 信息检索模块设计
![](https://epubservercos.yuewen.com/614B35/13043251803826006/epubprivate/OEBPS/Images/Figure-P38_6930.jpg?sign=1739054502-y93FmLpJhjtkSjWmfKa1uNol9bIX3pVT-0-592afc8d36a647f9c9d6ad717526a6d3)
视频讲解
1.9.1 信息检索模块概述
信息检索是对已存在于数据库中的数据按条件进行筛选浏览,是查看历史信息和确认数据操作最为快速、有效的办法。信息检索模块主要通过选择信息类型和输入查询关键字模糊查询供求信息资源,并输出查询结果。考虑到供求信息的信息量较大,因此本模块对与查询关键字相匹配的查询结果进行描红,从而方便用户的浏览。信息检索模块的示意图如图1.32所示。
![](https://epubservercos.yuewen.com/614B35/13043251803826006/epubprivate/OEBPS/Images/Figure-P38_40727.jpg?sign=1739054502-In5peEewwTRkQGFOlIKMfK4Ks8bLH14m-0-d2458ff2219c87ab8a2a16cc94ce56fe)
图1.32 信息检索模块的示意图
1.9.2 信息检索模块技术分析
在对数据进行查询后,最终需要将查询结果显示在页面中反馈给浏览者。在PHP中,查询结果的显示方式有很多种,最常用的就是表格显示方式。因为采用这种方式显示的数据条理清晰、简洁明了。
![](https://epubservercos.yuewen.com/614B35/13043251803826006/epubprivate/OEBPS/Images/Figure-P39_7017.jpg?sign=1739054502-cDPdzbRms5OHak88xsBsgeuAz9JJvGCA-0-a2a39f07f74068b9eb3c1150252ec4c5)
图1.33 信息检索模块流程图
在利用表格显示查询结果时,通常是将查询结果保存在结果集中,然后需要使用do…while循环将其查询结果显示出来。需要注意的是,需要先判断查询结果是否为空,只有查询结果不为空时,才可以使用循环语句显示数据。为了使读者更好地理解通过表格显示查询结果,下面给出其实现流程图,如图1.33所示。
考虑到用户不可能全面了解数据表中的数据信息,例如不能确定所要查询信息的内容、查询的主题等,这时就需要使用like进行模糊查询。like关键字需要使用通配符在字符串内查找指定的模式,所以读者需要了解通配符及其含义。通配符的含义如表1.11所示。
表1.11 like关键字中的通配符及说明
![](https://epubservercos.yuewen.com/614B35/13043251803826006/epubprivate/OEBPS/Images/Figure-T39_9368.jpg?sign=1739054502-3vXzOrXcS3Qx9AHcBNvlFMFYwJUQQ6kV-0-e11b711090a9f40fcacbb60af40d0026)
如果想查询包含“女子公寓”的信息,可以使用like运算符配合通配符“%”完成。其SQL语句如下:
select * from tb_info where content like '%女子公寓%';
如果想查找信息类型为“公寓信息”或者内容为“女子公寓”的信息时配合or运算符来使用。其SQL语句如下:
select * from tb_info where type='公寓信息' or content like'%女子公寓%'
本模块实现付费信息与查询关键字相匹配的信息的SQL语句如下:
![](https://epubservercos.yuewen.com/614B35/13043251803826006/epubprivate/OEBPS/Images/Figure-P39_40730.jpg?sign=1739054502-5Fa4k9tzaOQlho2bHxrtF3ZpxtG6iNxM-0-fcd14e9a3516f28e094a7f8d1be5b43b)
本模块实现免费信息与查询关键字相匹配的信息的SQL语句如下:
![](https://epubservercos.yuewen.com/614B35/13043251803826006/epubprivate/OEBPS/Images/Figure-P39_40732.jpg?sign=1739054502-JnsW64sVywzSIgJTH82f6uIy57s8I9Q6-0-85d2aa5bd4ead9f3a16dbc030c469a3d)
注意
当满足数据表中多个字段中的任一字段时,可以使用or运算符将多个条件连接。
另外,由于搜索的内容中文字比较多,为了方便浏览者查找自己所关注的内容信息,所以在搜索引擎中加入了描红功能。描红功能主要用str_ireplace()函数实现,该函数的具体讲解读者可参见本章的1.14.1节。
1.9.3 信息检索模块的实现过程
信息检索模块使用的数据表:tb_info、tb_leaguerinfo
![](https://epubservercos.yuewen.com/614B35/13043251803826006/epubprivate/OEBPS/Images/Figure-P40_9458.jpg?sign=1739054502-69GZQSMUtTgQ3KjnQ2jHyvmKahmnoFKx-0-f88dfed25238cca900587e2b9ad1995e)
图1.34 信息检索页面的运行结果
在开发信息检索模块时,由于该网站含有大量的数据信息,为了方便用户浏览网站信息,需要添加复合条件查询实现搜索功能。在信息检索区的“关键字”文本框中输入欲查询的关键字,在“条件”下拉列表框中选择要搜索的信息类型,然后单击“开始搜索”按钮,对指定条件的记录进行检索并输出结果集到浏览器,同时为了方便浏览者查找自己所关注的内容信息,本模块对查询关键字进行描红。运行结果如图1.34所示。
信息检索页面中所涉及的重要表单元素如表1.12所示。
表1.12 信息检索页面所涉及的重要表单元素
![](https://epubservercos.yuewen.com/614B35/13043251803826006/epubprivate/OEBPS/Images/Figure-T40_9470.jpg?sign=1739054502-HmWVIVQ5Xgt62wbhE4c1t1lt5D6q4I0g-0-55690430678c5a5501d54037a4af86aa)
应用JavaScript脚本自定义一个chkinput()函数,实现对表单提交的信息进行验证。代码如下:
例程07 代码位置:资源包\TM\01\cityinfo\left.php
![](https://epubservercos.yuewen.com/614B35/13043251803826006/epubprivate/OEBPS/Images/Figure-P40_40736.jpg?sign=1739054502-acIsCxepYXJBEXojm9lTgzBfvaBQj0M0-0-bad124a8cdb6e930468795d63ab2f4e5)
将表单信息提交到数据处理页,连接数据库文件,接收表单信息,然后用mysqli_query()函数向服务器发送SQL语句,检索与查询关键字相匹配的信息资源。代码如下:
例程08 代码位置:资源包\TM\01\cityinfo\findinfo.php
![](https://epubservercos.yuewen.com/614B35/13043251803826006/epubprivate/OEBPS/Images/Figure-P41_40739.jpg?sign=1739054502-juyCwZONcXmyX22ScnSx1ghcTiyVx7YK-0-705b8aa058fc90c7e8f3b06d5d448300)
说明
信息检索需要从免费供求信息表tb_info和付费供求信息表tb_leaguerinfo中获取数据,因此需要向MySQL服务器传递两条SQL语句。
用do…while循环语句输出付费信息与查询关键字相匹配的信息资源,并用str_ireplace()函数对查询关键字实现描红功能。代码如下:
例程09 代码位置:资源包\TM\01\cityinfo\findinfo.php
![](https://epubservercos.yuewen.com/614B35/13043251803826006/epubprivate/OEBPS/Images/Figure-P41_40740.jpg?sign=1739054502-hdC521Gb21tC9lOht4UeA5A3ap2ASrKb-0-34e1333326e74c5acb8d3ea25f197245)
说明
免费信息的输出方式与付费信息的基本类似,代码部分略,详见本书附赠资源包。
免费信息的输出方式与付费信息的基本类似,下面给出实现过程的核心代码结构。
例程10 代码位置:资源包\TM\01\cityinfo\findinfo.php
![](https://epubservercos.yuewen.com/614B35/13043251803826006/epubprivate/OEBPS/Images/Figure-P42_40746.jpg?sign=1739054502-z5Nn5BpJtMl4tCgB7pG8mmG5jBwDO3FS-0-376572c7cc17ff3f4809f7ee2ecc52dd)
如果在免费供求信息表和付费供求信息表中没有检索到与查询关键字相匹配的数据,则弹出提示信息。代码如下:
例程11 代码位置:资源包\TM\01\cityinfo\findinfo.php
![](https://epubservercos.yuewen.com/614B35/13043251803826006/epubprivate/OEBPS/Images/Figure-P42_40748.jpg?sign=1739054502-x1zzhpGiQr2cyZ7ITDaQEVVvCAnu0hRT-0-ba5a959ccfdd95497b01e1f6e533e2b6)