Bonsoir,

J'ai un petit soucis avec la mise en place de tags.

J'ai deux tables en bdd :
tags : champs => id,tag
poststags : champs => id,id_tag,id_post

J'ai deux tableau array
Le 1er $cache_tags contenant les tags existant en bdd
Le 2eme $post_tags contenant les tags post dans le formulaire.

exemple : $cache_tags = array('0'=>'test','1'=>'azerty');
exemple : $post_tags = array('0'=>'poiuyt','1'=>'azerty');

Je voudrais vérifié si la valeur dans $post_tags existe dans le array $cache_tags si oui $id_tag = $cache_key et j'ajoute dans la table poststags
Sinon je cree l'enregistrement en bdd dans la table tags et $id_tags sera égale à last_insert_id et j'ajoute dans la table poststags

//je parcours le tbl $post_tags
foreach ($post_tags as $var_tag) {
    //je parcours le tbl $cache_tags
    foreach ($cache_tags as $cache_key => $ch_tag) {
        //si dans le tbl $cache_tags $var_tag existe
        if (in_array($var_tag,$cache_tags)) {
            //je recup la cle et l'initialise dans $id_tag
            $id_tag = $cache_key;             
        } else {
            //sinon je cree un enregistrement dans la table tags
            $this->Tag->save(array('tag' => $var_tag));
            $id_tag = $this->Tag->id;           
        } 
        //j'ajoute les id dans la table poststags
        $this->Poststag->save(array('id_tag'=>$id_tag,'id_post'=>$d'id']));
    }
}

J'ajoute mon 1er article aucun soucis poiuyt est bien cree dans la table tags et les id de poiuyt et azerty vont bien dans poststags
Mais quand je cree de nouveau un article la il me cree a chaque fois un enregistrement pour chaque ligne contenu dans $cache_tags et $posts_tags

exemple :

id  id_tag  id_post
1   4   89
2   5   89
3   1   90
4   5   90
5   4   90
6   6   90
7   7   90
8   8   90

alors que $posts_tags ne contient que 2 tags il m'ajoute tout.

Alors est ce que j'ai fait une erreur de syntaxe ou autre je comprends pas je retourne le prob dans tout les sens sans trouvé une solution !

2 réponses


Met des echo un peu partout pour voir comment a se passe dans tes 2 foreach

Pourquoi ne pas utiliser les fonctions sur les array genre array_diff etc..?