Récuperer valeur d'une table

MalonTails Messages postés 90 Statut Membre -  
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour à tous, mon problème est le suivant :

Je souhaite récupérer des valeurs dans la bdd en fonction d'un pseudo. Jusqu'à la pas de problème, cependant j'aimerai les "séparer" afin de pouvoir faire des comparaisons.

Par exemple ici j'ai deux lignes sql avec le même pseudo, dedans je récupère l'entreprise. Mais, quand je fais $req['entreprise'] je récupère bien les agences mais sous la forme suivante :

Agence1Agence2 , or les agences ne font pas parties de la même ligne. Et j'aimerai mettre, par exemple, Agence1 dans une variable et Agence 2 dans une autre.

Désolée si ce n'est pas très claire,

Merci à tous ceux qui pourront m'apporter une aide.

11 réponses

  1. Alvin1614 Messages postés 115 Statut Membre 4
     
    Bonjour,

    Pourrais-tu envoyer ton code ?

    Bien à toi,
    0
  2. MalonTails Messages postés 90 Statut Membre
     
    Bonjour Alvin, merci pour ta réponse

    voici ma requete et le reste :

    
    $req=$bdd->query('SELECT * from membres where pseudo = "'.$_SESSION['pseudo'].'"');
    $req2=$bdd->query('SELECT * from avis where pseudo= "'.$_SESSION['pseudo'].'"');
    foreach ($req as $billet2):
    
    
    
    while ($billet3 = $req2->fetch())
    {
    
      if ($billet2['nbavis']==2){
    
    echo $billet3['entreprise'];
      }
    
    }
    
    
    
    endforeach;
    
    


    Le nom des variables est un peu bidon mais c'est pour les tests, tout ceci n'est que local.

    Il y a donc plusieurs avis d'un même utilisateur sur différentes entreprises.

    0
  3. MalonTails Messages postés 90 Statut Membre
     
    Quand je met sous forme de tableau je vois qu'ils sont tout deux à la même place

    Array ( [0] => Agence1) Array ( [0] => Agence2)

    Moi qui pensait récupérer comme ça
    0
  4. Alvin1614 Messages postés 115 Statut Membre 4
     
    C'est vrai que c'est problématique...

    Disons que je ne comprends pas vraiment pourquoi les deux agences se trouvent sur la même ligne....

    Essaye peut-être comme ça : rajoute à la fin de chaque nom d'entreprise un caractère spécial que personne n'utilise (ex: ¤ ou bien ⨀). Ensuite, dans ton script tu peux utiliser preg_split (https://www.php.net/manual/fr/function.preg-split.php) pour séparer. Ce qui donnerait ceci :
    $lesagences = preg_split("¤", $billet3['entreprise']);


    Ainsi ça te retournera un tableau contenant les agences...

    C'est un peu tordu mais ça peut marcher.

    Bien à toi,
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. MalonTails Messages postés 90 Statut Membre
     
    Merci pour ton aide, j'ai tenté mais plus rien ne s'affiche maintenant, je désespère ahah
    0
    1. Alvin1614 Messages postés 115 Statut Membre 4
       
      Je ne code pas en php... Malheureusement pour toi :D.
      0
      1. MalonTails Messages postés 90 Statut Membre > Alvin1614 Messages postés 115 Statut Membre
         
        Merci quand même pour ton aide
        0
  7. Alvin1614 Messages postés 115 Statut Membre 4
     
    Essaye peut-être comme ça sinon...

    $req=$bdd->query('SELECT * from membres where pseudo = "'.$_SESSION['pseudo'].'"');
    $req2=$bdd->query('SELECT * from avis where pseudo= "'.$_SESSION['pseudo'].'"');
    
    foreach ($req as $billet2) {
    
    while ($billet3 = mysql_fetch_assoc($req2)) {
    
      if ($billet2['nbavis']==2){
    
    echo $billet3['entreprise'];
      
    }}}
    0
  8. Alvin1614 Messages postés 115 Statut Membre 4
     
    Ah attends, j'ai compris...

    C'est normal que ça fasse
    Agence1Agence2
    !

    C'est parce les deux entreprises correspondent aux même critères (2 avis, même pseudo). Quand ça passe dans ta boucle c'est affiché sur ta page.

    Tu veux les mettre dans une variable, tu peux déclarer
    $lesentreprises
    juste avant ton
    foreach
    puis tu mets dans ton
    while
    à la place du
    echo
    :
    array_push($lesentreprises, $billet3['entreprise']);


    Ensuite, tu n'as plus qu'à faire des comparaisons après dans ton code sur la variables
    $lesentreprises
    0
  9. MalonTails Messages postés 90 Statut Membre
     
    Encore merci ! Je viens de tester et dès que je rentre dans le while plus rien ne s'affiche
    0
    1. Alvin1614 Messages postés 115 Statut Membre 4
       
      C'est normal puisqu'il n'y a plus de
      echo
      ...
      0
  10. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour
    Les données sont sur la même ligne car il n'y a pas de retour à la ligne apres le echo...

    Mais ton code n'est pas très clair...
    Pourrais tu nous montrer un dump de tes tables et nous expliquer ce que tu veux afficher
    0
    1. MalonTails Messages postés 90 Statut Membre
       
      Bonjour Jordane,

      En gros l'user à 3 agences d'enregistrées sur son compte & il peut laisser un seul avis sur chacune.

      J'avais donc opté pour ce code :
      if ($billet2['entreprise1'] == $billet3['entreprise']{
      
      // l'user ne peu pas mettre d'avis car il en a déjà mis un 
      }
      else {
      
      // l'user peut laisser un avis car il n'en a jamais mis 
      
      }
      if ($billet2['entreprise2'] == $billet3['entreprise']{
      
      // l'user ne peu pas mettre d'avis car il en a déjà mis un 
      }
      else {
      
      // l'user peut laisser un avis car il n'en a jamais mis 
      
      }
      if ($billet2['entreprise3'] == $billet3['entreprise']{
      
      // l'user ne peu pas mettre d'avis car il en a déjà mis un 
      }
      else {
      
      // l'user peut laisser un avis car il n'en a jamais mis 
      
      }


      Mais le code réagit de façon positive au if et au else

      exemple :

      while ($billet3 = $req2->fetch())
      {
      
         if ($billet2['nbavis']==2){
      
      if ($billet2['entreprise1'] == $billet3['entreprise']){
      
        echo " tu as déjà laissé un avis";
        echo "<br>";
      }
      else 
      {
        echo " tu peux laissé un avis";
      }
      
        }
      }


      ce qui affiche :
      0
  11. Alvin1614 Messages postés 115 Statut Membre 4
     
    Et surtout quelles comparaisons veux-tu faire ?
    0
  12. MalonTails Messages postés 90 Statut Membre
     
    Merci à tous pour votre temps & votre patience.

    En gros l'user à 3 entreprises qu'il a "visité" mais qu'il ne peu commenter qu'une fois.

    De base je voulais faire :

    if ($billet2['entreprise1'] == $billet3['entreprise']{
    
    // l'user ne peu pas mettre d'avis car il en a déjà mis un 
    }
    else {
    
    // l'user peut laisser un avis car il n'en a jamais mis 
    
    }
    if ($billet2['entreprise2'] == $billet3['entreprise']{
    
    // l'user ne peu pas mettre d'avis car il en a déjà mis un 
    }
    else {
    
    // l'user peut laisser un avis car il n'en a jamais mis 
    
    }
    if ($billet2['entreprise3'] == $billet3['entreprise']{
    
    // l'user ne peu pas mettre d'avis car il en a déjà mis un 
    }
    else {
    
    // l'user peut laisser un avis car il n'en a jamais mis 
    
    }
    
    


    Mais, comme je récupère les valeurs sans séparation les conditions ne fonctionnent pas.

    Mon code réagit comme si les deux conditions étaient respectées : la condition que c'est égale mais également la condition que c'est différent.
    0
    1. MalonTails Messages postés 90 Statut Membre
       
      En gros l'user à 3 agences d'enregistrées sur son compte & il peut laisser un seul avis sur chacune.

      J'avais donc opté pour ce code :
      if ($billet2['entreprise1'] == $billet3['entreprise']{
      
      // l'user ne peu pas mettre d'avis car il en a déjà mis un 
      }
      else {
      
      // l'user peut laisser un avis car il n'en a jamais mis 
      
      }
      if ($billet2['entreprise2'] == $billet3['entreprise']{
      
      // l'user ne peu pas mettre d'avis car il en a déjà mis un 
      }
      else {
      
      // l'user peut laisser un avis car il n'en a jamais mis 
      
      }
      if ($billet2['entreprise3'] == $billet3['entreprise']{
      
      // l'user ne peu pas mettre d'avis car il en a déjà mis un 
      }
      else {
      
      // l'user peut laisser un avis car il n'en a jamais mis 
      
      }


      Mais le code réagit de façon positive au if et au else

      exemple :

      while ($billet3 = $req2->fetch())
      {
      
         if ($billet2['nbavis']==2){
      
      if ($billet2['entreprise1'] == $billet3['entreprise']){
      
        echo " tu as déjà laissé un avis";
        echo "<br>";
      }
      else 
      {
        echo " tu peux laissé un avis";
      }
      
        }
      }


      ce qui affiche :
      0
      1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > MalonTails Messages postés 90 Statut Membre
         
        Je t'ai demandé un dump de tes tables...

        Car pour l'instant,
        Je ne suis pas sûr que :
        1- tu ais fait les "bonnes" requêtes sql
        2- qu'il y ait besoin de passer par des while


        Et au passage, tu utilises quoi pour te connecter à ta bdd ? Mydqli ou pdo ?
        Pour rappel :https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
        0