首页 > 解决方案 > 如何使用 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 设置和显示正确,它也会显示所有产品。

谢谢大家。

标签: phphtmljsongete-commerce

解决方案


如果我把你的代码变成伪代码,它看起来像这样。

如果我们有以下情况: a genid, cat
and the genidis 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_dumpprint_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>

推荐阅读