Problème au niveau d'un IF dans un foreach

Résolu
arcadenaker Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   -  
arcadenaker Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je suis en train de faire un if dans un foreach mais le problème est que il fait une requete pour chaque valeur qui prend en compte comme n'ayant pas la valeur de $compte_view.
code

foreach($data as $value){  
    var_dump($value['compte_view']);
      if($value != false){
        if($value['compte_view'] != $compte_view){  //c’est de ce if que je parle
          try{
          $me = $db->prepare("INSERT INTO view_articles(id_article, compte_view) VALUES(:id_article, :compte_view)");
          $me->execute(['id_article' => $id_article, 'compte_view' => $compte_view]);
          }catch(Exception $e){
          echo " Erreur ! ".$e->getMessage();
          echo "Erreur sur la requete '$me'" ;
          }
        }
      }
    }


Ce que je voudrait c'est qu'il verifie si il y a une fois $compte_view dans $value pour pas qu'il fasse plusieures requetes.
Merci pour vos idées d'avance.

1 réponse

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour
Don == au lieu de != dans ton if non ?
0
arcadenaker Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   1
 
Oui mais cela fais l’inverse de ce que je veux faire, il faudrait trouver un moyen pour pas qu’il fasse pas la requete à chaque fois
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
On reprendre depuis le début.....car j'ai l'impression que ta façon de faire n'est pas la meilleur méthode...
- D'où vient $data ?
- D'où vient $compte_view ?
- Dans quel cas l'INSERT doit il être fait ?

Donne nous le code "complet" au lieu de juste quelques lignes....
Et essaye de formuler "clairement" ce que tu souhaites obtenir.

Merci.
0
arcadenaker Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   1
 
Bien,
- Le $data vient d’un fetchall d’un SELECT pour prendre tout les comptes dans la bdd pour le foreach.
- $compte_view est une session (du pseudo de la personne qui est connectée)
- L’insert doit être fait si $compte_view est égal à une des valeures dans $value dans le foreach sinon il ne doit faire rien. Sauf que le problème c’est que à chaque fois que $compte_view n’est pas égal à $value, il fait une requete pour chaque élément du tableau de celui-ci mais moi j’aimerais éviter ça.
Merci pour vos idées.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > arcadenaker Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
 
Qu'est-ce que tu n'as pas compris dans la phrase
Donne nous le code "complet"
??

Ce que je veux voir c'est TOUTES les lignes de code de cette page.
Y compris la requête qui te sert à créer ce $data ...
Car si ton but est de n'avoir que la (ou les ) lignes correspondantes à la variable $compte_view ... nulle boucle ne sera nécessaire.... un simple WHERE dans ta requête suffira !

Il nous faut également le nom des tables et leur structure... (et la relation entre les tables si il y en a... se fait entre quels champs de ces tables )

Précise nous également dans quel but tu cherches à faire cet insertion....
0
arcadenaker Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   1
 
Oh pardon, bon voici mon code:

    $compte_view = $_SESSION['pseudo'];
    $re = $db->prepare("SELECT compte_view FROM view_articles WHERE id_article = ?");
    $re->execute([$id_article]);
    $data_re = $re->fetchAll();
    foreach($data_re as $value){  
      if($value != false){
        if($value['compte_view'] != $compte_view){  // IF que je parlais tout à l'heure
          try{
          $se = $db->prepare("INSERT INTO view_articles(id_article, compte_view) VALUES(:id_article, :compte_view)");
          $se->execute(['id_article' => $id_article, 'compte_view' => $compte_view]);
          }catch(Exception $e){
          echo " Erreur ! ".$e->getMessage();
          echo "Erreur sur la requete '$se'" ;
          }
        }
      }
    }


Je cherche a faire un système de vue donc si quelqu'un regarde un de mes article sur mon site, la vue vienne une fois et que si la personne régénère la page cela ne fasse rien.

TABLES:

0