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

Résolu/Fermé
arcadenaker Messages postés 61 Date d'inscription dimanche 30 juillet 2017 Statut Membre Dernière intervention 22 avril 2019 - Modifié le 3 juin 2018 à 10:10
arcadenaker Messages postés 61 Date d'inscription dimanche 30 juillet 2017 Statut Membre Dernière intervention 22 avril 2019 - 3 juin 2018 à 14:38
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 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
3 juin 2018 à 10:12
Bonjour
Don == au lieu de != dans ton if non ?
0
arcadenaker Messages postés 61 Date d'inscription dimanche 30 juillet 2017 Statut Membre Dernière intervention 22 avril 2019 1
3 juin 2018 à 10:23
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 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
3 juin 2018 à 10:30
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 dimanche 30 juillet 2017 Statut Membre Dernière intervention 22 avril 2019 1
Modifié le 3 juin 2018 à 11:28
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 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > arcadenaker Messages postés 61 Date d'inscription dimanche 30 juillet 2017 Statut Membre Dernière intervention 22 avril 2019
3 juin 2018 à 12:29
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 dimanche 30 juillet 2017 Statut Membre Dernière intervention 22 avril 2019 1
Modifié le 3 juin 2018 à 13:17
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