[RESOLU] Afficher une seule fois une variable dans un While

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Afficher une seule fois une variable dans un While

Re: [RESOLU] Afficher une seule fois une variable dans un While

par Jenjak » 01 août 2016, 14:45

Bonjour à tous,

Je suis actuellement en train d'utiliser cette méthode afin d'avoir qu'un seul résultat lors de ma recherche, malheureusement je tourne en rond depuis ce matin, j'ai encore et toujours des résultats similaires à la chaine, voici mon code:

Code : Tout sélectionner

if (isset($_POST['recherche']) && isset($_POST['choix'])) { $fonction = $_POST['choix']; $filter="(&(st=$fonction))"; $justthese = array("ou", "sn", "department"); $sr=ldap_search($ldapconn, $dn, $filter, $justthese); $liste = ldap_get_entries($ldapconn, $sr); $ancienIndex = null; // initialisé à une valeur inexistante foreach($liste as $val) { if( $val["department"][0]!= $ancienIndex ){ $ancienIndex = $val["department"][0]; // pour ne pas le réafficher } } echo $val["department"][0]; }
Quelqu'un aurait il un début de piste pour cette affaire ?

Merci d'avance !

Re: Afficher une seule fois une variable dans un While

par Bipbip412 » 09 mars 2015, 14:27

Merci pour ces explications très claires :wink:

J'ai réussit avec cette technique, cela fonctionne très bien ! Encore merci !

Re: Afficher une seule fois une varaible dans un While

par Ryle » 06 mars 2015, 18:11

Hello !

Il s'agit en fait d'utiliser une variable temporaire dans laquelle tu stockeras la valeur de l'itération précédente tant que celle-ci n'est pas modifié. L'objectif est de détecter quand la valeur change pour afficher le login de ton utilisateur et de consigner le nouveau login dans ta variable temporaire, jusqu'à ce que celui-ci change à nouveau.

- Pour reprendre le code de xTG, la variable $ancienIndex est définie à NULL.
- Lorsque tu réalises la première itération et que tu compares le login de l'utilisateur et cette valeur, elles sont différentes. Tu affiches donc le login de l'utilisateur et enregistre celui-ci dans la variable $ancienIndex.
- A la seconde itération, si le login utilisateur est le même, tu ne l'affiche pas, puisque le login a déjà été affiché à l'itération précédente.
- Lorsque tu arriveras sur le login de l'utilisateur 2, il sera différent de celui stocké dans $ancienIndex. Tu pourras donc à nouveau l'afficher et écraser la valeur de $ancienIndex avec ce nouveau login.
- Ainsi de suite, tu parcourras tous les éléments et n'afficheras le login de l'utilisateur que si celui-ci a changé depuis le dernier que tu as affiché.

Nota : pour que cela fonctionne correctement, il faut impérativement ta requête retourne les résultats triés par login pour qu'ils soient tous regroupés, (c'est déjà le cas, mais faut pas que ça change ;))

Re: Afficher une seule fois une varaible dans un While

par Bipbip412 » 06 mars 2015, 14:45

Ah ca m’intéresse beaucoup, par contre, je suis dsl, j'ai pas compris le principe :S (je n'ai jamais utilisé les varaibles de comparaison)

J'ai cherché un peu sur Google, mais je trouve surtout des infos sur les $a == $b, etc, mais pas grand chose qui me permette de comprendre le truc.

Re: Afficher une seule fois une varaible dans un While

par xTG » 06 mars 2015, 14:35

Il faut utiliser une variable de comparaison :
$array = array(
   array('index' => 1, 'valeur' => 6),
   array('index' => 1, 'valeur' => 7),
   array('index' => 1, 'valeur' => 8),
   array('index' => 2, 'valeur' => 1),
   array('index' => 2, 'valeur' => 2),
);
$ancienIndex = null; // initialisé à une valeur inexistante
foreach($array as $val)
{
   if( $val['index']!= $ancienIndex )
   {
      $ancienIndex = $val['index']; // pour ne pas le réafficher
      echo "<u>${val['index']}</u>";
   }
   
   echo $val['valeur'];
}

Afficher une seule fois une variable dans un While

par Bipbip412 » 06 mars 2015, 13:46

Bonjour à tous,

Je suis débutant en php/mysql. A force de persévérance, j'ai réussit à créer un hébergeur d'image pour un forum, qui fonctionne très bien.

Cependant, on m'a proposé l'idée de faire un partie publique, où les membres pourraient choisir ou non d'afficher leurs albums, histoire de les faire connaitre à n'importe quel visiteur, sans que ce dernier soit forcément membre (c'est un forum de bagnoles ^^).

Tout fonctionne très bien, sauf un point. Je voudrai regrouper tous les albums des membres par login, dans le menu de gauche de la page.

exemple :

Login1
Album1
Album2

Login2
Album1

Login3
Album1
Album2
Album3

Et c'est sur ce point que je bloque. J'ai fais as mal d'essais, et pour l'instant, je n'arrive qu'à afficher le pseudo au dessus de chaque album, sans qu'ils soient groupés, comme ceci (le nom de l'album est un lien clicable, qui va envoyer des paramètres en GET pour afficher les photos concernées) :

Login1
Album1

Login1
Album2

Login2
Album1

Etc, etc

J'ai essayé pas mal de chose (le for, le GROUP BY, le while dans un while, etc) mais ca ne donne jamais rien de concluant. Si quelqu'un à une idée, je suis preneur !!

Voici mon code :

Code : Tout sélectionner

<?php $album = 'SELECT album, id, login FROM albums WHERE public="oui" ORDER BY login, album'; $req = mysql_query($album) or die('Erreur SQL !<br>'.$album.'<br>'.mysql_error()); ?> <TABLE> <?php while($dataalbum = mysql_fetch_assoc($req)) { $album = $dataalbum['album']; $albumid = $dataalbum['id']; $albumlogin = $dataalbum['login']; ?> <TR> <TH> <?php print $albumlogin; ?><br><a href="/publicgallerie.php?album=<?php print $albumid; ?>&login=<?php print $albumlogin2; ?> "> <?php print $album2; ?> </a><br><br> </TH> <TR> <?php } ?> </TABLE>

Je me doute que mon code est pas top, mais bon, il est fonctionnel, enfin, sauf pour le point que je cite ci-dessus... J'ai commencé le php avec ce site, avant que je faisais que des sites tout basiques en html ^^.

Merci de votre aide