PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 02-03-2020 14:10:02

Mithrandyll
Membre
Inscription : 02-03-2020
Messages : 1

Tableau multi dimensionnel et requête SQL

Bonjour à tous,

Je fais face à un problème un peu complexe,je suis dessus depuis plusieurs jours et je commence à perdre espoir. J

e vais essayer d'être le plus clair possible. J'ai une liste de produit qu'un utilisateur peut parcourir pour en ajouter un ou plusieurs dans un panier. Le problème, c'est que l'exercice impose 2 choses :

- Ne pas utiliser de session

- Faire en sorte que dans la BDD (dans ma table "panier" qui comporte 2 champs : "users_id" et "products"), le produit s'ajoute sur la même ligne, à la suite. En gros, ne pas ajouter une ligne par produit présent dans le panier.

Et la, je bloque complètement. Il faut que je fasse un tableau mutli-dimensionnel qui parcours les produits présent dans le panier et qui peut en ajouter tout en gardant le même index. Je ne sais pas si je suis assez clair ... Je vous poste ce que j'ai déjà fait, je vous remercie d'avance pour votre aide qui est la bienvenue !

Ce que j'ai fais côté controller pour le moment :

$panier = $ordersModel->getUserPanier($user->id);

if(isset($panier->products)){
    $panier = unserialize($panier->products);
}else{
    $panier = [];
}

//$panier = unserialize($panier->products);

// Récupération de la liste des  produits


$products_list = $productModel->findAll();


//Ajout d'un produit pour une commande dans le panier
debug($panier);
if (isset($_POST) && !empty($_POST)) {
    if (isset($_POST["product_add_" . $_POST["product_id"]])) {
        $product = $productModel->read($_POST['product_id']);
        //debug($product);

        $product_add = [$_POST['product_id'] => ["product_qt" => $_POST['qt']]];

        debug($panier);
        AddProductPanier($panier, $product_add);

    }
}

// Affichage du panier de l'utilisateur
if (isset($action) && $action == 'panier') {

    //debug($panier);

}

function AddProductPanier($panier, $product)
{
   //$panier_exist = $ordersModel->getUserPanier($user->id);

    if(is_array($panier) && empty($panier)){

        debug($panier);
        foreach ($product as $k => $v){
            debug($k);
            debug($v);
            array_push($panier, $v);

        }
        debug($panier);
        array_push($panier, $product);
        debug($panier);

        //$panier = serialize($panier);
        //$ordersModel->addPanier($user->id, $panier);

    }else if(is_array($panier) && !empty($panier)){

        // si le produit existe déjà dans le panier
        // alors modifier la valeur
        // sinon push le produit dans le tableau

    }

    if (isset($panier_exist) && !empty($panier_exist)) {
        $panier = $panier_exist->products;
    } else {
        $panier = [];
    }


    debug($panier);
}


Ma requête (côté Model) pour ajouter un produit au panier :

  // Ajouter un produit dans un panier

    public function addPanier($users_id, $products){

        $req = $this->pdo->prepare("INSERT INTO panier(users_id, products) VALUES (?, ?)");
        $req->execute([$users_id, $products]);

    }


Une autre requête pour afficher le panier d'un utilisateur :

    // Afficher le panier d'un utilisateur

    public function getUserPanier($users_id){
        $req = $this->pdo->prepare("SELECT * FROM panier WHERE users_id = ?");
        $req->execute([$users_id]);
        $data = $req->fetch();
        return $data;
    }

Ma table panier comporte deux champs : users_id (ou je récupère l'id de l'utilisateur qui ajoute au panier) et products (qui est de type TEXT, et qui contiendra les produits ajoutés à la suite sur la même ligne)

J'espère avoir été assez clair, merci d'avance pour votre aide, je suis un peu désespéré !

Dernière modification par Mithrandyll (02-03-2020 14:19:22)

Hors ligne

Pied de page des forums