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等来解决它。已经读了尽可能多的书,但没有成功。
非常感谢。
答案 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) . "'><<</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。
关于表单的很酷的事情是,除非用户与之交互,否则复选框和提交之类的输入类型将不会发送到服务器。