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

PHP & Base de données Discussion :

tableau imbrique repete ma liste trop de fois


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut tableau imbrique repete ma liste trop de fois
    Bonjour,



    voila j'ai une liste des catégories présente dans ma table avec une case a cocher a côté de chaque catégorie,je doit faire un formulaire et cocher donc les categories de membres.

    donc dans mon code php:
    1) je recupere les categories du membres selctionner.
    2) je créer la liste de categories avec les cases et le coche si il sont dans le 1tableau.

    pb en fesant cela fonctionne mais si par exemple j'ai le membre qui possede 2 categories alors il met la liste des categories entière 2 fois.

    Comment faire?

    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
     
     
    <?php
    	$i = 0;	
    	foreach ($managerCategorie->getListeSupCategorieActiver() as $ItemListeCategorie)
    	{
    		$body.='<tr><td style="font-weight:bold;color:black;border:1px solid #999999;background-color:#E2E2E2" colspan="6">'.$ItemListeCategorie->getTitreCategorie().'</td></tr>';
     
     
    		$ItemListeCategorieCentre=$managerMembreCentre->getListCentreByMembre($_SESSION['id_membre']);
    		foreach($ItemListeCategorieCentre as $ListCentreId)
    		{
    			$RefCentreAChercher = $ListCentreId->getIdCategorie();
     
     
    				foreach($managerCategorie->getListeSousCategorieByIdActiver($ItemListeCategorie->getIdCategorie()) as $infosC) 
    				{
     
    					$selected = ($RefCentreAChercher == $infosC->getIdCategorie()) ? " CHECKED" : null;
     
    					if ($i%3 == 0) 
    					{
    						$body.='
    
    	<tr>
    	</tr>';
    					}
    					$body.='<td><input type="checkbox" name="ref_centre[]" id="ref_centre[]" value=\"'.$infosC->getIdCategorie().'\"'. $selected .'" /></td><td>'. $infosC->getTitreCategorie().'</td>';
     
    					$i++;
    				}
     
    		}
    	}
    ?>


    MERCI.

  2. #2
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    c'est parce que tu ne separes pas le traitement des données et celui de l'affichage. Radin.

    tu fais une méthode/fonction qui liste les catégories et qui met tout dans un tableau. Au passage doit y avoir une methode magique/interface qui permet de trier/comparer automatiquement les objets avec un simple sort().
    1. donc tableau de categorie
    2. array_unique()
    3. affichage.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    bonjour,
    voici ma fonction qui me sort le premier tableau:

    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
    public function getListCentreByMembre($ref_membre)
    	{
     
    		$ListMembreByActivite = array();
     
    		$sql = 'SELECT * FROM
    				((membre_centre INNER JOIN categorie_ovip ON membre_centre.id_categorie = categorie_ovip.id_categorie)
    				INNER JOIN membre_ovip ON membre_centre.id_membre = membre_ovip.id_membre)
    				where membre_centre.id_membre='.$ref_membre.'';
     
     
    		$requete = $this->db->query($sql);
     
    		while ($Activite = $requete->fetch(PDO::FETCH_ASSOC))
    		$ListMembreByActivite[] = new Categorie ($Activite);
     
    		$requete->closeCursor();
     
     
    		return $ListMembreByActivite;
     
     
    	}
    donc je doit faire une autre fonction avec sort() c'est bien ca que tu veut dire?
    et je doit donc ne mettre qu'un foreach, maisj'ai dut mal a comprendre comment applique ce systeme de tri?

    merci de ton aide.

  4. #4
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    Dans le forum mysql, il y a un des membres les plus actifs qui a marqué une signature défendant contre la guerre des étoiles. Select * dans du code c'est très dangereux.

    bon en fait il y a une solution bien plus simple que le usort et l'implem de la méthode à mettre pour son call back.

    imaginons que dans le tableau $Activite il y ait $Activite['id'] ou $Activite['nom'] qui soit definit. Disons que c'est $Activite['nom']

    proposition 1, le constructeur de Categorie ne fait rien, on peut se permettre d'en gaspiller.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while ($Activite = $requete->fetch(PDO::FETCH_ASSOC))
    {
    		$ListMembreByActivite[$Activite['nom']] = new Categorie ($Activite);
    }


    proposition 2, le constructeur de Categorie rame à fond
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while ($Activite = $requete->fetch(PDO::FETCH_ASSOC))
    {
    		if (!isset($ListMembreByActivite[$Activite['nom']]) )
    		{
    			$ListMembreByActivite[$Activite['nom']] = new Categorie ($Activite);
    		}
    }

    proposition 1,2 +
    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
     
    // tri par callback sur une fonction de comparaison statique du genre 
    /* public static compareTo(Object a,Object b)
    {
     if ( is_a($a,'categorie')  and is_a($b,'categorie'))
      { 
       return $a->compare(b);
      } 
      else 
      { 
        return 0; 
      }
    }
    */
    usort($ListMembreByActivite, 'Categorie::compareTo');
     
    // ou sinon un simple ordre lexicographique suffit
    ksort($ListMembreByActivite)
    proposition 3, on deviens fort en SQL, il y a vraiment besoin des 3 tables pour construire la categorie???
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT  
    	DISTINCT c.id_categorie,
    	c.nom
    FROM
    	membre_centre INNER JOIN categorie_ovip as c ON membre_centre.id_categorie = c.id_categorie
    	INNER JOIN membre_ovip ON membre_centre.id_membre=membre_ovip.id_membre
    WHERE membre_centre.id_membre=:value
    ORDER BY c.nom

    1) utilises plus d'accolades, c'est fou le nombre d'erreur que ça evite.
    2) utilises des prepared statement ce que tu fais pour passer ta variable à la requete ne vaut rien, empêche diverses optimisations, produit une faille de sécurité, provoque la fonte de la banquise et massacre les gentils dauphins.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    je me suis lancer la 3 proposition:
    mais cela n'a rien changer je n'ai toujours que la derniere categorie cocher et pas les autres:

    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
    public function getListCentreByMembre($ref_membre)
    	{
     
    		$ListMembreByActivite = array();
     
    		$sql = 'SELECT  
    	DISTINCT c.id_categorie,
    	c.titre_categorie
    FROM
    	membre_centre INNER JOIN categorie_ovip AS c ON membre_centre.id_categorie = c.id_categorie
    	INNER JOIN membre_ovip ON membre_centre.id_membre=membre_ovip.id_membre
    WHERE membre_centre.id_membre='.$ref_membre.'
    ORDER BY c.titre_categorie';
     
     
    		$requete = $this->db->query($sql);
     
    		while ($Activite = $requete->fetch(PDO::FETCH_ASSOC))
    		$ListMembreByActivite[] = new Categorie ($Activite);
     
    		$requete->closeCursor();
     
     
    		return $ListMembreByActivite;
     
     
    	}
    la page :

    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
    foreach ($managerCategorie->getListeSupCategorieActiver() as $ItemListeCategorie)
    	{
    		$body.='<tr><td style="font-weight:bold;color:black;border:1px solid #999999;background-color:#E2E2E2" colspan="6">'.$ItemListeCategorie->getTitreCategorie().'</td></tr>';
     
     
    		$ItemListeCategorieCentre=$managerMembreCentre->getListCentreByMembre($_SESSION['id_membre']);
    		foreach($ItemListeCategorieCentre as $ListCentreId)
    		{
    			$RefCentreAChercher = $ListCentreId->getIdCategorie();
     
    		}	
    				foreach($managerCategorie->getListeSousCategorieByIdActiver($ItemListeCategorie->getIdCategorie()) as $infosC) 
    				{
     
    					$selected = ($RefCentreAChercher == $infosC->getIdCategorie()) ? " CHECKED" : null;
     
    					if ($i%3 == 0) 
    					{
    						$body.='
     
    	<tr>
    	</tr>';
    					}
    					$body.='<td><input type="checkbox" name="ref_centre[]" id="ref_centre[]" value=\"'.$infosC->getIdCategorie().'\"'. $selected .'" /></td><td>'. $infosC->getTitreCategorie().'</td>';
     
    					$i++;
    				}
     
     
    	}
    merci de ton aide.

  6. #6
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    je n'ai toujours pas trouver de solution si quelqu'un pouvez m'aidez ca serait geniale.

  7. #7
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    j'ai continuer de chercher mais meme avec tous les modification que j'ai faites, je n'ai rien trouver.

    la je desespere car j'aimerai savoir comment je pourrai m en sortir pour ne pas refaire la meme erreur la prochaine fois.

    si quelqu'un a une solution, je serai super heureuse.

    merci.

Discussions similaires

  1. Derniers messages : liste trop complète
    Par al1_24 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 14/06/2006, 16h02
  2. Réponses: 4
    Dernier message: 03/05/2006, 14h30
  3. [SQL] Obtenir un tableau à partir d'une liste
    Par JMO91 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/01/2006, 00h07
  4. "Tableau" à 2 dimensions (tuples, listes, dictionn
    Par Olivier_ dans le forum Général Python
    Réponses: 4
    Dernier message: 27/09/2005, 22h32
  5. [Perf]java.lang.OutOfMemoryError - liste trop grande
    Par laurent.c123 dans le forum Général Java
    Réponses: 32
    Dernier message: 25/07/2005, 09h05

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