php - 如何使用 GET 方法使用 php 创建电子商务过滤器
问题描述
我知道有更好的方法可以做到这一点,但我真的需要用 PHP 创建一个多参数过滤器,以便从 json 过滤项目。
类别按性别、项目类型、颜色等分隔...我希望能够选择多个类别,如果仅将性别设置为显示所有产品,则使用 $_GET 方法调用它们并能够使用过滤IF。
问题是我的业余编码技能没有多大帮助,而且我也不确定没有 AJAX 是否有更好的方法来做到这一点。
这是我的过滤器的一部分:
<ul class="category-menu" name="categoria">
<li><a href="page.php?genid=<?php echo $genid;?>&cat=remeras&col=<?php echo ($_GET["col"]);?>&mar=<?php echo ($_GET["mar"]);?>" name="campera" >Remeras</a></li>
<li><a href="page.php?genid=<?php echo $genid;?>&cat=camperas&col=<?php echo $col;?>&mar=<?php echo $mar;?>" name="campera">Camperas</a></li>
<li><a href="page.php?genid=<?php echo $genid;?>&cat=pantalones&col=<?php echo $col;?>&mar=<?php echo $mar;?>" name="pantalones">Pantalones</a></li>
<li><a href="page.php?genid=<?php echo $genid;?>&cat=shorts&col=<?php echo $col;?>&mar=<?php echo $mar;?>" name="short">Shorts</a></li>
<li><a href="page.php?genid=<?php echo $genid;?>&cat=vestidos&col=<?php echo $col;?>&mar=<?php echo $mar;?>" name="vestido">Vestidos</a></li>
</ul>
我的 ifs 看起来像这样:
<?php
}elseif ( !empty($_GET["genid"]) && !empty($_GET["cat"]) && $datosArray[$i]["sex_id"] == $_GET["genid"] && $datosArray[$i]["categoria"] == $_GET["cat"]){
?>
<!-- Individual Product full Code -->
...
<!-- /Individual Product full Code -->
<?php
}elseif (!empty($_GET["genid"]) && $datosArray[$i]["sex_id"] == $_GET["genid"]){
?>
<!-- Individual Product full Code -->
...
<!-- /Individual Product full Code -->
<?php
}} ?>
现在,它识别的唯一“过滤器”是性别过滤器,即使 $_GET 设置和显示正确,它也会显示所有产品。
谢谢大家。
解决方案
如果我把你的代码变成伪代码,它看起来像这样。
如果我们有以下情况: a genid, cat
and the genid
is the same as $datosArray[$i]["sex_id"]
and the datosArray[$i]["categoria"]
is the same as$_GET["cat"]
然后显示产品
否则,如果我们有一个genid
和那个genid
相同的$datosArray[$i]["sex_id"]
则显示产品
如果那是您打算发生的事情,那么您可能想要var_dump
或print_r
所有变量,并确保没有意外发生。
你谈到想要使用多个类别。我现在可以想到两种方法。第一个是有一个逗号分隔的类别列表href="...cat=pantelones,vestidos,shorts
,然后将其转换为一个数组$cats = explode(',', $_GET['cat'])
。然后,您将使用in_array('pantelones', $cats)
.
第二种是创建一个HTML表单,使用一个复选框来选择多个类别,然后如果你只是在复选框名称的末尾加上括号,那么当用户提交表单时,PHP会自动转换$_GET['cat' ] 到一个数组中查看这个 SO question 以了解有关我的意思的更多信息。
我会做更多这样的事情。
function display_product($productData){
/* Add code here to display your product */
}
foreach($datosArray as $productData){
/* Always display the product if the gender ID was not set */
if ( empty($productData['genid']) ){
display_product($productData);
}
/* Otherwise only display the product if it matches what is in $_GET[] */
if (
isset($_GET["genid"]) && $_GET["genid"] == $productData['sex_id']
&& isset($_GET["cat"]) && $_GET["cat"] == $productData['categoria']
&& isset($_GET["mar"]) && $_GET["mar"] == $productData['Marca']
){
display_product($productData);
}
}
我知道你已经说过你知道有更好的过滤数据的方法,我只想补充一点,一旦需要添加/编辑/删除数据,数据库就会变得非常有用。他们还可以更快地过滤掉您想要的数据。
您引入了 XSS 漏洞。您应该始终在输出变量之前对其进行转义,就像这样。(我喜欢使用<?=
这只是 . 的简写<?php echo
。)
<ul class="category-menu" name="categoria">
<li><a href="page.php?genid=<?= (int)$genid ?>&cat=remeras&col=<?= htmlspecialchars($_GET["col"]) ?>&mar=<?= htmlspecialchars($_GET["mar"]) ?>" name="campera" >Remeras</a></li>
<li><a href="page.php?genid=<?= (int)$genid ?>&cat=camperas&col=<?= htmlspecialchars($col) ?>&mar=<?= htmlspecialchars($mar) ?>" name="campera">Camperas</a></li>
<li><a href="page.php?genid=<?= (int)$genid ?>&cat=pantalones&col=<?= htmlspecialchars($col) ?>&mar=<?= htmlspecialchars($mar) ?>" name="pantalones">Pantalones</a></li>
<li><a href="page.php?genid=<?= (int)$genid ?>&cat=shorts&col=<?= htmlspecialchars($col) ?>&mar=<?= htmlspecialchars($mar) ?>" name="short">Shorts</a></li>
<li><a href="page.php?genid=<?= (int)$genid ?>&cat=vestidos&col=<?= htmlspecialchars($col) ?>&mar=<?= htmlspecialchars($mar) ?>" name="vestido">Vestidos</a></li>
</ul>
推荐阅读
- php - 同一个 WooCommerce 钩子必须始终使用相同的参数集吗?
- python - Pygame:一种在显示大量对象之前快速查找屏幕内容的方法
- java - 比较java中的日期。搜索今天,明天
- anaconda - anaconda 中的 Spyder 比 x2go 慢
- android - 我的自定义数组列表在 android Kotlin 中没有正确排序
- php - PHP Laravel GraphQL 查询声明不兼容问题
- c++ - 使用 extern const 用函数初始化 const
- gnuplot - 一张图四张图
- postgresql - 在参数周围转义单引号时出错
- java - 线程是代码本身还是某个实体?