分页/数组和查询

时间:2018-09-04 17:46:06

标签: php arrays pagination

PHP和Mysql的新手,正在尝试帮助需要一个带有复选框的表单提交的项目的儿子,该复选框查询名为“ item_id”的数据库表中包含增量整数的特定列。

我们已经成功创建了一个数组,其中包含名为“ category”的复选框,并使用如下内爆:

$categories = implode(",",$_GET['category']);

我们可以使用此查询数据库

$data = mysql_query("SELECT * FROM clients 
                     WHERE upper($field) LIKE'%$find%' AND item_id IN ($categories)
                     ORDER BY item_updated DESC LIMIT $offset, $rowsperpage;");

这很好用,我们可以回显看起来不错的输出,并根据选择的检查箱包含多个类别。

我们也有一个count查询,用于生成行计数并生成一些分页,这些分页是通过同样适用的教程脚本实现的。

我们遇到的问题是,如果所有记录都从数据库中返回,则分页链接可以正常工作,但是为了对来自内爆的多个类别的搜索结果进行分页,我从echo'd调用了脚本<a href=再次与所有适当的搜索字符串链接,但是当我尝试包括类别时,它们未被识别,因为我以为我试图使一个不存在的数组内爆。

即,如果我用于特定分页链接的代码看起来像

echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=1&find=$find&category=$categories'><<</a> "; 

例如,链接的结果类别部分看起来像category = 5,2,当单击时,不返回任何结果。我以为这是因为我要内爆5,2而不是表单提交的数组。

如果有人可以阐明我需要做些什么才能使它正常工作,将不胜感激。不知道我是否需要其他没有爆破的字符串开始或使用arrayslice等来解决它。已经读了尽可能多的书,但没有成功。

非常感谢。

1 个答案:

答案 0 :(得分:0)

从构建超链接的方式来看,$ _GET ['category']似乎只是一个字符串。

如果要将类别显示为&category [] = 5&category [] = 2,您将以数组的形式收到它。

但是,在您的情况下,最简单的破解方法是完全使用内爆。因为$ _GET ['category']已经返回“ 5,2”作为字符串。 (请考虑urlencode

现在可能要消耗太多了,但也可以考虑使用prepared statements


编辑: 根据您的评论,您似乎想要使用类别数组来维护。

我将为您提供两种实现方法。


第一种方法考虑了对超链接的使用:

$categories = [];
foreach($_GET['category'] as $cat)
{
    array_push($categories, 'category[]=' + urlencode($cat));
}

echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=1&find=$find&" 
. implode('&',$categories) . "'>&lt;&lt;</a> "; 

对于那些问“为什么不使用http_build_query?”的人:一个关联数组只能出现一个特定键。


第二种方法是使用method="get"action="{$_SERVER['PHP_SELF']}"

的形式

然后,您会将所有类别作为隐藏的输入内容进行回音

$categories = [];
foreach($_GET['category'] as $cat)
{
    echo '<input type="hidden" name="category" value="' . htmlentities($cat) . '"/>'
}

,然后有按钮input type="submit" value="1" name="currentpage" 然后,Web浏览器将为您构建URL。 关于表单的很酷的事情是,除非用户与之交互,否则复选框和提交之类的输入类型将不会发送到服务器。