IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Eviter des doublons de titre sur checkbox


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 16
    Par défaut Eviter des doublons de titre sur checkbox
    Bonjour,
    J'ai un script de petites annonces, et mon soucis, c'est que je peux créer une rubrique de checkbox dans laquelle, j'insère mes options cochables, mais i on en coche plus d'une, sur la page de l'annonce le titre de la rubrique s'affiche pour chaque option cochée dans une même rubrique ... et ça fait pas très classe !
    exemple : si j'ajoute une option checkbox qui s'appelle "distance", ça va afficher :

    distance : option 1
    distance : option 2
    distance : option 3

    et je voudrais plutôt avoir :

    Distances :
    option 1
    option 2
    option 3

    la partie du script correspondante est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    foreach($opts_checkbox as $row)
    			{
    				$id_cat_opt = (int) $row['id_cat_opt'];
    				$id_val_check = (int) $row['id_val_check'];
     
    				foreach($cache_cat_opts as $opt)
    				{
    					$type_cat_opt = (int) $opt['type_cat_opt'];
     
    					if($type_cat_opt != 3)
    					continue;
     
    					foreach($cache_lang as $l)
    					{
    						$code_lang = stripslashes(htmlspecialchars($l['code_lang'], ENT_QUOTES));
     
    						$name_cat_opt = '';
     
    						if($_SESSION['code_lang'] == $code_lang)
    						{
    							if(isset($opt['name_cat_opt_'. $code_lang]))
    							$name_cat_opt = stripslashes(htmlspecialchars($opt['name_cat_opt_'. $code_lang], ENT_QUOTES));
     
    							break;
    						}
    					}
     
    					if($id_cat_opt == $opt['id_cat_opt'])
    					{
    						foreach($cache_val_check as $v)
    						{
    							foreach($cache_lang as $l)
    							{
    								$code_lang = stripslashes(htmlspecialchars($l['code_lang'], ENT_QUOTES));
     
    								$val_check = '';
     
    								if($_SESSION['code_lang'] == $code_lang)
    								{
    									if(isset($v['val_check_'. $code_lang]))
    									$val_check = stripslashes(htmlspecialchars($v['val_check_'. $code_lang], ENT_QUOTES));
     
    									break;
    								}
    							}
     
    							if($id_val_check == $v['id_val_check'])
    							echo '<p class="p_middle_info_ad"><span class="second_color">'.$name_cat_opt.' :</span> '. htmlspecialchars($val_check) .'</p>';
    						}
    					}
    				}
    			}
    évidement, c'est du foreach et le echo de fin, renvoi pour chaque $val_check (chaque valeur cochée de cette rubrique ) le $name_cat_opt (le nom de la rubrique)
    Je ne vois pas comment faire pour obtenir ce que je souhaite, j'ai bien tenté de séparer le echo en 2 et placer le titre rubrique plus haut mais ça ne veut pas
    Si quelqu'un peut me dépanner ça, ce serait plutôt sympa.
    Merci.

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    L'idée est de rajouter un flag qui permet de n'afficher qu'une seule fois le titre.


    Bien entendu pas testé mais l'idée y est.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    <?php
    $titre_affiche = false; // ajout 
    foreach($opts_checkbox as $row)
       {
        $id_cat_opt = (int) $row['id_cat_opt'];
        $id_val_check = (int) $row['id_val_check'];
     
        foreach($cache_cat_opts as $opt)
        {
         $type_cat_opt = (int) $opt['type_cat_opt'];
     
         if($type_cat_opt != 3)
         continue;
     
         foreach($cache_lang as $l)
         {
          $code_lang = stripslashes(htmlspecialchars($l['code_lang'], ENT_QUOTES));
     
          $name_cat_opt = '';
     
          if($_SESSION['code_lang'] == $code_lang)
          {
           if(isset($opt['name_cat_opt_'. $code_lang]))
           $name_cat_opt = stripslashes(htmlspecialchars($opt['name_cat_opt_'. $code_lang], ENT_QUOTES));
     
           break;
          }
         }
     
         if($id_cat_opt == $opt['id_cat_opt'])
         {
          foreach($cache_val_check as $v)
          {
           foreach($cache_lang as $l)
           {
            $code_lang = stripslashes(htmlspecialchars($l['code_lang'], ENT_QUOTES));
     
            $val_check = '';
     
            if($_SESSION['code_lang'] == $code_lang)
            {
             if(isset($v['val_check_'. $code_lang]))
             $val_check = stripslashes(htmlspecialchars($v['val_check_'. $code_lang], ENT_QUOTES));
     
             break;
            }
           }
     
           if($id_val_check == $v['id_val_check'])
           {
            // debut modification
            if (!$titre_affiche)
            {
             echo '<p class="p_middle_info_ad"><span class="second_color">'.$name_cat_opt.' :</span></p>';
             $titre_affiche = true;
            }
            echo '<p class="p_middle_info_ad">'. htmlspecialchars($val_check) .'</p>';
            // fin modification
           }
          }
         }
        }
       }

  3. #3
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Bonjour Snooky.
    J'appelle cette problématique récurrente "le passage de témoin" pour ma part.
    Une variable mémorise le nom de la catégorie du row précédent, le fameux témoin, et si la catégorie change et seulement si elle change, hop, on affiche la catégorie, PUIS on passe le témoin... Pour tous les rows, par ailleurs, on affiche la valeur de catégorie cochée...

    Pour savoir si tu mets le pluriel ou pas... c'est vraiment important ? parce que ça implique une autre forme de traitement.
    Je te propose de mettre direct le pluriel à tous les noms de catégories dès le formulaire. C'est plus logique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <?php
    $temoin='';
    foreach($opts_checkbox as $row)
    {
      $id_cat_opt = (int) $row['id_cat_opt'];
      $id_val_check = (int) $row['id_val_check'];
     
      foreach($cache_cat_opts as $opt)
      {
        $type_cat_opt = (int) $opt['type_cat_opt'];
     
        if($type_cat_opt != 3)
        continue;
     
        foreach($cache_lang as $l)
        {
          $code_lang = stripslashes(htmlspecialchars($l['code_lang'], ENT_QUOTES));
     
          $name_cat_opt = '';
     
          if($_SESSION['code_lang'] == $code_lang)
          {
            if(isset($opt['name_cat_opt_'. $code_lang]))
            $name_cat_opt = stripslashes(htmlspecialchars($opt['name_cat_opt_'. $code_lang], ENT_QUOTES));
            //modif 1
            if($temoin!=$name_cat_opt){
              echo '<p class="p_middle_info_ad"><span class="second_color">'.ucfirst($name_cat_opt).' :</span></p>';
              $temoin=$name_cat_opt;
            }
            //fin modif 1
            break;
          }
        }
     
        if($id_cat_opt == $opt['id_cat_opt'])
        {
          foreach($cache_val_check as $v)
          {
            foreach($cache_lang as $l)
            {
              $code_lang = stripslashes(htmlspecialchars($l['code_lang'], ENT_QUOTES));
     
              $val_check = '';
     
              if($_SESSION['code_lang'] == $code_lang)
              {
                if(isset($v['val_check_'. $code_lang]))
                $val_check = stripslashes(htmlspecialchars($v['val_check_'. $code_lang], ENT_QUOTES));
     
                break;
              }
            }
     
            if($id_val_check == $v['id_val_check'])
            {
              //modif 2
              echo '<p class="p_middle_info_ad">'. htmlspecialchars($val_check) .'</p>';
              //fin modif 2
            }
          }
        }
      }
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  4. #4
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 16
    Par défaut Merci à vous 2
    Grand MERCI à vous, j'ai d'abord testé le code de Badaze et ça fonctionne bien mais petit soucis autre ..
    Puis le code de Dentrite, mais ça affiche toute s les options même celles qui ne sont pas cochées ...
    je mets un extrait du cache si ça peut aider


    Pour le code de Badaze, ça marche, mais je n'ai le titre que pour une seule rubrique de checkbox, et plus de titre pour les autres pour les autres (mais qui sont affichées qd mm).
    Doit pas manquer grand-chose ...

  5. #5
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Cela signifie que l’initialisation de $titre_affiche = false; doit se faire sur un niveau de foreach plus bas.

  6. #6
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 16
    Par défaut pas moyen !
    j'ai bien essayé dans tous les sens, j'ai placé le $titre_affiche=false à différents endroits mais soit, ça ne change rien, soit j'ai carrément toute les options qui s'affichent ...
    peut-être le $titre_affiche=true n'est pas à la bonne place non plus, mais je suis perdu.
    Pas grave, ça va rester comme ça pour l'instant
    Bon réveillon à tous

Discussions similaires

  1. Eviter des doublons sur un champ
    Par Kaori dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/02/2011, 15h46
  2. comment eviter des doublons sur une bd exel avec du vba
    Par INCO13 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/06/2008, 22h24
  3. Eviter des doublons
    Par pam-pg dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/11/2007, 16h49
  4. comment eviter des doublons dans un sous formulaire ??
    Par azde7015 dans le forum Access
    Réponses: 2
    Dernier message: 21/02/2006, 09h03
  5. Réponses: 13
    Dernier message: 12/01/2006, 10h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo