首页 > 解决方案 > 只有我的数组的最后一个值返回给我

问题描述

在我的学习项目结束时,我决定在过滤器上做一个小电子商务问题。我在单击复选框时使用 ajax 请求,这将转到我的控制器,该控制器调用我的 Model 类的方法,但问题是如果数组$ _POST ['brands']有几个元素,那么只有最后一个返回给我?我想我有一天看到如果同一个变量在一个 url 中,那么最后一个值将返回给我是为了安全,但我该怎么办?我已经在那里太久了..终于绝望了。请帮帮我... :')

-------------- FROM ---- thx

  init_brands(val, categorie){
        console.log(val);
        if(this.brands.indexOf(val) != -1){
            this.brands.pop(val)
            console.log(this.brands)
        }else{
            this.brands.push(val)
            console.log(this.brands)
        }

        if(this.brands.length === 0){
            $.post({
                url : "./menu/"+ categorie, 
            })
        }else{   
            $.post({
                url : "./menu/"+ categorie, 
                data: { 
                    "brands" : this.brands
                }
            })
        }
    }
/* CONTROLLER PHP */

public function control_articles_filter(){
      if(isset($_POST['brands']) && !empty($_POST['brands'])){
          $res = Articles::return_articles_by_categories_and_brands($_GET['a'], $_POST['brands']);
                return $res;
      }else{
          $_POST['brands'] = 0;
          $res = Articles::return_articles_by_categorie($_GET['a']);
          return $res;
      }
}

/* MODEL PHP */

public function return_articles_by_categories_and_brands($categorie,$brands){
            $db = ModelArticles::connect_db_articles();
            $sql = "SELECT marque FROM articles WHERE categorie_article=? AND marque IN (";
            $params = [];
            if(count($brands) > 12){
                header("Location : ./");
            }else{
                foreach($brands as $brand){
                    $params[] = '?';
                    $binds[] = $brand;
                }
                $req = $db->prepare($sql . join(',', $params) . ')');
                echo "<- prepare <br>" , var_dump($req);
                $req->bindParam(1, $categorie);
                $i = 1;
                foreach($binds as $bind){
                    $req->bindParam(++$i, $bind);
                    echo "<br>";
                    var_dump($bind);
                    echo "<- bind <br>"; 
                }
                $req->execute();
                echo "var_dump() of my fetchAll() <br>";
                return var_dump($req->fetchAll());
            }
        }
<form action="/" method="POST">
    <?php $i = 0; ?>
    <?php foreach ($brands as $brand): ?>
        <input type="checkbox" onclick="filter.init_brands('<?= $brand['marque'] ?>', '<?= $_GET['a'] ?>')" >
        <p class="is-inline is-size-7"><?= $brand['marque'] ?></p>
    <?php endforeach; ?>
</form>

    }

请求有效载荷:

brands%5B%5D=arai&brands%5B%5D=bell

回复 :

<- prepare var_dump ()
object (PDOStatement) # 2 (1) {["queryString"] => string (73) "SELECT mark FROM articles WHERE categorie_article =? AND mark IN (?,?)"}

string (4) "arai" <- bind
string (4) "bell" <- bind

var_dump () of my fetchAll ()
array (2) {[0] => array (2) {["brand"] => string (4) "bell" [0] => string (4) "bell"} [1] => array (2 ) {["brand"] => string (4) "bell" [0] => string (4) "bell"}}
image_icon

因为考虑到的最后一个值是 bell,所以我从我的 bdd 中获得了 bell 品牌的两件商品,但没有 arai ...

--------------------------- ///

标签: php

解决方案


推荐阅读