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 :

Remplir un tableau à double entrée


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Remplir un tableau à double entrée
    Bonjour à tous !

    Je viens vers vous aujourd'hui car j'ai un problème dont l'issue m'échappe.

    J'ai un tableau à double entrée : il possède un entête et un nombre connu de lignes dont la partie gauche est comme un entête.
    Toutes les données sont récupérées de ma base de données MySQL via PDO.

    Petit schéma du tableau que j'arrive à réaliser et explications du problème rencontré :


    L'entête est construit via cette boucle :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <table border="1" width="590">
    	<thead>
    		<tr>
    		<th align="center"></th>
    		foreach($lesEquipements as $unEquipement)
    		{
    			echo "<th align=\"center\">$unEquipement->nom</th>";
    		}
    		echo "</tr>";
    	</thead>

    Et la partie de gauche et centrale est construite de cette manière là actuellement :
    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
     
    <tbody>
    	foreach($lesTraits as $unTrait)
    	{
    		echo "<tr>
    		<td>{$unTrait->nom}</td>
    		<td><select id=\"{$unTrait->id}:{$lesEquipements[0]->id}\" onchange=\"majEtatTrait(this);\"><option value=\"-1\"></option><option value=\"1\">Connu</option><option value=\"2\">En cours</option><option value=\"3\">Recherchable</option><option value=\"4\">Inconnu</option></select></td>
    		<td><select id=\"{$unTrait->id}:{$lesEquipements[1]->id}\" onchange=\"majEtatTrait(this);\"><option value=\"-1\"></option><option value=\"1\">Connu</option><option value=\"2\">En cours</option><option value=\"3\">Recherchable</option><option value=\"4\">Inconnu</option></select></td>
    		<td><select id=\"{$unTrait->id}:{$lesEquipements[2]->id}\" onchange=\"majEtatTrait(this);\"><option value=\"-1\"></option><option value=\"1\">Connu</option><option value=\"2\">En cours</option><option value=\"3\">Recherchable</option><option value=\"4\">Inconnu</option></select></td>
    		<td><select id=\"{$unTrait->id}:{$lesEquipements[3]->id}\" onchange=\"majEtatTrait(this);\"><option value=\"-1\"></option><option value=\"1\">Connu</option><option value=\"2\">En cours</option><option value=\"3\">Recherchable</option><option value=\"4\">Inconnu</option></select></td>
    		<td><select id=\"{$unTrait->id}:{$lesEquipements[4]->id}\" onchange=\"majEtatTrait(this);\"><option value=\"-1\"></option><option value=\"1\">Connu</option><option value=\"2\">En cours</option><option value=\"3\">Recherchable</option><option value=\"4\">Inconnu</option></select></td>
    		<td><select id=\"{$unTrait->id}:{$lesEquipements[5]->id}\" onchange=\"majEtatTrait(this);\"><option value=\"-1\"></option><option value=\"1\">Connu</option><option value=\"2\">En cours</option><option value=\"3\">Recherchable</option><option value=\"4\">Inconnu</option></select></td>
    		<td><select id=\"{$unTrait->id}:{$lesEquipements[6]->id}\" onchange=\"majEtatTrait(this);\"><option value=\"-1\"></option><option value=\"1\">Connu</option><option value=\"2\">En cours</option><option value=\"3\">Recherchable</option><option value=\"4\">Inconnu</option></select></td>";
    	}
    </tbody>
    *

    Ce que doit faire ce code en entier c'est construire un tableau à double entrée et permettre la modification d'une valeur en sélectionnant l'option dans la liste déroulante. A ce moment là je fais un appel ajax qui prend en paramètres les "coordonnées" de la case sélectionnée : quelle ligne et quelle colonne a t'on sélectionné.
    La technique proposée fonctionne, j'arrive bien à récupérer les valeurs ligne-colonne de la case sélectionnée.

    Problèmes rencontrés : Impossible lors de l'affichage du tableau de présélectionner la valeur précédemment enregistrée pour une case, donc de récupérer l'état d'une case et de l'afficher.
    Impossible également de construire ce genre de tableau sans connaître à l'avance le nombre de colonnes qu'il y aura : le nombre de "TD" est en dur dans le code.

    Ce que j'aimerais c'est réussir à construire ce genre de tableau (entête, entête de gauche et données) au sein d'une double boucle (une qui parcourt mes données d'entête, une qui parcourt les données d'entête de gauche et pour chacune, récupérer les données et les afficher)

    Existe il une méthode ou une autre solution pour arriver au même résultat avec les problèmes actuels résolus et propre au niveau du code ?
    Je ne sais pas si j'ai été clair, c'est pas un problème facile à expliquer et n'hésitez pas à poser des questions si vous avez besoin d'avantages d'informations.

    Je vous remercie par avance de l'intérêt que vous pourrez porter à mon problème.
    Garkan

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    il faudrait voir la structure des données récupérées de la base.
    Normalement, chaque case de ton tableau correspond à un enregistrement donc, je ne vois pas où est la difficulté de présélectionner les valeurs dans les listes au moment de l'affichage.

  3. #3
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Salut,

    Comme l'a dit rawsrc, il faut d'abord voir comment sont sauvegardées tes données.
    Imaginons par exemple que tu aies 4 tables :
    weapons_types : stock les types d'arme (dague, hâche, épée, etc)
    weapons_attributes_types : stock, en fait, ta colonne de <th /> (énergisé, chargé, précis)
    weapons_attributes_status : permet de stocker la statuts disponibles (Connu, en cours, Rechargeable, Inconnu)
    attributes_to_weapons : table qui lie des attributs et leur statut (donc 3 champs : weapon_id, attribute_type_id, status_id)

    Une fois que tu as ça, tu peux facilement ordonner tes résultats de la façon suivante :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $attributes = array(
    	array(
    		'attribute_name' => "Energisé",
    		'values' => array(
    			'Dague' => 'Connu',
    			'Hâche' => 'Inconnu',
    			// etc
    		),
    	),
    );;
    NB: Ceci n'est qu'un exemple, et peut ne pas te convenir. Libre à toi de l'adapter selon tes besoins. D'ailleurs, par facilité, je n'ai créé que des arrays alors que tu auras sûrement des objets à plusieurs endroits.

    Il te suffit alors de récupéer juste la liste de tes armes, ainsi que la liste des statuts disponibles.
    Avec la première, tu boucles afin de créer ton <thead />, avec la seconde tu pourras construire proprement ton <select /> ;-)

    Imaginons alors que tu fasses un foreach pour chaque ligne, ça te donnerait quelque chose comme ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    foreach ($attributes AS $attr) {
    	echo '<th>'.$attr['attribute_name'].'</th>';
    	echo '<td>';
    	echo '<select name="_ton_name[]">';
    	foreach ($attributes_status AS $status) {
    		$selected = ($status['status_id'] == $attr['status_id']) ? ' selected="selected"' : '';
    		echo '<option value="'.$status['status_id'].'"'.$selected.'>'.$status['status_name'].'</option>';
    	}
    	echo '</select>';
    	echo '</td>';
    }
    ?>

    Il y a bien sûr d'autres moyen d'y parvenir !

  4. #4
    Futur Membre du Club
    Inscrit en
    Juillet 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    La discussion est résolue.
    Voici le bout de code pour ceux qui auraient le même "problème" :

    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
     
    <table border="1" width="590">
        <thead>
            <tr>
                <th align="center"></th>
                <?php
                foreach ($lesEquipements as $unEquipement) 
                {
                    echo "<th align=\"center\">$unEquipement->nom</th>";
                }
                echo "</tr>";
                ?>
        </thead>
     
        <tbody>
            <?php
            foreach ($lesTraits as $unTrait) 
            {
                echo "<tr>";
                echo"<td>{$unTrait->nom}</td>";
                foreach ($lesEquipements as $unEquipement) 
                {
                    echo "<td>";
                    echo "<select id=\"{$unTrait->id}:{$unEquipement->id}\" onchange=\"majEtatTrait(this);\">";
                    echo"<option value=\"-1\"></option>";
                    echo "<option value=\"1\">Connu</option>";
                    echo "<option value=\"2\">En cours</option>";
                    echo "<option value=\"3\">Recherchable</option>";
                    echo "<option value=\"4\">Inconnu</option>";
                    echo "</select>";
                    echo "</td>";
                }
                echo "</tr>";
            }
            ?>
        </tbody>
    </table>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] tableau double entrée
    Par molesqualeux dans le forum Langage
    Réponses: 3
    Dernier message: 09/12/2005, 15h19
  2. tableau double entrée et requete sql
    Par oceane751 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 29/11/2005, 14h25
  3. [MySQL] Tableau double entrée et requete sql
    Par oceane751 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 28/11/2005, 09h07
  4. tableau double entrée
    Par Andrey dans le forum C
    Réponses: 16
    Dernier message: 08/11/2005, 15h33
  5. [XSLT]tableau double entrée avec cellule manquante
    Par nferay dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 08/03/2005, 15h07

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