Bonjour à tous, j'essaye de faire un système de produit, j'ai gérer les stocks comme il se doit, la quantité, l'affichage hors-ligne/en ligne selon le stock et le choix utilisateur etc... enfin bref un truc assez aboutis tout de même.
Cependant actuellement pour un produit je ne peux rentrer qu'une seule taille (vêtements) j'ai donc voulu faire une rangée de checkbox avec pour nom length] soit le nom de mon champ. Je récupère bien les données que je veux mais utilisant le MVC crée avec le tutoriel créer un site de A à Z auquel j'ai rajouté des fonctions bien utiles pour un e-commerce, le résultat sera retrouve donc sous la forme d'un tableau normal puisqu'on fait un fetchAll avec PDO et pour chaque champ on récupère la valeur qui doit être une chaîne de caractère.
Cependant comme vous vous en doutez la rangée de checkbox crée elle même un tableau ce qui a pour effet que le champ length est remplis d'un tableau contenant toutes les tailles cochées.

Donc lors de l'enregistrement j'ai une erreur au niveau du execute (normal puisqu'il essaye de faire une conversion d'un tableau en chaîne) pour palier à ce problème j'ai pensé à modifier la fonction save du coup et vérifier si le champ est un tableau, si c'est le cas je crée une nouvelle requête avec chaque valeur du tableau et la valeur de tout les autres champs.
En clair je voudrai pouvoir définir le nom,le prix etc du produit... puis sélectionner les tailles du produit et pour chaque taille différente je crée une nouvelle entrée donc j'aurai admettons 10 fois le même produit dans ma bdd mais avec des tailles différentes.
Pourquoi ? Pour tout simplement gérer plus simplement le stock pour chaque produit selon la taille du produit.
Sinon il faudrait que je fasse une jointure à une table tailles par exemple mais je ne sais pas comment procéder...

Du coup j'ai pensé faire un truc du genre:

/**
     * Enregistre les résultats dans la base de donnée
     **/
     public function save($data){
       $key = $this->primaryKey;
       $fields = array();
       $d = array();

       foreach ($data as $k=>$v) {
        if(is_array($k)){
          foreach($k as $f=>$v){
            $fields] = "$k=:$k";
             $d":$k"] = $v;          
            }
        }else{
        if($k!=$this->primaryKey){
           $fields] = "$k=:$k";
           $d":$k"] = $v;
          }elseif(!empty($v)){
              $d":$k"] = $v;
          }
        }
       }
       if(isset($data->$key) && !empty($data->$key)){
        $sql = 'UPDATE '.$this->table.' SET '.implode(',',$fields).' WHERE '.$key.'=:'.$key;
           $this->id = $data->$key;
           $action ='update';
       } else{
        $sql = 'INSERT INTO '.$this->table.' SET '.implode(',',$fields);
        $action = 'insert';
       }
       $pre = $this->db->prepare($sql);
       $pre->execute($d);
       if($action == 'insert'){
          $this->id = $this->db->lastInsertId();
       }
      }

Suis-je sur la bonne voie ? Si oui quelqu'un pourrait m'indiquer comment recrée une toute nouvelle entrée si c'est un tableau, en gros recrée exactement les mêmes données mais avec les tailles sélectionner et insérer les données dans la bdd.

Merci d'avance.

2 réponses


Xtr3me
Auteur
Réponse acceptée

J'ai finalement réussi j'avais laissé ça en suspend j'ai repris ça assez simplement.
J'ai finalement crée plusieurs objets contenant chacun plusieurs informations (la taille,le stock,l'id de la taille et l'id du produit) que je stock dans une autre table et je fait un unset du tableau des tailles dans la requête ainsi que le stock c'était assez galère parce qu'il fallait aussi gérer la mise à jour etc... mais finalement j'ai réussi.

Xtr3me
Auteur

Quelqu'un n'a pas juste une petite suggestion ? Je me suis pas encore assez penché sur le problème par manque de temps pour le moment mais si quelqu'un à quelque chose à proposer qu'il n'hésite pas tout aide est le bienvenue ^^ .