在我的项目中有一些记录的列表。用户可以通过项目名称进行查询。搜索后,用户可以编辑特定的记录。编辑后,当用户点击更新按钮,现在它是重定向到列表页面,但搜索结果不见了,所有的记录都显示。
更新后,我想只显示搜索的记录,而不是全部。如何获得搜索键回来?如果有其他更好的方法,我不想使用session。
我正在使用codeigniter。
例如:
有一个包含10条记录的列表。用户按"ABC"搜索记录。结果来像5个记录一样有"ABC"项目来。然后用户编辑一条记录并更新它。更新后,我想只显示搜索键"ABC"的5条记录。现在它正在显示10(所有)记录,因为我在没有搜索键的列表页面上重定向。我不知道该怎么做。(
我个人会做的是在我的列表页面上这样的东西,我将有一个表单,将通过GET方法提交到搜索功能。这样,我就可以把所有的搜索参数放在URL中,我的URL就像这样:
exampledomain.com/users?name=steve&age=23
现在,对于编辑页面,我将生成一个带有特殊参数的链接,例如:lastpage,其值将是当前搜索参数的某种编码形式。用户进入编辑页面时URL是这样的
exampledomain.com/users/edit/34?lastpage=erasc1235234safvdadsrgdfgbvcdfgrt435
编辑功能完成时。我会选择这个lastpage参数形式$_GET['lastpage']
(或在CI中,您可以使用$this->input->get('lastpage')
)来获得lastpage的编码值,并对其进行解码以获得所有以前的URL搜索参数。并再次将用户重定向到搜索功能,并将搜索参数附加到URL。
我解决了将视图划分为两种类型的相同问题
1)显示所有记录和
的正常视图2)另一个视图,显示最近搜索的键的所有记录。
要实现这一点,你需要将搜索记录的id和记录的位置存储在临时DB表中,如TableforSearch,并将搜索键存储在会话中,如'ABC'。
在搜索键'ABC'时,找到与键匹配的记录的id,并将其与搜索键和UserId一起保存到Table TableforSearch中。
然后使用会话来获取键,并在会话中使用键搜索表以获取具有搜索键的所有id的行。对于错误处理,请查看该表中存在的id是否未被删除。
最后是显示搜索项显示第二页,对于其他显示正常的第一页
以便获得已键入的关键字。你有三个选项
- 将关键字保存为GET变量
- 将关键字保存为隐藏输入
- 将关键字保存为SESSION变量
- 将关键字保存为cookivariable
既然你不能选择选项3和4。您唯一的选择是创建一个GET变量。只需添加domain.com/controller/function?keyword=ABC
并将其作为rldecode($_GET['keyword']);
在控制器上或创建隐藏输入,您可以保存您的值并获取该值
一种方法是,当用户在列表页面中搜索任何东西时(我希望您的列表页面和搜索页面是相同的),而不是每次在新的搜索中,将搜索关键字存储在localStorage
中,当用户更新记录时,而不是从localStorage
重定向到列表页面以及您的搜索关键字。(建议只在列表页面和搜索页面相同的情况下使用。也就是说,你处理搜索与一些参数传递到列表页)
将搜索条件保存在会话变量$_SESSION['mysearch'] = 'ABC'
中,并在重定向header("Location: /mysearch.php?criteria=" . urlencode($_SESSION['mysearch']))
时使用它。然后在你的"mysearch.php"中,你将ureldecode($_GET['criteria'])
,再次运行搜索并显示结果。